перебрать with_subelements ansible

Привет, есть следующая переменная:

couchbase:
 - name: incre1
   ipaddress:
    - 10.16.9.177
    - 10.16.9.178
   buckets:
    - AA1
    - aa1

И в моем планшете есть следующее:

 - debug:
    msg: "Running backup as {{CBBACKUPMGR}} backup -r {{ item.1 }} --cluster couchbase://{{ item.0.ipaddress }}"
   register: example
   with_subelements:
     - "{{ couchbase }}"
     -  buckets

И я хочу перебрать ipaddress, а затем с ведрами, поэтому в основном я хочу увидеть:

Running backup as /opt/ouchbase backup -r AA1 --cluster couchbase://10.16.9.177
Running backup as /opt/ouchbase backup -r aa1 --cluster couchbase://10.16.9.177
Running backup as /opt/ouchbase backup -r AA1 --cluster couchbase://10.16.9.178
Running backup as /opt/ouchbase backup -r aa1 --cluster couchbase://10.16.9.178

Однако при запуске playbook я вижу следующее:

Running backup as /opt/ouchbase backup -r AA1 --cluster couchbase://[u'10.16.9.177', u'10.16.9.178']
Running backup as /opt/ouchbase backup -r aa1 --cluster couchbase://[u'10.16.9.177', u'10.16.9.178']

person Ranjit Singh    schedule 04.06.2018    source источник
comment
В чем вопрос? Все работает как надо.   -  person techraf    schedule 05.06.2018


Ответы (1)


with_subelements делает не это. Если вы используете этот цикл «отладки» для печати {{item}}, вы увидите, что на каждой итерации он создает список из:

  1. родительский элемент из списка couchbase, который содержит указанный вами подэлемент, БЕЗ хэша этого подэлемента и
  2. значение подэлемента этой итерации.

вот результат:

TASK [debug] ********************************************************************************************************************************************************************************************************
ok: [localhost] => (item=None) => {
    "msg": [
        {
            "ipaddress": [
                "10.16.9.177", 
                "10.16.9.178"
            ], 
            "name": "incre1"
        }, 
        "AA1"
    ]
}
ok: [localhost] => (item=None) => {
    "msg": [
        {
            "ipaddress": [
                "10.16.9.177", 
                "10.16.9.178"
            ], 
            "name": "incre1"
        }, 
        "aa1"
    ]
}

PLAY RECAP

Как вы пояснили, вы намерены создать все возможные комбинации между ipaddress и buckets.

для этого попробуйте следующее задание:

  - debug:
      msg: "Running backup as {{CBBACKUPMGR}} backup -r {{ item[0] }} --cluster couchbase://{{ item[1] }}"
    register: example
    with_items:
      - "{{ lookup('nested', couchbase[0].ipaddress, couchbase[0].buckets) }}"

Предполагается, что у вас будет переменная списка couchbase только с одним элементом, как в вашем примере.

результат:

TASK [debug] ********************************************************************************************************************************************************************************************************
ok: [localhost] => (item=None) => {
    "msg": "Running backup as /opt/ouchbase backup -r 10.16.9.177 --cluster couchbase://AA1"
}
ok: [localhost] => (item=None) => {
    "msg": "Running backup as /opt/ouchbase backup -r 10.16.9.177 --cluster couchbase://aa1"
}
ok: [localhost] => (item=None) => {
    "msg": "Running backup as /opt/ouchbase backup -r 10.16.9.178 --cluster couchbase://AA1"
}
ok: [localhost] => (item=None) => {
    "msg": "Running backup as /opt/ouchbase backup -r 10.16.9.178 --cluster couchbase://aa1"
}

PLAY RECAP

Надеюсь, поможет.

person ilias-sp    schedule 04.06.2018
comment
похоже, работает так, как вы описали. большое спасибо. Есть ли какой-нибудь вариант, который я могу поставить в цикл. Скажем, если первое выполнение прошло успешно, то следующее пропустить. Например: Запуск резервного копирования как / opt / ouchbase backup -r AA1 --cluster couchbase: //10.16.9.177 Запуск резервного копирования как / opt / ouchbase backup -r aa1 --cluster couchbase: //10.16.9.177 пропустить оставшуюся часть 178. В основном пропускаем остальные элементы родительского цикла, то есть couchbase [0] .ipaddress - person Ranjit Singh; 05.06.2018
comment
Я действительно не уверен, как вы можете это сделать, но должен быть способ. возможно, с оговорками register и until? я знаю, как сделать обратное, выйти из цикла с предложением failed_when, но считаю это успешным запуском, не уверен :( - person ilias-sp; 05.06.2018
comment
Я пробовал следующее: `- name: запустить оболочку резервного копирования базы данных: {{CBBACKUPMGR}} backup -a {{ARCHIVE}} -r {{item.1}} _ {{base_date.stdout}} --cluster couchbase: // {{item.0}} --username {{USERNAME}} --password {{PASSWORD}} register: backup_out with_items: - {{lookup ('nested', couchbase [0] .ipaddress, couchbase [0]) .buckets)}} до: backup_out.rc == 0` Но это продолжается. Петля не рвется - person Ranjit Singh; 05.06.2018
comment
Я вижу, это был длинный снимок :( Я не уверен, как вы можете реализовать разрыв цикла в случае успешного запуска. Может быть, вам повезет найти что-то в поиске Google или SO? - person ilias-sp; 05.06.2018