Ansible глубокого слияния хэш-массив в VARS - PullRequest
0 голосов
/ 08 октября 2019

Хотите объявить хеш-массив в vars / main.yml или default / main.yml некоторой роли, например:

mysql:
  instances:
    new:
      port: 3306
      dir: /mydir
      config:
         innodb_log_file_size: '128M'
         tmp_table_size: '128M'
         innodb_buffer_pool_size: '10G'
         ...

И я хочу изменить только некоторые значения ключей в инвентаризации YAML или group_vars. Другие значения должны быть взяты из vars / main.yml некоторой роли:

mysql:
  instances:
    new:
      config:
        innodb_buffer_pool_size: '2G'

Я хочу, чтобы результат использовался в шаблоне jinja2:

mysql:
  instances:
    new:
      port: 3306
      dir: /mydir
      config:
         innodb_log_file_size: '128M'
         tmp_table_size: '128M'
         innodb_buffer_pool_size: '2G'
         ...

1 Ответ

0 голосов
/ 09 октября 2019

Вопрос: "Хотите изменить только некоторые значения ключей в инвентаризации YAML или group_vars. Другие значения должны быть взяты из vars / main.yml некоторой роли" .

1) Сервисная роль (nginx, mysql, pgsql ...). В этой роли я опишу настройки по умолчанию, ...

2) Затем я создаю роль проекта, в которую я могу включить роль службы, и я буду использовать большинство параметров по умолчанию, описанных в роли службы. Только небольшая часть настроек службы может быть изменена в роли проекта.

Ответ:

В ролях «службы» создать в значения по умолчанию специальные переменныедля параметров, которые могут быть изменены позже. Например,

mysql_port: "3306"
mysql_dir: "mydir"
mysql_innodb_log_file_size: "128M"
mysql:
  instances:
    new:
      port: "{{ mysql_port }}"
      dir: "{{ mysql_dir }}"
      config:
         innodb_log_file_size: "{{ mysql_innodb_log_file_size }}"
...

В роли "проект" любая переменная с более высоким приоритетом будет переопределять значения по умолчанию для роли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...