Ansible 连接变量字符串的正确方法
我需要根据其他变量的内容创建新变量。目前我使用的是这样的东西:Ansible 连接变量字符串的正确方法,ansible,ansible-playbook,Ansible,Ansible Playbook,我需要根据其他变量的内容创建新变量。目前我使用的是这样的东西: - command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}" register: newvar - include_vars: concat.yml 问题是: 使用{{var1}}…{{varN}会产生过长的字符串和非常难看的代码 {{newvar.stdout}}的用法稍微好一点,但容易混淆 使用set\u fact模块在运行之间缓存事实。这不适合我 还有其他解决办法吗?好问题。
- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
register: newvar
- include_vars: concat.yml
问题是:
- 使用
会产生过长的字符串和非常难看的代码{{var1}}…{{varN}
的用法稍微好一点,但容易混淆{{newvar.stdout}}
- 使用
模块在运行之间缓存事实。这不适合我set\u fact
还有其他解决办法吗?好问题。但我认为没有一个好的答案符合你的标准。我能想到的最好办法是使用一个额外的vars文件 像这样的任务:
- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
register: newvar
- include_vars: concat.yml
在concat.yml
中,您有自己的定义:
newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}"
因为字符串在Python中是字符列表,所以我们可以像连接列表一样连接字符串(使用+号): 如果要将结果字符串通过管道传输到某个过滤器,请确保将位括在括号中: e、 g.要连接我们的3个变量,并获得sha512哈希:
{{ (var1 + var2 + var3) | hash('sha512') }}
注:这适用于Ansible 2.3。我还没有在早期版本上测试过它。就像在python中加入列表一样简单
ansible -m debug -a msg="{{ '-'.join(('list', 'joined', 'together')) }}" localhost
使用变量的工作方式相同:
ansible -m debug -a msg="{{ '-'.join((var1, var2, var3)) }}" localhost
只是旁白。为什么
ansible-m debug-a msg=“title{{{'-'.join((var1,var2,var3))}”localhost
不起作用?@orodbhen不是100%确定,但感觉像是一些奇怪的arg解析问题-试试:ansible-m debug-a“msg={{{var1}}title{var1}{'-\'.join((var1,var2,var3))}}”localhost-e var1=test-e var2=foo-e var3=bar
有趣的是,这也可以工作:ansible-m debug-a“msg={{{var1}}title{{{{var1}}{{-'.join((var1,var2,var3))}'localhost-e var1=test e var2=foo-e var3=bar