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