7、Ansible-roles
版权声明:原创作品,谢绝转载!否则将追究法律责任。
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。
当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。
问问自己,想要怎样的人生。
Ansible Roles基本概述
roles 不管是Ansible还是saltstack,我在写一键部署的时候,都不可能把所有的步骤全部写入到一个’剧本’文件当中,我们肯定需要把不同的工作模块,拆分开来,解耦,那么说到解耦,我们就需要用到 roles 官方推荐,因为 roles 的目录结构层次更加清晰。
例如:我们之前推荐大家写一个 base.yml 里面写所有基础优化的项目,其实把所有东西摞进去也是很鸡肋的,不如我们把这些功能全部拆分开,谁需要使用,就调用即可。
建议:每个roles最好只使用一个tasks这样方便我们去调用,能够很好的做到解耦。(SOA)
Ansible Roles目录结构
1.官方推荐最佳实践目录结构定义方式
production # inventory file for production servers
staging # inventory file for staging environment
group_vars/
group1.yml # here we assign variables to particular groups
group2.yml
host_vars/
hostname1.yml # here we assign variables to particular systems
hostname2.yml
library/ # if any custom modules, put them here (optional)
module_utils/ # if any custom module_utils to support modules, put them here
(optional)
filter_plugins/ # if any custom filter plugins, put them here (optional)
site.yml # master playbook
webservers.yml # playbook for webserver tier
dbservers.yml # playbook for dbserver tier
roles/
common/ # this hierarchy represents a "role"
tasks/ #
main.yml # <‐‐ tasks file can include smaller files if warranted
handlers/ #
main.yml # <‐‐ handlers file
templates/ # <‐‐ files for use with the template resource
ntp.conf.j2 # <‐‐‐‐‐‐‐ templates end in .j2
files/ #
bar.txt # <‐‐ files for use with the copy resource
foo.sh # <‐‐ script files for use with the script resource
vars/ #
main.yml # <‐‐ variables associated with this role
defaults/ #
main.yml # <‐‐ default lower priority variables for this role
meta/ #
main.yml # <‐‐ role dependencies
library/ # roles can also include custom modules
module_utils/ # roles can also include custom module_utils
lookup_plugins/ # or other types of plugins, like lookup in this case
webtier/ # same kind of structure as "common" was above, done for the webtier role
monitoring/ # ""
fooapp/ # ""
2.roles目录结构使用galaxy创建
[root@m01 ~]# cd /etc/ansible/roles/
[root@m01 roles]# tree wordpress/
nfs/ #项目名称
├── defaults #低优先级变量
├── files #存放文件
├── handlers #触发器文件
├── meta #依赖关系文件
├── tasks #工作任务文件
├── templates #jinja2模板文件
├── tests #测试文件
└── vars #变量文件
Ansible Roles依赖关系
roles 允许你再使用roles时自动引入其他的roles。role依赖关系存储在roles目录中meta/main.yml文件中。
例如:推送wordpress并解压,前提条件,必须要安装nginx和php,把服务跑起来,才能运行wordpress的页面,此时
我们就可以在wordpress的roles中定义依赖nginx和php的roles
root@m01 roles]# vim /etc/ansible/roles/wordpress/meta/main.yml
dependencies:
‐ { role: nginx }
‐ { role: php }
如果编写了meta目录下的main.yml文件,那么Ansible会自动先执行meta目录中main.yml文件中的dependencies文件,如上所示,就会先执行nginx和php的安装。
Ansible Roles最佳实践
roles小技巧】
1.创建 roles 目录结构,手动使用 ansible‐galaxy init test role
2.编写 roles 功能 3.在 playbook 中引用
【使用roles重构rsync】
1.规划目录结构如下
[root@m01 rsync]# cd /etc/ansible/roles/
[root@m01 roles]# ll
总用量 0
[root@m01 roles]# ansible‐galaxy init rsync
‐ rsync was created successfully
[root@m01 roles]# tree
.
└── rsync
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
2.定义roles主机清单
[root@m01 roles]# cat /etc/ansible/roles/hosts
[backup]
172.16.1.41
3.指定backup主机组,执行那个roles
[root@m01 roles]# cat /etc/ansible/roles/site.yml
‐ hosts: backup
remote_user: root
roles:
‐ rsync
4.查看rsync角色的tasks任务
[root@m01 roles]# cat /etc/ansible/roles/rsync/tasks/main.yml
‐ name: Install Rsync Server
yum: name=rsync state=present
‐ name: Configure Rsync Server
copy:
src: {{ item.src }}
dest: /etc/{{ item.dest }}
mode: {{ item.mode }}
with_items:
‐ {src: "rsyncd.conf", dest: "rsyncd.conf", mode: "0644"}
‐ {src: "rsync.passwd", dest: "rsync.passwd", mode: "0600"}
notify: Restart Rsync Server
‐ name: Start Rsync Server
systemd:
name: rsyncd
state: started
enabled: yes
5.查看rsync角色的handlers
[root@m01 roles]# cat /etc/ansible/roles/rsync/handlers/main.yml
‐ name: Restart Rsync Server
service:
name: rsyncd
state: restarted
6.查看rsync角色的files目录
[root@m01 roles]# ll /etc/ansible/roles/rsync/files/
total 8
‐rw‐r‐‐r‐‐ 1 root root 322 Nov 16 18:49 rsyncd.conf
‐rw‐‐‐‐‐‐‐ 1 root root 20 Nov 16 18:30 rsync.passwd
7.执行roles,使用-t指定执行测试rsync角色
[root@m01 roles]# ansible‐playbook ‐i hosts ‐t rsync site.yml
PLAY [backup]
********************************************************************************************
TASK [Gathering Facts]
********************************************************************************
ok: [172.16.1.41]
TASK [backup : Install Rsync Server]
***********************************************************************
ok: [172.16.1.41]
TASK [backup : Configure Rsync Server]
*********************************************************************
ok: [172.16.1.41]
TASK [backup : Start Rsync Server]
*************************************************************************
ok: [172.16.1.41]
PLAY RECAP************************************************************************************