使用支柱和Jinja部署一些文件

时间:2018-10-11 10:19:01

标签: jinja2 salt-stack

我想用Saltstack在我的Nginx代理上部署许多文件。 我的代理将在/etc/nginx/sites-available/[WEBSERVER]中为我拥有的每个Web服务器托管一个配置文件。

因此,在所有带有role:webserver的小爪子的所有支柱文件中,我放置了以下内容:

proxy:
  hostname: NAME OF THE WEBSERVER
  dns_suffixe: TEST1.FR

在我的第二个奴才上,我得到了相同的东西,但值却不同,依此类推。

因此在公式中,我使用该代码来匹配支柱的值:

{% for proxy, args in salt['pillar.get']('proxy').iteritems() %}

/etc/nginx/sites-available/{{hostname}}:
  file.managed:
    - source: salt://proxy-ext/files/default.jinja
    - target: /etc/nginx/sites-available/{{hostname}}
    - template: jinja
    - user: root
    - group: root
    - mode: 640
{% endfor %}

我使用相同的变量default.jinja{{hostname}}管理文件{{dns_suffixe}

但这不起作用。我仍然是Salt的新手,我不确定这是做我想要的最好的方法。 是否可以取回我在Web服务器的支柱文件中编写的所有支柱价值?即使key:value始终是以下值?

proxy:
  hostname: NAME

我正在使用Salt2017。我的top.sls文件定义明确。 欢迎大家回答!我完全被困住了。帮助:3

编辑

为了清楚起见,我将尝试改写不同的措辞。 该操作的目的是使许多网站的上传自动化。 所以我有一个Nginx代理的奴才。 运行代理公式时,我希望Salt分析我的奴才并匹配网络服务器的粒度。 在我所有的Web服务器上,都有一个用于部署应用程序的公式/支柱,在同一支柱上,我具有如上所述的proxy.hostname:valueproxy.cert:value。所有Web服务器支柱的值都不同。

因此,当我运行代理公式时,它与我的奴才匹配,并且我想取回proxy.hostname:value中的每个值,另一个要在我的nginx代理上为所有Web服务器部署良好的配置文件。 / p>

(我的default.jinja是用于上传网站的nginx配置文件的模板)

那么是否有可能在所有这些支柱价值上使用一种jinja循环来获得这些价值?喜欢我上面写的东西吗? 我不太确定我尝试使用的方法。 抱歉造成误解,我希望现在可以更清楚了。

1 个答案:

答案 0 :(得分:0)

您要对file.managed使用context参数,然后可以访问模板中的变量

{% for proxy, args in salt['pillar.get']('proxy').items() %}

/etc/nginx/sites-available/{{hostname}}:
  file.managed:
    - source: salt://proxy-ext/files/default.jinja
    - target: /etc/nginx/sites-available/{{hostname}}
    - template: jinja
    - context:
        hostname: {{ args['hostname'] }}
        dns_suffix: {{ args['dns_suffixe'] }}
    - user: root
    - group: root
    - mode: 640
{% endfor %}

之后,您可以在模板中引用主机名和dns_suffix,就像它们是在本地定义的一样。