【问题标题】:Rendering exception occurred: Jinja variable 'dict object' has no attribute 'data'出现渲染异常:Jinja 变量 'dict object' 没有属性 'data'
【发布时间】:2022-02-06 23:11:46
【问题描述】:

更改 nginx.conf 中的内容时出错

/etc/salt/master.d/reactor.conf

reactor:
  - 'salt/beacon/*/inotify//etc/nginx/nginx.conf':
    - /srv/reactor/web-remediate.sls

/srv/reactor/web-remediate.sls

{% if data['data']['id'] %}
  web_state_run:
    local.state.apply:
      - tgt: {{ data['data']['id'] }}
      - arg:
        - webserver.nginx
{% endif %}

salt-master -l 调试

日志

[DEBUG   ] Initializing new IPCClient for path: /var/run/salt/master/master_event_pull.ipc
[DEBUG   ] Sending event: tag = salt/beacon/minion1.vagrant.net/inotify//etc/nginx/nginx.conf; data = {'path': '/etc/nginx/nginx.conf', '_stamp': '2017-09-23T12:21:17.586647', 'id': 'minion1.vagrant.net', 'change': 'IN_MODIFY'}
[DEBUG   ] Gathering reactors for tag salt/beacon/minion1.vagrant.net/inotify//etc/nginx/nginx.conf
[DEBUG   ] Compiling reactions for tag salt/beacon/minion1.vagrant.net/inotify//etc/nginx/nginx.conf
[DEBUG   ] compile template: /srv/reactor/web-remediate.sls
[DEBUG   ] Jinja search path: ['/var/cache/salt/master/files/base']
[ERROR   ] Rendering exception occurred: Jinja variable 'dict object' has no attribute 'data'
[ERROR   ] Failed to render "/srv/reactor/web-remediate.sls": 
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/salt/utils/reactor.py", line 71, in render_reaction
    data=data)
  File "/usr/lib/python2.7/dist-packages/salt/state.py", line 329, in render_template
    **kwargs)
  File "/usr/lib/python2.7/dist-packages/salt/template.py", line 95, in compile_template
    ret = render(input_data, saltenv, sls, **render_kwargs)

  File "/usr/lib/python2.7/dist-packages/salt/renderers/jinja.py", line 70, in render
    **kws)
  File "/usr/lib/python2.7/dist-packages/salt/utils/templates.py", line 164, in render_tmpl
    output = render_str(tmplstr, context, tmplpath)
  File "/usr/lib/python2.7/dist-packages/salt/utils/templates.py", line 428, in render_jinja_tmpl
    buf=tmplstr)
SaltRenderError: Jinja variable 'dict object' has no attribute 'data'

【问题讨论】:

    标签: nginx jinja2 salt-stack


    【解决方案1】:

    我已将反应器配置文件的条件行从 /srv/reactor/web-remediate 中的 {% if data['data']['id'] %} 修改为 {% if data['id'] %} .sls 现在反应器工作正常。

    只是我假设下面一行的数据字典只包含'id'键,所以我跳过了['data']

     [DEBUG   ] Sending event: tag = salt/beacon/minion1.vagrant.net/inotify//etc/nginx/nginx.conf; data = {'path': '/etc/nginx/nginx.conf', '_stamp': '2017-09-23T12:21:17.586647', 'id': 'minion1.vagrant.net', 'change': 'IN_MODIFY'}
    

    修改:

     From:
    
      {% if data['data']['id'] %}
       web_state_run:
         local.state.apply:
           - tgt: {{ data['data']['id'] }}
           - arg:
             - webserver.nginx
     {% endif %}
    
    
     To:
    
     {% if data['id'] %}
     web_state_run:
       local.state.apply:
         - tgt: {{ data['id'] }}
         - arg:
           - webserver.nginx
     {% endif %}
    

    输出:

     Sending event: tag = salt/beacon/ranjith3.salt.az/inotify//etc/nginx            /nginx.conf; data = {'path': '/etc/nginx/nginx.conf', '_stamp': '2017-09-28T11:03:55.261016', 'id': 'ranjith3.salt.az', 'change': 'IN_IGNORED'}
     [DEBUG   ] Gathering reactors for tag salt/beacon/ranjith3.salt.az/inotify//etc/nginx/nginx.conf
     [DEBUG   ] Compiling reactions for tag salt/beacon/ranjith3.salt.az/inotify//etc/nginx/nginx.conf
     [DEBUG   ] compile template: /srv/reactor/web-remediate.sls
     [DEBUG   ] Jinja search path: ['/var/cache/salt/master/files/base']
     [PROFILE ] Time (in seconds) to render '/srv/reactor/web-remediate.sls' using 'jinja' renderer: 0.00302600860596
     [DEBUG   ] Rendered data from file: /srv/reactor/web-remediate.sls:
    
     web_state_run:
       local.state.apply:
         - tgt: ranjith3.salt.az
         - arg:
           - webserver.nginx
    

    【讨论】:

    • 感谢@rajithKumar,我为更新道歉,但我自己得到了相同的解决方案......非常感谢。
    猜你喜欢
    • 2018-11-18
    • 2021-06-25
    • 2017-05-12
    • 2014-09-25
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多