始终在其他角色之前运行ansible角色
我正试图找到摆脱依赖的方法。我用的是Ansible 1.9.2 在单个剧本中,我希望能够安装Galaxy角色(在事件中为Datadog.Datadog角色)并对其进行配置。但Ansible总是呕吐;由于Datadog.Datadog角色在我编写的另一个角色安装Galaxy角色之前不存在,因此它不会执行。这就是我真正想要的,去掉我剧本中使用的其他角色:始终在其他角色之前运行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...) -
- 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_任务语句
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角色可能是解决这一问题的最佳方法。