始终在其他角色

时间:2016-04-04 02:32:25

标签: ansible ansible-galaxy datadog ansible-role

我试图找出依赖丛林的方法。我使用Ansible 1.9.2。

在单个剧本中,我希望能够安装Galaxy角色(在事件中,Datadog.datadog角色)并对其进行配置。但Ansible总是bar ;;由于在我编写的另一个角色安装了Galaxy角色之前,Datadog.datadog角色不存在,因此它不会执行。这就是我真正喜欢它的方式,切断了我的剧本使用的其他角色:

- hosts: all
  roles: 
  - install_datadog
  - (some other roles...)
  - { role: Datadog.datadog, sudo: true }
  vars:
    datadog_api_key: "somekey"

我尝试了以下所有方法,但没有一个能够首先安装Ansible Galaxy Datadog.datadog角色:

  • 在运行我的install_datadog角色的同一个playbook中有一个较早的块。
  • 使用' include'该剧中早前的声明包括install_datadog角色的main.yml。
  • 在上面的剧本中创建一个pre_task语句。

定义角色依赖没有意义,因为Datadog.datadog还没有存在,所以我无法在其中定义任何依赖。始终存在类似于此的错误:

ERROR: cannot find role in /etc/ansible/roles/Datadog.datadog

我唯一可以开始工作的是在之前的运行中执行install_datadog角色。这不是一个很好的解决方案,因为之前有一个具有许多执行块和角色调用的剧本配置了我们的整个环境;这将需要以特定的顺序执行两个剧本,这是非常不优雅的。

因此,在单次运行中,如何解决在早期角色运行安装之前不会存在的Galaxy角色?

1 个答案:

答案 0 :(得分:0)

确保您的roles_path正确无误。 roles_path中的ansible.cfg变量指定了ansible将在哪里查找角色,而--roles-path的{​​{1}}选项将指定安装datadog角色的位置。

例如,我的安装任务如下所示:

ansible-galaxy

在我的ansible-galaxy install Datadog.datadog --roles-path=/usr/home/vagrant 文件中我有这一行:

ansible.cfg