我有一个配置主机用于Rails / rvm / passenger的剧本。我想添加使用相同的剧本来设置测试和制作。
在测试中,要添加到rvm
群组的用户是jenkins
。生产中的那个是passenger
。我的下面的剧集摘录基于inventory_hostname
参数执行此操作。
似乎在每个测试或生产主机的剧本中添加一个新的user:/when:
块是错误的方法。我应该使用Ansible role
吗?
感谢
---
- 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"
答案 0 :(得分:1)
创建名为inventories/testing
[web]
alice.mydomain
[testing:children]
web
这将控制您在testing
环境下运行Playbook时所针对的主机。
创建另一个名为group_vars/testing
rvm_user: jenkins
此文件将保留在testing
环境下运行Playbook所需的所有变量。您的production
文件应该具有相同的变量,但值不同。
最后在你的剧本中:
---
- hosts: all
become: true
...
tasks:
- name: add user to rvm group
user:
name: "{{ rvm_user }}"
shell: "/bin/bash"
groups: rvm
append: yes
现在,当您想要运行您的剧本时,您可以这样执行:
ansible-playbook -i inventories/testing site.yml
Ansible将做正确的事情,并在group_vars中查找testing
文件并从那里读取变量。它将忽略未在您的环境中命名的文件或文件夹中的变量,但名为all
的文件除外,该文件旨在用于整个剧本中的公共变量。