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