如何解决根据列表中是否存在主机ID设置值
我正在尝试创建一种状态,可以检索少量设置,而不必为所有主机创建大量单独的支柱文件。这种方法看起来很乏味且不正确,但我无法用Jinja和YAML来解决问题。
我的工作方式:
/ srv / pillar hosts1.sls,host2.sls,host3.sls,... host1000
cluster:
name: cluster_one
server: 1.1.1.1
setting: foo
/ srv / pillar hosts4.sls,host5.sls,host6.sls,...
cluster:
name: cluster_two
server: 2.2.2.2
setting: bar
是否可以对支柱甚至map.jinja文件执行类似的操作,然后在状态文件中使用Jinja并说“如果我的仆从名称在成员列表中,则设置这些服务器,设置和集群名称”?
clusters:
cluster_one:
server: 1.1.1.1
setting: foo
members:
- host1
- host2
- host3
cluster_two
server: 2.2.2.2
setting: bar
members:
- host4
- host5
- host6
我想要的最终结果就是这样的文件中的那三行。
host1,host2,host3 /tmp/example.txt
name: cluster_one
server: 1.1.1.1
setting: foo
host4,host5,host6 /tmp/example.txt
name: cluster_two
server: 2.2.2.2
setting: bar
这样的想法是,我只想将小兵添加到成员列表中,而不必为每个主机创建大量新的支柱文件。主机只会出现在一个群集中,因此无需担心匹配。
然后,如果我想添加新成员,则可以简单地对此进行编辑(如果需要,请刷新)并应用,而不必为host7,host8和host9创建新的支柱文件。
clusters:
cluster_one:
server: 1.1.1.1
setting: foo
members:
- host1
- host2
- host3
cluster_two
server: 2.2.2.2
setting: bar
members:
- host4
- host5
- host6
cluster_three
server: 3.3.3.3
setting: baz
members:
- host7
- host8
- host9
解决方法
我们可以通过组织支柱数据并使用Jinja模板在奴才上创建结果文件来实现这一目标。
支柱
考虑基本数据pillar/data.sls
:
clusters:
- name: cluster_one
server: 1.1.1.1
setting: foo
members:
- host1
- host2
- host3
- name: cluster_two
server: 2.2.2.2
setting: bar
members:
- host4
- host5
- host6
- name: cluster_three
server: 3.3.3.3
setting: baz
members:
- host7
- host8
- host9
Jinja模板
然后有一个test/example.txt.j2
的模板,如下所示:
{%- for cluster in clusters -%}
{%- if grains['id'] in cluster.members -%}
name: {{ cluster.name }}
server: {{ cluster.server }}
setting: {{ cluster.setting }}
{%- endif -%}
{%- endfor -%}
州SLS
然后我在file.managed
中有一个简单的test.sls
来呈现上述模板:
create_temp_file:
file.managed:
- name: /tmp/example.txt
- source: salt://test/example.txt.j2
- mode: 0644
- template: jinja
- defaults:
clusters: {{ pillar['clusters'] }}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。