始终在其他角色之前运行ansible角色

始终在其他角色之前运行ansible角色,ansible,ansible-galaxy,datadog,ansible-role,Ansible,Ansible Galaxy,Datadog,Ansible Role,我正试图找到摆脱依赖的方法。我用的是Ansible 1.9.2 在单个剧本中,我希望能够安装Galaxy角色(在事件中为Datadog.Datadog角色)并对其进行配置。但Ansible总是呕吐;由于Datadog.Datadog角色在我编写的另一个角色安装Galaxy角色之前不存在,因此它不会执行。这就是我真正想要的,去掉我剧本中使用的其他角色: - hosts: all roles: - install_datadog - (some other roles...) -

我正试图找到摆脱依赖的方法。我用的是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\u datadog角色的同一剧本中有一个较早的块
  • 在剧本前面使用包含install_datadog角色main.yml的include语句
  • 在上面的剧本中创建pre_任务语句
定义角色依赖项没有意义,因为Datadog.Datadog还不存在,所以我不能在其中定义任何依赖项。始终存在与此类似的错误:

ERROR: cannot find role in /etc/ansible/roles/Datadog.datadog
我唯一能做的就是在之前的运行中执行install_datadog角色。这不是一个很好的解决方案,因为之前有一个剧本,其中有许多执行块和角色调用配置了我们的整个环境;这需要按照特定的顺序执行两个剧本,这是非常不雅观的


因此,在一次运行中,如何解析在运行之前的角色安装之前不存在的Galaxy角色?

请确保您的角色路径正确。
ansible.cfg
中的
roles\u path
变量指定ansible将在何处查找角色,而
ansible galaxy
--roles path
选项将指定datadog角色的安装位置

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

ansible galaxy安装Datadog.Datadog--roles path=/usr/home/vagrant

在我的
ansible.cfg
文件中,我有一行:


roles\u path=/vagrant/ansible/roles:/usr/home/vagrant

为什么每次都需要安装角色?您是否在拉模式下运行Ansible?我不需要每次都安装该角色,但每当运行此playbook(本质上是“配置/重新配置整个环境”playbook)时,它都应该确保该角色存在。而且它是幂等的,所以它标题中的“install_”可能有点误导。我被你的工作流程弄糊涂了。我根本不使用Galaxy,所以不确定它会如何影响您的工作流程,但通常情况下,您会在源代码管理中存储所有Ansible角色和角色,而拉入Galaxy角色应该与此相同。当您第一次将角色存储在源代码管理存储库中,然后对该副本运行其他剧本时,@ydaetskcoR Hm,这是一个非常有用的评论。我尝试动态地安装角色,这可能是错误的;只需在配置repo中设置Datadog.Datadog角色可能是解决这一问题的最佳方法。