ansible - 在 Ansible Jinja 模板中使用命令
问题描述
我正在尝试创建一个 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 模板是否允许使用系统命令?任何建议或领导都会有所帮助!
解决方案
jinja 模板是否允许使用系统命令?
不,它没有。
不仅没有这样的语法,而且模板将在本地机器上执行,因此hostname
在您的示例中将始终解析为控制机器的名称。
但是完全没有理由这样做,只需按以下方式使用 Ansible:
{% if ansible_hostname[0:2] == "ny" -%}
推荐阅读
- python - 在数据库中存储和搜索 Protobuf 消息
- php - 尝试更新 WooCommerce 订阅产品字符串
- python-3.x - Django:根据另一个表中出现的次数返回所有用户
- javascript - 如何在 GAS 中获取一列二维数组?
- javascript - 如何仅将 JSON 文件中的特定属性解析为数组
- haskell - 将 foldl 表达式转换为 foldr 以获得有限列表
- visual-studio - 如何实现 C++/CLI 启动画面?
- firebase - 如何限制和排序 Firestore 中的文档 ID?
- python - 如何修复 ToDoList 不在 Django 的 main.models 中
- image - 有没有办法同时使用图像和文本数据进行精确图像检测TensorFlow