如何在SaltStack中呈现具有特定.sl或状态的仆从的ID



我正在使用SaltStack来管理一些虚拟机。我正在寻找一种方法来呈现在top.sls文件中附加了指定.sl的爪牙的ID/主机名,或者在启用jinja模板的文件中呈现特定状态。我想这样做的原因是,我可以很容易地引用客户端配置中的服务器,而不必在任何地方硬编码值。例如

/srv/salt/top.sls:

base:
  'desktoppc01':
    - generic.dns
  'bind9server01':
    - generic.dns
    - bind9

/srv/salt/generic/dns/init.sls:

/etc/resolv.conf:
  file:
    - managed
    - source: salt://generic/dns/files/resolv.conf
    - mode: 644
    - template: jinja

最后,

/srv/salt/generic/dns/files/resolv.conf:

domain {{ pillar['domain_name'] }}
search {{ pillar['domain_name'] }}
nameserver {{ list_minions_with_state['bind9'] }}

我特别想要的是{{ list_minions_with_state['bind9'] }}的等价物(我只是为了演示而编的)。我本以为这是一种非常普遍需要的东西,但在浏览了模块页面后,我还没有发现任何东西。

目前,我让客户端从支柱获取信息,但这必须手动配置,这感觉时间花得不好。

我希望我可以用for循环来扩展这个想法,以便在创建服务器时动态添加服务器。

编辑:

对于具有相同数据的文件&层次结构作为顶层.sls,呈现

base:
{% for server_id in salt['pillar.get']('servers') %}
  '{{ server_id }}':
{% for states in salt['pillar.get']('servers:{{ server_id }}') %}
    - {{ states }}
{% endfor %}
{% endfor %}

给你

base:
  'desktoppc01':
  'bind9server01':

我在{{ server_id }}上尝试了一些变体,但没有成功。除非有一种简单的方法可以在该函数中使用支柱变量,否则我会考虑提出一个功能请求并结束它。

我解决这个问题的方法是使用jinja并有一个包含dns服务器列表的变量。。。由支柱变量填充

例如,您可以有一个pillar:bind:servers变量看见http://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.html和http://docs.saltstack.com/en/latest/topics/pillar/index.html#master-支柱中的配置

它既可以用于设置resolv.conf.的名称服务器,也可以用于向服务器添加-bind9状态。所以最后你只有一个地方可以编辑:在支柱中绑定服务器的爪牙列表

首先想到的是使用测试状态方法,将test=True设置为state.apply或state.highstate。如果没有要应用的状态,则服务器将完全应用高状态或特定的SL。

    salt '*' state.highstate test=True

使用salt-run的survey.diff可能会有所帮助(尽管diff补丁不像检查配置文件那样适合这种情况):

    salt-run survey.diff '*' state.apply my.state test=True

虽然目前根据你的例子不适用于你的问题,但我想到的另一种方法是在你的州内使用盐粒。当您将状态应用于系统时,状态将附加到"状态"粒度。Grains跟踪角色(例如web、数据库等)。在您的情况下,Grains可以跟踪状态,而不是角色的逻辑。然后,您可以使用它们来定位和/或查询您的服务器。

以谷物为目标(只显示仆从id):

    salt -G 'states:bind9' test.ping
    salt -G 'states:generic.dns' test.ping
    salt -G 'states:my_jinja_state' test.ping

查询谷物(每个仆从显示谷物的状态):

    salt '*' grains.get states

谷物的差异(比较每个小黄人状态的谷物):

    salt-run survey.diff '*' grains.get states

相关内容

  • 没有找到相关文章

最新更新