ansible - vars中的Ansible深度合并哈希数组
问题描述
想要在某个角色的 vars/main.yml 或 default/main.yml 中声明哈希数组,例如:
mysql:
instances:
new:
port: 3306
dir: /mydir
config:
innodb_log_file_size: '128M'
tmp_table_size: '128M'
innodb_buffer_pool_size: '10G'
...
我只想更改 YAML 清单或 group_vars 中的一些键值。其他值必须取自某个角色的 vars/main.yml:
mysql:
instances:
new:
config:
innodb_buffer_pool_size: '2G'
我想要在 jinja2 模板中使用的结果:
mysql:
instances:
new:
port: 3306
dir: /mydir
config:
innodb_log_file_size: '128M'
tmp_table_size: '128M'
innodb_buffer_pool_size: '2G'
...
解决方案
问题:“只想更改 YAML 清单或 group_vars 中键的某些值。其他值必须取自某个角色的 vars/main.yml”。
1)服务角色(nginx,mysql,pgsql ...)。在这个角色中,我描述了默认设置,...
2) 然后我创建一个项目角色,我可以在其中包含服务角色,我将使用服务角色中描述的大部分默认设置。项目角色中只能更改一小部分服务设置。
回答:
在“服务”角色中,默认为以后可能更改的参数创建特殊变量。例如
mysql_port: "3306"
mysql_dir: "mydir"
mysql_innodb_log_file_size: "128M"
mysql:
instances:
new:
port: "{{ mysql_port }}"
dir: "{{ mysql_dir }}"
config:
innodb_log_file_size: "{{ mysql_innodb_log_file_size }}"
...
在“项目”角色中,任何具有更高优先级的变量都将覆盖角色的默认值。
推荐阅读
- angular7 - 需要对列标题使用国际化
- javascript - React native 能够使用 access_token GET 但无法 POST,它返回“未验证”。
- .net - VBA 中运算符重载的解决方法
- javascript - react js中图像源标签中的未定义错误
- angular - 错误类型错误:注销时“用户为空”
- mdx - 连接字符串无效 - Power Pivot 中的 MDX 查询错误
- javascript - JavaScript - 通过将函数添加到最后加载的外部脚本来覆盖函数是一种不好的做法吗?
- python - 如何移位/偏移 iloc 总和?
- mysql - 需要在 1 个结果中查找在电影上映时年龄最大的演员的年龄
- ios - 尝试在 UserDefaults 中设置数据时应用程序冻结,没有给出错误