定义了一个test的角色,实现一个简单的功能,即输出”hello role”
调用test角色时,test.yml会从如图所示几个目录去寻找
同级目录中查找与test角色同名的目录
同级目录中的roles目录中
当前系统用户的家目录中的.ansible/roles目录,即 ~/.ansible/roles目录中
/etc/ansible/ansible.cfg配置文件,roles_path选项的默认配置
在roles关键字中使用role关键字指定角色对应的绝对路径,也可以直接调用角色
尝试一下在角色中使用变量
需要注意的是,在默认情况下,角色中的的变量是全局可访问的。请看下面的例子:
给test、test1定义了一个“testvar”的变量
简单的task为输出变量
预期是 test角色输出“hello role !” ; test1角色输出“hello role2 !” 实则不然
如上结果,test和test1均输出“hello role !”。这是因为在默认情况下,角色中的变量是全局可访问的。
如果想要解决上述问题,则可以将变量的访问域变成角色所私有的,如果想要将变量变成角色私有的,则需要设置/etc/ansible/ansible.cfg文件,将private_role_vars的值设置为yes,默认情况下,”private_role_vars = yes”是被注释掉的,将前面的注释符去掉皆可,设置完成后,再次执行上例中的test.yml文件,输出结果如下:
默认情况下,我们无法多次调用同一个角色,也就是说,如下playbook只会调用一次test角色:
执行上例playbook会发现,testrole的debug模块只输出了一次,如果想要多次调用同一个角色,有两种方法,如下:
方法一:设置角色的allow_duplicates属性 ,让其支持重复的调用。
方法二:调用角色时,传入的参数值不同。
方法一需要为角色设置allow_duplicates属性,而此属性需要设置在meta/main.yml文件中,所以我们需要在test中创建meta/main.yml文件,写入如下内容:
方法二,当调用角色需要传参时,如果参数的值不同,则可以连续调用多次。
通过vars/main.yml文件来定义变量
总结变量优先级:使用”-e”传入的变量 > vars/main.yml > test.yml > defaults/main.yml
假设现在test需要使用一些模板,那么也可以直接将模板文件放到templates目录中。
模板文件中使用到了 template_var变量,我们可以为 template_var变量定义一个默认变量
如果你想要在角色中使用一些handlers以便进行触发,则可以直接将对应的handler任务写入到handlers/main.yml文件中,示例如下:
参考链接:https://www.zsythink.net/archives/3063