August 3, 2021

Ansible, магия и смирение

Изучая вчерашний кейс с передачей переменных в Ansible, имею сказать, что вероятно проблема в том, что любая передаваемая через командную строку переменная передается как строка. Используем волшебные много "-vvvvvvvvv" при запуске (то есть дебаг-мод) и видим:

"usersinwork=['user11','user2']"

То есть в принципе мы передавали строку, а дальше должно сработать автоопределение типа. И похоже оно работает далеко от идеала и воспринимает это тоже как строку. Но почему все тот же модуль debug выдает у нас нормальный лист? Открываем документацию самого модуля debug.py:

var: description: - A variable name to debug. - Mutually exclusive with the C(msg) option. - Be aware that this option already runs in Jinja2 context and has an implicit C({{ }}) wrapping, so you should not be using Jinja2 delimiters unless you are looking for double interpolation. type: str

То есть он по определению принимает на вход строку. А дальше уже действует его встроенное определение типов, работающее похоже лучше, чем общее у Ansible. В общем приведенных костыль по подготовке списка из строки ручками через set_fact не такой уж и костыль. Просто заранее готовим дату в нужном нам формате, "пьем чаек и никакого суецыда".

В будущем, когда изучу получше Python, надо будет не забыть залезть залезть в дебаг-режим Python-машины, чтобы в реальном времени посмотреть по переменным, как же он обрабатывает все это.