Настройка групповых переменных в Ansible, области видимости и наследования

#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. Вы пробовали создавать роли для двух задач. Это гарантирует, что переменные не будут перепутаны