连接变量字符串的正确方法

时间:2015-07-02 14:09:31

标签: ansible ansible-playbook

我需要从其他变量的内容创建新变量。目前我正在使用这样的东西:

request.GetResponse()

问题是:

  • 使用- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}" register: newvar 会带来太长的字符串和非常难看的代码。
  • {{ var1 }}...{{ varN }}的用法更好但令人困惑。
  • 在运行之间使用{{ newvar.stdout }}模块缓存事实。这对我来说不合适。

还有其他解决方案吗?

3 个答案:

答案 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