1. 程式人生 > 其它 >第八章 Ansible-playbook基礎介紹

第八章 Ansible-playbook基礎介紹

一、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