基于特定节的salt属性(键/值)替换

时间:2017-05-15 14:28:46

标签: salt salt-stack

使用salt我想找到属性(key)并将其替换为基于特定节的值。属性(键)在不同节中的文件中多次出现。我想在特定节下找到我的属性并用值替换。

实施例

output.kafka:
  # Boolean flag to enable or disable the output module.
  enabled:

我需要在output.kafka下找到enabled:并将其替换为value。 enabled:属性在我的文件中多次出现。

由于 巴拉。

2 个答案:

答案 0 :(得分:1)

Salt有一些命令,如file.linefile.replacefile.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没有正确的意图,还有另一种方法可以使它工作吗?如果我找到任何新结果,我会更新这个答案