在ansible中以相反的顺序映射concat

时间:2018-04-06 17:10:53

标签: ansible

["x1", "x2"]评估为append 是否可以执行["1x", "2x"]之类的操作?我的意思是{{1}}。

2 个答案:

答案 0 :(得分:2)

这是一个稍微丑陋但功能性的解决方案,可以为您提供[“1x”,“2x”]:

- name: Concat 'x' to each list element
  debug:
    msg: "{{ [1,2] | map('regex_replace', '(.*)', '\\1x') | list}}"

在ansible 2.4上测试。请注意,使用map('concat', 'x')的初始示例对我来说不适用于ansible 2.4,我收到了关于“TemplateRuntimeError:没有名为'concat'的过滤器”的投诉。

答案 1 :(得分:0)

你可以试试这个:将list变量加入一个字符串,用regex操作它,然后将它重新拆分回一个列表变量。

剧本:

---
- hosts: localhost
  gather_facts: false
  vars:
    - list_var:
        - "1"
        - "2"
        - "3"
        - "4"

  tasks:
  - set_fact: 
      manipulated_var: "{{ ( list_var | join(' ') | regex_replace('([0-9]{1})', '\\1x')).split(' ') }}"

  - debug:
      var: manipulated_var

输出:

[root@optima-ansible ILIAS]# ansible-playbook concat.yml

PLAY [localhost] ****************************************************************************************************************************************************************************************************

TASK [set_fact] *****************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ********************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "manipulated_var": [
        "1x", 
        "2x", 
        "3x", 
        "4x"
    ]
}

PLAY RECAP **********************************************************************************************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0   

[root@optima-ansible ILIAS]# 

请注意,此正则表达式将尝试匹配单个数字条目,因为您的示例建议[“1”,“2”,“3”]等。