Skip to content

Commit 16ece71

Browse files
committed
Add out of band IP option
Add oob_ip documentation
1 parent 8c2f643 commit 16ece71

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

plugins/inventory/nb_inventory.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,10 @@
237237
type: boolean
238238
default: True
239239
version_added: "3.6.0"
240+
oob_ip:
241+
description: Use out of band IP as `ansible host`
242+
type: boolean
243+
default: False
240244
"""
241245

242246
EXAMPLES = """
@@ -812,6 +816,13 @@ def extract_primary_ip6(self, host):
812816
except Exception:
813817
return
814818

819+
def extract_oob_ip(self, host):
820+
try:
821+
address = host["oob_ip"]["address"]
822+
return str(ip_interface(address).ip)
823+
except Exception:
824+
return
825+
815826
def extract_tags(self, host):
816827
try:
817828
tag_zero = host["tags"][0]
@@ -1844,6 +1855,10 @@ def _fill_host_variables(self, host, hostname):
18441855
if extracted_primary_ip6:
18451856
self.inventory.set_variable(hostname, "primary_ip6", extracted_primary_ip6)
18461857

1858+
extracted_oob_ip = self.extract_oob_ip(host=host)
1859+
if extracted_oob_ip and self.oob_ip:
1860+
self.inventory.set_variable(hostname, "ansible_host", extracted_oob_ip)
1861+
18471862
for attribute, extractor in self.group_extractors.items():
18481863
extracted_value = extractor(host)
18491864

@@ -2034,6 +2049,7 @@ def parse(self, inventory, loader, path, cache=True):
20342049
self.cert = self.get_option("cert")
20352050
self.key = self.get_option("key")
20362051
self.ca_path = self.get_option("ca_path")
2052+
self.oob_ip = self.get_option("oob_ip")
20372053

20382054
self._set_authorization()
20392055

plugins/module_utils/netbox_utils.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
primary_ip="address",
162162
primary_ip4="address",
163163
primary_ip6="address",
164+
oob_ip="address",
164165
provider="slug",
165166
provider_network="name",
166167
rack="name",
@@ -253,6 +254,7 @@
253254
"primary_ip": "ip_addresses",
254255
"primary_ip4": "ip_addresses",
255256
"primary_ip6": "ip_addresses",
257+
"oob_ip": "ip_addresses",
256258
"provider": "providers",
257259
"provider_network": "provider_networks",
258260
"rack": "racks",
@@ -472,6 +474,7 @@
472474
"prefix": set(["prefix", "vrf"]),
473475
"primary_ip4": set(["address", "vrf"]),
474476
"primary_ip6": set(["address", "vrf"]),
477+
"oob_ip": set(["address", "vrf"]),
475478
"provider": set(["slug"]),
476479
"provider_network": set(["name"]),
477480
"rack": set(["name", "site", "location"]),

plugins/modules/netbox_device.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,13 @@
100100
description:
101101
- Airflow of the device
102102
choices:
103-
- front-to-rear
104-
- rear-to-front
105-
- left-to-right
106-
- right-to-left
103+
- front-to-rear
104+
- rear-to-front
105+
- left-to-right
106+
- right-to-left
107107
- side-to-rear
108108
- passive
109-
- mixed
109+
- mixed
110110
required: false
111111
type: str
112112
version_added: "3.10.0"
@@ -125,6 +125,11 @@
125125
- Primary IPv6 address assigned to the device
126126
required: false
127127
type: raw
128+
oob_ip:
129+
description:
130+
- Out of band IP address assigned to the device
131+
required: false
132+
type: raw
128133
cluster:
129134
description:
130135
- Cluster that the device will be assigned to
@@ -306,6 +311,7 @@ def main():
306311
status=dict(required=False, type="raw"),
307312
primary_ip4=dict(required=False, type="raw"),
308313
primary_ip6=dict(required=False, type="raw"),
314+
oob_ip=dict(required=False, type="raw"),
309315
cluster=dict(required=False, type="raw"),
310316
virtual_chassis=dict(required=False, type="raw"),
311317
vc_position=dict(required=False, type="int"),

0 commit comments

Comments
 (0)