# ansilbe自1.2版本引入的新特性,用於層次性、結構化地組織playbook。 # roles可以根據層次型結構自動裝載變量文件、tasks以及handlers等。 # 要使用roles只須要在playbook中使用include指令便可。 #簡單來說,roles就是經過分別將變量、文件、任務、模塊及處理器放置於單獨的目錄中, # 並能夠便捷地include它們的一種機制。 # 角色通常用於基於主機構建服務的場景中,但也能夠是用於構建守護進程等場景中。 ############## 建立role的步驟 (1) 建立以roles命名的目錄; (2) 在roles目錄中分別建立以各角色名稱命名的目錄,如webservers等。注意:在 roles 必須包括 site.yml文件,能夠爲空; (3) 在每一個角色命名的目錄中分別建立files、handlers、meta、tasks、templates和vars目錄; 用不到的目錄能夠建立爲空目錄,也能夠不建立; (4) 在playbook文件中,調用各角色; ############### role內各目錄中可用的文件 tasks目錄:至少應該包含一個名爲main.yml的文件,其定義了此角色的任務列表; 此文件可使用include包含其它的位於此目錄中的task文件; files目錄:存放由copy或script等模塊調用的文件; templates目錄:template模塊會自動在此目錄中尋找Jinja2模板文件; handlers目錄:此目錄中應當包含一個main.yml文件,用於定義此角色用到的各handler; 在handler中使用include包含的其它的handler文件也應該位於此目錄中; vars目錄:應當包含一個main.yml文件,用於定義此角色用到的變量; meta目錄:應當包含一個main.yml文件,用於定義此角色的特殊設定及其依賴關係; ansible 1.3及其之後的版本才支持; default目錄:爲當前角色設定默認變量時使用此目錄;應當包含一個main.yml文件。
控制端: 172.16.10.9 server.magedu.com 被控制端: 172.16.10.22 node2.example.com 172.16.10.33 node3.example.com 172.16.0.50 director1.example.com 172.16.0.51 director2.example.com 計劃: 172.16.10.22 node2.example.com 172.16.10.33 node3.example.com # 安裝 web php程序,並提供配置文件 172.16.0.50 director1.example.com 172.16.0.51 director2.example.com # 安裝 mysql mysql-server,並提供配置文件 要求:基於主機名通訊(被控制端均可以解析到其餘的主機名)
一、配置好 Inventory 文件 # /etc/ansible/hosts [webhosts] node2.example.com node3.example.com [mysql] director1.example.com director2.example.com 二、建立對應的目錄樹 # 執行 tree /root/lamp/roles 查看目錄樹 /root/lamp/roles |-- common | |-- default | |-- files | | `-- hosts | |-- handlers | |-- meta | |-- tasks | | `-- main.yml | |-- templates | `-- vars |-- db | |-- default | |-- files | | `-- my.cnf | |-- handlers | | `-- main.yml | |-- meta | |-- tasks | | `-- main.yml | |-- templates | `-- vars |-- db.yml |-- php | |-- default | |-- files | | `-- php.ini | |-- handlers | |-- meta | |-- tasks | | `-- main.yml | |-- templates | `-- vars |-- site.yml |-- web | |-- default | |-- files | | `-- httpd.conf | |-- handlers | | `-- main.yml | |-- meta | |-- tasks | | `-- main.yml | |-- templates | `-- vars `-- web.yml 三、各個文件的內容 # 當前所在目錄 /root/lamp/roles # cat db.yml - name: mysqld servise remote_user: root hosts: mysql roles: - common - db # cat web.yml - name: wed servise remote_user: root hosts: webhosts roles: - common - php - web # cat common/files/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.10.22 node2.example.com 172.16.10.33 node3.example.com 172.16.0.50 director1.example.com 172.16.0.51 director2.example.com # cat common/tasks/main.yml - name: Configure hostname resolve copy: src=hosts dest=/etc/hosts # cat php/tasks/main.yml - name: install php yum: name=php state=present - name: configuration php copy: src=php.ini dest=/etc/php.ini # cat web/tasks/main.yml - name: install httpd yum: name=httpd state=present - name: configuration httpd copy: src=httpd.conf dest=/etc/httpd/conf/httpd.conf notify: - restart httpd - name: service httpd start service: name=httpd enabled=no state=started # cat web/handlers/main.yml - name: restart httpd service: name=httpd state=restarted # cat db/tasks/main.yml - name: install mysql yum: name=mysql state=present - name: install mysql-server yum: name=mysql-server state=present - name: configuration mysqld copy: src=my.cnf dest=/etc/my.cnf notify: - restart mysqld - name: service mysqld start service: name=mysqld enabled=no state=started # cat db/handlers/main.yml - name: restart mysqld service: name=mysqld state=restarted 四、開始批量部署 ansible-playbooks web.yml ansible-playbooks db.yml
至此,批量部署lamp平臺就完成了。以上只是一個示例,具體狀況,還需具體對待。php