使用角色
Ansible 使用角色的概念来更好地允许模块化代码并避免重复自己。
角色只是一个文件夹结构,Ansible 知道从哪里加载 vars 文件,任务和处理程序。示例可能如下所示:
apache/
├── defaults
│ └── main.yml
├── files
│ ├── mod-pagespeed-stable_current_i386.deb
│ ├── mod-pagespeed-stable_current_i386.rpm
│ ├── mod-pagespeed-stable_current_amd64.deb
| └── mod-pagespeed-stable_current_x86_64.rpm
├── tasks
│ ├── debian.yml
│ ├── main.yml
│ └── redhat.yml
├── templates
│ ├── httpd.conf.j2
│ └── sites-available
│ └── virthualhost.conf.j2
└── vars
├── debian
└── redhat
然后,你可以将角色与基本的剧本一起使用,如下所示:
- hosts: webservers
roles:
- apache
当你针对这个剧本运行 Ansible 时,它将针对 webservers
组中的所有主机并运行上面定义的 apache
角色,自动加载角色的任何默认变量并运行 tasks/main.yml
中包含的所有任务。Ansible 还知道在角色友好位置寻找某些类型的文件:
-
如果存在 roles / x / tasks / main.yml,则其中列出的任务将添加到游戏中
-
如果存在 roles / x / handlers / main.yml,则其中列出的处理程序将添加到游戏中
-
如果存在 roles / x / vars / main.yml,则其中列出的变量将添加到播放中
-
如果存在 roles / x / meta / main.yml,则其中列出的任何角色依赖项将添加到角色列表中(1.3 及更高版本)
-
任何副本,脚本,模板或包含任务(在角色中)都可以引用 roles / x / {files,templates,tasks} /(dir 取决于任务)中的文件,而无需相对或绝对地路径它们