我想用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:value
和proxy.cert:value
。所有Web服务器支柱的值都不同。
因此,当我运行代理公式时,它与我的奴才匹配,并且我想取回proxy.hostname:value
中的每个值,另一个要在我的nginx代理上为所有Web服务器部署良好的配置文件。 / p>
(我的default.jinja是用于上传网站的nginx配置文件的模板)
那么是否有可能在所有这些支柱价值上使用一种jinja循环来获得这些价值?喜欢我上面写的东西吗? 我不太确定我尝试使用的方法。 抱歉造成误解,我希望现在可以更清楚了。
答案 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,就像它们是在本地定义的一样。