文章目錄 roles role 的依賴關系 role 的實際案例
roles
tasks 和 handlers ,那怎樣組織 playbook 才是最好的方式呢?簡
單的回答就是:使用 Roles
Roles 基于一個已知的文件結構,去自動的加載 vars,tasks 以及 handlers 以便
playbook 更好的調用。
roles 相比 playbook 的結構更加的清晰有層次,但 roles 顯然要比 playbook
更加復雜難理解!
比如:我們無論安裝什么軟件都會安裝時間同步服務,那么每個 playbook 都要編
寫時間同步服務的 task 。此時我們可以將時間同步服務 task 任務編寫好,等到需
要使用的時候進行調用就行了。roles 官方目錄結構,必須按如下方式定義。在每個目錄中必須有 main.yml 文
件,這些屬于強制要求[root@m01 ~]# cd /etc/ansible/roles
[root@m01 roles]# mkdir
{nfs,rsync,web}/{vars,tasks,templates,handlers,files,meta} -p
[root@m01 roles]# tree
.
├── nfs #角色名稱
│ ├── files #存放文件
│ ├── handlers #觸發任務
│ ├── tasks #具體任務
│ ├── templates #模板文件
│ └── vars #定義變量
│ └── meta #依賴關系
批量替換文件
ll /opt/php/ |awk '{print $NF}' | sed -r 's#(.*)#- /opt/php/\1#g'
role 的依賴關系
roles 允許在使用時自動引入其他 role , role 依賴關系存儲在
meta/main.yml 文件中。
例如: 安裝 wordpress 項目時:
1.需要先確保 nginx 與 php-fpm 的 role 都能正常運行
2.然后在 wordpress 的 role 中定義,依賴關系
3.依賴的 role 有 nginx 以及 php-fpm
#wordpress依賴nginx與php-fpm的role[root@m01 playbook]# cat /root/roles/wordpress/meta/main.yml
---
dependencies:
- { role: nginx }
- { role: php-fpm }wordpress 的 role 會先執行 nginx、php-fpm 的 role ,最后在執行 wordpress
本身
role 的實際案例
[root@m01 memcached]# cd /etc/ansible/roles/
[root@m01 memcached]# tree memcached/
.
├── tasks
│ ├── main.yml
│ ├── start.yml
│ ├── template.yml
│ └── yum.yml
└── templates
└── memcached.j2[root@m01 memcached]# cat tasks/main.yml
- include: yum.yml
- include: template.yml
- include: start.yml
[root@m01 ~]# cat tasks/yum.yml
- name: install memcached package
yum: name=memcached
[root@m01 ~]# cat tasks/template.yml
- name: Copy memcahed conf
template: src=memcached.j2 dest=/etc/sysconfig/memcached
[root@m01 ~]# cat templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="{{ ansible_memtotal_mb//4 }}"
CACHESIZE="64"
OPTIONS=""
[root@m01 ~]# cat tasks/start.yml
- name: start memcached
service: name=memcached state=started enabled=yes[root@m01 ~]# cat site.yml
- hosts: "{{ host }}"
remote_user: root
roles:
- role: memcached
# 執行playbook
[root@m01 ~]# ansible-playbook site.yml -e "host=10.0.0.1"