在我的
top.sls
文件中,我有: > 然后在
components.sls
中,我有:base:
'*':
- components
检查支柱内容时,看到: br />
但是当我尝试查看状态集时,我会看到:
{% if 'components' in pillar.items() %}
include:
{% for component in pillar.get('components',[]) %}
- {{ component }}
{% endfor %}
{% endif %}
{% if 'components' in pillar.items() %}
components:
require:
{% for component in pillar.get('components',[]) %}
- {{ component }}
{% endfor %}
{% endif %}
...就是这样。
在这里,我的最终目标是将奴才视为敌对对象,因此我试图从角色中提取角色细节,而不是在
file_root
的top.sls
中分配角色。据我了解,每个小兵都可以完全访问file_root的内容,我不希望敌对的小兵知道任何无关节点的特定防火墙或服务。编辑:
我发现我的支柱结构不支持支柱合并,因为它使用列表,所以我切换到使用无值字典的支柱结构:
$ salt my-minion-id pillar.items
my-minion-id:
----------
components:
- a-dependency-name
#1 楼
这个模板化的SLS文件出色地工作:{% if 'components' in salt.pillar.items() %}
include:
{% for component in salt.pillar.get('components').keys() %}
- {{ component }}
{% endfor %}
{% endif %}
但是,它需要更改我的支柱键结构。在原始问题中,您看到的结构为:
my-minion-id:
----------
components:
- a-dependency-name
相反,它需要是:
my-minion-id:
----------
components:
----------
a-dependency-name:
None
/>请注意,
a-dependency-name
现在是字典,并且具有单个键/值None
。因此,支柱SLS文件需要从components:
- a-dependency-name
更改为
components:
a-dependency-name: ~
不使用无值字典(从而摆脱模板中的
.keys()
),而是使用列表,如果这样做,则无法合并来自多个不同支柱的components
; Salt应用的每个支柱将覆盖前一个的components
键,最后一个支柱将获胜。如果您想合并支柱(我们在这里讨论基于角色的分配),则这似乎是必要的构造。 > $ salt my-minion-id state.show_sls components
my-minion-id:
----------
a-dependency-name:
----------
...
Jinja模板中的
salt my-minion-id state.show_sls components
证明不完全等同于pillar.items()
;例如,如果尝试使用salt.pillar.items()
,则可能会看到以下错误:Rendering SLS 'base:components' failed: Jinja variable 'salt.pillar object' has no attribute 'ls'
这是否意味着应该避免Jinja提供的隐式
pillar.ls()
前缀快捷方式,或者改为使用我不能说类似salt.
的结构(感谢@brousch,作为建议)。#2 楼
您也可以这样做:{% if pillar['components'] is defined %}
include:
{% for component in pillar['components'] %}
- {{ component }}
{% endfor %}
{% endif %}
{% if pillar['components'] is defined %}
components:
require:
{% for component in pillar['components'] %}
- {{ component }}
{% endfor %}
{% endif %}
评论
关于盐堆栈的相当高级的问题,是来自Chef用户的真实问题:我已经将盐理解为推送模型,节点(minion)如何注册自己? (这只是出于好奇)将其作为一个单独的问题提出,我将看看是否能在不违背我的NDA的前提下提出满意的答案。
足够公平,但是我上次检查盐堆的方法不符合我的要求(特别是在Windows盒子上),所以我将看看我是否可以使事情变得公正,是否真的有时间。尝试作为评论,以防万一我错过了明显的东西:)
我没有足够的代表可以聊天,所以必须这样做。但简单来说:在节点上运行的盐小仆将使用DNS来查找其盐主服务器所在的位置,并将与该主服务器联系。主人会将小仆的钥匙转储到待处理的队列中,直到有人接受为止。
据我所知,关联奖励适用于聊天,您已经超过了20个,因此它应该适用于DevOps聊天:)感谢小兵可以要求自己注册,我错过了这种方法