我正在使用ansible来管理生产以及流浪盒的配置.我有默认值的文件:group_vars/all.
---
env: prod
wwwuser: www-data
db:
root_pwd: root_pwd
pdo_driver: pdo_mysql
host: localhost
name: test
user: test
pwd: test
charset: utf8
domain: somedomain
projectdir: /var/www/application
webrootdir: "{{ projectdir }}/web"
Run Code Online (Sandbox Code Playgroud)
在host_vars/vagrantbox中我希望有类似的东西:
db:
root_pwd: super_easy_password
Run Code Online (Sandbox Code Playgroud)
但是这个完全超越db dictrionary,而我想覆盖单键.怎么实现呢?
更新1 刚用ansible.cfg检查:
[defaults]
host_key_checking=false
hash_behaviour=merge
Run Code Online (Sandbox Code Playgroud)
groups_vars /所有
db:
root_pwd: some_strong_pwd
pdo_driver: pdo_mysql
host: localhost
name: dbname
user: dbuser
pwd: some password
charset: utf8
Run Code Online (Sandbox Code Playgroud)
host_vars/vagrantbox
db:
root_pwd: root
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
One or more undefined variables: 'dict object' has no attribute 'name'
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
看起来 Ansible 无法从 group_vars 合并嵌套变量。我的结构是这样的
hosts.ini::
[common:children]
frontend
backend
[frontend]
server1
[backend]
server2
Run Code Online (Sandbox Code Playgroud)
在groups-vars目录中我有:
common.yaml:
start_of_nested variables:
var1: value1
var2: value2
Run Code Online (Sandbox Code Playgroud)
frontend.yaml:
start_of_nested variables:
var3: value3
var4: value4
Run Code Online (Sandbox Code Playgroud)
backend.yaml:
start_of_nested variables:
var5: value5
var6: value6
Run Code Online (Sandbox Code Playgroud)
当我检查server1变量时:
ansible server1 -m debug -a "var=hostvars[inventory_hostname]"
Run Code Online (Sandbox Code Playgroud)
我仅从以下位置获取变量frontend.yaml:
"start_of_nested": {
"var3": "value3",
"var4": "value4"
}
Run Code Online (Sandbox Code Playgroud)
但我期待它们会与common.yaml变量合并,我会得到类似的东西
"start_of_nested": {
"var1": "value1",
"var2": "value2",
"var3": "value3",
"var4": "value4"
}
Run Code Online (Sandbox Code Playgroud)
Ansible 有没有办法合并group_vars它所属主机的嵌套变量?