gpt4 book ai didi

python - 安西 bool 。覆盖单个字典键

转载 作者:IT老高 更新时间:2023-10-28 20:21:24 26 4
gpt4 key购买 nike

我正在使用 ansible 来管理生产配置以及 vagrant box。我有默认值的文件: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"

host_vars/vagrantbox 我想要类似的东西:

db:
root_pwd: super_easy_password

但是这个完全覆盖了 db 字典,而我想覆盖单个键。如何实现?

更新 1刚刚检查了 ansible.cfg:

[defaults]
host_key_checking=false
hash_behaviour=merge

groups_vars/all

db:
root_pwd: some_strong_pwd
pdo_driver: pdo_mysql
host: localhost
name: dbname
user: dbuser
pwd: some password
charset: utf8

host_vars/vagrantbox

db:
root_pwd: root

我收到以下错误:

One or more undefined variables: 'dict object' has no attribute 'name'

我做错了什么?

最佳答案

默认情况下,Ansible 在第一级覆盖变量。如果您希望能够合并字典,则必须更改 ansible.cfg 文件并设置:

hash_behaviour=merge

(默认值为 replace)。

请注意,Ansible 团队 does not recommend this .我想这是用户之间真正的划分设置。一种一劳永逸的决定:当您开始使用此功能时,您无法返回,并且您可能无法与 replace 类型的人分享您的剧本。

但是,您仍然可以从现有的剧本中受益(我不认为剧本将 replace 行为用作“功能”)。这就像拥有 AB 血型,成为通用接收器......但由于魔法通常发生在可变分辨率上,而不是在任务或模板中,我认为通常可以在不做任何更改的情况下分享你的角色。

如果您需要从角色参数覆盖单个键,则必须以某种复杂的方式传递参数。

例如,要为特定角色覆盖 php5 字典中的 post_max_sizeupload_max_size 键,您必须这样做方式:

- { role: php5-fpm, php5: { post_max_size: 40M,
upload_max_filesize: 20M }}

话虽如此,我从一开始就使用 merge 行为,对此我很满意。保持变量井井有条非常方便。

关于python - 安西 bool 。覆盖单个字典键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25129728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com