如何避免在盐州重复自己?

Ale*_*lex 10 configuration-management salt-stack

我们有两个不同的环境,开发和生产,由一个Salt服务器管理.像这样的东西:

base:
  'dev-*':
    - users-dev
  'prod-*':
    - users-prod
Run Code Online (Sandbox Code Playgroud)

user-devusers-prod状态是几乎相同的,就像这样:

{% for user, data in pillar['users-dev'].items() %}
{{ user }}-user:
  user.present:
    < ...something... >
{{ user }}_ssh_auth:
  ssh_auth.present:
    < ...something... >
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

我们不想复制代码,所以我们最初的想法是做这样的事情:

{% users = pillar['users'].items() %}
include:
  - users-common
Run Code Online (Sandbox Code Playgroud)

然后引用usersin users-common,但这不起作用,因为正确的Jinja语法是,set users = pillar['users'].items()并且这不打算跨盐状态包括.

那么,问题是如何正确地做到这一点?

小智 2

所有 jinja 都会在评估任何状态(包括include语句)之前评估。

但是,我认为您可以直接引用 的pillar['users'].items()内部users-common。它不允许您从该州内访问支柱吗?