有没有更好的方法将用户有条件地添加到具有Ansible的组中?
我有一个剧本,其中规定了一个主机,可与Rails/rvm/passenger一起使用。我想添加使用相同的剧本来设置测试和生产 在测试中,要添加到rvm组的用户是jenkins。生产中的是乘客。下面我的剧本摘录是基于inventory_hostname参数实现的 似乎在剧本中为每个测试或生产主机添加新用户:/when:block是错误的做法。我应该为此使用一个Ansible角色吗? 谢谢有没有更好的方法将用户有条件地添加到具有Ansible的组中?,ansible,Ansible,我有一个剧本,其中规定了一个主机,可与Rails/rvm/passenger一起使用。我想添加使用相同的剧本来设置测试和生产 在测试中,要添加到rvm组的用户是jenkins。生产中的是乘客。下面我的剧本摘录是基于inventory_hostname参数实现的 似乎在剧本中为每个测试或生产主机添加新用户:/when:block是错误的做法。我应该为此使用一个Ansible角色吗? 谢谢 创建名为库存/测试的库存文件 这将控制在测试环境中运行playbook时目标主机 创建另一个名为group_v
创建名为库存/测试的库存文件 这将控制在测试环境中运行playbook时目标主机 创建另一个名为group_vars/testing的文件 此文件将保留针对测试环境运行playbook所需的所有变量。生产文件应具有相同的变量,但具有不同的值 最后,在你的剧本中: -- -主持人:全部 变成:真的 ... 任务: -名称:将用户添加到rvm组 用户: 名称:{rvm_user} shell:/bin/bash 组别:rvm 附加:是的 现在,当您想要运行playbook时,您可以这样执行它: ansible playbook-i库存/测试站点.yml Ansible将做正确的事情,在组变量中查找测试文件并从中读取变量。它将忽略一个文件或文件夹中的变量,该文件或文件夹不是以您的环境命名的,但名为all的文件除外,该文件旨在用于整个Playbook中的公共变量
祝您好运-Ansible是一个令人惊奇的工具:您可以设置主机或组特定的变量,然后在有{{item}}的地方展开变量,没有{u items}或者在需要时展开变量。或者动态地确定它并设置一个事实。但我们需要更多关于如何确定什么是prod和什么是test的信息。此外,我应该使用角色的答案几乎总是肯定的。
---
- hosts: all
become: true
...
tasks:
- name: add jenkins user to rvm group when on testing
user: name={{ item }}
shell=/bin/bash
groups=rvm
append=yes
with_items:
- jenkins
when: "'bob.mydomain' in inventory_hostname"
- name: add passenger user to rvm group when on rails production
user: name={{ item }}
shell=/bin/bash
groups=rvm
append=yes
with_items:
- passenger
when: "'alice.mydomain' in inventory_hostname"
[web]
alice.mydomain
[testing:children]
web
rvm_user: jenkins