jinja2 宏内的测试变量

问题描述

如果定义了 ansible 变量,这个宏会输出文本。 在输出CustomLogErrorLog 之前,我想输出一些固定文本。如果我输出任何其他变量,我不想要固定文本。输出固定文本应该只输出一次。

当我运行这个时,我得到'nonetype'类型的参数不可迭代。 我不精通 Python,所以我不知道出了什么问题以及如何解决

{%- import '_macros.j2' as macros -%}
{#
 # Router for directives
 #
 # @param section : specification of a section to produce
 # @return string
 #}
{%- set comment = namespace(found=false) -%}
{%- macro directive(line) -%}
{%- set name = (line.keys()|list)[0] -%}
{%- set value = (line.values()|list)[0] -%}
{%-   if name == 'access_file_name' -%}
AccessFileName {{ value }}
{%-   elif name == 'add_default_charset' -%}
AddDefaultCharset {{ macros.stringOrBool(value) }}
{%-   elif name == 'allow_override' -%}
AllowOverride   {{ value if value is string else value|join(' ') }}
{%-   elif name == 'allow_override_list' -%}
AllowOverride   {{ value if value is string else value|join(' ') }}
{%-   elif name == 'custom_log' -%}
{%-     if comment.found == false -%}
<><><><>
Fixed Comment here
<><><><>
{%-       set comment = namespace(found=true) -%}
{%-     endif -%}
CustomLog       {{ value }}
{%-   elif name == 'document_root' -%}
DocumentRoot    {{ value }}
{%-   elif name == 'error_log' -%}
{%-     if comment.found == false -%}
<><><><>
Fixed Comment here
<><><><>
{%-     endif -%}
ErrorLog        {{ value }}
{%-   elif name == 'header' -%}
<IfModule mod_headers.c>
{%      for header in ([value] if value is string else value) %}
        Header {{ header }}
{%      endfor %}
</IfModule>
{%-   elif name == 'keepalive' -%}
KeepAlive       {{ macros.bool(value) }}
{%-   elif name == 'options' -%}
Options {{ value if value is string else value|join(' ') }}
{%-   elif name == 'require' -%}
        Require {{ value }}
{%-   elif name == 'server_admin' -%}
ServerAdmin     {{ value }}
{%-   elif name == 'set_handler' -%}
SetHandler      {{ value }}
{%-   elif name == 'extra_parameters' -%}
{%      for param in value %}
{{ param }}
{%      endfor %}
{%-   else -%}
{{ 'The directive name "'~name~'" is not implemented.' }}
{%-   endif -%}
{%- endmacro -%}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)