我知道您可以使用-i
标记在不同的清单文件之间进行更改,该标记可用于在不同的主机之间切换。
在我的情况下,要在部署之间进行更改的主机,因此我将主机作为--extra-vars
并使用delegate_to
部署到该主机(有关详细信息,请参阅下文)。
我希望以类似的方式在包含环境变量的文件之间切换。例如,假设我有以下简化的目录结构:
/etc/ansible/
├── ansible.cfg
├── hosts
└── project/
└── environments/
├── dev/
│ └── vars.yml
└── prd/
└── vars.yml
两个环境中vars.yml
的结构完全相同,只是由于环境之间的差异,变量具有不同的值。
我找到了一些谈论做类似事情的地方:
https://rock-it.pl/managing-multiple-environments-with-ansible-best-practices/
http://rosstuck.com/multistage-environments-with-ansible
http://www.geedew.com/setting-up-ansible-for-multiple-environment-deployments/
在这些指南中,它们对静态声明的主机起作用。帮助我的一件事似乎是名为group_vars
的目录。看起来库存指向具有相同名称的配置,并且假设在播放的hosts:
指令包含库存标题中指定的主机时使用这些变量。
但是,由于我通过CLI标志--extra-vars
动态读取我们反对的服务器,因此我无法采用这种方法,因为我的播放总是会有类似的内容:
...
hosts: localhost
tasks:
...
- name: do something
...
delegate_to: {{ item }}
with_items: {{ given_hosts }}
或者我首先运行一个带有服务器的任务,并将它们添加到这样的新主机:
- name: Extract Hosts
hosts: localhost
tasks:
- name: Adding given hosts to new group...
add_host:
name: "{{ item }}"
groups: some_group
with_items:
- "{{ list_of_hosts | default([]) }}"
然后使用动态创建的组:
- name: Restart Tomcat for Changes to Take Effect
hosts: some_group
tasks:
- name: Restarting Tomcat...
service:
name: tomcat
state: restarted
所以我需要找到一种方法来指定使用哪个vars.yml
。因为我使用Jenkins通过SSH通过CLI启动Ansible playbook,我希望得到如下内容:
ansible-playbook /path/to/some/playbook.yml --include-vars /etc/ansible/project/dev/vars.yml
至少,我如何在剧本中明确包含vars.yml
文件以使用其中定义的变量?
答案 0 :(得分:2)
您可以使用:
extra vars与<%= f.collection_radio_buttons :category, [[1,"Joke "],[2,"Gossip "],[3,"option3 "],[4,"option4 "]], :first, :last %>
:@
或
--extra-vars @/etc/ansible/project/dev/vars.yml
根据您的环境加载不同的变量。