Alex
- name: Check if PostgreSQL server is available postgresql_ping: db: "{{ jfmc_db_name }}" login_host: "{{ hostvars['app_eplus']['private_ip'] }}" login_user: "{{ jfmc_db_username }}" login_password: "{{ jfmc_db_password }}" register: check_postgresql_server until: check_postgresql_server.is_available retries: 3 delay: 10 а как понять, почему фейлится таск? TASK [itests/jfmc : Check if PostgreSQL server is available] *** fatal: [app_master]: FAILED! => msg: 'The conditional check ''check_postgresql_server.is_available'' failed. The error was: error while evaluating conditional (check_postgresql_server.is_available): ''dict object'' has no attribute ''is_available''' ...ignoring
Alex
я понимаю, что его там нет, но вопрос почему
Alex
точнее я даже догадываюсь почему, но из ошибки это не следует
Alex
is_available это ключ словаря
Alex
ok: [app_master] => changed=false ansible_facts: discovered_interpreter_python: /usr/bin/python attempts: 1 is_available: true server_version: major: 9 minor: 6
Lamobot
debug: var=check_postgresql_server ?
Alex
выше был выхлоп
Alex
debug: var=check_postgresql_server ?
TASK [itests/jfmc : debug] *** ok: [app_master] => check_postgresql_server: failed: true msg: 'The conditional check ''check_postgresql_server.is_available'' failed. The error was: error while evaluating conditional (check_postgresql_server.is_available): ''dict object'' has no attribute ''is_available'''
Alex
по ходу until надо переписать на until: >- check_postgresql_server.is_available is defined and check_postgresql_server.is_available
Alex
тогда появляется осмысленное сообщение об ошибке failed: true msg: Failed to import the required Python library (psycopg2) on itests-fdbe-master's Python /usr/bin/python. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter
Alex
еще вопрос # pip install psycopg2-binary Collecting psycopg2-binary Using cached https://files.pythonhosted.org/packages/97/00/ed4c82364741031d745867f83820d4f373aa891098a5785841850491c9ba/psycopg2-binary-2.8.5.tar.gz Complete output from command python setup.py egg_info: /usr/lib64/python2.6/distutils/dist.py:266: UserWarning: Unknown distribution option: 'project_urls' warnings.warn(msg) /usr/lib64/python2.6/distutils/dist.py:266: UserWarning: Unknown distribution option: 'python_requires' warnings.warn(msg) running egg_info creating pip-egg-info/psycopg2_binary.egg-info writing pip-egg-info/psycopg2_binary.egg-info/PKG-INFO writing top-level names to pip-egg-info/psycopg2_binary.egg-info/top_level.txt writing dependency_links to pip-egg-info/psycopg2_binary.egg-info/dependency_links.txt writing manifest file 'pip-egg-info/psycopg2_binary.egg-info/SOURCES.txt' warning: manifest_maker: standard file '-c' not found Error: pg_config executable not found. pg_config is required to build psycopg2 from source. Please add the directory containing pg_config to the $PATH or specify the full executable path with the option: python setup.py build_ext --pg-config /path/to/pg_config build ... or with the pg_config option in 'setup.cfg'. If you prefer to avoid building psycopg2 from source, please install the PyPI 'psycopg2-binary' package instead. а почему оно пытается компилить модуль, если там ясно сказано If you prefer to avoid building psycopg2 from source, please install the PyPI 'psycopg2-binary' package instead. а я собственно psycopg2-binary и ставлю
Vlad
проще поставить готовый пакет операционной системы а не компилировать
Alex
проще поставить готовый пакет операционной системы а не компилировать
я собственно для этого и ставлю psycopg2-binary, а не psycopg2
Vlad
надо ставить через менеджер пакетов ос а не через pip. бинарные пакеты pip не статически собраны и требуют зависимостей
Alex
надо ставить через менеджер пакетов ос а не через pip. бинарные пакеты pip не статически собраны и требуют зависимостей
странно, что проблема проявляется только на rhel6/centos6. На всех остальных дистрах pip модуль psycopg2-binary ставится и работает без проблем
Vlad
может потому-что под python 2.6 никто уже не собирает бинарные пакеты
Отделение Bereke Bank
странно, что проблема проявляется только на rhel6/centos6. На всех остальных дистрах pip модуль psycopg2-binary ставится и работает без проблем
в репе pgdg от самого постгреса есть psycopg , ставящийся без гемороя в компиляцией и необходимости ставить кучу зависимостей. можешь попробовать его
Alex
в репе pgdg от самого постгреса есть psycopg , ставящийся без гемороя в компиляцией и необходимости ставить кучу зависимостей. можешь попробовать его
да тут скорее вопрос, почему rhel6 так странно себя ведет. yum install python-psycopg2 решает проблему, но вопрос остается открытым
Sergey
да тут скорее вопрос, почему rhel6 так странно себя ведет. yum install python-psycopg2 решает проблему, но вопрос остается открытым
Тут нет вопроса, который требует обсуждения в чате по Ansible. Ты не хочешь использовать бинарные драйверы постгреса.
Alex
Тут нет вопроса, который требует обсуждения в чате по Ansible. Ты не хочешь использовать бинарные драйверы постгреса.
вообще то хочу, но по ходу они не поддерживают centos6/rhel6. Так что приходится выкручиваться
Sergey
вообще то хочу, но по ходу они не поддерживают centos6/rhel6. Так что приходится выкручиваться
https://access.redhat.com/discussions/2399461 Ты точно про энтерпрайз говоришь?
Sergey
В общем, питонячьи пакеты, которые являются обёртками вокруг бинарных сишных либ - зло.
Sergey
Я пробовал потыкаться в код на тему "выбросить psycopg2 и использовать pg8000", но что-то сходу не срослось. Судя по всему, задача ещё ждёт своего героя.
Alex
ELS will be available for Red Hat Enterprise Linux 6 starting with its retirement (November 30, 2020) until June 30, 2024. еще вопросы будут? )))
Alex
Ынтерпрайз он такой - суровый и безпощадный
Sergey
откройте для себя ESL
По корпоративной полиси у меня нельзя настолько древние версии - вне зависимости от из поддерживаемости. "....Ынтерпрайз он такой - суровый и безпощадный...." (С) А вопросов и не было, скорее ответ про существующий Python-only драйвер постгреса, под который придётся свой модуль для Ansible написать :-)
Alex
> По корпоративной полиси у меня нельзя настолько древние версии - вне зависимости от из поддерживаемости. что я могу сказать - везет вам )))
Ilya
Подскажет кто как тестит свои роли. Пишу роль в vs code, как удобней всего проверить работает ли роль? Сейчас, в vs code стоит ansible модуль, через который можно запустить пб через ssh на машине с ssh, но он именно раннит пб, а хочется чтобы запускался с ключом --syntax-check
Гайрат
ага
Aleksey
снова спрошу. вдруг кто новый сможет ответить https://stackoverflow.com/questions/61569004/molecule-dependency-in-private-gitlab
Lev
мы примерно также с gitblit делали
Aleksey
ввязался в sh — где то не прав
Lev
а ssh ключ уже предлагали положить? чем это плохо?
Aleksey
а ssh ключ уже предлагали положить? чем это плохо?
его тоже надо гдето взять. куда то положить
Lev
его тоже надо гдето взять. куда то положить
а что есть во время билда? чего точно не будет?
Aleksey
хм. еще интересное решение предложили https://github.com/ansible/ansible/issues/36395#issuecomment-623452128
Lev
хм. еще интересное решение предложили https://github.com/ansible/ansible/issues/36395#issuecomment-623452128
git submodules еще можно прикрутить.. бонусом запинишь версии ролей. хз правда как ты этим зоопарком управлять будешь
Aleksey
на теги
Ya
парни как сделать list из ansible_host ?
Ya
если делаю join(', ') он разделяет посимвольно :(
Ya
'{{ [ ansible_host ] }}'
наверное я не правильно сформулировал задачу, надо что бы он прошел про всем хостам и сделал из этого лист
Ya
каким всем?
из инвентори
Alex
из инвентори
groups['all'] уже не устраивает?
Ya
Попробуй ansible_play_hosts_all переменную
она возвращает список хостов, а нужен список айпишников :)
Ya
groups['all'] уже не устраивает?
нужен список айпи из группы инвентори
Ya
я чет не могу отдуплить как из строки делать списки
Ya
я может как то неправильно готовлю энсибл, но логика мне подсказывает, что надо прост записать итемы в список
Alex
нужен список айпи из группы инвентори
и? - name: Wait instances to be ready shell: | ssh -i {{ lookup('config', 'DEFAULT_PRIVATE_KEY_FILE') }} \ -o UserKnownHostsFile=/dev/null \ -o StrictHostKeyChecking=no \ ansible@{{ hostvars[item]['ansible_host'] }} hostname loop: "{{ groups['all'] }}" register: ssh_login_status until: ssh_login_status is succeeded retries: 5 delay: 10
Alex
у вас в группе групалл находится список хостнеймов, мне нужны айпи адреса
там ip $ cat inventory/hosts.ini [master] app_master ansible_host=35.205.xxx.xxx ansible_user=ansible private_ip=10.0.7.24 node_name=itests-a162-master [slave] app_slave ansible_host=34.76.xxx.xxx ansible_user=ansible private_ip=10.0.7.26 node_name=itests-a162-slave [eplus] app_eplus ansible_host=34.76.xxx.xxx ansible_user=ansible private_ip=10.0.7.23 node_name=itests-a162-eplus
Alex
допустим, но это у вас в item - строка а нужен список что бы myhosts: "10.0.7.24","10.0.7.26","10.0.7.23" был
- name: test set_fact: host_list: >- {%- for host in groups['all'] -%} {{ hostvars[host]['ansible_host'] }} {%- if not loop.last -%},{%- endif -%} {%- endfor -%} - debug: msg="{{ host_list.split(',') | list }}"
Отделение Bereke Bank
допустим, но это у вас в item - строка а нужен список что бы myhosts: "10.0.7.24","10.0.7.26","10.0.7.23" был
не помню, что у меня там в выхлопе (list или тупо строка). Попробуй и глянь через дебаг Вроде похоже на твой кейс https://github.com/erzh1906/kubernetes-playbook/blob/master/roles/k8s_etcd_crt/tasks/main.yml#L5
Alex
на выходе будет TASK [debug] *** ok: [localhost] => msg: - 35.190.xxx.xxx - 34.76.xxx.xxx - 35.233.xxx.xxx - 34.77.xxx.xxx
Ya
Это работает?
Проверил работает
Ya
вот чисто интересно если просто так оставить без .split(',') | list то магия списка пропадает
Lamobot
вот чисто интересно если просто так оставить без .split(',') | list то магия списка пропадает
Там сперва строка формируется в set_fact, а потом уже превращается в список
Ya
Там сперва строка формируется в set_fact, а потом уже превращается в список
К сожалению она в список переводится только уже при выводе в дебаг
Ya
тоесть само формирование списка происходит каждый раз, неужели нет просто способа делать список из строк ?
Lamobot
тоесть само формирование списка происходит каждый раз, неужели нет просто способа делать список из строк ?
Могу предложить такой способ vars: ip_list: [] - set_fact: ip_list: '{{ ip_list }} + [ "{{ hostvars[item][''ansible_host''] }}" ]' loop: '{{ ansible_play_hosts_all }}'
Ya
Могу предложить такой способ vars: ip_list: [] - set_fact: ip_list: '{{ ip_list }} + [ "{{ hostvars[item][''ansible_host''] }}" ]' loop: '{{ ansible_play_hosts_all }}'
вот я почти так пробовал и давало отлуп, короче тут ключ получается в инициализации пустого листа ?
Lamobot
вот я почти так пробовал и давало отлуп, короче тут ключ получается в инициализации пустого листа ?
Тут больше проблем с кавычками при формировании списка, мне способ не нравится, но иногда тоже приходится.
Ya
Чьорт работает )
Lamobot
вы про две пары одинарных кавычек вокруг ansible_host?
Не совсем, там если {{ hostvars[item][''ansible_host''] }} в кавычки не поставить, то не будет работать.
Ya
Тут как в том анекдоте, у программиста всего один вопрос, работает - почему, не работает - почему :)
Lamobot
А двойные одиночные - это просто экранирование кавычек