1、roles:(难点)
roles介绍:
roles(角色):就是通过分别将variables,tasks及handlers等放置于单独的目录中,并可以便捷地调用他们的一种机制。
假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分,分成apache管理、php管理、mysql管理,然后在需要使用的时候直接调用就可以了,避免重复写。就类似编程里的模块化的概念,已达到代码复用的效果。
创建roles的目录结构:
1、files:用来存放由copy模块或者scripts模块调用的模板;
2)tasks:至少有一个main.yml文件,定义各个tasks;
3)handlers:有一个main.yml文件,定义各handlers;
4)templates:用来存放jinja2模板;
5)vars:有一个main.yml,定义变量的;
6)meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。
注意:在每个角色的目录中分别创建files,tasks,handlers,templates,vars和meta目录,用不到的目录可以创建为空目录。
通过roles实现lamp:
需要定制三个角色:apache、mysql、php
[root@localhost roles]# tree
.
├── httpd
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
│ └── main.yml
├── mysql
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ └── vars
│ └── main.yml
└── php
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
21 directories, 12 files
这个roles,就并列写了三个roles。类似于调用了函数。
检查agent的文件:
[root@agent1 share]# cd /var/www/html
[root@agent1 html]# ll
total 8
-rw-r--r-- 1 root root 10 Aug 31 09:07 index.html
-rw-r--r-- 1 root root 22 Aug 31 09:07 test.php
[root@localhost httpd]# cat tasks/main.yml
- name: install apache etc packages
yum: name=httpd,httpd-devel state=latest
- name: sync configure file
copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
- name: copy data files
copy: src=/etc/ansible/roles/httpd/files/httpd_doc/ dest=/var/www/html/
# notify: restart httpd
- name: start httpd and enabled in boot
service: name=httpd state=started enabled=on
[root@localhost httpd]# cat handlers/main.yml
- name: restart httpd
service: name=httpd state=restarted
[root@localhost roles]# cat mysql/tasks/main.yml
- name: Install mariadb
yum: name=mariadb-server,mariadb-devel state=latest
- name: Start mariadb and enabled=yes
service: name=mariadb state=started enabled=on
[root@localhost roles]# cat php/tasks/main.yml
- name: install php packages
yum: name=php,php-gd,php-ldap,php-odbc,php-pear,php-xml,php-xmlrpc,php-mbstring,php-snmp,php-soap,curl,curl-devel,php-bcmath state=present
notify: restart httpd