SaltStack:根据盐柱数据

时间:2016-04-12 13:31:01

标签: yaml salt-stack

假设minion主机具有名为myconf.yaml的默认yaml配置。我想要做的是使用支柱中的值编辑那些yaml条目的部分。我甚至无法开始考虑如何在Salt上执行此操作。我能想到的唯一想法是通过cmd.run在主机上运行自定义python脚本,并通过参数输入它,但这似乎过于复杂。

我想避免file.managed。我不能使用模板,因为.yaml文件很大,可以通过外部方式更改。我只想在其中编辑一些参数。我想一个python脚本可以做到这一点,但我认为盐可以做而不写s / w

我找到了salt.states.file.serialize merge_if_exists选项,我会尝试并报告。

2 个答案:

答案 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"