我正试图找到摆脱依赖丛林的方法。我正在使用 Ansible 1.9.2。
在单个剧本中,我希望能够安装 Galaxy 角色(如果是 Datadog.datadog 角色)并对其进行配置。但是 Ansible 总是吐槽;由于 Datadog.datadog 角色在我编写的另一个角色安装 Galaxy 角色之前不存在,因此它不会执行。这就是我真正想要的样子,去掉我的剧本使用的其他角色:
- hosts: all
roles:
- install_datadog
- (some other roles...)
- { role: Datadog.datadog, sudo: true }
vars:
datadog_api_key: "somekey"
我已经尝试了以下所有方法,但它们都不适用于首先安装 Ansible Galaxy Datadog.datadog 角色:
- 在运行我的 install_datadog 角色的同一剧本中有一个较早的块。
- 在包含 install_datadog 角色的 main.yml 的剧本中使用前面的“包含”语句。
- 在上面的剧本中创建一个 pre_task 语句。
定义角色依赖没有意义,因为 Datadog.datadog 还不存在,所以我无法在其中定义任何依赖。总是有类似这样的错误:
ERROR: cannot find role in /etc/ansible/roles/Datadog.datadog
我唯一能做的就是在之前的运行中执行 install_datadog 角色。这不是一个很好的解决方案,因为以前有许多执行块和角色调用的剧本配置了我们的整个环境;这将需要以特定顺序执行两个剧本,这是非常不优雅的。
因此,在一次运行中,我如何解决一个 Galaxy 角色,该角色在之前的角色运行安装它之前不存在?