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

Markus Zoeller mzoeller at linux.vnet.ibm.com
Fri Aug 25 14:32:24 UTC 2017


On 23.08.2017 00:16, Jean-Philippe Evrard wrote:
> Hello,
> 
> The variables documented in each of the roles defaults/ are generally what
> you can consider a user level interface (i.e.: what you can modify), while
> the variables from vars/ are generally what's best to avoid overriding.
> 
> We've been slowly phasing out variables insides templates, to exclusively
> rely on config_template overrides (See also: [1] and [2])
> Please note that if a variable is deprecated, we are issuing a release note.
> 
> [1]: https://github.com/openstack/openstack-ansible-os_nova/blob/
> 4b9100a612ba0e9449d792b2783b9ec50a8fb28e/tasks/nova_post_install.yml#L40
> [2]: https://docs.openstack.org/project-deploy-guide/
> openstack-ansible/ocata/app-advanced-config-override.html
> 
> Best regards,
> JP

That helps resolving my issues. Thanks a lot!

-- 
Regards, Markus Zoeller (markus_z)

> 
> On Tue, Aug 22, 2017 at 1:24 PM, Markus Zoeller <mzoeller at linux.vnet.ibm.com
>> wrote:
> 
>> On 22.08.2017 09:46, Flávio Ramalho wrote:
>>> Hi Markus,
>>>
>>> I think you can achieve what you want by simple overriding the host
>>> variables, for example:
>>>
>>> In /etc/openstack_deploy/openstack_user_config.yml:
>>> compute_hosts:
>>>    compute1:
>>>      ip: 192.168.100.12
>>>      host_vars:
>>>        nova_reserved_host_memory_mb: 256
>>>    compute2:
>>>      ip: 192.168.100.10
>>>
>>> In this case you would have compute1 with reserved_host_memory_mb = 256
>> and
>>> compute2 with the default value set for nova_reserved_host_memory_mb.
>>>
>>>
>>> Flávio
>>
>> Oh, I didn't see those variables, good hint! I'll give it a try, maybe
>> that's good enough for me. Thanks a lot Flavio!
>>
>> http://git.openstack.org/cgit/openstack/openstack-ansible-os
>> _nova/tree/templates/nova.conf.j2
>>
>> Despite that this will probably work, is that an "interface" I'm allowed
>> to touch or is it considered an "internal/private" part of
>> OpenStack-Ansible (and/or its roles)?
>>
>> --
>> Regards, Markus Zoeller (markus_z)
>>
>>
>>> On Mon, Aug 21, 2017 at 6:09 PM Markus Zoeller <
>> mzoeller at linux.vnet.ibm.com>
>>> wrote:
>>>
>>>> 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
>>
> 
> 
> 
> __________________________________________________________________________
> 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