通过ansible-galaxy快速了解roles
1、该命令可以连接galaxy.ansible.com下载已经编排好的roles
1 |
ansible-galaxy list #列出已经安装的galaxy |
2 |
ansible-galaxy install geerlingguy.redis #安装一个galaxy角色 |
3 |
ansible-galaxy remove geerlingguy.redis #删除一个galaxy角色 |
2、安装好一个roles后可以看到在相应的目录中会生成一个以角色名命名的目录,并且还有许多子目录和yml文件,这些都是构成roles的成员。复制一份角色目录就会被Ansible自动识别成一个新的角色。
手动创建Ansible roles
1、创建roles目录,保持和playbook同级,然后在roles目录中创建以角色命名的目录,如nginx、mysql
1 |
mkdir roles/{nginx,mysql} |
2、在每个角色目录中分别创建files、handlers、tasks(必须)、templates、vars等目录(记不住就参考galaxy所创建的目录)
1 |
mkdir roles/nginx/{handlers,tasks,template,vars,files} |
3、roles各子目录作用
roles/$project/:project是真实项目名称,如nginx或mysql
files/:存放由copy或script等模块调用的文件,如网页文件。使用copy模块时会自动从该目录找文件
template/:template模块会自动在此目录中寻找jinja2模板文件,使用template模块就会自动从该目录找文件
tasks/:该目录必须存在,定义task基本元素,该目录中需要包含一个main.yml文件,其它文件需要在此main.yml中通过include进行包含
handlers/:应包含一个main.yml文件用于定义此角色用到的各handlers,没有handlers的话不用创建
vars/:应包含一个main.yml文件用于定义此角色用到的变量,没有变量的话不用创建
Ansible roles创建httpd服务示例
1、为roles创建目录
2 |
mkdir -p httpd/{handlers,tasks,templates,vars} |
2、创建变量文件
3、为httpd创建配置文件的template
2 |
cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2 |
4 |
vim templates/httpd.conf.j2 |
5 |
Listen {{ PORT }} #引用变量 |
4、建立tasks文件,写明需要执行的任务
03 |
- name: Create a Startup Group #name会在执行过程中显示 |
04 |
group: name=www gid=60 system=yes |
08 |
- name: Create Startup Users |
09 |
user: name=www uid=60 system=yes shell=/sbin/nologin |
13 |
- name: Install Package Httpd |
14 |
yum: name=httpd state=installed |
18 |
- name: Copy Httpd Template File |
19 |
template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf |
24 |
- name: Start Httpd Service |
25 |
service: name=httpd state=started enabled=yes |
31 |
- include: install.yml |
5、建立handlers文件
3 |
service: name=httpd state=restarted #名字需要和task中的notify保持一致 |
6、建立playbook用于调用角色,这个playbook文件需要和roles目录平级
8 |
ansible-playbook -C httpd_roles.yml #正式运行前可以先-C测试一次 |
7、Roles最终目录结构