У меня есть следующая пьеса:
1 ---
2 - hosts: lxc_hosts
3 name: install software on lxc container
4 tasks:
5 - name: get list of containers on lxc host {{inventory_hostname}}
6 shell: >
7 lxc-ls | more | tr '\n' ',' | sed 's/,$//'
8 register: containers
9 - set_fact:
10 container_list: "{{ containers.stdout.split(',')|select('match', 'server*')|list }}"
11 - debug: msg="{{item}}"
12 with_items:
13 - "{{container_list}}"
14 - name: Run memory command within "running" container
15 lxc_container:
16 name: "{{item}}"
17 with_items:
18 - "{{container_list}}"
19 container_command: |
20 df -h
21 register: memory_check
22 - debug: msg="{{memory_check.stdout}}"
Это возвращает следующие результаты:
PLAY [install software on lxc container]
****************************************
TASK [setup]
*******************************************************************
ok: [10.1.1.1]
TASK [get list of containers on lxc host 10.1.1.1]
*************************
changed: [10.1.1.1]
TASK [set_fact]
****************************************************************
ok: [10.1.1.1]
TASK [debug]
*******************************************************************
ok: [10.1.1.1] => (item=server1-container) => {
"item": "server1-container",
"msg": "server1-container" }
ok: [10.1.1.1] => (item=server2-container) => {
"item": "server2-container",
"msg": "server2-container" }
ok: [10.1.1.1] => (item=server3-container) => {
"item": "server3-container",
"msg": "server3-container" }
TASK [Run memory command within "running" container]
***************************
fatal: [10.1.1.1]: FAILED! => {"failed": true, "msg": "'item' is undefined"}
NO MORE HOSTS LEFT
*************************************************************
to retry, use: --limit @playbooks/inventory_get_containers_on_lxc.retry
PLAY RECAP
*********************************************************************
10.1.1.1 : ok=4 changed=1 unreachable=0 failed=1
mymachine:/etc/ansible#
Я играл между set_fact и "vars", но, похоже, я не могу этого добиться. Как видите, оператор отладки в строке 11 приводит к списку, который вы видите ниже ... который, похоже, работает ... и который, похоже, доказывает, что я правильно установил переменную. Я не знаю, что еще попробовать.
Спасибо.
ИЗМЕНИТЬ 1
Вот как выглядит мой код для этого конкретного раздела:
14 - name: Run memory command within "running" container
15 lxc_container:
16 name: "{{item}}"
17 with_items:
18 # - "{{ containers.stdout.split(',')|select('match', 'server*')|list }}"
19 - "{{container_list}}"
20 container_command: |
21 df -h
22 register: memory_check
23 - debug: msg="{{memory_check.stdout}}"
Когда я запускаю его, я получаю следующее сообщение об ошибке:
ОШИБКА! Синтаксическая ошибка при загрузке YAML.
Ошибка, по-видимому, была в '/etc/ansible/playbooks/lxc_container_test.yml': строка 20, столбец 7, но может быть в другом месте файла в зависимости от точной синтаксической проблемы.
Оскорбительная строка выглядит так:
- "{{container_list}}"
container_command: |
^ here
Строка 20 имеет отступ на 2 пробела по сравнению со строкой with_items в строке 17.