我有一个用例,其中tomcat的安装路径根据主机名和变量的值而改变。不知道如何处理这个问题。例如,我有以下清单:
[服务器]
server1的
服务器2
服务器3
我有一个global_var,它指定了我的安装平台类型,如下所示: 平台:培训
我的平台变量可以设置为培训,生产,开发
根据平台和主机名的值,我的tomcat安装路径会有所不同,所以我不能只有:
host_vars / server1.yml
tomcat_path:/ somepath1
host_vars / server2.yml
tomcat_path:/ somepath2
host_vars / server3.yml
tomcat_path:/ somepath3
我也想做一些类似的事情:
server1.yml
tomcat_path:/ somepath1
何时:“{{platform}} == training”
tomcat_path:/ somepath2
何时:“{{platform}} == production”
tomcat_path:/ somepath3
何时:“{{platform}} == development”
你如何处理这样的案件?
答案 0 :(得分:0)
您可以在字典变量中定义所有可能的platform-tomcat_path选项,然后通过多种方式选择所需的组合。
检查以下示例(使用3种不同的方式引用变量):
- hosts: localhost
gather_facts: false
vars:
tomcat_path: { training: /somepath1, production: /somepath2, development: /somepath3 }
your_selected_mode: development
tasks:
- name: print
debug:
var: tomcat_path.training
- name: print
debug:
var: tomcat_path['production']
- name: print
debug:
var: tomcat_path.{{your_selected_mode}}
您可以使用your_selected_mode
选择所需的模式。
输出:
TASK [print] ********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"tomcat_path.training": "/somepath1"
}
TASK [print] ********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"tomcat_path['production']": "/somepath2"
}
TASK [print] ********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"tomcat_path.development": "/somepath3"
}
如果需要为每个主机进一步自定义它,您可以在tomcat_path
文件中使用此host_vars
变量声明并对其进行更改以满足您的需求。
答案 1 :(得分:0)
您可以使用conditional imports,但它要求您为每个主机和平台提供一个变量文件:
- hosts: localhost
connection: local
vars_files:
- "vars/{{ inventory_hostname }}_{{ platform }}.yml"
tasks:
- name: echo path
debug: msg="Tomcat path is {{ tomcat_path }}"
您需要定义变量文件vars/server1_training.yml, vars/server2_training.yml, vars/server3_training.yml, vars/server1_production.yml, ...
。