Skip to content

Commit b2db2df

Browse files
Added Arg Specs (data key) for all modules (#68)
1 parent f6361d4 commit b2db2df

37 files changed

+781
-214
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ env:
99
global:
1010
- COLLECTION_NAMESPACE: netbox_community
1111
- COLLECTION_NAME: ansible_modules
12-
- COLLECTION_VERSION: 0.1.4
12+
- COLLECTION_VERSION: 0.1.5
1313

1414
matrix:
1515
include:
@@ -60,4 +60,4 @@ script:
6060
- black . --check
6161
- timeout 300 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' localhost:32768)" != "200" ]]; do echo "waiting for Netbox"; sleep 5; done' || false
6262
- python tests/integration/netbox-deploy.py
63-
- ansible-playbook tests/integration/integration-tests.yml -v
63+
- ansible-playbook tests/integration/integration-tests.yml -vvvv

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
## Netbox Plugins
4949

5050
- netbox lookup plugin
51+
- netbox inventory plugin (0.1.5)
5152

5253
## How to Use
5354

galaxy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace: netbox_community
99
name: ansible_modules
1010

1111
# The version of the collection. Must be compatible with semantic versioning
12-
version: 0.1.4
12+
version: 0.1.5
1313

1414
# The path to the Markdown (.md) readme file. This path is relative to the root of the collection
1515
readme: README.md

plugins/module_utils/netbox_utils.py

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -392,6 +392,13 @@
392392
"vlan_groups",
393393
}
394394

395+
NETBOX_ARG_SPEC = dict(
396+
netbox_url=dict(type="str", required=True),
397+
netbox_token=dict(type="str", required=True, no_log=True),
398+
state=dict(required=False, default="present", choices=["present", "absent"]),
399+
validate_certs=dict(type="bool", default=True),
400+
)
401+
395402

396403
class NetboxModule(object):
397404
"""
@@ -424,7 +431,8 @@ def __init__(self, module, endpoint, nb_client=None):
424431
self.nb = nb_client
425432

426433
# These methods will normalize the regular data
427-
norm_data = self._normalize_data(module.params["data"])
434+
cleaned_data = self._remove_arg_spec_default(module.params["data"])
435+
norm_data = self._normalize_data(cleaned_data)
428436
choices_data = self._change_choices_id(self.endpoint, norm_data)
429437
data = self._find_ids(choices_data)
430438
self.data = self._convert_identical_keys(data)
@@ -463,6 +471,17 @@ def _convert_identical_keys(self, data):
463471

464472
return data
465473

474+
def _remove_arg_spec_default(self, data):
475+
"""Used to remove any data keys that were not provided by user, but has the arg spec
476+
default values
477+
"""
478+
new_dict = dict()
479+
for k, v in data.items():
480+
if v is not None:
481+
new_dict[k] = v
482+
483+
return new_dict
484+
466485
def _get_query_param_id(self, match, data):
467486
"""Used to find IDs of necessary searches when required under _build_query_params
468487
:returns id (int) or data (dict): Either returns the ID or original data passed in
@@ -623,7 +642,11 @@ def _to_slug(self, value):
623642
:returns slug (str): Slugified value
624643
:params value (str): Value that needs to be changed to slug format
625644
"""
626-
if " " in value:
645+
if value is None:
646+
return value
647+
elif isinstance(value, int):
648+
return value
649+
elif " " in value:
627650
slug = value.replace(" ", "-").lower()
628651
else:
629652
slug = value.lower()
@@ -777,7 +800,6 @@ def __init__(
777800
argument_spec,
778801
bypass_checks=False,
779802
no_log=False,
780-
check_invalid_arguments=None,
781803
mutually_exclusive=None,
782804
required_together=None,
783805
required_one_of=None,
@@ -788,22 +810,22 @@ def __init__(
788810
):
789811
super().__init__(
790812
argument_spec,
791-
bypass_checks,
792-
no_log,
793-
check_invalid_arguments,
794-
mutually_exclusive,
795-
required_together,
796-
required_one_of,
797-
add_file_common_args,
798-
supports_check_mode,
799-
required_if,
800-
required_by,
813+
bypass_checks=False,
814+
no_log=False,
815+
mutually_exclusive=None,
816+
required_together=None,
817+
required_one_of=None,
818+
add_file_common_args=False,
819+
supports_check_mode=supports_check_mode,
820+
required_if=required_if,
821+
required_by=None,
801822
)
802823

803824
def _check_required_if(self, spec, param=None):
804825
""" ensure that parameters which conditionally required are present """
805826
if spec is None:
806827
return
828+
807829
if param is None:
808830
param = self.params
809831

plugins/modules/netbox_aggregate.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@
124124

125125
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_utils import (
126126
NetboxAnsibleModule,
127+
NETBOX_ARG_SPEC,
127128
)
128129
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_ipam import (
129130
NetboxIpamModule,
@@ -135,12 +136,22 @@ def main():
135136
"""
136137
Main entry point for module execution
137138
"""
138-
argument_spec = dict(
139-
netbox_url=dict(type="str", required=True),
140-
netbox_token=dict(type="str", required=True, no_log=True),
141-
data=dict(type="dict", required=True),
142-
state=dict(required=False, default="present", choices=["present", "absent"]),
143-
validate_certs=dict(type="bool", default=True),
139+
argument_spec = NETBOX_ARG_SPEC
140+
argument_spec.update(
141+
dict(
142+
data=dict(
143+
type="dict",
144+
required=True,
145+
options=dict(
146+
prefix=dict(required=True, type="raw"),
147+
rir=dict(required=False, type="raw"),
148+
date_added=dict(required=False, type="str"),
149+
description=dict(required=False, type="str"),
150+
tags=dict(required=False, type=list),
151+
custom_fields=dict(required=False, type=dict),
152+
),
153+
),
154+
)
144155
)
145156

146157
required_if = [("state", "present", ["prefix"]), ("state", "absent", ["prefix"])]

plugins/modules/netbox_circuit.py

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@
149149

150150
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_utils import (
151151
NetboxAnsibleModule,
152+
NETBOX_ARG_SPEC,
152153
)
153154
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_circuits import (
154155
NetboxCircuitsModule,
@@ -160,12 +161,39 @@ def main():
160161
"""
161162
Main entry point for module execution
162163
"""
163-
argument_spec = dict(
164-
netbox_url=dict(type="str", required=True),
165-
netbox_token=dict(type="str", required=True, no_log=True),
166-
data=dict(type="dict", required=True),
167-
state=dict(required=False, default="present", choices=["present", "absent"]),
168-
validate_certs=dict(type="bool", default=True),
164+
argument_spec = NETBOX_ARG_SPEC
165+
argument_spec.update(
166+
dict(
167+
data=dict(
168+
type="dict",
169+
required=True,
170+
options=dict(
171+
cid=dict(required=True, type="str"),
172+
provider=dict(required=False, type="raw"),
173+
circuit_type=dict(required=False, type="raw"),
174+
# Will uncomment other status dict once slugs are the only option (Netbox 2.8)
175+
status=dict(required=False, type="raw"),
176+
# status=dict(
177+
# required=False,
178+
# choices=[
179+
# "Active",
180+
# "Offline",
181+
# "Planned",
182+
# "Provisioning",
183+
# "Deprovisioning",
184+
# "Decommissioned",
185+
# ],
186+
# ),
187+
tenant=dict(required=False, type="raw"),
188+
install_date=dict(required=False, type="str"),
189+
commit_rate=dict(required=False, type="int"),
190+
description=dict(required=False, type="str"),
191+
comments=dict(required=False, type="str"),
192+
tags=dict(required=False, type=list),
193+
custom_fields=dict(required=False, type=dict),
194+
),
195+
),
196+
)
169197
)
170198

171199
required_if = [("state", "present", ["cid"]), ("state", "absent", ["cid"])]

plugins/modules/netbox_circuit_termination.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@
137137

138138
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_utils import (
139139
NetboxAnsibleModule,
140+
NETBOX_ARG_SPEC,
140141
)
141142
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_circuits import (
142143
NetboxCircuitsModule,
@@ -148,13 +149,26 @@ def main():
148149
"""
149150
Main entry point for module execution
150151
"""
151-
argument_spec = dict(
152-
netbox_url=dict(type="str", required=True),
153-
netbox_token=dict(type="str", required=True, no_log=True),
154-
data=dict(type="dict", required=True),
155-
state=dict(required=False, default="present", choices=["present", "absent"]),
156-
validate_certs=dict(type="bool", default=True),
152+
argument_spec = NETBOX_ARG_SPEC
153+
argument_spec.update(
154+
dict(
155+
data=dict(
156+
type="dict",
157+
required=True,
158+
options=dict(
159+
circuit=dict(required=True, type="raw"),
160+
term_side=dict(required=True, choices=["A", "Z"]),
161+
site=dict(required=False, type="raw"),
162+
port_speed=dict(required=False, type="int"),
163+
upstream_speed=dict(required=False, type="int"),
164+
xconnect_id=dict(required=False, type="str"),
165+
pp_info=dict(required=False, type="str"),
166+
description=dict(required=False, type="str"),
167+
),
168+
),
169+
)
157170
)
171+
158172
required_if = [
159173
("state", "present", ["circuit", "term_side"]),
160174
("state", "absent", ["circuit", "term_side"]),

plugins/modules/netbox_circuit_type.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393

9494
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_utils import (
9595
NetboxAnsibleModule,
96+
NETBOX_ARG_SPEC,
9697
)
9798
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_circuits import (
9899
NetboxCircuitsModule,
@@ -104,12 +105,18 @@ def main():
104105
"""
105106
Main entry point for module execution
106107
"""
107-
argument_spec = dict(
108-
netbox_url=dict(type="str", required=True),
109-
netbox_token=dict(type="str", required=True, no_log=True),
110-
data=dict(type="dict", required=True),
111-
state=dict(required=False, default="present", choices=["present", "absent"]),
112-
validate_certs=dict(type="bool", default=True),
108+
argument_spec = NETBOX_ARG_SPEC
109+
argument_spec.update(
110+
dict(
111+
data=dict(
112+
type="dict",
113+
required=True,
114+
options=dict(
115+
name=dict(required=True, type="str"),
116+
slug=dict(required=False, type="str"),
117+
),
118+
),
119+
)
113120
)
114121

115122
required_if = [("state", "present", ["name"]), ("state", "absent", ["name"])]

plugins/modules/netbox_cluster.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@
136136

137137
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_utils import (
138138
NetboxAnsibleModule,
139+
NETBOX_ARG_SPEC,
139140
)
140141
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_virtualization import (
141142
NetboxVirtualizationModule,
@@ -147,12 +148,23 @@ def main():
147148
"""
148149
Main entry point for module execution
149150
"""
150-
argument_spec = dict(
151-
netbox_url=dict(type="str", required=True),
152-
netbox_token=dict(type="str", required=True, no_log=True),
153-
data=dict(type="dict", required=True),
154-
state=dict(required=False, default="present", choices=["present", "absent"]),
155-
validate_certs=dict(type="bool", default=True),
151+
argument_spec = NETBOX_ARG_SPEC
152+
argument_spec.update(
153+
dict(
154+
data=dict(
155+
type="dict",
156+
required=True,
157+
options=dict(
158+
name=dict(required=True, type="str"),
159+
cluster_type=dict(required=False, type="raw"),
160+
cluster_group=dict(required=False, type="raw"),
161+
site=dict(required=False, type="raw"),
162+
comments=dict(required=False, type="str"),
163+
tags=dict(required=False, type=list),
164+
custom_fields=dict(required=False, type=dict),
165+
),
166+
),
167+
)
156168
)
157169

158170
required_if = [("state", "present", ["name"]), ("state", "absent", ["name"])]

plugins/modules/netbox_cluster_group.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393

9494
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_utils import (
9595
NetboxAnsibleModule,
96+
NETBOX_ARG_SPEC,
9697
)
9798
from ansible_collections.netbox_community.ansible_modules.plugins.module_utils.netbox_virtualization import (
9899
NetboxVirtualizationModule,
@@ -104,12 +105,18 @@ def main():
104105
"""
105106
Main entry point for module execution
106107
"""
107-
argument_spec = dict(
108-
netbox_url=dict(type="str", required=True),
109-
netbox_token=dict(type="str", required=True, no_log=True),
110-
data=dict(type="dict", required=True),
111-
state=dict(required=False, default="present", choices=["present", "absent"]),
112-
validate_certs=dict(type="bool", default=True),
108+
argument_spec = NETBOX_ARG_SPEC
109+
argument_spec.update(
110+
dict(
111+
data=dict(
112+
type="dict",
113+
required=True,
114+
options=dict(
115+
name=dict(required=True, type="str"),
116+
slug=dict(required=False, type="str"),
117+
),
118+
),
119+
)
113120
)
114121

115122
required_if = [("state", "present", ["name"]), ("state", "absent", ["name"])]

0 commit comments

Comments
 (0)