Переменные регистра Ansuble
У меня есть список задач, в котором я регистрирую вывод из задачи оболочки. Команда shell выводит список каталогов, а затем направляет вывод в grep. Задача работает, и я получаю вывод, который хотел. Более ранние в исходных файлах SVN playbook проверяются и переносятся в каталог {{DestRemoteDir}}. Рассматриваемый код строит список из результатов команды. Я использую эти списки, чтобы изложить другие факты позже в сборнике. [ Отображение списка пакетов Debian в указанном порядке c 2-го списка с Ansible] (я знаю модуль поиска ansible, но я нашел "ls -1" гораздо проще использовать.)
Playbook (tasks / main.yml)
## use List -1 to find the file names for the deb files.| grep
## It stays, The tasks work as expected.
- name: Find the needed deb files
shell: "ls -1 {{ DestRemoteDir }} | grep .*.deb" # Local dir
register: Deb_List
ignore_errors: yes
delegate_to: 127.0.0.1 #localhosts
- name: Find the needed IXAD list file
shell: "ls -1 {{ DestRemoteDir }} | grep IA-XD" # Local dir
register: IXAD_List_Source
ignore_errors: yes
delegate_to: 127.0.0.1 #localhosts
- name: Print the Deblist for IX-AD
debug:
msg:
- "Deb file list: {{ Deb_List.stdout_lines }}"
- "IXAD file {{ IXAD_List_Source.stdout_lines }}"
- name: Print if undefined Deb_list
debug:
msg: "Deb_List is not real"
when: Deb_list is undefined
- name: Print if undefined Deb_list.stdout_lines
debug:
msg: "Deb_List.stdout_lines is not real"
when: Deb_list.stdout_lines is undefined
Вывод
changed: [AnsibleTest2 -> 127.0.0.1] => {
"changed": true,
"cmd": "ls -1 /home/ansible/IA-XD | grep .*.deb",
***
"invocation": {
"module_args": {
***
},
"rc": 0,
"stderr": "",
"stderr_lines": [],
"stdout": "iaxd_1.2.7.6-15_all.deb\niaxdautocfg_1.0.0.0_all.deb\nlibjpegdeb7u1_amd64.deb\nopenjdk-6-jre_610-1~deb7u1_amd64.deb\nopenjdk-6-jre-headless_610-1~deb7u1_amd64.deb\nopenjdk-610-1~deb7u1_all.deb",
"stdout_lines": [
"iaxd_1.2.7.6-15_all.deb",
"iaxdautocfg_1.0.0.0_all.deb",
"libjpeg7u1_amd64.deb",
"openjdk-6-jre_610-1~deb7u1_amd64.deb",
"openjdk-6-jre-headless_610-1~deb7u1_amd64.deb",
"openjdk-6-jre-lib_610-1~deb7u1_all.deb"
]
}
changed: [AnsibleTest2 -> 127.0.0.1] => {
"changed": true,
"cmd": "ls -1 /home/ansible/IA-XD | grep IA-XD",
"invocation": {
"module_args": {
"_raw_params": "ls -1 /home/ansible/IA-XD | grep IA-XD",
***
}
},
"rc": 0,
"stderr": "",
"stderr_lines": [],
"stdout": "IA-XD_List",
"stdout_lines": [
"IA-XD_List"
]
}
Отладка
ok: [AnsibleTest2] => {
"msg": [
"Deb file list: [u'iaxd_1.2.7.6-15_all.deb',u'iaxdautocfg_1.0.0.0_all.deb',u'libjpegdeb7u1_amd64.deb',u'openjdk-6-jre_610-1~deb7u1_amd64.deb',u'openjdk-6-jre-headless_610-1~deb7u1_amd64.deb',u'openjdk-610-1~deb7u1_all.deb']",
"IXAD file [u'IA-XD_List']"
]
}
Над обоими " stdout_lines ": [" IA-XD_List "] и" stdout_lines ": [" iaxd_1.2.7.6-15_all.deb ", ...] готовы.
Итак, из задачи отладки я вижу, что переменные там и определены (или я так думал). Но когда я проверяю, нет ли там команды оболочки.
Сообщение об ошибке
Состояние ясно показывает, что Deb_List не определен. почему? Я просто отлаживаю значение этой переменной.
TASK [server_iaxd_install : Print if undefined Deb_list] *********************************************************************
task path: /home/ansible/ansible_server_working/roles/server_iaxd_install/tasks/main.yml:64
Tuesday 25 February 2020 11:50:12 +0100 (0:00:00.222) 0:00:07.890 ******
ok: [AnsibleTest2] => {
"msg": "Deb_List is not real"
}
Read vars_file '/home/ansible/.ssh/SudoPassKey'
Попробуйте проверить ключевые данные, которые я хочу: "Deb_list.stdout_lines", Ansible ошибки, поскольку переменная отсутствует .
TASK [server_iaxd_install : Print if undefined Deb_list.stdout_lines] ********************************************************
task path: /home/ansible/ansible_server_working/roles/server_iaxd_install/tasks/main.yml:69
Tuesday 25 February 2020 11:50:12 +0100 (0:00:00.197) 0:00:08.087 ******
fatal: [AnsibleTest2]: FAILED! => {
"msg": "The conditional check 'Deb_list.stdout_lines is undefined' failed. The error was: error while evaluating conditional (Deb_list.stdout_lines is undefined): 'Deb_list' is undefined\n\nThe error appears to have been in '/home/ansible/ansible_server_working/roles/server_iaxd_install/tasks/main.yml': line 69, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Print if undefined Deb_list.stdout_lines\n ^ here\n"
}
Либо это ошибка "леса для деревьев" (я не вижу очевидного), либо раздражающая причудливость Ansible, которую мне нужно обойти вокруг.