Я новичок в доступе и зависаю по следующей проблеме: Я написал задачу, которую следует запускать только тогда, когда первые три буквы имени удаленного хоста равны «abc». Я получил имя хоста, выполнив следующую задачу:
- name: register hostname
slurp:
src: /etc/hostname
register: hostname
Теперь я хочу скопировать файл с удаленного компьютера на локальный:
- name: copy backup
fetch:
src: /xxx/xxx/
dest: /xxx/xxx/xxx/
fail_on_missing: yes
Все, что я обрабатываю с помощью regex_search или разделяю, чтобы сохранить имя хоста в другой переменной, которую я бы сравнил с «abc», не работает. У тебя есть идеи?





Один простой способ - сравнить первые 3 символа из переменной имени хоста.
Вот мой фрагмент
- name: register hostname
set_fact:
hostname: "abc-def-ghi"
- name: copy backup (should skip)
debug:
msg: "it doesn't start with abc"
when: hostname[0:3] == "def"
- name: copy backup (should execute)
debug:
msg: "it starts with abc"
when: hostname[0:3] == "abc"
И результаты
TASK [register hostname] *******************************************************************************
Tuesday 30 March 2021 08:01:39 -0400 (0:00:00.044) 0:00:00.044 *********
ok: [localhost]
TASK [copy backup (should skip)] ***********************************************************************
Tuesday 30 March 2021 08:01:39 -0400 (0:00:00.035) 0:00:00.080 *********
skipping: [localhost]
TASK [copy backup (should execute)] ********************************************************************
Tuesday 30 March 2021 08:01:40 -0400 (0:00:00.099) 0:00:00.180 *********
ok: [localhost] => {
"msg": "it starts with abc"
}
Сложно сказать с этой информацией. Я бы проверил проблему с разрешениями для файла как локального, так и удаленного. Вы также можете использовать Ansible-playbook -v (или -vvvv), чтобы получить более подробное сообщение об ошибке.
Спасибо за ответ! Это работает, как вы сказали :) Но если я попытаюсь построить это в своей задаче копирования, я получаю сообщение об ошибке. Задача: - name: copy backup fetch: src: / etc / backuptest dest: / home / osboxes / testRundeck when: hostname [0: 3] == "3cx" `Я думаю, это из-за модуля выборки, но я не не знаю, где ошибка ... :( Ошибка: * фатальная: [server_debian]: FAILED! => {"changed": false, "module_stderr": "Общее соединение с 192.168.178.102 закрыто. \ r \ n", "module_stdout": "\ r \ nTraceback (последний вызов последним): \ r \ n [...]