假设minion主机具有名为myconf.yaml
的默认yaml配置。我想要做的是使用支柱中的值编辑那些yaml条目的部分。我甚至无法开始考虑如何在Salt上执行此操作。我能想到的唯一想法是通过cmd.run
在主机上运行自定义python脚本,并通过参数输入它,但这似乎过于复杂。
我想避免file.managed
。我不能使用模板,因为.yaml
文件很大,可以通过外部方式更改。我只想在其中编辑一些参数。我想一个python脚本可以做到这一点,但我认为盐可以做而不写s / w
我找到了salt.states.file.serialize
merge_if_exists
选项,我会尝试并报告。
答案 0 :(得分:1)
您希望使用merge_if_exists
选项进行file.serialize。
# states/my_app.sls
something_conf_file:
file.serialize:
- name: /etc/my_app.yaml
- dataset_pillar: my_app:mergeconf
- formatter: yaml
- merge_if_exists: true
# pillar/my_app.sls
my_app:
mergeconf:
options:
opt3: 100
opt4: 200
在目标上,/ etc / my_app.yaml可能看起来像这样(在应用状态之前):
# /etc/my_app.yaml
creds:
user: a
pass: b
options:
opt1: 1
opt2: 2
opt3: 3
opt4: 4
在应用状态后看起来像这样:
creds:
user: a
pass: b
options:
opt1: 1
opt2: 2
opt3: 100
opt4: 200
据我所知,这使用与支柱合并相同的算法,例如你可以合并或部分覆盖字典,但不能覆盖列表;列表只能全部替换。
答案 1 :(得分:0)
可以使用file.serialize对json和yaml执行此操作。输入可以是内联状态,也可以来自支柱。摘录如下:
状态:
cassandra_yaml:
file:
- serialize
# - dataset:
# concurrent_reads: 8
- dataset_pillar: cassandra_yaml
- name: /etc/cassandra/conf/cassandra.yaml
- formatter: yaml
- merge_if_exists: True
- require:
- pkg: cassandra-pkgs
柱:
cassandra_yaml:
concurrent_reads: "8"