使用角色

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 取决于任务)中的文件,而无需相对或绝对地路径它们