Playbook是 一個不一樣於使用Ansible命令行執行方式的模式,其功能更強大靈活。簡單來講,playbook是一個很是簡單的配置管理和多主機部署系統,不一樣於任何已經存在的模式,可做爲一個適合部署複雜應用程序的基礎。Playbook能夠定製配置,能夠按照指定的操做步驟有序執行,支持同步和異步方式。值得注意的是playbook是經過YAML格式來進行描述定義的。
mysql
Tasks:任務,由模板定義的操做列表
Variables:變量
Templates:模板,即便用模板語法的文件
Handlers:處理器 ,當某條件知足時,觸發執行的操做
Roles:角色
linux
--- - hosts: abc #指定主機組,能夠是一個或多個組。 remote_user: root #指定遠程主機執行的用戶名
# vim ping.yml --- - hosts: abc remote_user: root become: yes #2.6版本之後的參數,以前是sudo,意思爲切換用戶運行 become_user: mysql #指定sudo用戶爲mysql 執行playbook # ansible-playbook ping.yml -K
1:Play的主體部分是task列表,task列表中的各任務按次序逐個在hosts中指定的主機上執行,即在全部主機上完成第一個任務後再開始第二個任務。
在運行playbook時(從上到下執行),若是一個host執行task失敗,整個tasks都會回滾,請修正playbook 中的錯誤,而後從新執行便可。
Task的目的是使用指定的參數執行模塊,而在模塊參數中可使用變量,模塊執行時冪等的,這意味着屢次執行是安全的,由於其結果一致。
2:每個task必須有一個名稱name,這樣在運行playbook時,從其輸出的任務執行信息中能夠很好的辨別出是屬於哪個task的。若是沒有定義name,‘action’的值將會用做輸出信息中標記特定的task。
3:定義一個task,常見的格式:」module: options」 例如:yum: name=httpd
4:ansible的自帶模塊中,command模塊和shell模塊無需使用key=value格式sql
-k(–ask-pass) 用來交互輸入ssh密碼
-K(-ask-become-pass) 用來交互輸入sudo密碼
-u 指定用戶shell
# ansible-playbook test.yml --syntax-check #檢查yaml文件的語法是否正確 # ansible-playbook test.yml --list-task #檢查tasks任務 # ansible-playbook test.yml --list-hosts #檢查生效的主機 # ansible-playbook test.yml --start-at-task='Copy Nginx.conf' #指定從某個task開始運行
# vim a.yml --- - hosts: 192.168.6.130 //指定主機 remote_user: root //指定在被管理的主機上執行任務的用戶 tasks: //任務列表↓ - name: disable selinux //任務名關閉防火牆 command: '/sbin/setenforce 0' //調用command模塊 執行關閉防火牆命令 - name: start httpd //任務名 開啓httpd service: name=httpd state=started //調用service模塊 開啓httpd 服務 # ansible-playbook a.yml --syntax-check #檢查yaml文件的語法是否正確 # ansible-playbook a.yml
# vim /etc/ansible/hosts //在組中的主機後面添加變量 [www] 192.168.6.130 testvar="192.173.34.18" #vim c.yml //編寫yml劇本 --- - hosts: www remote_user: root tasks: - name: copy file copy: content="{{ansible_all_ipv4_addresses}},{{testvar}}" dest=/opt/vars.txt # ansible-playbook c.yml //執行劇本
條件判斷apache
# scp root@192.168.6.130:/etc/httpd/conf/httpd.conf ./templates //複製被管理端的配置文件到本地 # vim templates //在管理端講配置文件要修改的地方定義變量 Listen {{http_port}} ServerName {{server_name}} MaxClients {{access_num}}
# vim /etc/ansible/hosts [www] 192.168.6.129 http_port=192.168.6.129:80 access_num=100 server_name="www..com:80" # vim apache.yml # ansible-playbook apache.yml #而後執行腳本 而後去abc組的主機上查看下配置文件是否已經改了
# ansible-playbook hosts.yml --tags="only" //只執行這個標籤上面的任務
# ansible-playbook test.yml --tags="only" //兩個tags都會被執行