Ansible-角色

创建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' }  
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容