Ansible + AWX 针对机器运行剧本/任务需要对标准角色进行微小更改

Ansible + AWX 针对机器运行剧本/任务需要对标准角色进行微小更改

我正在学习 ansible awx,在测试期间我想解决一种情况,所以我正在寻找想法和可能的解决方案。

文件结构来自这里,最佳实践 — Ansible 文档 > “目录结构”

为了简化这个问题,我有两个剧本,每个剧本都应该针对执行一个角色的预配置 Linux 映像运行。一个角色用于桌面,另一个角色用于服务器。

部署的桌面数量可能有数百或数千个,因此我确实需要一个无需太多人工交互即可扩展的简单解决方案。

我想有些桌面用户需要进行自定义更改。虽然桌面使用了 99% 的标准角色配置,但他们可能需要使用特定的背景图片或为他们的帐户设置时区(仅作为示例)或其他需要在该桌面上锁定的内容。

我不想为超出标准配置的每台机器创建一个剧本结构,那么有没有办法说,运行标准剧本,但也运行另一组任务,但只针对标准剧本之后在 AWX 中匹配的主机/组名,或者甚至是在标准角色任务作业的中间?

例如,在任务 / main.yml 中,我是否可以包含另一个 yml 文件,该文件在主机与 AWX 组匹配时导入并运行?这样,标准角色就保持相当干净,只需导入另一个文件,该文件可能会根据主机匹配导入另一个文件,该文件应与 AWX 中的组名匹配?

我正在考虑的概念,不确定是否可行或类似的东西?我需要做的就是添加一个测试custom.yml并创建一个包含该主机/组的自定义任务的新文件。

In tasks / main.yml

- name: install app
...

#end of tasks declarations
# At bottom of the file

include custom.yml



#file custom.yml
  host: user_machine_123
  import user_machine_123_custom_tasks.yml

#file user_machine_123_custom_tasks.yml
- name: install special app for user_machine_123
...

答案1

如果用户可以在 ansible 之外进行自定义,则无需将所有例外情况都纳入剧本。另外,请注意不要让剧本太大太复杂,您可以拥有多个剧本。

也就是说,每个组和每个主机的值和操作都是可能的。


将所有值定义为变量以允许覆盖。例如,在角色默认级别,时区为,tz: UTC但在 group_vars/desktop 中可以是tz: America/Chicago任何其他值。在所有主机上运行的通用角色中,使用时区模块:

 - timezone:
     name: "{{tz}}"

可选的每个主机任务有点棘手。尝试使用 first_found 查找进行静态包含。首先查找包含 inventory_hostname 的最具体文件名,然后查找(可能为空的)默认文件。

- name: per host tasks
  include: "{{lookup('first_found', params)}}"
  vars:
    params:
      files:
        - '{{inventory_hostname}}.yml'
        - default.yml
      paths:
        - 'tasks'

如果您发现自己正在尝试这种模式,请考虑限制其使用。它仅适用于已被游戏定位的主机,并且任务目录中特定于主机的行为不太直观。

角色是包含任务和变量的更易于管理的单元,并且可以针对任意数量的主机重复使用。让 Ansible 用户贡献角色,如果您愿意,可以将其与您的剧本分开维护。然后将它们映射到剧本中的主机:

---
- name: Server common
  hosts: servers
  roles:
  - common

- name: Web servers common
  hosts: web
  roles:
  - webserver

- name: Widget inventory app
  hosts: widget
  roles:
  - widgetapp

- name: special snowflake
  hosts: user123
  roles:
  - custom123

相关内容