saltstack 如何把變量傳遞到 include 後的 sls 文件

1、這種情況是可以的,只有一個 deploy.sls 時,appname 可以傳遞給 /data/apps/{{ appname }}

// deploy.sls
{% set appname = 'foo-service' %}
app-config-dir:
  file.directory:
    - name: /data/apps/{{ appname }} # --> 得到值爲 foo-service    - mode: 755
    - user: root    
    - group: root

2、下面這種情況就不行,appname 不能傳遞給 include 後的 config.sls 文件,報錯提示 Jinja variable 'appname' is undefined

// deploy.sls
{% set appname = 'foo-service' %}
include:
  - config
  
// config.sls
app-config-dir:
  file.directory:
    - name: /data/apps/{{ appname }}
    - mode: 755
    - user: root    
    - group: root

如果要實現 appname 能傳遞給 include 後的 config.sls 文件,要怎麼做?

3、用 macro 實現

// config.sls
{% macro get_appname(appname) %}
app-config-dir:
  file.directory:
    - name: /data/apps/{{ appname }}
    - mode: 755
    - user: root    
    - group: root
{% endmacro %}

// deploy.sls
{% from 'config.sls' import get_appname with context %}
{{ get_appname('foo-service') }}

4、使用方式

# salt '*' state.apply deploy

本文出自https://www.jianshu.com/p/52f3bcc82f9f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章