ansible 使用角色

示例

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还知道要在角色友好位置查找某些类型的文件:

  • 如果存在role / x / tasks / main.yml,则其中列出的任务将被添加到剧本中

  • 如果存在role / x / handlers / main.yml,则其中列出的处理程序将添加到播放中

  • 如果Roles / x / vars / main.yml存在,则其中列出的变量将添加到播放中

  • 如果存在role / x / meta / main.yml,则其中列出的所有角色依赖项都将添加到角色列表中(1.3及更高版本)

  • (在角色中)任何副本,脚本,模板或包含任务都可以引用role / x / {文件,模板,任务} /(目录取决于任务)中的文件,而不必相对或绝对地进行路径