|
1 | 1 | # -*- coding: utf-8 -*-
|
2 | 2 | # Copyright: (c) 2018, Mikhail Yohman (@fragmentedpacket) <mikhail.yohman@gmail.com>
|
3 | 3 | # Copyright: (c) 2018, David Gomez (@amb1s1) <david.gomez@networktocode.com>
|
| 4 | +# Copyright: (c) 2020, Nokia, Tobias Groß (@toerb) <tobias.gross@nokia.com> |
4 | 5 | # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
5 | 6 |
|
6 | 7 | from __future__ import absolute_import, division, print_function
|
|
35 | 36 | API_APPS_ENDPOINTS = dict(
|
36 | 37 | circuits=["circuits", "circuit_types", "circuit_terminations", "providers"],
|
37 | 38 | dcim=[
|
| 39 | + "cables", |
38 | 40 | "console_ports",
|
39 | 41 | "console_port_templates",
|
40 | 42 | "console_server_ports",
|
41 | 43 | "console_server_port_templates",
|
42 | 44 | "device_bays",
|
| 45 | + "device_bay_templates", |
43 | 46 | "devices",
|
44 | 47 | "device_roles",
|
45 | 48 | "device_types",
|
|
62 | 65 | "rear_port_templates",
|
63 | 66 | "regions",
|
64 | 67 | "sites",
|
| 68 | + "virtual_chassis", |
65 | 69 | ],
|
66 | 70 | extras=[],
|
67 | 71 | ipam=[
|
|
124 | 128 | )
|
125 | 129 |
|
126 | 130 | # Specifies keys within data that need to be converted to ID and the endpoint to be used when queried
|
127 |
| -CONVERT_TO_ID = dict( |
128 |
| - circuit="circuits", |
129 |
| - circuit_type="circuit_types", |
130 |
| - circuit_termination="circuit_terminations", |
131 |
| - cluster="clusters", |
132 |
| - cluster_group="cluster_groups", |
133 |
| - cluster_type="cluster_types", |
134 |
| - device="devices", |
135 |
| - device_role="device_roles", |
136 |
| - device_type="device_types", |
137 |
| - group="tenant_groups", |
138 |
| - installed_device="devices", |
139 |
| - interface="interfaces", |
140 |
| - ip_addresses="ip_addresses", |
141 |
| - ipaddresses="ip_addresses", |
142 |
| - lag="interfaces", |
143 |
| - manufacturer="manufacturers", |
144 |
| - nat_inside="ip_addresses", |
145 |
| - nat_outside="ip_addresses", |
146 |
| - platform="platforms", |
147 |
| - parent_region="regions", |
148 |
| - power_panel="power_panels", |
149 |
| - power_port="power_ports", |
150 |
| - prefix_role="roles", |
151 |
| - primary_ip="ip_addresses", |
152 |
| - primary_ip4="ip_addresses", |
153 |
| - primary_ip6="ip_addresses", |
154 |
| - provider="providers", |
155 |
| - rack="racks", |
156 |
| - rack_group="rack_groups", |
157 |
| - rack_role="rack_roles", |
158 |
| - region="regions", |
159 |
| - rear_port="rear_ports", |
160 |
| - rir="rirs", |
161 |
| - services="services", |
162 |
| - site="sites", |
163 |
| - tagged_vlans="vlans", |
164 |
| - tenant="tenants", |
165 |
| - tenant_group="tenant_groups", |
166 |
| - untagged_vlan="vlans", |
167 |
| - virtual_machine="virtual_machines", |
168 |
| - virtual_machine_role="device_roles", |
169 |
| - vlan="vlans", |
170 |
| - vlan_group="vlan_groups", |
171 |
| - vlan_role="roles", |
172 |
| - vrf="vrfs", |
173 |
| -) |
| 131 | +CONVERT_TO_ID = { |
| 132 | + "circuit": "circuits", |
| 133 | + "circuit_type": "circuit_types", |
| 134 | + "circuit_termination": "circuit_terminations", |
| 135 | + "circuit.circuittermination": "circuit_terminations", |
| 136 | + "cluster": "clusters", |
| 137 | + "cluster_group": "cluster_groups", |
| 138 | + "cluster_type": "cluster_types", |
| 139 | + "dcim.consoleport": "console_ports", |
| 140 | + "dcim.consoleserverport": "console_server_ports", |
| 141 | + "dcim.frontport": "front_ports", |
| 142 | + "dcim.interface": "interfaces", |
| 143 | + "dcim.powerfeed": "power_feeds", |
| 144 | + "dcim.poweroutlet": "power_outlet", |
| 145 | + "dcim.powerport": "power_port", |
| 146 | + "dcim.rearport": "rear_port", |
| 147 | + "device": "devices", |
| 148 | + "device_role": "device_roles", |
| 149 | + "device_type": "device_types", |
| 150 | + "group": "tenant_groups", |
| 151 | + "installed_device": "devices", |
| 152 | + "interface": "interfaces", |
| 153 | + "ip_addresses": "ip_addresses", |
| 154 | + "ipaddresses": "ip_addresses", |
| 155 | + "lag": "interfaces", |
| 156 | + "manufacturer": "manufacturers", |
| 157 | + "master": "devices", |
| 158 | + "nat_inside": "ip_addresses", |
| 159 | + "nat_outside": "ip_addresses", |
| 160 | + "platform": "platforms", |
| 161 | + "parent_region": "regions", |
| 162 | + "power_panel": "power_panels", |
| 163 | + "power_port": "power_ports", |
| 164 | + "prefix_role": "roles", |
| 165 | + "primary_ip": "ip_addresses", |
| 166 | + "primary_ip4": "ip_addresses", |
| 167 | + "primary_ip6": "ip_addresses", |
| 168 | + "provider": "providers", |
| 169 | + "rack": "racks", |
| 170 | + "rack_group": "rack_groups", |
| 171 | + "rack_role": "rack_roles", |
| 172 | + "region": "regions", |
| 173 | + "rear_port": "rear_ports", |
| 174 | + "rir": "rirs", |
| 175 | + "services": "services", |
| 176 | + "site": "sites", |
| 177 | + "tagged_vlans": "vlans", |
| 178 | + "tenant": "tenants", |
| 179 | + "tenant_group": "tenant_groups", |
| 180 | + "termination_a": "interfaces", |
| 181 | + "termination_b": "interfaces", |
| 182 | + "untagged_vlan": "vlans", |
| 183 | + "virtual_chassis": "virtual_chassis", |
| 184 | + "virtual_machine": "virtual_machines", |
| 185 | + "virtual_machine_role": "device_roles", |
| 186 | + "vlan": "vlans", |
| 187 | + "vlan_group": "vlan_groups", |
| 188 | + "vlan_role": "roles", |
| 189 | + "vrf": "vrfs", |
| 190 | +} |
174 | 191 |
|
175 | 192 | ENDPOINT_NAME_MAPPING = {
|
176 | 193 | "aggregates": "aggregate",
|
| 194 | + "cables": "cable", |
177 | 195 | "circuit_terminations": "circuit_termination",
|
178 | 196 | "circuit_types": "circuit_type",
|
179 | 197 | "circuits": "circuit",
|
|
185 | 203 | "console_server_ports": "console_server_port",
|
186 | 204 | "console_server_port_templates": "console_server_port_template",
|
187 | 205 | "device_bays": "device_bay",
|
| 206 | + "device_bay_templates": "device_bay_template", |
188 | 207 | "devices": "device",
|
189 | 208 | "device_roles": "device_role",
|
190 | 209 | "device_types": "device_type",
|
|
215 | 234 | "sites": "site",
|
216 | 235 | "tenants": "tenant",
|
217 | 236 | "tenant_groups": "tenant_group",
|
| 237 | + "virtual_chassis": "virtual_chassis", |
218 | 238 | "virtual_machines": "virtual_machine",
|
219 | 239 | "vlans": "vlan",
|
220 | 240 | "vlan_groups": "vlan_group",
|
|
226 | 246 | "circuit": set(["cid"]),
|
227 | 247 | "circuit_type": set(["slug"]),
|
228 | 248 | "circuit_termination": set(["circuit", "term_side"]),
|
| 249 | + "circuit.circuittermination": set(["circuit", "term_side"]), |
229 | 250 | "cluster": set(["name", "type"]),
|
230 | 251 | "cluster_group": set(["slug"]),
|
231 | 252 | "cluster_type": set(["slug"]),
|
232 | 253 | "console_port": set(["name", "device"]),
|
233 | 254 | "console_port_template": set(["name", "device_type"]),
|
234 | 255 | "console_server_port": set(["name", "device"]),
|
235 | 256 | "console_server_port_template": set(["name", "device_type"]),
|
| 257 | + "dcim.consoleport": set(["name", "device"]), |
| 258 | + "dcim.consoleserverport": set(["name", "device"]), |
| 259 | + "dcim.frontport": set(["name", "device", "rear_port"]), |
| 260 | + "dcim.interface": set(["name", "device", "virtual_machine"]), |
| 261 | + "dcim.powerfeed": set(["name", "power_panel"]), |
| 262 | + "dcim.poweroutlet": set(["name", "device"]), |
| 263 | + "dcim.powerport": set(["name", "device"]), |
| 264 | + "dcim.rearport": set(["name", "device"]), |
236 | 265 | "device_bay": set(["name", "device"]),
|
| 266 | + "device_bay_template": set(["name", "device_type"]), |
237 | 267 | "device": set(["name"]),
|
238 | 268 | "device_role": set(["slug"]),
|
239 | 269 | "device_type": set(["slug"]),
|
|
247 | 277 | "ipaddresses": set(["address", "vrf", "device", "interface"]),
|
248 | 278 | "lag": set(["name"]),
|
249 | 279 | "manufacturer": set(["slug"]),
|
| 280 | + "master": set(["name"]), |
250 | 281 | "nat_inside": set(["vrf", "address"]),
|
251 | 282 | "parent_region": set(["slug"]),
|
252 | 283 | "platform": set(["slug"]),
|
|
273 | 304 | "tagged_vlans": set(["name", "site", "vlan_group", "tenant"]),
|
274 | 305 | "tenant": set(["slug"]),
|
275 | 306 | "tenant_group": set(["slug"]),
|
| 307 | + "termination_a": set(["name", "device", "virtual_machine"]), |
| 308 | + "termination_b": set(["name", "device", "virtual_machine"]), |
276 | 309 | "untagged_vlan": set(["name", "site", "vlan_group", "tenant"]),
|
| 310 | + "virtual_chassis": set(["master"]), |
277 | 311 | "virtual_machine": set(["name", "cluster"]),
|
278 | 312 | "vlan": set(["name", "site", "tenant", "vlan_group"]),
|
279 | 313 | "vlan_group": set(["slug", "site"]),
|
|
297 | 331 | )
|
298 | 332 |
|
299 | 333 | REQUIRED_ID_FIND = {
|
| 334 | + "cables": set(["status", "type", "length_unit"]), |
300 | 335 | "circuits": set(["status"]),
|
301 | 336 | "console_ports": set(["type"]),
|
302 | 337 | "console_port_templates": set(["type"]),
|
|
333 | 368 | "rack_group": "group",
|
334 | 369 | "rack_role": "role",
|
335 | 370 | "tenant_group": "group",
|
| 371 | + "termination_a": "termination_a_id", |
| 372 | + "termination_b": "termination_b_id", |
336 | 373 | "virtual_machine_role": "role",
|
337 | 374 | "vlan_role": "role",
|
338 | 375 | "vlan_group": "group",
|
|
360 | 397 | "vlan_groups",
|
361 | 398 | }
|
362 | 399 |
|
363 |
| - |
364 | 400 | NETBOX_ARG_SPEC = dict(
|
365 | 401 | netbox_url=dict(type="str", required=True),
|
366 | 402 | netbox_token=dict(type="str", required=True, no_log=True),
|
@@ -605,6 +641,9 @@ def _build_query_params(
|
605 | 641 | else:
|
606 | 642 | query_dict.update({"device": module_data["device"]})
|
607 | 643 |
|
| 644 | + elif parent == "virtual_chassis": |
| 645 | + query_dict = {"q": self.module.params["data"].get("master")} |
| 646 | + |
608 | 647 | query_dict = self._convert_identical_keys(query_dict)
|
609 | 648 | return query_dict
|
610 | 649 |
|
@@ -666,7 +705,12 @@ def _find_ids(self, data, user_query_params):
|
666 | 705 | """
|
667 | 706 | for k, v in data.items():
|
668 | 707 | if k in CONVERT_TO_ID:
|
669 |
| - endpoint = CONVERT_TO_ID[k] |
| 708 | + if k == "termination_a": |
| 709 | + endpoint = CONVERT_TO_ID[data.get("termination_a_type")] |
| 710 | + elif k == "termination_b": |
| 711 | + endpoint = CONVERT_TO_ID[data.get("termination_b_type")] |
| 712 | + else: |
| 713 | + endpoint = CONVERT_TO_ID[k] |
670 | 714 | search = v
|
671 | 715 | app = self._find_app(endpoint)
|
672 | 716 | nb_app = getattr(self.nb, app)
|
|
0 commit comments