我需要从其他变量的内容创建新变量。目前我正在使用这样的东西:
request.GetResponse()
问题是:
- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
register: newvar
会带来太长的字符串和非常难看的代码。{{ var1 }}...{{ varN }}
的用法更好但令人困惑。{{ newvar.stdout }}
模块缓存事实。这对我来说不合适。还有其他解决方案吗?
答案 0 :(得分:24)
好问题。但我认为没有符合您标准的好答案。我能想到的最好的就是使用额外的vars文件。
这样的任务:
- include_vars: concat.yml
在concat.yml
中,您有自己的定义:
newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}"
答案 1 :(得分:19)
由于字符串是Python中的字符列表,我们可以使用与连接列表相同的方式连接字符串(使用+符号):
{{ var1 + '-' + var2 + '-' + var3 }}
如果要将结果字符串传递给某个过滤器,请确保将这些位括在括号中:
e.g。要连接我们的3个变量,并获得sha512哈希:
{{ (var1 + var2 + var3) | hash('sha512') }}
注意:这适用于Ansible 2.3。我没有在早期版本上测试它。
答案 2 :(得分:8)
就像在python本身中加入列表一样简单。
ansible -m debug -a msg="{{ '-'.join(('list', 'joined', 'together')) }}" localhost
localhost | SUCCESS => {
"msg": "list-joined-together" }
使用变量的方式相同:
ansible -m debug -a msg="{{ '-'.join((var1, var2, var3)) }}" localhost