#inheritance #ansible #grouping #industrial
#наследование #ansible #группировка #Рабочая обувь
Вопрос:
Будучи относительно новичком в Ansible и его потрясающих возможностях, я столкнулся с проблемой при попытке запустить задание, которое установит часть программного обеспечения на определенную машину.
В рамках этого процесса установки playbook установит порт и последующие смещения портов для каждого отдельного назначения. В этом случае у меня есть tst и servertst. Каждая из которых имеет свой собственный файл yaml в group_vars. Все, что делает этот файл yaml, это устанавливает смещение сервера 100 для tst и 200 для tst сервера.
Я видел много информации о том, как Ansible генерирует переменные group_var и эффективно, как если у вас дважды одно и то же значение переменной, применяется последнее. Интересно отметить, что если я переименую файл tst, оставив только файл servertst yaml, смещение порта будет определено правильно.
servertst.yaml
srv_environment: TST
srv_port_offset: 200
tst.yaml
srv_environment: TST
srv_port_offset: 100
Если я запускаю некоторую отладку переменных в основном задании, которое я ограничил только развертыванием XML-файла (где должен быть установлен номер порта), у меня есть это
ЗАДАЧА [Отобразить все переменные / факты, известные для хоста] ******************************************************************************
"srv_port_offset": 100
ЗАДАЧА [Отобразить все переменные / факты, известные для хоста] ******************************************************************************
"srv_environment": "TST"
ЗАДАЧА [Отобразить все переменные/ facдля хоста] ******************************************************************************
"srv_hostname": "srv.tst.saas.com"
ЗАДАЧА [Отобразить все переменные / факты, известные для хоста]
"srv_home": "/opt/tst/srvdir"
Я ожидал, что параметры servertst выполнят задание с параметром servertst, а не tst.
В любом случае имя хоста является правильным для servertst, как и каталог srv_home. Но чего нет, так это смещения порта, которое использует значение сервера tst для смещения, что, в свою очередь, вызывает проблему привязки.
Я также пытался использовать ansible_group_priority, но это никак не влияет на ситуацию.
Кто-нибудь сталкивался с чем-то подобным раньше? есть ли что-то, что я могу включить, чтобы провести различие между файлами group_vars servertst и tst, чтобы ansible выбирал правильный при выполнении заданий установки.
Комментарии:
1. Если вы хотите запустить определение параметров на основе хоста, вы можете использовать переменные хоста. Также существует модуль с именем include_vars, который будет принимать переменные, определенные в файле с расширением .yml или .json.
2. Привет, спасибо за ответ. В конце я использовал переменную include с предложением where в основном файле yaml только для этого случая. Но, похоже, это решило непосредственную проблему. Спасибо!
3. Вы пробовали создавать роли для двух задач. Это гарантирует, что переменные не будут перепутаны