【问题标题】:Using commands in Ansible Jinja template在 Ansible Jinja 模板中使用命令
【发布时间】:2018-08-03 04:41:18
【问题描述】:

我正在尝试创建一个 jinja2 模板,该模板将使用条件来检查服务器位置,然后将更改相应地推送到服务器。

在下面的模板文件中,我尝试运行命令并检查它是否符合预期的位置。


config.j2

{% if `hostname -s|cut -c 1-2` == "ny" -%}

options timeout:1 attempts:2

search us.xyz.com 

nameserver 1.1.3.2  
nameserver 1.2.3.4

{% elif `hostname -s|cut -c 1-2` == "au" -%}
options timeout:1 attempts:2
search us.xyz.com 
nameserver 1.1.3.9 

nameserver 1.2.3.8

{% endif %}

它的抛出错误为:

"msg": "AnsibleError: template error while templating string: unexpected char u'`'

jinja 模板是否允许使用系统命令?任何建议或线索都会有所帮助!

【问题讨论】:

  • 请编辑这个以使用 Markdown 格式。

标签: ansible jinja2 ansible-template


【解决方案1】:

jinja 模板是否允许使用系统命令?

不,它没有。

不仅没有这样的语法,而且模板将在本地机器上执行,因此您的示例中的hostname 将始终解析为控制机器的名称。

但是完全没有理由这样做,只需通过以下方式使用 Ansible:

{% if ansible_hostname[0:2] == "ny" -%}

【讨论】:

  • 我可以使用“OR”运算符作为 ...== "ny|chg|cal" -%} 吗?
  • 不是你问的那样。
  • 在模板调理中应该如何使用?或者我必须制作单独的 elif 块?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多