在ansible playbook中Concat多个变量和字符串

时间:2017-07-30 14:26:46

标签: ansible concatenation yaml

我在为目标部分执行[['Emma', 'F', '19414'], ['Olivia', 'F', '19246'], ['Ava', 'F', '16237']] 时尝试多次连接。

现在它看起来像这样:

with_items

我明白了:

- name: create app except+lookup
  copy: content="" dest="{{ dir.comp ~ '/config/con2dd/' ~ item.name ~ 'File.txt' }}" force=no group=devops owner=devops mode: 0755
  with_items:
...

尝试了几种方法但没有一种方法能够起作用。

是否可以使用字符串连接变量?

2 个答案:

答案 0 :(得分:8)

不要将纯YAML和key = value语法混合为参数。并且始终将YAML语法用于复杂参数:

- name: create app except+lookup
  copy:
    content: ""
    dest: "{{ dir.comp }}/config/con2dd/{{ item.name }}File.txt"
    force: no
    group: devops
    owner: devops
    mode: 0755
  with_items:
  ...

答案 1 :(得分:2)

您没有引用与密钥copy关联的值。为此,第一个字符必须是双(或单)引号。反馈中给出的示例正确地执行了此操作,但没有明确说明。标量以非引号开头(从标量中出现的c content开始,将不再具有特殊含义。

由于Ansible使用的解析器中的错误,该标量(:)中的mode: 0755(冒号空间)会导致麻烦,您应该引用整个标量并转义双引号发生在其中:

copy: "content=\"\" dest=\"{{ dir.comp ~ '/config/con2dd/' ~ item.name ~ 'File.txt' }}\" force=no group=devops owner=devops mode: 0755"

或者使用单引号(具有不同的转义规则:

copy: 'content="" dest="{{ dir.comp ~ ''/config/con2dd/'' ~ item.name ~ ''File.txt'' }}" force=no group=devops owner=devops mode: 0755'

您可以在this在线YAML解析器上自行测试标量,它与导致Ansible无法正确解析您的YAML的错误相同。

This解析器,正确处理标量:并且不会产生输入错误(但它有其他问题)。