ansible-playbook

Playbooks與Ad-Hoc相比,是一種徹底不一樣的運用Ansible的方式,並且是很是之強大的;也是系統ansible命令的集合,其利用yaml語言編寫,運行過程,ansbile-playbook命令根據自上而下的順序依次執行。Playbook遵循yaml規範
簡單來講,Playbooks 是一種簡單的配置管理系統與多機器部署系統的基礎。與現有的其餘系統有不一樣之處,且很是適合於複雜應用的部署。node

同時,Playbooks開創了不少特性,它能夠容許你傳輸某個命令的狀態到後面的指令,如你能夠從一臺機器的文件中抓取內容並附爲變量,而後在另外一臺機器中使用,這使得你能夠實現一些複雜的部署機制,這是ansible命令沒法實現的。python

Playbooks可用於聲明配置,更強大的地方在於,在Playbooks中能夠編排有序的執行過程,甚至於作到在多組機器間,來回有序的執行特別指定的步驟。而且能夠同步或異步的發起任務。ios

咱們使用Ad-Hoc時,主要是使用 /usr/bin/ansible 程序執行任務.而使用Playbooks時,更可能是將之放入源碼控制之中,用之推送你的配置或是用於確認你的遠程系統的配置是否符合配置規範。web

palybook命令格式

Usage: ansible-playbook [options] playbook.yml [playbook2 ...]
-C, --check # 檢查可是不會真的執行
-f FORKS, --forks=FORKS # 併發,默認是5個
 --list-hosts #列出匹配的主機
 --syntax-check # 檢查語法

第一個playbook文件

單個任務

[root@node1 playbook]# vim p1.yml

- hosts: web  #指定要執行的主機
  remote_user: root #指定用戶,使用root用戶能夠不寫
  tasks:   #要執行的任務
  - name: copyfile  #任務的名字
    copy: src=/etc/fstab dest=/tmp/fs  #要執行的模塊

檢查語法redis

[root@node1 playbook]# ansible-playbook --syntax-check p1.yml 

執行文件shell

[root@node1 playbook]# ansible-playbook p1.yml 

執行多個任務

[root@node1 playbook]# cat p1.yml 
- hosts: web  
  remote_user: root 
  tasks:   
  - name: copyfile  
    copy: src=/etc/fstab dest=/tmp/fs 
  - name: createuser
    user: name=wl 

多個任務是,按照順序執行,第一個任務在全部機器多行執行完成後,纔會執行第二個任務vim

ansible-palybook的傳參

第一種方式

[root@onde1 playbook]# cat p1.yml 
- hosts: web  
  remote_user: root 
  tasks:   
  - name: create{{user}}  
    user: name={{user}}

執行架構

[root@node1 playbook]# ansible-playbook -e user=wangl p1.yml 

第二種方式

修改ansible的hosts文件併發

[root@node1 playbook]# vim /etc/ansible/hosts

在要執行的組IP後面添加參數dom

[web]
10.0.0.22  user=wl2
10.0.0.23  user=wl3
[db]
10.0.0.23
10.0.0.24

執行

[root@node1 playbook]# ansible-playbook p1.yml 

第三種方式

一樣修改hosts文件

[root@node1 playbook]# cat /etc/ansible/hosts

[web]
10.0.0.22  
10.0.0.23  

[web:vars] #添加[web:vars]分組
user=wl3

執行

[root@node1 playbook]# ansible-playbook p1.yml 

第四種方式

在yml文件中添加vars

[root@node1 playbook]# cat p1.yml 
- hosts: web 
  vars:
  - user: wl5 
  remote_user: root 
  tasks:   
  - name: create{{user}}  
    user: name={{user}}

第五種方式

[root@node1 playbook]# cat p1.yml 
- hosts: web 
  tasks:   
  - name: yumbc  
    yum: name=bc
  - name: sum
    shell: echo 8+9|bc   #計算相加的值
    register: user  # 將返回的值註冊爲user,賦值操做
  - name: echo
    shell: echo {{user.stdout}} >/tmp/sum.txt  #user.stdout=17
  - name: createuser{{user.stdout}}
    user: name=wl{{user.stdout}}

user

{stderr_lines: [], uchanged: True, uend: u2019-04-09 23:17:43.525072, failed: False, ustdout: u17, ucmd: uecho 8+9|bc,
urc: 0, ustart: u2019-04-09 23:17:43.518708, ustderr: u, udelta: u0:00:00.006364, stdout_lines: [u17]} #u表示編碼:unicode

優先級

-e > playbook的vars > hosts文件

查看收集到的信息

setup

TASK [Gathering Facts] *******************************************************
ok: [10.0.0.23]
ok: [10.0.0.22]

查看10.0.0.22的信息

[root@node1 playbook]# ansible 10.0.0.22 -m setup
ansible_all_ipv4_addresses # 全部的ipv4地址
ansible_all_ipv6_addresses # 全部的ipv6的地址
ansible_bios_version # 主板bios的版本
ansible_architecture # 架構信息
ansible_date_time # 系統的時間
ansible_default_ipv4 # IPv4默認地址
    address #ip地址
    alias #網卡名稱
    broadcast #廣播地址
    gateway # 網關
    macaddress #mac地址
    netmask #子網掩碼
    network #網段
ansible_distribution #系統的版本
ansible_distribution_file_variety# 系統的基於對象
ansible_distribution_major_version# 系統的主版本
ansible_distribution_version #系統的版本
ansible_domain #系統的域
ansible_dns #系統的dns
ansible_env #系統的環境變量
ansible_hostname #系統的主機名
ansible_fqdn #系統的完整主機名
ansible_machine #系統的架構
ansible_memory_mb #系統的內存信息
ansible_os_family #系統的家族
ansible_pkg_mgr #系統的包管理工具
ansible_processor_cores #cpu的核數
ansible_processor_count #每顆cpu上的顆數
ansible_processor_vcpus #cpu的總核數=cpu的顆數*每顆cpu上的核數
ansible_python #系統的python版本

查看cpu的信息

[root@node1 playbook]# ansible 10.0.0.22 -m setup -a "filter=*processor*"  #想要查看本機能夠改成127.0.0.1或localhosts主機名

tags

只執行某個配置

- hosts: web
  tasks:
  - name: install
    yum: name=redis
  - name: copyfile
    copy: dest=/etc/redis.conf src=/etc/redis.conf
    tags: copyfile  #爲copy模塊添加標籤
  - name: start
    service: name=redis state=started 

執行,只會執行copyfile

 ansible-playbook -t copyfile p7.yml

handlers

更改redis的配置文件並重啓

- hosts: web
  tasks:
  - name: install
    yum: name=redis
  - name: copyfile
    copy: dest=/etc/redis.conf src=/etc/redis.conf
    tags: copy
    notify: restart   #觸發restart執行
  - name: start
    service: name=redis state=started
  handlers: #不會自動執行,須要notify觸發
  - name: restart
    service: name=redis state=restarted

執行

 ansible-playbook -t copyfile p7.yml

template

使用絕對路勁

例:將copy過去的redis的配置文件中的ip地址改成遠程機器的IP地址

- hosts: web
  tasks:
  - name: install
    yum: name=redis
  - name: copyfile
    template: dest=/etc/redis.conf src=/etc/redis.conf
    tags: copyfile
    notify: restart
  - name: start
    service: name=redis state=started
  handlers:
  - name: restart
    service: name=redis state=restarted

redis.conf文件配置

# bind 127.0.0.1
bind {{ansible_default_ipv4.address}}

使用相對路徑

在本地的目錄下建立一個templates目錄,就能夠用相對路徑

[root@node1 playbook]# mkdir templates
[root@node1 playbook]# cp /etc/redis.conf templates/
- hosts: web
  tasks:
  - name: install
    yum: name=redis
  - name: copyfile
    template: dest=/etc/redis.conf src=redis.conf
    tags: copy
    notify: restart
  - name: start
    service: name=redis state=started
  handlers:
  - name: restart
    service: name=redis state=restarted

when

判斷條件是否成立

- hosts: web
  tasks:
  - name: file
    copy: content="大弦嘈嘈如急雨" dest=/opt/file
    when: ansible_distribution_major_version=="7" #若是系統版本是7
  - name: file
    copy: content="小弦切切如私語" dest=/opt/file
    when: ansible_distribution_major_version=="6" #若是系統版本是6

也能夠傳值判斷

- hosts: web
  tasks:
  - name: file
    copy: content="大弦嘈嘈如急雨\n" dest=/opt/file
    when: sum=="7"
  - name: file
    copy: content="小弦切切如私語\n" dest=/opt/file
    when: sum=="6"

執行

ansible-playbook -e sum=7 p11.yml

循環

- hosts: web
  tasks:
  - name: file
    user: name={{item}}
    with_items:
    - wl20
    - wl21



- hosts: web
  tasks:
  - name: creategroup
    group: name={{item}}
    with_items:
    - wl20
    - wl21
  - name: file
    user: name={{item}}
    with_items:
    - zs22
    - zs23

嵌套循環

- hosts: web
  tasks:
  - name: creategroup
    group: name={{item}}
    with_items:
    - wl22
    - wl23
  - name: file
    user: name={{item.name}} group={{item.group}}
    with_items:
    - {"name":zs24,"group":wl22}
    - {"name":zs25,"group":wl23}
本站公眾號
   歡迎關注本站公眾號,獲取更多信息