Skip to content

Commit a7b76c6

Browse files
authored
Add extra parameters check when comparing a config to a spec (#464)
* added check for unsupported parameters * changed check_extra_params to an instance variable
1 parent 9045e73 commit a7b76c6

File tree

2 files changed

+37
-7
lines changed

2 files changed

+37
-7
lines changed

plugins/module_utils/network/dcnm/dcnm.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,33 @@ def validate_ip_address_format(type, item, invalid_params):
8888
)
8989

9090

91-
def validate_list_of_dicts(param_list, spec, module=None):
91+
def find_extra_params(param_list, spec):
92+
"""
93+
Checks for extra parameters in each dictionary of a list
94+
when compared against a specification dictionary.
95+
96+
Args:
97+
param_list: A list of dictionaries containing parameters.
98+
spec: A dictionary where keys are the valid parameter names.
99+
100+
Returns:
101+
A list of extra parameters found. If a parameter is found in
102+
multiple dictionaries in the list, it will appear multiple
103+
times in the result.
104+
"""
105+
invalid_params = []
106+
spec_keys = set(spec.keys())
107+
108+
for params in param_list:
109+
param_keys = set(params.keys())
110+
extra_keys = param_keys - spec_keys
111+
if extra_keys:
112+
invalid_params.extend(list(extra_keys))
113+
114+
return invalid_params
115+
116+
117+
def validate_list_of_dicts(param_list, spec, module=None, check_extra_params=False):
92118
"""Validate/Normalize playbook params. Will raise when invalid parameters found.
93119
param_list: a playbook parameter list of dicts
94120
spec: an argument spec dict
@@ -99,7 +125,8 @@ def validate_list_of_dicts(param_list, spec, module=None):
99125
v = validation
100126
normalized = []
101127
invalid_params = []
102-
128+
if check_extra_params:
129+
invalid_params = find_extra_params(param_list, spec)
103130
for list_entry in param_list:
104131
valid_params_dict = {}
105132
for param in spec:

plugins/modules/dcnm_network.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,8 @@ def __init__(self, module):
550550
else:
551551
self.paths = self.dcnm_network_paths[self.dcnm_version]
552552

553+
self.check_extra_params = True
554+
553555
self.result = dict(changed=False, diff=[], response=[], warnings=[])
554556

555557
self.failed_to_rollback = False
@@ -2620,10 +2622,10 @@ def validate_input(self):
26202622
if self.config:
26212623
msg = None
26222624
# Validate net params
2623-
valid_net, invalid_params = validate_list_of_dicts(self.config, net_spec)
2625+
valid_net, invalid_params = validate_list_of_dicts(self.config, net_spec, check_extra_params=self.check_extra_params)
26242626
for net in valid_net:
26252627
if net.get("attach"):
2626-
valid_att, invalid_att = validate_list_of_dicts(net["attach"], att_spec)
2628+
valid_att, invalid_att = validate_list_of_dicts(net["attach"], att_spec, check_extra_params=self.check_extra_params)
26272629
net["attach"] = valid_att
26282630
invalid_params.extend(invalid_att)
26292631

@@ -2691,10 +2693,10 @@ def validate_input(self):
26912693
if self.config:
26922694
msg = None
26932695
# Validate net params
2694-
valid_net, invalid_params = validate_list_of_dicts(self.config, net_spec)
2696+
valid_net, invalid_params = validate_list_of_dicts(self.config, net_spec, check_extra_params=self.check_extra_params)
26952697
for net in valid_net:
26962698
if net.get("attach"):
2697-
valid_att, invalid_att = validate_list_of_dicts(net["attach"], att_spec)
2699+
valid_att, invalid_att = validate_list_of_dicts(net["attach"], att_spec, check_extra_params=self.check_extra_params)
26982700
net["attach"] = valid_att
26992701
for attach in net["attach"]:
27002702
attach["deploy"] = net["deploy"]
@@ -2705,7 +2707,8 @@ def validate_input(self):
27052707
msg = "Invalid parameters in playbook: tor_ports configurations are supported only on NDFC"
27062708
self.module.fail_json(msg=msg)
27072709

2708-
valid_tor_att, invalid_tor_att = validate_list_of_dicts(attach["tor_ports"], tor_att_spec)
2710+
valid_tor_att, invalid_tor_att = validate_list_of_dicts(attach["tor_ports"], tor_att_spec,
2711+
check_extra_params=self.check_extra_params)
27092712
attach["tor_ports"] = valid_tor_att
27102713
for tor in attach["tor_ports"]:
27112714
if tor.get("ports"):

0 commit comments

Comments
 (0)