playbooks是 一個不一樣於使用Ansible命令行執行方式的模式,其功能更強大靈活。簡單來講,playbook是一個很是簡單的配置管理和多主機部署系統,不一樣於任何已經存在的模式,可做爲一個適合部署複雜應用程序的基礎。Playbook能夠定製配置,能夠按照指定的操做步驟有序執行,支持同步和異步方式。值得注意的是playbook是經過YAML格式來進行描述定義的。
mysql
Tasks:任務,由模板定義的操做列表
Variables:變量
Templates:模板,即便用模板語法的文件
Handlers:處理器 ,當某條件知足時,觸發執行的操做
Roles:角色linux
在playbook中的每個play均可以選擇在哪些服務器和以什麼用戶完成,hosts一行能夠是一個主機組、主機、多個主機,中間以冒號分隔,可以使用通配模式。其中remote_user表示執行的用戶帳號。sql
--- - hosts: abc #指定主機組,能夠是一個或多個組。 remote_user: root #指定遠程主機執行的用戶名
指定遠程主機sudo切換用shell
# 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格式apache
參數:vim
-k(–ask-pass) 用來交互輸入ssh密碼
-K(-ask-become-pass) 用來交互輸入sudo密碼
-u 指定用戶安全
# ansible-playbook a.yml --syntax-check #檢查yaml文件的語法是否正確 # ansible-playbook a.yml --list-task #檢查tasks任務 # ansible-playbook a.yml --list-hosts #檢查生效的主機 # ansible-playbook a.yml --start-at-task='Copy Nginx.conf' #指定從某個task開始運行
示例服務器
# vim a.yml --- - hosts: 192.168.200.129 //指定主機 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
在組的主機後面添加變量ssh
# vim /etc/ansible/hosts
# vim c.yml # ansible-playbook c.yml //執行這個劇本
條件判斷異步
Jinja是基於Python的模板引擎。template類是Jinja的另外一個重要組件,能夠看做一個編譯過的模塊文件,用來生產目標文本,傳遞Python的變量給模板去替換模板中的標記。
# scp root@192.168.175.130:/etc/httpd/conf/httpd.conf ./templates //複製被管理端的配置文件到本地 # vim templates/httpd.conf //在管理端講配置文件要修改的地方定義變量 Listen {{http_port}} ServerName {{server_name}} MaxClients {{access_num}}
在/etc/ansible/hosts 添加變量
# vim /etc/ansible/hosts [abc] 192.168.200.129 http_port=192.168.200.129:80 access_num=100 server_name="www.yun.com:80" # vim apache.yml # ansible-playbook apache.yml #而後執行腳本 而後去abc組的主機上查看下配置文件是否已經改了
# ansible-playbook hosts.yml --tags="only" //只執行這個標籤上面的任務
事實上,不光能夠爲單個或多個task指定同一個tags。playbook還提供了一個特殊的tags爲always。做用就是當使用always當tags的task時,不管執行哪個tags時,定義有always的tags都會執行。
執行下面命令
# ansible-playbook hosts.yml --tags="only" //去被管理主機上查看文件建立狀況 2個tags都會執行