vars中的Ansible深度合并哈希数组

时间:2019-10-08 14:50:37

标签: ansible

想要在某种角色的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 :(得分:0)

  

问题:“只想更改YAML广告资源或group_vars中的某些键值。其他值必须取自具有某些角色的vars / main.yml”。      

1)服务角色(nginx,mysql,pgsql ...)。我以这个角色描述默认设置,...

     

2)然后,我创建一个项目角色,其中可以包含服务角色,并且我将使用服务角色中描述的大多数默认设置。项目角色只能更改一小部分服务设置。

答案:

在“服务”角色中,使用 defaults 特殊变量创建用于以后可能更改的参数。例如

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 }}"
...

在“项目”角色中,具有更高precedence的任何变量都将覆盖角色的默认值。