使用salt我想找到属性(key)并将其替换为基于特定节的值。属性(键)在不同节中的文件中多次出现。我想在特定节下找到我的属性并用值替换。
output.kafka:
# Boolean flag to enable or disable the output module.
enabled:
我需要在output.kafka下找到enabled:并将其替换为value。 enabled:属性在我的文件中多次出现。
由于 巴拉。
答案 0 :(得分:1)
Salt有一些命令,如file.line
,file.replace
和file.blockreplace
,可以修改现有文件,但强烈建议您使用file.managed
管理整个文件。这会让你的体验变得不那么脆弱。
以下是基于您的问题的示例:
Pillar top file:
cat /srv/pillar/top.sls
base:
'*':
- common
'minion01':
- minion01kafkasettings
设置支柱数据:
cat /srv/pillar/minion01kafkasettings.sls
kafka_output: True
这是我们的文件模板:
cat /srv/salt/filebeat.tmpl
output.kafka:
# Boolean flag to enable or disable the output module.
enabled: {{ pillar.get('kafka_output', True) }}
这里是filebeat Salt sls文件:
cat /srv/salt/filebeat.sls
the_filebeat_file:
file.managed:
- name: /etc/filebeat/filebeat.yml
- template: jinja
- user: root
- group: root
然后我们可以运行以下内容:
刷新我们的支柱数据
salt 'minion01' saltutil.refresh_pillar
然后应用sls文件:
salt 'minion01' state.sls filebeat
答案 1 :(得分:0)
我有另一个理论使用file.seralize
可能有效,但不是当前状态,也许Dave可以提供帮助。
{% set json_data = salt.cp.get_file_str('/etc/filebeat/filebeat.yml') | load_yaml %}
{% do json_data.update({'enabled': pillar.get('kafka_output', True) }) %}
update_config:
file.serialize:
- name: /etc/filebeat/filebeat.yml
- user: root
- group: root
- mode: 644
- formatter: yaml
- dataset: |
{{ json_data | yaml(False)| indent(8) }}
此状态应加载整个配置文件,然后您可以根据您的支柱设置使用do
语句修改其任何值,在您的情况下可能
{% do json_data.update({'enabled': pillar.get('kafka_output', True) }) %}
配置文件已填充但未显示,因为结果如下:
'enabled: true
status: active
'
注意有引号并且yaml没有正确的意图,还有另一种方法可以使它工作吗?如果我找到任何新结果,我会更新这个答案