首页 > 解决方案 > 使用额外变量传递的字符串值中的空格以外的内容被丢弃

问题描述

我正在尝试使用该--extra-vars标志传递一个逗号分隔的字符串。这样做可以按预期工作,我可以,在 jinja 模板中拆分字符串并遍历结果列表:

ansible-playbook test_before_role.yml \
-e DNS_SERVER="153.64.251.202,153.64.251.201" \
--inventory=qa_vm_inventory.yml 

由于这个剧本是从 Jenkins 调用的,我想确定任何无意输入的空格都会得到妥善处理。

ansible-playbook test_before_role.yml \
-e DNS_SERVER="153.64.251.202, 153.64.251.201 " \
--inventory=qa_vm_inventory.yml

下面是我的神社模板。

{% for host in DNS_SERVER.split(',') %}
nameserver {{ host }}
{% endfor %}

ansible 不喜欢将空格作为额外变量的一部分吗?还是我忽略了什么?一些答案将不胜感激!

谢谢。

标签: ansiblejinja2

解决方案


使用'-e'时,你真的需要引用字符串(虽然它可能对一个变量起作用,如果你想传递多个,你肯定需要引用),所以把它改成this and it应该管用:

ansible-playbook test_before_role.yml \
  -e "DNS_SERVER='153.64.251.202, 153.64.251.201 '" \
  --inventory=qa_vm_inventory.yml

然后,您可以修剪拆分元素:

{% for host in ( DNS_SERVER.split(',') | map('trim') | list ) %}
nameserver {{ host }}
{% endfor %}

推荐阅读