有没有更好的方法将用户有条件地添加到具有Ansible的组中?

有没有更好的方法将用户有条件地添加到具有Ansible的组中?,ansible,Ansible,我有一个剧本,其中规定了一个主机,可与Rails/rvm/passenger一起使用。我想添加使用相同的剧本来设置测试和生产 在测试中,要添加到rvm组的用户是jenkins。生产中的是乘客。下面我的剧本摘录是基于inventory_hostname参数实现的 似乎在剧本中为每个测试或生产主机添加新用户:/when:block是错误的做法。我应该为此使用一个Ansible角色吗? 谢谢 创建名为库存/测试的库存文件 这将控制在测试环境中运行playbook时目标主机 创建另一个名为group_v

我有一个剧本,其中规定了一个主机,可与Rails/rvm/passenger一起使用。我想添加使用相同的剧本来设置测试和生产

在测试中,要添加到rvm组的用户是jenkins。生产中的是乘客。下面我的剧本摘录是基于inventory_hostname参数实现的

似乎在剧本中为每个测试或生产主机添加新用户:/when:block是错误的做法。我应该为此使用一个Ansible角色吗? 谢谢


创建名为库存/测试的库存文件

这将控制在测试环境中运行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