Как объединить со строкой каждый элемент списка в ansible - PullRequest
0 голосов
/ 08 июня 2019

У меня есть список строковых элементов в доступной переменной. Я смотрю, как добавить к каждому элементу списка с определенной строкой.

Ты знаешь, как я могу это сделать? Я не нашел способ сделать это.

Введите:

[ "a", "b", "c" ]

Выход:

[ "a-Z", "b-Z", "c-Z" ]

Ответы [ 2 ]

2 голосов
/ 09 июня 2019

с простыми фильтрами

$ cat filter_plugins/string_filters.py
def string_prefix(prefix, s):
    return prefix + s
def string_postfix(postfix, s):
    return s + postfix
class FilterModule(object):
    ''' Ansible filters. Python string operations.'''
    def filters(self):
        return {
            'string_prefix' : string_prefix,
            'string_postfix' : string_postfix
        }

задачи ниже

- set_fact:
    output: "{{ input|map('string_prefix', '-Z')|list }}"
- debug:
    var: output

отдает:

"output": [
    "a-Z", 
    "b-Z", 
    "c-Z"
]

Тот же вывод дает цикл ниже

- set_fact:
    output: "{{ output|default([]) + [item + '-Z'] }}"
  loop: "{{ input }}"
- debug:
    var: output
2 голосов
/ 08 июня 2019

Вы можете использовать join для этого. Пожалуйста, смотрите код ниже:

playbook ->

---
- hosts: localhost
  vars:
    input: [ "a", "b", "c" ]
  tasks:
    - name: debug
      set_fact:
        output: "{{ output | default([]) + ['-'.join((item,'Z'))] }}"
      loop: "{{ input | list}}"

    - debug:
        var: output

вывод ->

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

TASK [Gathering Facts] **************************************************************************************************
ok: [localhost]

TASK [debug] ************************************************************************************************************
ok: [localhost] => (item=a)
ok: [localhost] => (item=b)
ok: [localhost] => (item=c)

TASK [debug] ************************************************************************************************************
ok: [localhost] => {
    "output": [
        "a-Z",
        "b-Z",
        "c-Z"
    ]
}

PLAY RECAP **************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0
...