ansible 中的 playbook 模塊


playbook 劇本

yaml

  • 字典 key:value

  • 列表 [] -

  • 后綴名:yaml、yml

playbook 命令格式

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

第一個playbook

- hosts: web
remote_user: root
tasks:
 - name: copyfile
  copy: src=/etc/fstab dest=/tmp/fs

順序執行,第一個任務所有機器都執行完,才會執行第二個任務

多任務

- hosts: web
remote_user: root
tasks:
 - name: copyfile
  copy: src=/etc/fstab dest=/tmp/fs
 - name: createuser
  user: name=alex11

冪等性 ,不管執行多少次,等到的結果永遠是一樣的

傳參

第一種方式

- hosts: web
tasks:
 - name: create{{user}}
  user: name={{user}}
ansible-playbook -e user=alex13 p3.yml      #-e 是傳參    

第二種方式

10.0.0.[132:133] user=alex14
10.0.0.135  user=alex12
ansible-playbook p3.yml

第三種方式

[web:vars]        #重新創建一個
user=alex15
ansible-playbook p3.yml

第四種方式

- hosts: web
vars:
 - user: alex16
tasks:
 - name: create{{user}}
  user: name={{user}}

第五種傳參方式

- hosts: web
tasks:
 - name: yumbc
  yum: name=bc
 - name: sum
  shell: echo 8+9|bc
  register: user
 - name: echo
  shell: echo {{user.stdout}} >/tmp/sum.txt
 - name: createuser{{user.stdout}}
  user: name=alex{{user.stdout}}

優先級

-e > playbook的vars > hosts文件

setup (獲取主機信息模塊)

#ansible all -m setup|more # more是分頁顯示的意思

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版本
ansible 10.0.0.132 -m setup -a "filter=*processor*" 搜索

正則

. 匹配任何字符,除了換行

* 匹配任何次

+ 最少一次

? 最多一次

{m} 指定的m次

{m,n} m次到n次

{m,} 最少m次

{0,n} 最多n次

[0-9] 代表數字

^ 開頭

$ 結尾

^ 取反

[^0-9]

() 分組

grep "^\(.*\):.*\1$" /etc/passwd
grep -E "^(.*):.*\1$" /etc/passwd

 

tags (設置一個命令執行 只執行存在tags的命令)

- hosts: web
tasks:
 - name: install
  yum: name=redis
 - name: copyfile
  copy: dest=/etc/redis.conf src=/etc/redis.conf
  tags: copyfile
 - name: start
   service: name=redis state=started
ansible-playbook -t copyfile p7.yml

handlers (notify調用handlers(只有執行了notify所在的任務才會調用))

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

template (模板 動態更改ip地址)

- hosts: web
tasks:
 - name: install
  yum: name=redis
 - name: copyfile
  template: dest=/etc/redis.conf src=/etc/redis.conf
  tags: copy          # tags 執行時要是寫 -t copy 就只執行這一個任務
  notify: restart     # 執行這個任務的時候調用 handlers任務
 - name: start
   service: name=redis state=started
handlers:
 - name: restart
   service: name=redis state=restarted
- 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
需要在本地的目錄下創建一個templates目錄,就可以用相對路徑

u 撤銷

p 粘貼

#yy 復制#行

d$ 從當前位置刪除

o 當前位置下面增加空白行,並切換到編輯模式

r 替換

id用戶名 查看用戶

when (判斷 加條件 如果滿足這個條件就執行這個任務 不滿足就不執行)

- hosts: web
tasks:
 - name: file
  copy: content="大弦嘈嘈如急雨" dest=/opt/file
  when: ansible_distribution_major_version=="7"
 - name: file
  copy: content="小弦切切如私語" dest=/opt/file
  when: ansible_distribution_major_version=="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     # -e 傳值

循環

- hosts: web
tasks:
 - name: file
  user: name={{item}}
  with_items:        #循環創建用戶
   - alex20
   - alex21
- hosts: web
tasks:
 - name: creategroup
  group: name={{item}}    
  with_items:   #循環創建組名
   - wusir20
   - wusir21
 - name: file
  user: name={{item}}
  with_items:
   - alex22
   - alex23

嵌套循環

- hosts: web
tasks:
 - name: creategroup
  group: name={{item}}
  with_items:
   - wusir22
   - wusir23
 - name: file
  user: name={{item.name}} group={{item.group}}
  with_items:
   - {"name":alex24,"group":wusir22}
   - {"name":alex25,"group":wusir23}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM