Skip to content

Commit f55f567

Browse files
authored
[Feature]: Adds the ability to assign a role to an inventory item via the netbox_inventory_item module (#1050)
* 981 added ability to assign inventory item role at creation of inventory item * adding integration tests for v3.3 and v3.4
1 parent 2bba20d commit f55f567

File tree

5 files changed

+282
-123
lines changed

5 files changed

+282
-123
lines changed

plugins/module_utils/netbox_utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@
226226
"interface_a": "interfaces",
227227
"interface_b": "interfaces",
228228
"interface_template": "interface_templates",
229+
"inventory_item_role": "inventory_item_roles",
229230
"ip_addresses": "ip_addresses",
230231
"ipaddresses": "ip_addresses",
231232
"location": "locations",
@@ -562,6 +563,7 @@
562563
"cluster_group": "group",
563564
"contact_group": "group",
564565
"fhrp_group": "group",
566+
"inventory_item_role": "role",
565567
"parent_contact_group": "parent",
566568
"parent_location": "parent",
567569
"parent_interface": "parent",

plugins/modules/netbox_inventory_item.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@
9494
required: false
9595
type: dict
9696
version_added: "3.4.0"
97+
inventory_item_role:
98+
description:
99+
- Set the inventory item role
100+
required: false
101+
type: raw
97102
required: true
98103
"""
99104

@@ -124,6 +129,7 @@
124129
serial: "1234"
125130
asset_tag: "1234"
126131
description: "New SFP"
132+
inventory_item_role: NIC
127133
state: present
128134
129135
- name: Create inventory item with parent
@@ -193,6 +199,7 @@ def main():
193199
discovered=dict(required=False, type="bool", default=False),
194200
tags=dict(required=False, type="list", elements="raw"),
195201
custom_fields=dict(required=False, type="dict"),
202+
inventory_item_role=dict(required=False, type="raw"),
196203
),
197204
),
198205
)

tests/integration/targets/v3.3/tasks/netbox_inventory_item.yml

Lines changed: 91 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
register: test_one
1616

1717
- name: "INVENTORY_ITEM 1: ASSERT - Necessary info creation"
18-
assert:
18+
ansible.builtin.assert:
1919
that:
2020
- test_one is changed
21-
- test_one['diff']['before']['state'] == "absent"
22-
- test_one['diff']['after']['state'] == "present"
23-
- test_one['inventory_item']['name'] == "10G-SFP+"
24-
- test_one['inventory_item']['device'] == 1
25-
- test_one['msg'] == "inventory_item 10G-SFP+ created"
21+
- test_one.diff.before.state == "absent"
22+
- test_one.diff.after.state == "present"
23+
- test_one.inventory_item.name == "10G-SFP+"
24+
- test_one.inventory_item.device == 1
25+
- test_one.msg == "inventory_item 10G-SFP+ created"
2626

2727
- name: "INVENTORY_ITEM 2: Create duplicate"
2828
netbox.netbox.netbox_inventory_item:
@@ -35,14 +35,14 @@
3535
register: test_two
3636

3737
- name: "INVENTORY_ITEM 2: ASSERT - Create duplicate"
38-
assert:
38+
ansible.builtin.assert:
3939
that:
40-
- not test_two['changed']
41-
- test_two['inventory_item']['name'] == "10G-SFP+"
42-
- test_two['inventory_item']['device'] == 1
43-
- test_two['msg'] == "inventory_item 10G-SFP+ already exists"
40+
- not test_two.changed
41+
- test_two.inventory_item.name == "10G-SFP+"
42+
- test_two.inventory_item.device == 1
43+
- test_two.msg == "inventory_item 10G-SFP+ already exists"
4444

45-
- name: "INVENTORY_ITEM 3: ASSERT - Update"
45+
- name: "INVENTORY_ITEM 3: Update properties"
4646
netbox.netbox.netbox_inventory_item:
4747
netbox_url: http://localhost:32768
4848
netbox_token: 0123456789abcdef0123456789abcdef01234567
@@ -61,28 +61,28 @@
6161
register: test_three
6262

6363
- name: "INVENTORY_ITEM 3: ASSERT - Updated"
64-
assert:
64+
ansible.builtin.assert:
6565
that:
6666
- test_three is changed
67-
- test_three['diff']['after']['asset_tag'] == "1234"
68-
- test_three['diff']['after']['serial'] == "1234"
69-
- test_three['diff']['after']['description'] == "New SFP"
70-
- test_three['diff']['after']['manufacturer'] == 1
71-
- test_three['diff']['after']['part_id'] == "10G-SFP+"
72-
- test_three['diff']['after']['tags'][0] == 4
73-
- test_three['diff']['after']['discovered'] == True
74-
- test_three['inventory_item']['name'] == "10G-SFP+"
75-
- test_three['inventory_item']['device'] == 1
76-
- test_three['inventory_item']['asset_tag'] == "1234"
77-
- test_three['inventory_item']['serial'] == "1234"
78-
- test_three['inventory_item']['description'] == "New SFP"
79-
- test_three['inventory_item']['manufacturer'] == 1
80-
- test_three['inventory_item']['part_id'] == "10G-SFP+"
81-
- test_three['inventory_item']['tags'][0] == 4
82-
- test_three['inventory_item']['discovered'] == True
83-
- test_three['msg'] == "inventory_item 10G-SFP+ updated"
67+
- test_three.diff.after.asset_tag == "1234"
68+
- test_three.diff.after.serial == "1234"
69+
- test_three.diff.after.description == "New SFP"
70+
- test_three.diff.after.manufacturer == 1
71+
- test_three.diff.after.part_id == "10G-SFP+"
72+
- test_three.diff.after.tags[0] == 4
73+
- test_three.diff.after.discovered == True
74+
- test_three.inventory_item.name == "10G-SFP+"
75+
- test_three.inventory_item.device == 1
76+
- test_three.inventory_item.asset_tag == "1234"
77+
- test_three.inventory_item.serial == "1234"
78+
- test_three.inventory_item.description == "New SFP"
79+
- test_three.inventory_item.manufacturer == 1
80+
- test_three.inventory_item.part_id == "10G-SFP+"
81+
- test_three.inventory_item.tags[0] == 4
82+
- test_three.inventory_item.discovered == True
83+
- test_three.msg == "inventory_item 10G-SFP+ updated"
8484

85-
- name: "INVENTORY_ITEM 4: ASSERT - Delete"
85+
- name: "INVENTORY_ITEM 4: Delete inventory item"
8686
netbox.netbox.netbox_inventory_item:
8787
netbox_url: http://localhost:32768
8888
netbox_token: 0123456789abcdef0123456789abcdef01234567
@@ -93,15 +93,65 @@
9393
register: test_four
9494

9595
- name: "INVENTORY_ITEM 4: ASSERT - Delete"
96-
assert:
96+
ansible.builtin.assert:
9797
that:
9898
- test_four is changed
99-
- test_four['inventory_item']['name'] == "10G-SFP+"
100-
- test_four['inventory_item']['device'] == 1
101-
- test_four['inventory_item']['asset_tag'] == "1234"
102-
- test_four['inventory_item']['serial'] == "1234"
103-
- test_four['inventory_item']['description'] == "New SFP"
104-
- test_four['inventory_item']['manufacturer'] == 1
105-
- test_four['inventory_item']['part_id'] == "10G-SFP+"
106-
- test_four['inventory_item']['tags'][0] == 4
107-
- test_four['msg'] == "inventory_item 10G-SFP+ deleted"
99+
- test_four.inventory_item.name == "10G-SFP+"
100+
- test_four.inventory_item.device == 1
101+
- test_four.inventory_item.asset_tag == "1234"
102+
- test_four.inventory_item.serial == "1234"
103+
- test_four.inventory_item.description == "New SFP"
104+
- test_four.inventory_item.manufacturer == 1
105+
- test_four.inventory_item.part_id == "10G-SFP+"
106+
- test_four.inventory_item.tags[0] == 4
107+
- test_four.msg == "inventory_item 10G-SFP+ deleted"
108+
109+
- name: "INVENTORY_ITEM 5: PREWORK - Create inventory item role"
110+
netbox.netbox.netbox_inventory_item_role:
111+
netbox_url: http://localhost:32768
112+
netbox_token: 0123456789abcdef0123456789abcdef01234567
113+
data:
114+
name: Processor
115+
color: FFFFFF
116+
state: present
117+
register: test_five_prework
118+
119+
- name: "INVENTORY_ITEM 5: Create inventory item with role"
120+
netbox.netbox.netbox_inventory_item:
121+
netbox_url: http://localhost:32768
122+
netbox_token: 0123456789abcdef0123456789abcdef01234567
123+
data:
124+
device: test100
125+
name: test_processor
126+
inventory_item_role: Processor
127+
state: present
128+
register: test_five
129+
130+
- name: "INVENTORY_ITEM 5: ASSERT - Inventory item creation with role"
131+
ansible.builtin.assert:
132+
that:
133+
- test_five is changed
134+
- test_five.diff.before.state == "absent"
135+
- test_five.diff.after.state == "present"
136+
- test_five.inventory_item.name == "test_processor"
137+
- test_five.inventory_item.role == test_five_prework.inventory_item_role.id
138+
- test_five.inventory_item.device == 1
139+
- test_five.msg == "inventory_item test_processor created"
140+
141+
- name: "INVENTORY_ITEM 6: Create inventory item with missing role"
142+
netbox.netbox.netbox_inventory_item:
143+
netbox_url: http://localhost:32768
144+
netbox_token: 0123456789abcdef0123456789abcdef01234567
145+
data:
146+
device: test100
147+
name: test_processor
148+
inventory_item_role: Foo
149+
state: present
150+
ignore_errors: true
151+
register: test_six
152+
153+
- name: "INVENTORY_ITEM 6: ASSERT - Inventory item creation with missing role"
154+
ansible.builtin.assert:
155+
that:
156+
- test_six.failed
157+
- test_six.msg == "Could not resolve id of inventory_item_role: Foo"

tests/integration/targets/v3.4/tasks/netbox_inventory_item.yml

Lines changed: 91 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@
1515
register: test_one
1616

1717
- name: "INVENTORY_ITEM 1: ASSERT - Necessary info creation"
18-
assert:
18+
ansible.builtin.assert:
1919
that:
2020
- test_one is changed
21-
- test_one['diff']['before']['state'] == "absent"
22-
- test_one['diff']['after']['state'] == "present"
23-
- test_one['inventory_item']['name'] == "10G-SFP+"
24-
- test_one['inventory_item']['device'] == 1
25-
- test_one['msg'] == "inventory_item 10G-SFP+ created"
21+
- test_one.diff.before.state == "absent"
22+
- test_one.diff.after.state == "present"
23+
- test_one.inventory_item.name == "10G-SFP+"
24+
- test_one.inventory_item.device == 1
25+
- test_one.msg == "inventory_item 10G-SFP+ created"
2626

2727
- name: "INVENTORY_ITEM 2: Create duplicate"
2828
netbox.netbox.netbox_inventory_item:
@@ -35,14 +35,14 @@
3535
register: test_two
3636

3737
- name: "INVENTORY_ITEM 2: ASSERT - Create duplicate"
38-
assert:
38+
ansible.builtin.assert:
3939
that:
40-
- not test_two['changed']
41-
- test_two['inventory_item']['name'] == "10G-SFP+"
42-
- test_two['inventory_item']['device'] == 1
43-
- test_two['msg'] == "inventory_item 10G-SFP+ already exists"
40+
- not test_two.changed
41+
- test_two.inventory_item.name == "10G-SFP+"
42+
- test_two.inventory_item.device == 1
43+
- test_two.msg == "inventory_item 10G-SFP+ already exists"
4444

45-
- name: "INVENTORY_ITEM 3: ASSERT - Update"
45+
- name: "INVENTORY_ITEM 3: Update properties"
4646
netbox.netbox.netbox_inventory_item:
4747
netbox_url: http://localhost:32768
4848
netbox_token: 0123456789abcdef0123456789abcdef01234567
@@ -61,28 +61,28 @@
6161
register: test_three
6262

6363
- name: "INVENTORY_ITEM 3: ASSERT - Updated"
64-
assert:
64+
ansible.builtin.assert:
6565
that:
6666
- test_three is changed
67-
- test_three['diff']['after']['asset_tag'] == "1234"
68-
- test_three['diff']['after']['serial'] == "1234"
69-
- test_three['diff']['after']['description'] == "New SFP"
70-
- test_three['diff']['after']['manufacturer'] == 1
71-
- test_three['diff']['after']['part_id'] == "10G-SFP+"
72-
- test_three['diff']['after']['tags'][0] == 4
73-
- test_three['diff']['after']['discovered'] == True
74-
- test_three['inventory_item']['name'] == "10G-SFP+"
75-
- test_three['inventory_item']['device'] == 1
76-
- test_three['inventory_item']['asset_tag'] == "1234"
77-
- test_three['inventory_item']['serial'] == "1234"
78-
- test_three['inventory_item']['description'] == "New SFP"
79-
- test_three['inventory_item']['manufacturer'] == 1
80-
- test_three['inventory_item']['part_id'] == "10G-SFP+"
81-
- test_three['inventory_item']['tags'][0] == 4
82-
- test_three['inventory_item']['discovered'] == True
83-
- test_three['msg'] == "inventory_item 10G-SFP+ updated"
67+
- test_three.diff.after.asset_tag == "1234"
68+
- test_three.diff.after.serial == "1234"
69+
- test_three.diff.after.description == "New SFP"
70+
- test_three.diff.after.manufacturer == 1
71+
- test_three.diff.after.part_id == "10G-SFP+"
72+
- test_three.diff.after.tags[0] == 4
73+
- test_three.diff.after.discovered == True
74+
- test_three.inventory_item.name == "10G-SFP+"
75+
- test_three.inventory_item.device == 1
76+
- test_three.inventory_item.asset_tag == "1234"
77+
- test_three.inventory_item.serial == "1234"
78+
- test_three.inventory_item.description == "New SFP"
79+
- test_three.inventory_item.manufacturer == 1
80+
- test_three.inventory_item.part_id == "10G-SFP+"
81+
- test_three.inventory_item.tags[0] == 4
82+
- test_three.inventory_item.discovered == True
83+
- test_three.msg == "inventory_item 10G-SFP+ updated"
8484

85-
- name: "INVENTORY_ITEM 4: ASSERT - Delete"
85+
- name: "INVENTORY_ITEM 4: Delete inventory item"
8686
netbox.netbox.netbox_inventory_item:
8787
netbox_url: http://localhost:32768
8888
netbox_token: 0123456789abcdef0123456789abcdef01234567
@@ -93,15 +93,65 @@
9393
register: test_four
9494

9595
- name: "INVENTORY_ITEM 4: ASSERT - Delete"
96-
assert:
96+
ansible.builtin.assert:
9797
that:
9898
- test_four is changed
99-
- test_four['inventory_item']['name'] == "10G-SFP+"
100-
- test_four['inventory_item']['device'] == 1
101-
- test_four['inventory_item']['asset_tag'] == "1234"
102-
- test_four['inventory_item']['serial'] == "1234"
103-
- test_four['inventory_item']['description'] == "New SFP"
104-
- test_four['inventory_item']['manufacturer'] == 1
105-
- test_four['inventory_item']['part_id'] == "10G-SFP+"
106-
- test_four['inventory_item']['tags'][0] == 4
107-
- test_four['msg'] == "inventory_item 10G-SFP+ deleted"
99+
- test_four.inventory_item.name == "10G-SFP+"
100+
- test_four.inventory_item.device == 1
101+
- test_four.inventory_item.asset_tag == "1234"
102+
- test_four.inventory_item.serial == "1234"
103+
- test_four.inventory_item.description == "New SFP"
104+
- test_four.inventory_item.manufacturer == 1
105+
- test_four.inventory_item.part_id == "10G-SFP+"
106+
- test_four.inventory_item.tags[0] == 4
107+
- test_four.msg == "inventory_item 10G-SFP+ deleted"
108+
109+
- name: "INVENTORY_ITEM 5: PREWORK - Create inventory item role"
110+
netbox.netbox.netbox_inventory_item_role:
111+
netbox_url: http://localhost:32768
112+
netbox_token: 0123456789abcdef0123456789abcdef01234567
113+
data:
114+
name: Processor
115+
color: FFFFFF
116+
state: present
117+
register: test_five_prework
118+
119+
- name: "INVENTORY_ITEM 5: Create inventory item with role"
120+
netbox.netbox.netbox_inventory_item:
121+
netbox_url: http://localhost:32768
122+
netbox_token: 0123456789abcdef0123456789abcdef01234567
123+
data:
124+
device: test100
125+
name: test_processor
126+
inventory_item_role: Processor
127+
state: present
128+
register: test_five
129+
130+
- name: "INVENTORY_ITEM 5: ASSERT - Inventory item creation with role"
131+
ansible.builtin.assert:
132+
that:
133+
- test_five is changed
134+
- test_five.diff.before.state == "absent"
135+
- test_five.diff.after.state == "present"
136+
- test_five.inventory_item.name == "test_processor"
137+
- test_five.inventory_item.role == test_five_prework.inventory_item_role.id
138+
- test_five.inventory_item.device == 1
139+
- test_five.msg == "inventory_item test_processor created"
140+
141+
- name: "INVENTORY_ITEM 6: Create inventory item with missing role"
142+
netbox.netbox.netbox_inventory_item:
143+
netbox_url: http://localhost:32768
144+
netbox_token: 0123456789abcdef0123456789abcdef01234567
145+
data:
146+
device: test100
147+
name: test_processor
148+
inventory_item_role: Foo
149+
state: present
150+
ignore_errors: true
151+
register: test_six
152+
153+
- name: "INVENTORY_ITEM 6: ASSERT - Inventory item creation with missing role"
154+
ansible.builtin.assert:
155+
that:
156+
- test_six.failed
157+
- test_six.msg == "Could not resolve id of inventory_item_role: Foo"

0 commit comments

Comments
 (0)