From dbc265ce59d04a5a5321f5a4c27c46bf336692c4 Mon Sep 17 00:00:00 2001 From: Dmitriy Rabotyagov Date: Thu, 4 Jan 2024 13:09:39 +0100 Subject: [PATCH] Modify RGW client format With changes to config_template module that restored usage of {% raw %} tags [1] renderring of mapping keys, if they're defined as variables, was broken. Ansible, by design [2], does not render mapping keys. Moreover, it was not working as intended anyway, since renderring happened in post-copy stage so same records were not merged together, which resulted in #1812245 As such behaviour is expected by Ansible design, instead of adding some workaround in config_template module, I suggest working around issue by defining troublesome mapping with Jinja, that will allow it to render properly. [1] https://review.opendev.org/c/openstack/ansible-config_template/+/881887 [2] https://github.com/ansible/ansible/issues/17324#issuecomment-685102595 Closes-Bug: #2048036 Related-Bug: #1812245 Change-Id: I8a32736239c6326d817c620451799c13d5d8938c (cherry picked from commit 4203aa26c6a0ae71ad9113f2a8dd54efbdd72f63) --- inventory/group_vars/ceph-rgw.yml | 38 ++++++++++--------- ...rrides_dict_key_vars-962b4bebca02c477.yaml | 34 +++++++++++++++++ 2 files changed, 55 insertions(+), 17 deletions(-) create mode 100644 releasenotes/notes/config_overrides_dict_key_vars-962b4bebca02c477.yaml diff --git a/inventory/group_vars/ceph-rgw.yml b/inventory/group_vars/ceph-rgw.yml index b57a65d75b..c4b2845519 100644 --- a/inventory/group_vars/ceph-rgw.yml +++ b/inventory/group_vars/ceph-rgw.yml @@ -1,19 +1,23 @@ --- -ceph_conf_overrides_rgw: - "client.rgw.{{ hostvars[inventory_hostname]['ansible_facts']['hostname'] }}.rgw0": - # OpenStack integration with Keystone - rgw_keystone_url: "{{ keystone_service_adminuri }}" - rgw_keystone_api_version: 3 - rgw_keystone_admin_user: "{{ radosgw_admin_user }}" - rgw_keystone_admin_password: "{{ radosgw_admin_password }}" - rgw_keystone_admin_project: "{{ radosgw_admin_tenant }}" - rgw_keystone_admin_domain: default - rgw_keystone_accepted_roles: 'member, admin, swiftoperator' - rgw_keystone_implicit_tenants: 'true' - rgw_swift_account_in_url: 'true' - rgw_swift_versioning_enabled: 'true' - rgw_enable_apis: swift - # For S3 support, update/add below rows - # rgw_enable_apis: 'swift, s3' - # rgw_s3_auth_use_keystone: 'true' +ceph_conf_overrides_rgw: |- + {{ + { + 'client.rgw.' ~ hostvars[inventory_hostname]['ansible_facts']['hostname'] ~ '.rgw0': { + 'rgw_keystone_url': keystone_service_adminuri, + 'rgw_keystone_api_version': 3, + 'rgw_keystone_admin_user': radosgw_admin_user, + 'rgw_keystone_admin_password': radosgw_admin_password, + 'rgw_keystone_admin_project': radosgw_admin_tenant, + 'rgw_keystone_admin_domain': 'default', + 'rgw_keystone_accepted_roles': 'member, admin, swiftoperator', + 'rgw_keystone_implicit_tenants': 'true', + 'rgw_swift_account_in_url': 'true', + 'rgw_swift_versioning_enabled': 'true', + 'rgw_enable_apis': 'swift' + } + } + }} +# For S3 support, update/add above rows +# 'rgw_enable_apis': 'swift, s3' +# 'rgw_s3_auth_use_keystone': 'true' diff --git a/releasenotes/notes/config_overrides_dict_key_vars-962b4bebca02c477.yaml b/releasenotes/notes/config_overrides_dict_key_vars-962b4bebca02c477.yaml new file mode 100644 index 0000000000..feecc719d7 --- /dev/null +++ b/releasenotes/notes/config_overrides_dict_key_vars-962b4bebca02c477.yaml @@ -0,0 +1,34 @@ +--- + +issues: + - | + With recent changes to config_template module, it is not possible + anymore to have variables as dictionary keys in overrides. Example below + will not be renderred properly: + + .. code-block:: yaml + + config_overrides: + "{{ inventory_hostname }}": + cruel: world + + This limitation boils down to Ansible design and will be true for any other + module as well. + In order to overcome it, you can transform the dictionary to a Jinja2 format: + + .. code-block:: yaml + + config_overrides: |- + {{ + { + inventory_hostname: { + 'cruel': 'world' + } + } + }} + +fixes: + - | + Fixes format of ``ceph_conf_overrides_rgw`` variable by converting override + dictionary to Jinja2 format to workaround Ansible limitation on usage of + variables as keys in dictionary.