第八章 Ansible-playbook基礎介紹
阿新 • • 發佈:2021-12-23
一、playbook簡介
PlayBook即"劇本","兵書"之意,PlayBook是由以下部分組成的:
play(host): 定義的是主機的角色。(主角還是配角)
Book(task): 定義的是具體執行的任務。(角色的臺詞和動作)
playbook: 由一個或多個play(角色)組成,一個play(角色)可以包含多個task(臺詞,動作)。
簡單理解為: 對不同的主機使用很多不同的模組做很多工作完成一件事情
在Ansible中"劇本檔案"是以yml結尾的檔案。
在SaltStack中"劇本檔案"是以sls結尾的檔案。
但是語法,使用的都是yaml語法
二、playbook的組成
[root@m01 ~]# vim touch.yml #指定執行動作的主機組 - hosts: web_group #指定遠端操作的使用者 remote_user: root #開始定義變數 vars: file_name: lhd #指定動作 tasks: #註釋:說明這個動作 - name: 建立檔案 #指定shell模組建立一個檔案 shell: touch /tmp/{{ file_name }} #執行前檢查語法 [root@m01 ~]# ansible-playbook --syntax-check touch.yml playbook: touch.yml #該命令,只能檢查語法,無法驗證邏輯
三、PlayBook與ad-hoc
特點 | PlayBook | ad-hoc |
---|---|---|
完整性 | √ | ✘ |
永續性 | √ | ✘ |
執行效率 | 低 | 高 |
變數 | 支援 | 不支援 |
耦合度 | 低 | 高 |
1.PlayBook功能比ad-hoc更全,是對ad-hoc的一種編排.
2.PlayBook能很好的控制先後執行順序, 以及依賴關係.
3.PlayBook語法展現更加的直觀.
4.playbook可以持久使用,ad-hoc無法持久使用.
四、playbook中yaml語法
語法 | 描述 |
---|---|
縮排 | YAML使用固定的縮排風格表示層級結構,每個縮排由兩個空格組成, 不能使用TAB |
冒號 | 以冒號結尾的除外,其他所有冒號後面所有必須有空格 |
短橫線 | 表示列表項,使用一個短橫槓加一個空格,多個項使用同樣的縮排級別作為同一列表 |
中國:
北京:
上海:
- 日本
- 浦東新區
- 青浦區
五、playbook實戰-部署httpd
1.配置主機清單
[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_pass='1'
web02 ansible_ssh_pass='1'
web03 ansible_ssh_pass='1'
[root@m01 ~]# vim /etc/hosts
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
2.測試連線
[root@m01 ~]# ansible web_group -m ping
3.編寫劇本
[root@m01 ~]# cat httpd.yml
- hosts: web_group
tasks:
- name: Stop Selinux
selinux:
state: disabled
- name: Stop Firewalld
systemd:
name: firewalld
state: stopped
- name: Install Httpd
yum:
name: httpd
state: present
- name: Start Httpd Server
systemd:
name: httpd
state: started
- name: Config Httpd Index
copy:
content: test ansible install httpd
dest: /var/www/html/index.html
六、編寫搭建交作業頁面劇本
1.編寫劇本
[root@m01 ~]# cat zuoye.yml
- hosts: all
tasks:
- name: Add www group
group:
name: www
gid: 666
- name: Add www User
user:
name: www
uid: 666
group: www
- hosts: web_group
tasks:
- name: Install Httpd Server
yum:
name: httpd
state: present
- name: Mkdir Package
file:
path: /package
state: directory
- name: Tar php.tar.gz
unarchive:
src: /root/php.tar.gz
dest: /package/
- name: Install PHP Server
shell: yum localinstall -y /package/*.rpm
- name: Tar kaoshi.zip
unarchive:
src: /root/kaoshi.zip
dest: /var/www/html
owner: www
group: www
- name: Mkdir upload
file:
path: /var/www/html/upload
state: directory
owner: www
group: www
- name: Config Httpd Server
copy:
src: /root/httpd.conf
dest: /etc/httpd/conf/
- name: Start Httpd Server
systemd:
name: httpd
state: restarted
enabled: yes
- hosts: nfs_group
tasks:
- name: Install nfs Server
yum:
name: nfs-utils
state: present
- name: Config nfs Server
copy:
content: /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
dest: /etc/exports
- name: Mkdir data
file:
path: /data
state: directory
owner: www
group: www
- name: Start nfs Server
systemd:
name: nfs
state: restarted
enabled: yes
- hosts: web_group
tasks:
- name: Mount nfs
mount:
src: 172.16.1.31:/data
path: /var/www/html/upload
fstype: nfs
opts: defaults
state: mounted
2.測試語法
[root@m01 ~]# ansible-playbook --syntax-check zuoye.yml
playbook: zuoye.yml
3.執行劇本
[root@m01 ~]# ansible-playbook zuoye.yml
七、配置rsync備份
1.建立專案目錄
[root@m01 ~]# mkdir /project/rsync
2.部署準備
1)配置主機清單
[root@m01 ~]# vim /etc/ansible/hosts
[web_group]
web01 ansible_ssh_pass='1'
web02 ansible_ssh_pass='1'
web03 ansible_ssh_pass='1'
[nfs_group]
nfs ansible_ssh_pass='1'
[backup_server]
backup ansible_ssh_pass='1'
2)準備rsync配置檔案
[root@m01 ~]# vim /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
3)上傳安裝包
1.上傳sersync包
4)準備sersync配置檔案
[root@m01 ~]# vim GNU-Linux-x86/confxml.xml
<sersync>
<localpath watch="/data">
<remote ip="172.16.1.41" name="backup"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-artuz"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
[root@m01 ~]# cp GNU-Linux-x86/confxml.xml ./
3.編寫劇本
[root@m01 ~]# cat rsync.yml
- hosts: backup_server
tasks:
- name: Install rsync Server
yum:
name: rsync
state: present
- name: Config rsync Server
copy:
src: /etc/rsyncd.conf
dest: /etc/
- name: Config Password File
copy:
content: rsync_backup:123456
dest: /etc/rsync.passwd
mode: 0600
- name: Mkdir backup
file:
path: /backup
state: directory
owner: www
group: www
- name: Start Rsyncd Server
systemd:
name: rsyncd
state: restarted
- hosts: nfs_group
tasks:
- name: Install rsync Server
yum:
name: rsync
state: present
- name: Install rsync Server
yum:
name: inotify-tools
state: present
- name: Install sersync
copy:
src: /root/sersync
dest: /usr/local/
mode: 0755
- name: Config sersync Server
copy:
src: /root/confxml.xml
dest: /usr/local/sersync/
- name: Touch Client Password File
copy:
content: 123456
dest: /etc/rsync.pass
mode: 0600
- name: Start sersync Server
shell: /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
#script: /root/start_sersync.sh