Skip to content

fix: msk_cluster cannot concurrently support multiple client auth strategies #1920

Open
@bpleines

Description

@bpleines

Summary

When using the msk_cluster module, I noticed that even when I specify multiple authentication strategies, only unauthenticated is picked up.

- name: Provision msk cluster
  msk_cluster:
    name: bpleines_msk_cluster
    state: present
    version: 2.4.1.1
    nodes: 3
    authentication:
      sasl_iam: true
      sasl_scram: true
      unauthenticated: true
...

Upon further inspection of the source code, I noticed that it is due to this code section. Current logic specifies that if unauthenticated set to true, the entire parent c_params["ClientAuthentication"] dictionary gets overwritten.

By altering the relevant code section to the following, I was able to test that the module brought up an msk cluster with all 3 authentication methods as desired:

        if module.params["authentication"].get("unauthenticated"):
            c_params["ClientAuthentication"]["Unauthenticated"] = {"Enabled": True}

I'd be happy to open a PR if allowed 😄

Issue Type

Bug Report

Component Name

msk_cluster

Ansible Version

$ ansible --version

ansible [core 2.15.2]
config file = /Users/brandenpleines/github/verus-ansible/ansible.cfg
configured module search path = ['/Users/brandenpleines/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /opt/homebrew/Cellar/ansible/8.2.0_2/libexec/lib/python3.11/site-packages/ansible
ansible collection location = /Users/brandenpleines/.ansible/collections:/usr/share/ansible/collections
executable location = /opt/homebrew/bin/ansible
python version = 3.11.4 (main, Jul 25 2023, 17:36:13) [Clang 14.0.3 (clang-1403.0.22.14.1)] (/opt/homebrew/Cellar/ansible/8.2.0_2/libexec/bin/python)
jinja version = 3.1.2
libyaml = True

Collection Versions

$ ansible-galaxy collection list

/opt/homebrew/Cellar/ansible/8.2.0_2/libexec/lib/python3.11/site-packages/ansible_collections

Collection Version


amazon.aws 6.2.0
ansible.netcommon 5.1.2
ansible.posix 1.5.4
ansible.utils 2.10.3
ansible.windows 1.14.0
arista.eos 6.0.1
awx.awx 22.5.0
azure.azcollection 1.16.0
check_point.mgmt 5.1.1
chocolatey.chocolatey 1.5.1
cisco.aci 2.6.0
cisco.asa 4.0.1
cisco.dnac 6.7.3
cisco.intersight 1.0.27
cisco.ios 4.6.1
cisco.iosxr 5.0.3
cisco.ise 2.5.12
cisco.meraki 2.15.3
cisco.mso 2.4.0
cisco.nso 1.0.3
cisco.nxos 4.4.0
cisco.ucs 1.9.0
cloud.common 2.1.3
cloudscale_ch.cloud 2.3.1
community.aws 6.1.0
community.azure 2.0.0
community.ciscosmb 1.0.6
community.crypto 2.14.1
community.digitalocean 1.23.0
community.dns 2.5.7
community.docker 3.4.8
community.fortios 1.0.0
community.general 7.2.0
community.google 1.0.0
community.grafana 1.5.4
community.hashi_vault 5.0.0
community.hrobot 1.8.1
community.libvirt 1.2.0
community.mongodb 1.6.1
community.mysql 3.7.2
community.network 5.0.0
community.okd 2.3.0
community.postgresql 2.4.2
community.proxysql 1.5.1
community.rabbitmq 1.2.3
community.routeros 2.8.3
community.sap 1.0.0
community.sap_libs 1.4.1
community.skydive 1.0.0
community.sops 1.6.4
community.vmware 3.8.0
community.windows 1.13.0
community.zabbix 2.1.0
containers.podman 1.10.2
cyberark.conjur 1.2.0
cyberark.pas 1.0.19
dellemc.enterprise_sonic 2.2.0
dellemc.openmanage 7.6.1
dellemc.powerflex 1.7.0
dellemc.unity 1.7.0
f5networks.f5_modules 1.25.0
fortinet.fortimanager 2.2.0
fortinet.fortios 2.3.0
frr.frr 2.0.2
gluster.gluster 1.0.2
google.cloud 1.2.0
grafana.grafana 2.1.4
hetzner.hcloud 1.16.0
hpe.nimble 1.1.4
ibm.qradar 2.1.0
ibm.spectrum_virtualize 1.12.0
infinidat.infinibox 1.3.12
infoblox.nios_modules 1.5.0
inspur.ispim 1.3.0
inspur.sm 2.3.0
junipernetworks.junos 5.2.0
kubernetes.core 2.4.0
lowlydba.sqlserver 2.0.0
microsoft.ad 1.2.0
netapp.aws 21.7.0
netapp.azure 21.10.0
netapp.cloudmanager 21.22.0
netapp.elementsw 21.7.0
netapp.ontap 22.7.0
netapp.storagegrid 21.11.1
netapp.um_info 21.8.0
netapp_eseries.santricity 1.4.0
netbox.netbox 3.13.0
ngine_io.cloudstack 2.3.0
ngine_io.exoscale 1.0.0
ngine_io.vultr 1.1.3
openstack.cloud 2.1.0
openvswitch.openvswitch 2.1.1
ovirt.ovirt 3.1.2
purestorage.flasharray 1.20.0
purestorage.flashblade 1.12.1
purestorage.fusion 1.5.0
sensu.sensu_go 1.13.2
servicenow.servicenow 1.0.6
splunk.es 2.1.0
t_systems_mms.icinga_director 1.33.1
theforeman.foreman 3.12.0
vmware.vmware_rest 2.3.1
vultr.cloud 1.8.0
vyos.vyos 4.1.0

AWS SDK versions

$ pip show boto boto3 botocore

N/A

Configuration

$ ansible-config dump --only-changed

N/A

OS / Environment

Ran on Mac OSX but shouldn't matter

Steps to Reproduce

- name: Provision msk cluster
  msk_cluster:
    name: bpleines_msk_cluster
    state: present
    version: 2.4.1.1
    nodes: 3
    authentication:
      sasl_iam: true
      sasl_scram: true
      unauthenticated: true
...

Expected Results

An msk cluster is provisioned with all 3 authentication methods enabled

Actual Results

An MSK cluster with only unauthenticated is enabled

Code of Conduct

  • I agree to follow the Ansible Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions