[openstack-dev] [openstack-ansible] group/host specific config file overrides: how-to?

Markus Zoeller mzoeller at linux.vnet.ibm.com
Mon Aug 21 16:08:43 UTC 2017


On 21.08.2017 16:40, Andy McCrae wrote:
> Hey Markus,
> 
> 
>> I'm wondering which possibilities I have to do group/host specific
>> config file overrides. After reading [1], I'm still a little clueless.
>> To be specific, I have this setup (expressed as Ansible inventory file):
>>
>>     [z_compute_nodes]
>>     compute1
>>     # more nodes
>>     [x_compute_nodes]
>>     compute2
>>     # more nodes
>>     [computes:children]
>>     z_compute_nodes
>>     x_compute_nodes
>>
>> As an example, I want to set Nova's config option
>> `reserved_host_memory_mb` of the `DEFAULT` config file section:
>>
>>     ### nova.conf
>>     [DEFAULT]
>>     reserved_host_memory_mb=$VALUE
>>
>> My goal is this:
>>
>>              | reserved_host_memory_mb
>>     ----------------------------------
>>     compute1 |         256
>>     compute2 |         512
>>
>> I know there are overrides like `nova_nova_conf_overrides`.
>> So I tried to set a default override in `user_variables.yml`:
>>
>>     ### /etc/openstack_deploy/user_variables.yml --------
>>
>>     nova_nova_conf_overrides:
>>       DEFAULT:
>>         reserved_host_memory_mb: 512
>>
>> But I wanted to override this depending on the host in
>> `openstack_user_config.yml`:
>>
>>     ### /etc/openstack_deploy/openstack_user_config.yml --------
>>     # [...]
>>     # nova hypervisors
>>     compute_hosts:
>>       compute1:
>>         ip: 192.168.100.12
>>         host_vars:
>>           nova_nova_conf_overrides:
>>             DEFAULT:
>>               reserved_host_memory_mb: 256
>>       compute2:
>>         ip: 192.168.100.10
>>
> 
> Try change "host_vars" to "container_vars".
> If that doesn't work let me know, I'll spin up a test to recreate the
> actual problem, but at a glance that looks correct otherwise.
> 


Replacing `host_vars` with `container_vars` didn't have an effect:

    ### controller1: /etc/openstack_deploy/openstack_user_config.yml
    # nova hypervisors
    compute_hosts:
      compute1:
        ip: 192.168.100.12
        container_vars:
          nova_nova_conf_overrides:
                DEFAULT:
                    reserved_host_memory_mb: 256
      compute2:
        ip: 192.168.100.10

Both compute nodes still have the same $VALUE, although `compute1`
should have 256:

    ### compute1: /etc/nova/nova.conf
    root at compute1:~# grep reserved_host_memory_mb /etc/nova/nova.conf
    reserved_host_memory_mb = 512


    ### compute2: /etc/nova/nova.conf
    root at compute2:~# grep reserved_host_memory_mb /etc/nova/nova.conf
    reserved_host_memory_mb = 512

I'd like to avoid to introduce some "clever" dict merging algorithm I
won't understand anymore after a few weeks. :/

Any hint is appreciated!

-- 
Regards, Markus Zoeller (markus_z)

>>
>> After testing this locally, it turned out that *both* hosts will
>> have 512 for $VALUE. which was not my intended configuration.
>>
>> Please note that I only used 2 hosts here as an example but I'm looking
>> for a solution which scales with much more hosts. I'm also applying
>> those settings in a templated way like this:
>>
>>     ### /etc/openstack_deploy/openstack_user_config.yml --------
>>     # [...]
>>     # nova hypervisors
>>     compute_hosts:
>>     {% for host in groups['computes'] %}
>>       {{ hostvars[host]['inventory_hostname'] }}:
>>         ip: {{ hostvars[host]['ansible_host'] }}
>>     {% endfor %}
>>
>> The reason is, that I use the same steps for different environments
>> (dev, test, prod) with a different amount of nodes.
>>
>> Any tips how to do this properly?
>>
>>
> Andy
> 
> 
> 
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> 






More information about the OpenStack-dev mailing list