Ansible Playbook 詳解

1、playbook 的簡單使用

一、建立文件實例

(1)編輯配置文件shell

[root@tiejiangSRC1 ~]# cd /etc/ansible/ [root@tiejiangSRC1 ansible]# vim test.yml //固定後綴爲yml,必定要注意空格 --- - hosts: testhost user: root tasks: - name: playbook_test shell: touch /tmp/playbook.txt 

注意:ubuntu

  • hosts參數指定了對哪些主機進行參做;vim

  • user參數指定了使用什麼用戶登陸遠程主機操做;centos

  • tasks指定了一個任務,其下面的name參數一樣是對任務的描述,在執行過程當中會打印出來。bash

(2)執行建立playbook文件文件服務器

[root@tiejiangSRC1 ansible]# ansible-playbook test.yml 
    PLAY [testhost] **************************************************************** TASK [setup] ******************************************************************* ok: [192.168.2.71] ok: [192.168.2.73] ok: [192.168.2.72] TASK [playbook_test] *********************************************************** changed: [192.168.2.71] changed: [192.168.2.73] changed: [192.168.2.72] PLAY RECAP ********************************************************************* 192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0 

(3)如今來查看是否批量建立成功playbook.txt文件。運維

[root@tiejiangSRC1 ~]# ansible testhost -m command -a 'ls -l /tmp/playbook.txt' 192.168.2.73 | SUCCESS | rc=0 >> -rw-r--r-- 1 root root 33 4月 19 13:41 /tmp/playbook.txt 192.168.2.71 | SUCCESS | rc=0 >> -rw-r--r--. 1 root root 33 4月 19 13:41 /tmp/playbook.txt 192.168.2.72 | SUCCESS | rc=0 >> -rw-r--r--. 1 root root 33 4月 19 13:41 /tmp/playbook.txt 

(4)給建立的playbook批量導入內容,並查看導入的結果ide

[root@tiejiangSRC1 ansible]# vim test.yml --- - hosts: testhost user: root tasks: - name: 鐵匠運維網博客 shell: echo "www.tiejiang.org" >> /tmp/playbook.txt [root@tiejiangSRC1 ansible]# ansible-playbook test.yml PLAY [testhost] **************************************************************** TASK [setup] ******************************************************************* ok: [192.168.2.71] ok: [192.168.2.72] ok: [192.168.2.73] TASK [鐵匠運維網博客] ************************************************************* changed: [192.168.2.73] changed: [192.168.2.71] changed: [192.168.2.72] PLAY RECAP ********************************************************************* 192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0 [root@tiejiangSRC1 ansible]# ansible testhost -m command -a 'cat /tmp/playbook.txt' 192.168.2.73 | SUCCESS | rc=0 >> www.tiejiang.org 192.168.2.71 | SUCCESS | rc=0 >> www.tiejiang.org 192.168.2.72 | SUCCESS | rc=0 >> www.tiejiang.org 

二、建立用戶實例

(1)編輯配置文件oop

[root@tiejiangSRC1 yml]# vim create_user.yml --- - name: create_user hosts: testhost user: root gather_facts: false vars: - user: "tiejiang" tasks: - name: create user user: name="{{ user }}" 
  • name參數對該playbook實現的功能作一個概述,後面執行過程當中,會打印 name變量的值 ,能夠省略;ui

  • gather_facts參數指定了在如下任務部分執行前,是否先執行setup模塊獲取主機相關信息,這在後面的task會使用到setup獲取的信息時用到;

  • vars參數指定了變量,這裏指字一個user變量,其值爲test ,須要注意的是,變量值必定要用引號引住;

  • user提定了調用user模塊,name是user模塊裏的一個參數,而增長的用戶名字調用了上面user變量的值。

(2)執行配置文件

[root@tiejiangSRC1 ansible]# ansible-playbook create_user.yml 

PLAY [create_user] ************************************************************* TASK [create user] ************************************************************* changed: [192.168.2.73] changed: [192.168.2.71] changed: [192.168.2.72] PLAY RECAP ********************************************************************* 192.168.2.71 : ok=1 changed=1 unreachable=0 failed=0 192.168.2.72 : ok=1 changed=1 unreachable=0 failed=0 192.168.2.73 : ok=1 changed=1 unreachable=0 failed=0 

(3)查看遠程機器的passwd文件,是否建立出來了用戶

[root@tiejiangSRC1 ansible]# ansible testhost -m command -a 'grep tiejiang /etc/passwd' 192.168.2.73 | SUCCESS | rc=0 >> tiejiang:x:502:502::/home/tiejiang:/bin/bash 192.168.2.72 | SUCCESS | rc=0 >> tiejiang:x:501:501::/home/tiejiang:/bin/bash 192.168.2.71 | SUCCESS | rc=0 >> tiejiang:x:502:502::/home/tiejiang:/bin/bash 

2、playbook循環

實例:修改/tmp目錄下的1.txthe 2.txt文件屬性

(1)去新建實驗文件

[root@tiejiangSRC1 yml]# cat touch1and2.yml --- - hosts: testhost user: root tasks: - name: 建立實驗文件 shell: touch /tmp/{1.txt,2.txt} [root@tiejiangSRC1 yml]# ansible-playbook touch1and2.yml PLAY [testhost] **************************************************************** TASK [setup] ******************************************************************* ok: [192.168.2.73] ok: [192.168.2.71] ok: [192.168.2.72] TASK [建立實驗文件] ****************************************************************** changed: [192.168.2.73] [WARNING]: Consider using file module with state=touch rather than running touch changed: [192.168.2.71] changed: [192.168.2.72] PLAY RECAP ********************************************************************* 192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0 

(2)編輯配置文件

[root@tiejiangSRC1 yml]# cat loop.yml --- - hosts: testhost user: root tasks: - name: change mode for files file: path=/tmp/{{ item }} mode=600 owner=root group=root with_items: - 1.txt - 2.txt 

(3)執行配置文件

[root@tiejiangSRC1 yml]# ansible-playbook loop.yml PLAY [testhost] **************************************************************** TASK [setup] ******************************************************************* ok: [192.168.2.71] ok: [192.168.2.72] ok: [192.168.2.73] TASK [change mode for files] *************************************************** changed: [192.168.2.73] => (item=1.txt) changed: [192.168.2.71] => (item=1.txt) changed: [192.168.2.72] => (item=1.txt) changed: [192.168.2.73] => (item=2.txt) changed: [192.168.2.71] => (item=2.txt) changed: [192.168.2.72] => (item=2.txt) PLAY RECAP ********************************************************************* 192.168.2.71 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.72 : ok=2 changed=1 unreachable=0 failed=0 192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0 

3、playbook條件判斷

條件判斷通常用於針對不一樣版本的系統,好比對centos、ubuntu 等系統進行不一樣的操做命令。

(1)編輯配置文件

[root@tiejiangSRC1 yml]# vim when.yml --- - hosts: testhost user: root gather_facts: True tasks: - name: use when shell: touch /tmp/when.txt when: ansible_default_ipv4.address == "192.168.2.73" 

(2)執行配置文件

[root@tiejiangSRC1 yml]# ansible-playbook when.yml PLAY [testhost] **************************************************************** TASK [setup] ******************************************************************* ok: [192.168.2.71] ok: [192.168.2.73] ok: [192.168.2.72] TASK [use when] **************************************************************** skipping: [192.168.2.71] skipping: [192.168.2.72] changed: [192.168.2.73] [WARNING]: Consider using file module with state=touch rather than running touch PLAY RECAP ********************************************************************* 192.168.2.71 : ok=1 changed=0 unreachable=0 failed=0 192.168.2.72 : ok=1 changed=0 unreachable=0 failed=0 192.168.2.73 : ok=2 changed=1 unreachable=0 failed=0 

4、playbook handlers

當咱們執行 tasks 後,服務器發生變化以後咱們要執行一些操做。好比咱們修改了某個服務的配置文件,須要重啓下服務。實例以下:

(1)編輯配置文件

[root@tiejiangSRC1 yml]# vim handlers.yml --- - name: handlers test hosts: testhost user: root tasks: - name: test copy copy: src=/etc/passwd dest=/tmp/handlers.txt notify: test handlers handlers: - name: test handlers shell: echo "www.tiejiang.org" >> /tmp/handlers.txt 

說明:只有 copy 模塊真正執行後,纔會去調用下面的 handlers 相關的操做,追加內容。也就是說若是 src 和 dest 內容是同樣的,並不會去執行 handlers 裏面的 shell 相關命令。因此這種比較適合配置文件發生更改後,須要重啓服務的操做。

(2)執行配置文件

[root@tiejiangSRC1 yml]# ansible-playbook handlers.yml
    PLAY [handlers test] *********************************************************** TASK [setup] ******************************************************************* ok: [192.168.2.73] ok: [192.168.2.71] ok: [192.168.2.72] TASK [test copy] *************************************************************** changed: [192.168.2.71] changed: [192.168.2.73] changed: [192.168.2.72] RUNNING HANDLER [test handlers] ************************************************ changed: [192.168.2.71] changed: [192.168.2.73] changed: [192.168.2.72] PLAY RECAP ********************************************************************* 192.168.2.71 : ok=3 changed=2 unreachable=0 failed=0 192.168.2.72 : ok=3 changed=2 unreachable=0 failed=0 192.168.2.73 : ok=3 changed=2 unreachable=0 failed=0 

(3)查看執行結果

[root@tiejiangSRC1 yml]# ansible testhost -m command -a 'tail -n 1 /tmp/handlers.txt ' //這裏我直接用-n 1顯示handlers.txt的最後一行內容 192.168.2.71 | SUCCESS | rc=0 >> www.tiejiang.org 192.168.2.73 | SUCCESS | rc=0 >> www.tiejiang.org 192.168.2.72 | SUCCESS | rc=0 >> www.tiejiang.org 

可查看到 copy 文件成功,同時也執行了 handlers 的相關命令,追加了新的信息。

相關文章
相關標籤/搜索