创建mysql角色目录
[root@m01 /etc/ansible/roles]# ansible-galaxy init mysql
- mysql was created successfully
[root@m01 /etc/ansible/roles]# ll
total 4
drwxr-xr-x 10 root root 135 Aug 26 00:13 mysql
[root@m01 /etc/ansible/roles]# cd mysql/
[root@m01 /etc/ansible/roles/mysql]# ll
total 4
drwxr-xr-x 2 root root 22 Aug 26 00:13 defaults
drwxr-xr-x 2 root root 6 Aug 26 00:13 files
drwxr-xr-x 2 root root 22 Aug 26 00:13 handlers
drwxr-xr-x 2 root root 22 Aug 26 00:13 meta
-rw-r--r-- 1 root root 1328 Aug 26 00:13 README.md
drwxr-xr-x 2 root root 22 Aug 26 00:13 tasks
drwxr-xr-x 2 root root 6 Aug 26 00:13 templates
drwxr-xr-x 2 root root 39 Aug 26 00:13 tests
drwxr-xr-x 2 root root 22 Aug 26 00:13 vars
[root@m01 /etc/ansible/roles/mysql]#
role_name/:我们定义的role的名字
file/:用于存放copy或script等模块调用的函数
tasks/:用于定义各种task,此目录一定要有main.yml;其他文件需要main.yml包含调用
handlers:用于定义各种handlers,此目录一定要有main.yml;其他文件需要main.yml包含调用
vars:用于定义variables,此目录一定要有main.yml;其他文件需要main.yml包含调用
templates/:存储由template模块调用的模板文本;
meta/:定义当前角色的特殊设定及其依赖关系,此目录中至少应该有一个名为main.yml的文件;其它的文件需要由main.yml进行“包含”调用;
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;
handlers: 触发器
是task列表,这些task与前述的task并没有本质上的不同,用于当关注的资源发生七时,才会采取一定的操作
notify此action可用于在每个play的最后被触发,这样可避免多次有改变发生时每次都执行指定的操作,仅在所有的变化发生完成后一次性地执行指定操作。在notify中列出的操作称为handler ,也即notify中调用handler中定义的操作
如下图:如果copy改变 就会触发handlers 重启httpd服务
image.png
变量:
1. 命令行定义变量:-e 'pkname=vsftpd'
image.png
2. 在playbook中定义变量vars
![]()
3. 在主机清单中/etc/ansible/hosts添加变量
[websrvs]中的变量优先级大于[websrvs:vars]中的变量优先级
image.png
tags:标签
tags标签指定某条任务执行,用于选择运行playbook中的部分代码。ansible具有幕等性,因此会自动跳过没有变化的部分,即便如此,有些代码为测试其确实没有发生变化的时间依然会非常地长。此时,如果确信其没有变化,就可以通过tags跳过此些代码片断
指定标签就会只执行带标签的动作,其余的会跳过
image.png
with_items: 迭代
特殊的变量迭代
当有需要重复性执行的任务时可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用并通过with_items语句来指明迭代的元素列表即可。
image.png
示例
例如在被控端添加 2 个用户
方式1一般做法
name: add user testuser1
user: name=testuser1 state=present groups=wheel
name: add user testuser2
user: name=testuser2 state=present groups=wheel
方式2使用变量方式
name: add several users
vars:
user1: testuser1
user2: testuser2
user: name={{ user1 }} state=present groups=wheel
user: name={{ user2 }} state=present groups=wheel
方式3使用迭代方式
创建两个用户
[root@linux-node1 create_user]# cat c_u.yml
- hosts: db
remote_user: root
tasks:
- name: add several users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
- name: add several users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: 'testuser1', groups: 'wheel' }
- { name: 'testuser2', groups: 'root' }
网友评论