0

我正在使用 SaltStack 来管理一些虚拟机。我正在寻找一种方法来呈现在 top.sls 文件中附加了指定 .sls 的 minion 的 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循环扩展这个想法,以便在创建服务器时动态添加它们。

编辑:

使用与 top.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 }}但没有成功。除非有一种简单的方法可以在该函数中使用支柱变量,否则我正在考虑提出一个功能请求并称之为一天。

4

2 回答 2

1

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

例如,您可以有一个pillar:bind:servers 变量,请参见http://docs.saltstack.com/en/latest/topics/tutorials/states_pt3.htmlhttp://docs.saltstack.com/en/latest/topics /pillar/index.html#master-config-in-pillar

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

于 2014-04-21T15:09:34.857 回答
0

首先想到的是通过为 state.apply 或 state.highstate 设置 test=True 来使用测试状态方法。如果要应用的状态为零,那么您的服务器将完全应用您的 highstate 或特定 sls。

    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
于 2018-09-05T00:11:33.233 回答