Skip to content

Commit

Permalink
Issue #297: fixed servicegroup_servicegroupmember binding bug
Browse files Browse the repository at this point in the history
  • Loading branch information
sumanth-lingappa committed Dec 17, 2023
1 parent 5cec19f commit aa29b50
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
24 changes: 24 additions & 0 deletions examples/servicegroup.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
- name: Sample Playbook
hosts: localhost
gather_facts: false
tasks:
- name: Setup servers
delegate_to: localhost
netscaler.adc.server:
state: present
name: foo.example.com
domain: foo.example.com

- name: Setup servicegroups
delegate_to: localhost
netscaler.adc.servicegroup:
state: absent
servicegroupname: test1-1
servicetype: TCP
autoscale: DNS
healthmonitor: "YES"
servicegroup_servicegroupmember_binding:
binding_members:
- servername: foo.example.com
port: 443
servicegroupname: test1-1
21 changes: 21 additions & 0 deletions plugins/module_utils/module_executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,19 @@ def delete_bindings(
)
log(msg)
continue

# FIXME: This is a hack to handle `servicegroup_servicegroupmember_binding` resource
# The `ip` and `servername` are mutually exclusive args in the `servicegroup_servicegroupmember_binding` resource
# Reason:{'errorcode': 1092, 'message': 'Arguments cannot both be specified [serverName, IP]', 'severity': 'ERROR'}"
if binding_name == "servicegroup_servicegroupmember_binding":
try:
if (
deleting_binding["ip"] == "0.0.0.0"
and deleting_binding["servername"]
):
deleting_binding.pop("ip")
except KeyError:
pass
ok, err = unbind_resource(
self.client,
binding_name=binding_name,
Expand Down Expand Up @@ -524,6 +537,14 @@ def sync_single_binding(self, binding_name):
)
log("DEBUG: Existing `%s` bindings: %s" % (binding_name, existing_bindings))

# FIXME: This is a hack to handle `servicegroup_servicegroupmember_binding` resource
# In the NITRO API spec, bind_primary_key of `servicegroup_servicegroupmember_binding` resource's wrongly documented as `ip`.
# `ip` and `servername` are the two possible bind_primary_keys for `servicegroup_servicegroupmember_binding` resource.
if binding_name == "servicegroup_servicegroupmember_binding":
for x in desired_binding_members:
if bindprimary_key == "ip" and ("ip" not in x or x["ip"] == ""):
bindprimary_key = "servername"

desired_binding_members_bindprimary_keys = {
x[bindprimary_key] for x in desired_binding_members
}
Expand Down

0 comments on commit aa29b50

Please sign in to comment.