Skip to content

Commit 177ee6b

Browse files
authored
Update netbox with tenks resources (#2638)
During baremetal scenarios, update netbox with resources created by tenks. Signed-off-by: Jan Horstmann <[email protected]>
1 parent c91cfae commit 177ee6b

20 files changed

+394
-10
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
---
2+
- name: Update netbox definitions
3+
hosts: testbed-managers
4+
tasks:
5+
- name: Modify netbox resources for testbed-resource-nodes device_type
6+
ansible.builtin.replace:
7+
path: /opt/configuration/netbox/resources/200-rack-1000.yml
8+
after: '(?m)^ name: {{ item }}$'
9+
before: '^- '
10+
regexp: '^ device_type: .*$'
11+
replace: ' device_type: Baremetal-Housing'
12+
loop: "{{ groups['testbed-resource-nodes'] }}"
13+
14+
- name: Modify netbox resources for testbed-resource-nodes device_role
15+
ansible.builtin.replace:
16+
path: /opt/configuration/netbox/resources/200-rack-1000.yml
17+
after: '(?m)^ name: {{ item }}$'
18+
before: '^- '
19+
regexp: '^ device_role: .*$'
20+
replace: ' device_role: Housing'
21+
loop: "{{ groups['testbed-resource-nodes'] }}"
22+
23+
- name: Gather information about virtual baremetal devices created by tenks
24+
changed_when: false
25+
delegate_to: "{{ item }}"
26+
register: virtual_baremetal
27+
ansible.builtin.command:
28+
argv:
29+
- /home/dragon/tenks-venv/bin/vbmc
30+
- list
31+
- -f
32+
- json
33+
loop: "{{ groups['testbed-resource-nodes'] }}"
34+
35+
- name: Gather information about virtual baremetal device interfaces created by tenks
36+
changed_when: false
37+
vars:
38+
nodes: "{{ virtual_baremetal.results | map(attribute='item') | list }}"
39+
vms: "{{ virtual_baremetal.results | map(attribute='stdout') | map('from_json') | list }}"
40+
delegate_to: "{{ item.0.key }}"
41+
become: true
42+
register: virtual_baremetal_interfaces
43+
ansible.builtin.command:
44+
argv:
45+
- /usr/bin/virsh
46+
- domiflist
47+
- "{{ item.1['Domain name'] }}"
48+
loop: "{{ dict(nodes | zip(vms)) | dict2items | subelements('value') }}"
49+
50+
- name: Add netbox resources for virtualized baremetal nodes
51+
ansible.builtin.template:
52+
src: templates/baremetal-netbox-device.yml.j2
53+
dest: "/opt/configuration/netbox/resources/400-rack-1000-{{ item.item.0.key }}-{{ item.item.1['Domain name']}}.yml"
54+
mode: 0644
55+
owner: dragon
56+
group: dragon
57+
loop: "{{ virtual_baremetal_interfaces.results }}"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
---
2+
{% set node = item.item.0.key -%}
3+
{% set name = item.item.1['Domain name'] -%}
4+
{% set macs = item.stdout_lines[2:] | map('split', ' ') | map('last') | list -%}
5+
- device:
6+
name: {{ node }}-{{ name }}
7+
site: Discworld
8+
location: Ankh-Morpork
9+
rack: "1000"
10+
device_type: Baremetal-Device
11+
device_role: Generic
12+
custom_fields:
13+
device_type: server
14+
ironic_enabled: false
15+
tags:
16+
- managed-by-osism
17+
- managed-by-ironic
18+
- generic
19+
20+
- device_bay:
21+
device: {{ node }}
22+
name: {{ name }}
23+
installed_device: {{ node }}-{{ name }}
24+
25+
{% for mac in macs -%}
26+
- device_interface:
27+
name: Ethernet{{ loop.index }}
28+
device: {{ node }}-{{ name }}
29+
mac_address: {{ mac }}
30+
{% endfor %}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
---
2+
manufacturer: Other
3+
model: Baremetal-Device
4+
slug: baremetal-device
5+
subdevice_role: child
6+
u_height: 0
7+
is_full_depth: true
8+
console-ports: []
9+
power-ports:
10+
- name: PS1
11+
type: iec-60320-c14
12+
interfaces:
13+
- name: Ethernet1
14+
type: 10gbase-t
15+
- name: Ethernet2
16+
type: 10gbase-t
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
---
2+
manufacturer: Other
3+
model: Baremetal-Housing
4+
slug: baremetal-housing
5+
subdevice_role: parent
6+
u_height: 1
7+
is_full_depth: true
8+
console-ports: []
9+
power-ports:
10+
- name: PS1
11+
type: iec-60320-c14
12+
interfaces:
13+
- name: Ethernet0
14+
type: 1000base-t
15+
mgmt_only: true
16+
- name: Ethernet1
17+
type: 10gbase-t
18+
- name: Ethernet2
19+
type: 10gbase-t
20+
- name: Ethernet3
21+
type: 10gbase-t

netbox/devicetypes/Other/manager.yml

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ power-ports:
99
- name: PS1
1010
type: iec-60320-c14
1111
interfaces:
12+
- name: Ethernet0
13+
type: 1000base-t
14+
mgmt_only: true
1215
- name: Ethernet1
1316
type: 10gbase-t
1417
- name: Ethernet2

netbox/devicetypes/Other/node.yml

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ power-ports:
99
- name: PS1
1010
type: iec-60320-c14
1111
interfaces:
12+
- name: Ethernet0
13+
type: 1000base-t
14+
mgmt_only: true
1215
- name: Ethernet1
1316
type: 10gbase-t
1417
- name: Ethernet2

netbox/resources/100-initialise.yml

+5
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@
88
slug: ankh-morpork
99
site: discworld
1010

11+
- prefix:
12+
family: 4
13+
prefix: 172.16.0.0/20
14+
prefix_role: out-of-band
15+
1116
- prefix:
1217
family: 4
1318
prefix: 192.168.16.0/20

netbox/resources/200-rack-1000.yml

+15-10
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,21 @@
5555
device_type: switch
5656
deployment_type: napalm
5757

58+
- device:
59+
name: testbed-switch-oob
60+
site: "{{ site }}"
61+
location: "{{ location }}"
62+
rack: "{{ rack }}"
63+
device_type: DCS-7050TX3-48C8
64+
device_role: Oob
65+
face: rear
66+
position: 4
67+
tags:
68+
- managed-by-osism
69+
custom_fields:
70+
device_type: switch
71+
deployment_type: napalm
72+
5873
- device:
5974
name: testbed-manager
6075
site: "{{ site }}"
@@ -144,9 +159,7 @@
144159
ironic_enabled: false
145160
tags:
146161
- managed-by-osism
147-
- managed-by-ironic
148162
- generic
149-
- compute
150163

151164
- device:
152165
name: testbed-node-4
@@ -162,9 +175,7 @@
162175
ironic_enabled: false
163176
tags:
164177
- managed-by-osism
165-
- managed-by-ironic
166178
- generic
167-
- compute
168179

169180
- device:
170181
name: testbed-node-5
@@ -180,9 +191,7 @@
180191
ironic_enabled: false
181192
tags:
182193
- managed-by-osism
183-
- managed-by-ironic
184194
- generic
185-
- compute
186195

187196
- device:
188197
name: testbed-node-6
@@ -198,7 +207,6 @@
198207
ironic_enabled: false
199208
tags:
200209
- managed-by-osism
201-
- managed-by-ironic
202210
- generic
203211
- ceph-resource
204212

@@ -216,7 +224,6 @@
216224
ironic_enabled: false
217225
tags:
218226
- managed-by-osism
219-
- managed-by-ironic
220227
- generic
221228
- ceph-resource
222229

@@ -234,7 +241,6 @@
234241
ironic_enabled: false
235242
tags:
236243
- managed-by-osism
237-
- managed-by-ironic
238244
- generic
239245
- ceph-resource
240246

@@ -252,6 +258,5 @@
252258
ironic_enabled: false
253259
tags:
254260
- managed-by-osism
255-
- managed-by-ironic
256261
- generic
257262
- ceph-resource

netbox/resources/300-testbed-manager.yml

+22
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,30 @@
3232
device: testbed-manager
3333
name: Ethernet3
3434

35+
- cable:
36+
type: cat6a
37+
termination_a_type: dcim.interface
38+
termination_a:
39+
device: testbed-switch-oob
40+
name: Ethernet5
41+
termination_b_type: dcim.interface
42+
termination_b:
43+
device: testbed-manager
44+
name: Ethernet0
45+
46+
- ip_address:
47+
address: 172.16.0.5/20
48+
assigned_object:
49+
name: Ethernet0
50+
device: testbed-manager
51+
3552
- ip_address:
3653
address: 192.168.16.5/20
3754
assigned_object:
3855
name: Ethernet1
3956
device: testbed-manager
57+
58+
- device:
59+
name: testbed-manager
60+
oob_ip: 172.16.0.5/20
61+
primary_ip4: 192.168.16.5/20

netbox/resources/300-testbed-node-0.yml

+22
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,30 @@
3232
device: testbed-node-0
3333
name: Ethernet3
3434

35+
- cable:
36+
type: cat6a
37+
termination_a_type: dcim.interface
38+
termination_a:
39+
device: testbed-switch-oob
40+
name: Ethernet10
41+
termination_b_type: dcim.interface
42+
termination_b:
43+
device: testbed-node-0
44+
name: Ethernet0
45+
46+
- ip_address:
47+
address: 172.16.0.10/20
48+
assigned_object:
49+
name: Ethernet0
50+
device: testbed-node-0
51+
3552
- ip_address:
3653
address: 192.168.16.10/20
3754
assigned_object:
3855
name: Ethernet1
3956
device: testbed-node-0
57+
58+
- device:
59+
name: testbed-node-0
60+
oob_ip: 172.16.0.10/20
61+
primary_ip4: 192.168.16.10/20

netbox/resources/300-testbed-node-1.yml

+22
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,30 @@
3232
device: testbed-node-1
3333
name: Ethernet3
3434

35+
- cable:
36+
type: cat6a
37+
termination_a_type: dcim.interface
38+
termination_a:
39+
device: testbed-switch-oob
40+
name: Ethernet11
41+
termination_b_type: dcim.interface
42+
termination_b:
43+
device: testbed-node-1
44+
name: Ethernet0
45+
46+
- ip_address:
47+
address: 172.16.0.11/20
48+
assigned_object:
49+
name: Ethernet0
50+
device: testbed-node-1
51+
3552
- ip_address:
3653
address: 192.168.16.11/20
3754
assigned_object:
3855
name: Ethernet1
3956
device: testbed-node-1
57+
58+
- device:
59+
name: testbed-node-1
60+
oob_ip: 172.16.0.11/20
61+
primary_ip4: 192.168.16.11/20

netbox/resources/300-testbed-node-2.yml

+22
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,30 @@
3232
device: testbed-node-2
3333
name: Ethernet3
3434

35+
- cable:
36+
type: cat6a
37+
termination_a_type: dcim.interface
38+
termination_a:
39+
device: testbed-switch-oob
40+
name: Ethernet12
41+
termination_b_type: dcim.interface
42+
termination_b:
43+
device: testbed-node-2
44+
name: Ethernet0
45+
46+
- ip_address:
47+
address: 172.16.0.12/20
48+
assigned_object:
49+
name: Ethernet0
50+
device: testbed-node-2
51+
3552
- ip_address:
3653
address: 192.168.16.12/20
3754
assigned_object:
3855
name: Ethernet1
3956
device: testbed-node-2
57+
58+
- device:
59+
name: testbed-node-2
60+
oob_ip: 172.16.0.12/20
61+
primary_ip4: 192.168.16.12/20

netbox/resources/300-testbed-node-3.yml

+22
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,30 @@
3232
device: testbed-node-3
3333
name: Ethernet3
3434

35+
- cable:
36+
type: cat6a
37+
termination_a_type: dcim.interface
38+
termination_a:
39+
device: testbed-switch-oob
40+
name: Ethernet13
41+
termination_b_type: dcim.interface
42+
termination_b:
43+
device: testbed-node-3
44+
name: Ethernet0
45+
46+
- ip_address:
47+
address: 172.16.0.13/20
48+
assigned_object:
49+
name: Ethernet0
50+
device: testbed-node-3
51+
3552
- ip_address:
3653
address: 192.168.16.13/20
3754
assigned_object:
3855
name: Ethernet1
3956
device: testbed-node-3
57+
58+
- device:
59+
name: testbed-node-3
60+
oob_ip: 172.16.0.13/20
61+
primary_ip4: 192.168.16.13/20

0 commit comments

Comments
 (0)