如何在Ansible变量中使用另一个变量?

时间:2017-09-11 22:33:04

标签: ansible ansible-template

如何使echo语句在这里正确?当我使用Ansible debug模块能够正确获取值,但不能在shell模块中。

cat /data/info.txt
a:8080,b:8081,c:8082
cat /data/num
0
 - hosts: dev
   remote_user: root
   gather_facts: false
   tasks:
     - name: get dir path and port info
       shell: cat /data/info.txt
       register: info

     - name: get the last num
       shell: cat /data/num
       register: num

     - name: test
       shell: echo {{ info.stdout.split(',')[{{ num.stdout }}].split(':')[0] }} >>/tmp/test.txt

1 个答案:

答案 0 :(得分:0)

使用{{打开Jinja2表达式后,应使用裸变量,直到它以}}终止。引用FAQ

  

另一条规则是'胡须不叠加'。我们经常看到这个:

{{ somevar_{{other_var}} }} 
     

上述不起作用

您可能正在寻找的内容(因为您仍未包含预期结果)是:

shell: echo {{ info.stdout.split(',')[ num.stdout|int ].split(':')[0] }} >>/tmp/test.txt

除了不堆叠胡须之外,您需要注意类型并将第二个值(从/data/num检索)转换为整数。