我在saltstack中遇到嵌套模板继承的一些问题。
我希望 create_mon 将字符串'ceph_mon_config'传递给 create ,然后在'ceph_mon_config支柱中提取cpu,mem等的值准备,这是繁重的工作。现在,当渲染器到达时:
completionHandler(sampleJSON(airbnbUS: airbnbUS, airbnbLocal: airbnbLocal))
看起来它正在逐字地解释它:
{% block cpu %}{{ pillar['{% block pillar_id %}{% endblock pillar_id %}']['cpu'] }}{% endblock cpu %}
有什么想法吗?
谢谢!
create_mon.sls
Rendering SLS 'base:/apps/ceph/create-mon' failed: Jinja variable 'salt.pillar object' has no attribute '{% block pillar_id %}{% endblock pillar_id %}'
create.sls
{% extends "states/system/vm/create.sls" %}
{% block pillar_id %}ceph_mon_config{% endblock pillar_id %}
virsh create /kvmfs/vms/{{ pillar['ceph_mon_config']['hostname'] }}/config.xml:
cmd.run:
- requires:
- sls: /states/system/vm/create
prepare.sls
{% extends "states/system/vm/prepare.sls" %}
{% block cpu %}{{ pillar['{% block pillar_id %}{% endblock pillar_id %}']['cpu'] }}{% endblock cpu %}
{% block mem %}{{ pillar['ceph_mon_config']['mem'] }}{% endblock mem %}
{% block network %}{{ pillar['ceph_mon_config']['network'] }}{% endblock network %}
{% block os %}{{ pillar['ceph_mon_config']['os'] }}{% endblock os %}
{% block hostname %}{{ pillar['ceph_mon_config']['hostname'] }}{% endblock hostname %}
{% block disk %}{{ pillar['ceph_mon_config']['disk'] }}{% endblock disk %}
答案 0 :(得分:1)
Jinja不允许嵌套评估,但是当使用' extends'而不仅仅是块时,变量也会从模板传递到模板。
create_mon
{% set pillar_id = 'ceph_mon_config' %}
创建
...
{% extends "states/system/vm/prepare.sls" %}
{% block cpu %}{{ pillar[pillar_id]['cpu'] }}{% endblock cpu %}
...
这可以按预期工作。