Timur
Если сервер создается в рамках уже отработанных процессов, то что мешает сразу при создании туда все нужные креды прокидывать?
Алексей
Можно просто напрямую списком без vars
лучше через переменные, чтобы была возможность преопределить при необходимости.
Александр
В чём может быть проблема? На Ubuntu 16.04 зависает запуск AnsiballZ_command.py ПРосто висит процесс и ничего больше не происходит.
Александр
/bin/sh -c /usr/bin/python /root/.ansible/tmp/ansible-tmp-1547658497.435721-186373201444879/AnsiballZ_command.py Python 2.7.12 (default, Nov 12 2018, 14:36:49) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
Александр
А дебаггер включить?
Ты имеешь в виду -vvv? Включал. Просто процесс висит. Выхлопа нет.
Nikita Dwarf
Если ты знаешь где файл.. можешь в самом скрипте включить дебаггер, а можешь подключиться к процессу,но там слишком низкоуровневое
Nikita Dwarf
этот файл ?
Nikita Dwarf
если так, создай файл и включи дебаг режим для этого файла
Александр
если так, создай файл и включи дебаг режим для этого файла
Нашёл косяк. Оказывается в команде пропустил параметр и он завис на интерактивности
Nikita Dwarf
Как узнал?
Александр
Как узнал?
В процессах посмотрел и запустил команду напрямую в консоли. Консоль вывалила бла-бла. Хотите продолжить? (Y/n)
Nikita Dwarf
Ыы
Александр
А отладчик плохо. Он не отслеживает форкнутые процессы.
Александр
Я весь пакет прошёл. Отладчик просто завис в ожидании на вызове функции main
MRY
Всем привет. Не могу заставить работать даный код: tasks: - name: Look to Dict debug: msg: "{{ hostvars.{{ item }}.ansible_all_ipv4_addresses }}" loop: "{{ query('inventory_hostnames','etcd')}}"
MRY
Ругается что не может вытащить переменную из {{ item }} по отдельности работает нормально.
Александр
Ну так двойное экранирование же получилось
MRY
тоесть если я напишу рядом msg: "{{ item }}" то он дает стринг с именем хоста, или если я напишу msg: "{{ hostvars.hostname.ansible_all_ipv4_addresses }}" то он дает IP
MRY
через ("{{ item }}") ? попробовать ?
Timur
Во-первых, зачем так странно вызывать цикл по хостнеймам?
Александр
hostvars[item]
Timur
with_inventory_hostnsmes отлично работает и удобнее
Timur
Во-вторых:
Timur
hostvars[item]
Timur
В-третьих, факты с хостов точно собраны?
MRY
да
Timur
hostvars[item].ansible_all_ipv4_address
MRY
Код tasks: - name: Look to Dict debug: msg: "{{ hostvars.[host01].ansible_all_ipv4_addresses }}" выдает нужный IP Код tasks: debug: msg: "{{ item }}" loop: "{{ query('inventory_hostnames','etcd')}}" выдает нужный хостнейм логично совместить это простой вставкой {{item}} в msg: "{{ hostvars.[host01].ansible_all_ipv4_addresses }}" вместо имени хоста
Timur
item без скобок двойных нужно вставлять
Timur
Одни скобки в msg уже есть
Timur
Вторых не нужно
MRY
TASK [Look to Dict] ************************************************************************************************ fatal: [gs02anstest01a]: FAILED! => {"msg": "template error while templating string: expected name or number. String: {{ hostvars.[item].ansible_all_ipv4_addresses }}"}
Timur
Чуть попозже подробнее гляну
Timur
Да, точно
Timur
С телефона трудно разглядеть
MRY
Все всем спасибо наконец я разобрался с этим и сделал именно так как хоте и в удобном мне виде: Все работает. https://pastebin.com/veQdreF2
Denis 災 nobody
такс, занятная задача, нужно сначала логиниться на сервер под отдельным пользователем, потом для запуска задач там сделать sudo с паролем. Это rtfm what?
Denis 災 nobody
обычно решалось отдельным юзером с доступом по ключу, потом become: yes, но тут так низя
George
нахрена sudo с паролем?
Denis 災 nobody
для логина есть только 1 юзер, где низя nopasswd по "соображениям безопасности"
Denis 災 nobody
пароль в vault?
Timur
Ну и vault конечно же
Volodymyr
было? https://habr.com/ru/company/redhatrussia/blog/436318/
Timur
А почему не is defined?
Потому что defined и empty - это два разных состояния
Timur
Переменная может быть вполне defined, но с пустым значением
Bogdan (SirEdvin)
Потому что defined и empty - это два разных состояния
Я просто не совсем понимаю, зачем задавать с пустым значением?
Timur
Часто бывает, что такое значение получается в результате каких-то операций
Timur
Например, при поиске, если не найден нужный элемент/строка
ℭ𝔞𝔯𝔯𝔬𝔩
Я просто не совсем понимаю, зачем задавать с пустым значением?
Чтобы переменная была заранее определена, а после заполнена, например списки и словари
Bogdan (SirEdvin)
для обоих случаев у вас есть none или false, разве нет? Зачем пустая строка?
Bogdan (SirEdvin)
Ну, можно использовать в качестве значения по умолчанию false, если ничего не найдено, по идее
Bogdan (SirEdvin)
Или еще каст два раза в бул может помочь
Timur
Ну, можно использовать в качестве значения по умолчанию false, если ничего не найдено, по идее
Что значит "можно"? Модуль возвращает пустую строку, если ничего не найдено. Что вы будете делать?
Bogdan (SirEdvin)
Плохой модуль(
ℭ𝔞𝔯𝔯𝔬𝔩
when: my_var | d(False) ?
ℭ𝔞𝔯𝔯𝔬𝔩
Или when: my_var | bool ?
ℭ𝔞𝔯𝔯𝔬𝔩
Не всегда предсказуемо же
Timur
when: my_var | d(False) ?
Зачем? Пустая строка и так по умолчанию детектится как False
ℭ𝔞𝔯𝔯𝔬𝔩
Как с loop работать, если переменная не определена?
ℭ𝔞𝔯𝔯𝔬𝔩
Втыкать if
ℭ𝔞𝔯𝔯𝔬𝔩
А если определена, но пустая - loop проскочит её
ℭ𝔞𝔯𝔯𝔬𝔩
В общем всё из-за loop
ℭ𝔞𝔯𝔯𝔬𝔩
Timur
Проблема сейчас именно с проверкой непустой строки
Timur
Есть 4 возможных сценария проверки на непустую строку
Timur
when: not my_var когда переменная my_var - пустая строка
Timur
when: not my_var когда переменная my_var - не пустая строка
Timur
when: my_var когда переменная my_var - пустая строка