Артём
@tgadiev, а для чего к |bool приводить если «и так работает»? Где может не сработать?
Timur
@tgadiev, а для чего к |bool приводить если «и так работает»? Где может не сработать?
Если в переменную попадет "True" или "False" в формате строки, например
Timur
Например my_var получит значение "False" как строку. А условие when: myvar отработает как True
Womchik
хм. упорно писал True/False, а теперь линтер говорит, что надо true/false :(
Артём
- hosts: localhost vars: t: 'true' f: 'false' tasks: - name: When true debug: msg: '{{ t }}' when: t - name: When false debug: msg: '{{ f }}' when: f TASK [When true] ************************************************************************************************************************************************************* Tuesday 25 June 2019 10:42:50 +0300 (0:00:01.111) 0:00:01.333 ****** ok: [localhost] => { "msg": "true" } TASK [When false] ************************************************************************************************************************************************************ Tuesday 25 June 2019 10:42:51 +0300 (0:00:00.237) 0:00:01.571 ****** skipping: [localhost]
Denis
Задепрекейтили эту штуку недавно
Denis
Насколько я понимаю, сейчас ансибл неявно приводит строки к булевым значениям
Denis
А хотят, чтобы везде было явно, чтобы труднее в ногу себе было выстрелить, наверное
George
эт точно
Denis
мы всё равно найдём способ
Они нас недооценивают!
Артём
- hosts: localhost vars: my_var: - True - true - False - false - yes - no - 'true' - 'false' tasks: - name: Check debug: msg: '{{ item }}' when: '{{ item }}' loop: '{{ my_var }}' ok: [localhost] => (item=True) => { "msg": true } ok: [localhost] => (item=True) => { "msg": true } skipping: [localhost] => (item=False) skipping: [localhost] => (item=False) ok: [localhost] => (item=True) => { "msg": true } skipping: [localhost] => (item=False) ok: [localhost] => (item=true) => { "msg": "true" } skipping: [localhost] => (item=false)
Denis
Видимо сейчас все переменные - строки, с кавычками или без
Timur
Насколько я понимаю, сейчас ансибл неявно приводит строки к булевым значениям
Это всегда было. И не ансибл, а питон. В питоне любая непустая строка по умолчанию True
George
петонопроблемы
Denis
Это всегда было. И не ансибл, а питон. В питоне любая непустая строка по умолчанию True
В ансибле пока что не так, что показывают примеры выше. С этим и борются, видимо. Только не очень понятно, зачем.
Timur
Через {{ }}
Артём
И?
Например my_var получит значение "False" как строку. А условие when: myvar отработает как True На входе строка ‘False’, отрабатывает как false
Артём
И приведение в нём?
George
приведение привиделось мне
Vladislav 👻
Раз народ проснулся, задам еще раз вопрос
Vladislav 👻
Можно как-то в jinja вывести int в восьмеричном формате?
George
почему нет
Vladislav 👻
И второй сверху, как грамотно можно чекнуть, присутствует ли NetworkManager или нет в системе?
George
проверяй )
George
итак
George
по первому вопросу https://stackoverflow.com/questions/12681036/is-there-a-direct-approach-to-format-numbers-in-jinja2 https://community.home-assistant.io/t/changing-a-decimal-value-into-a-hex-value-jinja/11925 int(value,16) <= 16 - это radix, т.е. основание системы счисления
George
второй вопрос - тебя что конкретно интересует?
George
как минимум ты можешь сделать linux-x1:~ # systemctl status NetworkManager ● NetworkManager.service - Network Manager Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/NetworkManager.service.d └─NetworkManager-ovs.conf Active: active (running) since Mon 2019-06-24 09:02:11 MSK; 1 day 1h ago Docs: man:NetworkManager(8) Main PID: 1957 (NetworkManager) Tasks: 4 (limit: 4915) Memory: 21.2M CGroup: /system.slice/NetworkManager.service ├─ 1957 /usr/sbin/NetworkManager --no-daemon └─27376 /sbin/dhclient -d -q -sf /usr/lib/nm-dhcp-helper -pf /var/run/dhclient-wlp0s20f3.pid -lf /var/lib/NetworkManager/dhclient-a5273191-4258-484c-9869-803fdc9deb87-wlp0s20f3.le> Jun 25 10:24:35 linux-x1 NetworkManager[1957]: <info> [1561447475.3101] dhcp4 (wlp0s20f3): nameserver '77.88.8.1' Jun 25 10:24:35 linux-x1 NetworkManager[1957]: <info> [1561447475.3101] dhcp4 (wlp0s20f3): nameserver '77.88.8.8' Jun 25 10:24:35 linux-x1 NetworkManager[1957]: <info> [1561447475.3101] dhcp4 (wlp0s20f3): state changed bound -> bound Jun 25 10:47:59 linux-x1 NetworkManager[1957]: <info> [1561448879.2655] dhcp4 (wlp0s20f3): address 172.22.47.248 Jun 25 10:47:59 linux-x1 NetworkManager[1957]: <info> [1561448879.2665] dhcp4 (wlp0s20f3): plen 22 (255.255.252.0) Jun 25 10:47:59 linux-x1 NetworkManager[1957]: <info> [1561448879.2666] dhcp4 (wlp0s20f3): gateway 172.22.44.1 Jun 25 10:47:59 linux-x1 NetworkManager[1957]: <info> [1561448879.2667] dhcp4 (wlp0s20f3): lease time 3600 Jun 25 10:47:59 linux-x1 NetworkManager[1957]: <info> [1561448879.2668] dhcp4 (wlp0s20f3): nameserver '77.88.8.1' Jun 25 10:47:59 linux-x1 NetworkManager[1957]: <info> [1561448879.2668] dhcp4 (wlp0s20f3): nameserver '77.88.8.8' Jun 25 10:47:59 linux-x1 NetworkManager[1957]: <info> [1561448879.2669] dhcp4 (wlp0s20f3): state changed bound -> bound
George
apt list --installed | grep network WARNING: apt does not have a stable CLI interface. Use with caution in scripts. glib-networking/bionic,now 2.56.0-1 amd64 [installed] glib-networking-common/bionic,bionic,now 2.56.0-1 all [installed] glib-networking-services/bionic,now 2.56.0-1 amd64 [installed] libproxy1-plugin-networkmanager/bionic,now 0.4.15-1 amd64 [installed] network-manager/bionic-updates,bionic-security,now 1.10.6-2ubuntu1.1 amd64 [installed] network-manager-config-connectivity-ubuntu/bionic-updates,bionic-updates,bionic-security,bionic-security,now 1.10.6-2ubuntu1.1 all [installed] network-manager-gnome/bionic-updates,now 1.8.10-2ubuntu2 amd64 [installed] network-manager-pptp/bionic,now 1.2.6-1 amd64 [installed] network-manager-pptp-gnome/bionic,now 1.2.6-1 amd64 [installed] networkd-dispatcher/bionic-updates,bionic-updates,now 1.7-0ubuntu3.3 all [installed]
George
или так
Vladislav 👻
мне надо прописать search domain, если стоит NetworkManager, то лезть в resolv.conf нет смысла, ибо после ребута все равно все откатиться, поэтому хочу как-то чекнуть это
George
или ты прям фактом хочешь забрать?
George
я тебе уже два варианта предложил
George
самый надежный тогда - проверить, что сервис есть (через системктл или аналогичный омдуль ансибла) и проверить, что он не запрещен к запуску
Vladislav 👻
а модуля из коробки нет?
Denis
Все так. Там в примере выше конструкция jinja раскрывает переменную
Убрал фигурные скобки, работает так же. А со скобками еще и [WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: {{ item }}
George
а модуля из коробки нет?
тебе шашечки или ехать?
Артём
Там {{ }}
tasks: - name: Check false debug: msg: False when: 'False' TASK [Check false] *********************************************************************************************************************************************************** Tuesday 25 June 2019 10:59:54 +0300 (0:00:01.248) 0:00:01.532 ****** skipping: [localhost]
Артём
Как убедить его на что-нибудь, содержащее false, сделать true?
Denis
Как убедить его на что-нибудь, содержащее false, сделать true?
Дождаться ансибла 2.12, там уже, видимо будет так
George
@SLASH_CyberPunk https://github.com/openshift/openshift-ansible/blob/release-3.6/roles/openshift_node_dnsmasq/tasks/main.yml#L2
George
вот так вот делают редхатовцы
Vladislav 👻
а вот восьмиричный формат что-то не робит
George
может он просто лидирующие нули не дописывает? Но я как бы этого и не обещал
Vladislav 👻
Vladislav 👻
Vladislav 👻
'{{ "0%0o" | format(t_mode) }}'
Vladislav 👻
Вот так получилось 👍🏻
Denis
Как убедить его на что-нибудь, содержащее false, сделать true?
Еще вот так: - hosts: localhost vars: my_var: Fаlse tasks: - name: Check debug: msg: "{% if my_var %}OK{% else %}NOPE{% endif %}"
Timur
Как убедить его на что-нибудь, содержащее false, сделать true?
- name: Debug my_var debug: msg: '{{ my_var }}' when: not my_var vars: my_var: "False"
Denis
Правда пришлось вставить в False русскую 'а', но это мелочи
Timur
По логике таск должен отработать и вывести False
Ждун
По логике null
Timur
В реальности он скипается
Timur
Т.е. not myvar возвращает False
Denis
Как думаете - что выведет?
Скипнулась, так работает)
Артём
Но и my_var возвращает False...
Timur
Теперь понятно, зачем bool?
Артём
Понятно. Непонятен механизм ошибки.
Timur
Понятно. Непонятен механизм ошибки.
В питоне любая непустая строка по умолчанию - True
Denis
Да, получается в одних местах приведение есть, в других нет, но почему?..
Timur
Если my_var - строка, то not my_var будет False
Timur
Вне зависимости от значения my_var
Артём
Спасибо.
George
странный способ, мне не нравится модуль systemd в данном ключе, т.к. тебе нужно статус узнать, а не сделать так, что NM запущен
George
но это было бы логично по крайней мере
Vladislav 👻
так это узнать статус
Vladislav 👻
у него в дефолте нет state
George
ну, ок
Timur
Если нужен статус сервиса, есть модуль https://docs.ansible.com/ansible/latest/modules/service_facts_module.html#service-facts-module