AlexShmel🐝
ткните плз носом в установку 11 опенждк.
Timur
Installing OpenJDK 11 from web:
- name: Install openjdk java
hosts: all
roles:
- role: lean_delivery.java
java_major_version: 11
java_tarball_install: true
transport: web
transport_web: https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
Timur
/warn
Timur
аnsible-playbook tasks/main.yaml ???
Timur
Серьезно?
/warn
нет, там читай ниже чучуть
/warn
там линтеры все ломают почему-то
Timur
Какие линтеры?
Timur
Что у вас за плейбук вообще?
/warn
У меня есть есть
install-python3
пару дней назад - он был смержован на прод, и прошел все тесты ( используем ansible-linter так как проект опен сорс, что б не накидали нам говна)
Теперь у меня есть плейбук, в котором я использую этот install-python3
И ansible-linter выдает ошибку на этом плейбуке.
Timur
/warn
Да, этот
Timur
Какую ошибку?
/warn
Выдает ошибку:
ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.
The error appears to have been in '/home/zuul/src/review.opencontrail.org/Juniper/contrail-zuul-jobs/roles/install-python3/tasks/main.yaml': line 2, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
---
- name: os-specific tasks
^ here
Timur
Это не ошибка линта
Timur
Это ошибка основного синтаксиса
/warn
после этой команды:
/bin/bash -c echo '* Ansible Syntax Check'; if test -d playbooks; then find playbooks -type f -regex '.*.ya?ml' -exec ansible-playbook --syntax-check -e@/home/zuul/src/review.opencontrail.org/Juniper/contrail-zuul-jobs/tests/secrets.yaml -i /home/zuul/src/review.opencontrail.org/Juniper/contrail-zuul-jobs/tests/inventory {} + > /dev/null; fi
Timur
Плейбук как у вас выглядит?
/warn
так он у меня стартует, и работает
/warn
вот что интересно
/warn
https://pastebin.com/kPB7zxJX
/warn
Вот так
Timur
/warn
Не я писал, это проверка всех плейбуков на синтаксис, до меня стояло и все работает
/warn
а вот именно на этой одной роли сломалось
Timur
Timur
/warn
А плейбук выглядит вот так:
---
- hosts: builder
roles:
- install-python3
- install-contrail-api-client
- python-black-linter
- contrail-vcenter-fabric-manager-unit-tests
Timur
Так. И? Запуск этой плейбуки в режиме чека что дает?
/warn
ERROR! the role 'install-python3' was not found in /home/oleksandr/PycharmProjects/Juniper/contrail-zuul-jobs/playbooks/contrail-vcenter-fabric-manager/roles:/home/oleksandr/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/oleksandr/PycharmProjects/Juniper/contrail-zuul-jobs/playbooks/contrail-vcenter-fabric-manager
The error appears to be in '/home/oleksandr/PycharmProjects/Juniper/contrail-zuul-jobs/playbooks/contrail-vcenter-fabric-manager/run.yaml': line 4, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
roles:
- install-python3
^ here
Timur
the role 'install-python3' was not found in ...
/warn
Но, это не совсем правильная ошибка.
check пишет что не видит роль
Timur
Ни на какие мысли не наводит?
Timur
Да
/warn
Но плейбук стартует CI
Timur
Потому что плейбука не видит роль
/warn
в которой прописан путь к папке roles
/warn
и другие роли с той же папки ансибл видит
Timur
/warn
ну вот у меня стартуют роли:
- install-python3
- install-contrail-api-client
- python-black-linter
- contrail-vcenter-fabric-manager-unit-tests
/warn
Они все в одной папке
/warn
и не видит только install-python3
/warn
Типа, есть такая архитектура:
playbooks:
- dir1/run.yaml
- dir2/run.yaml
- dir3/run.yaml
roles:
- role1
- role2
- role3
CI стартует эти плейбуки, и у нее в конфиге прописано что роли находится в /path/to/roles
Поэтому --check и выдает ошибку.
Timur
/warn
Хм, он видит все другие роли
/warn
сам голову уже сломал себе
Timur
Значит, они еще где-то есть
Timur
Вы не следуете best practice в плане расположения ролей и плейбук, а потом удивляетесь, что что-то не так работает
/warn
Это best practice by Zuul.
Все плейбуки стартует этот CI.
Тем более, одна и та же роль используется по 30-40 раз в плейбуках, и каждый раз копировать - такая себе идея
/warn
Спасибо за помощь
Timur
Timur
Best practice для Ansible описан вот здесь:
https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html#directory-layout
/warn
Ну, это CI, пайплайны которой пишутся на ansible
/warn
Спасибо ещё раз!
Anonymous
dmitry будет жить. Поприветствуем!
Vladislav 👻
Можно как-то в jinja вывести int в восьмеричном формате?
Anonymous
Kasym Khafizov будет жить. Поприветствуем!
Womchik
when: my_var|default(false)|bool == true правильная проверка или нужно как-то иначе писать?
Vladislav 👻
Корректная, но можно проще
Vladislav 👻
when: my_var | defaults(false)
Vladislav 👻
Вроде тоже самое
Timur
Timur
Какое условие вам нужно?
Womchik
Артём
when: my_var is defined and my_var
Timur
Если просто проверка my_var, которая принимает логическое значение, то
when: my_var|bool
Womchik
просто |bool достаточно?
Timur
А, оно еще и не defined может быть?
Womchik
прекрасно
Womchik
меня больше волнует надо ли == True
Timur
Тогда можно так:
when:
- my_var is defined
- my_var|bool
Timur
== True не нужно
Артём
Timur
Линтер это даже отдельной ошибкой считает
Womchik
спасибо