Skip to content

Commit c83ee06

Browse files
authored
Refactor subnet module to handle folders (#105)
Our `subnet` module needs to be refactored due to splitting up folder and subnet handling into two modules. For that reason we need to remove `is_folder` and add `folder` parameter. For resolving a folder name to its corresponding id we can use already implemented methods.
1 parent 2f3254e commit c83ee06

File tree

8 files changed

+89
-25
lines changed

8 files changed

+89
-25
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
enhancements:
2+
- Refactore `subnet` module to handle subnets in folders

docs/plugins/subnet_module.rst

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -380,21 +380,21 @@ Parameters
380380
* - .. raw:: html
381381

382382
<div class="ansible-option-cell">
383-
<div class="ansibleOptionAnchor" id="parameter-is_folder"></div>
383+
<div class="ansibleOptionAnchor" id="parameter-folder"></div>
384384

385-
.. _ansible_collections.codeaffen.phpipam.subnet_module__parameter-is_folder:
385+
.. _ansible_collections.codeaffen.phpipam.subnet_module__parameter-folder:
386386

387387
.. rst-class:: ansible-option-title
388388

389-
**is_folder**
389+
**folder**
390390

391391
.. raw:: html
392392

393-
<a class="ansibleOptionLink" href="#parameter-is_folder" title="Permalink to this option"></a>
393+
<a class="ansibleOptionLink" href="#parameter-folder" title="Permalink to this option"></a>
394394

395395
.. rst-class:: ansible-option-type-line
396396

397-
:ansible-option-type:`boolean`
397+
:ansible-option-type:`string`
398398

399399
.. raw:: html
400400

@@ -404,17 +404,8 @@ Parameters
404404

405405
<div class="ansible-option-cell">
406406

407-
Controls if we are adding subnet or folder
408-
409-
can't be changed after subnet was created
410-
411-
412-
.. rst-class:: ansible-option-line
413-
414-
:ansible-option-choices:`Choices:`
407+
folder name which subnet belongs to
415408

416-
- :ansible-option-default-bold:`no` :ansible-option-default:`← (default)`
417-
- :ansible-option-choices-entry:`yes`
418409

419410
.. raw:: html
420411

plugins/modules/subnet.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,10 @@
8080
required: false
8181
aliases:
8282
- master_subnet_cidr
83+
folder:
84+
description: folder name which subnet belongs to
85+
type: str
86+
required: false
8387
nameserver:
8488
description: Name of the DNS server which should attach to subnet
8589
type: str
@@ -123,13 +127,6 @@
123127
type: bool
124128
required: false
125129
default: no
126-
is_folder:
127-
description:
128-
- Controls if we are adding subnet or folder
129-
- can't be changed after subnet was created
130-
type: bool
131-
required: false
132-
default: no
133130
is_full:
134131
description: Marks subnet as used
135132
type: bool
@@ -212,6 +209,7 @@ def main():
212209
routing_domain=dict(type='str', api_invisible=True, default='default'),
213210
vrf=dict(type='entity', controller='vrf', phpipam_name='vrfId'),
214211
parent=dict(type='entity', phpipam_name='masterSubnetId'),
212+
folder=dict(type='entity', controller='folders', phpipam_name='masterSubnetId'),
215213
nameserver=dict(type='entity', controller='tools/nameservers', phpipam_name='nameserverId'),
216214
show_as_name=dict(type='bool', phpipam_name='showName'),
217215
permissions=dict(type='json'),
@@ -227,7 +225,7 @@ def main():
227225
threshold=dict(type='int'),
228226
location=dict(type='entity', controller='tools/locations'),
229227
),
230-
mutually_exclusive=['cidr', 'subnet'],
228+
mutually_exclusive=[['cidr', 'subnet'], ['parent', 'folder']],
231229
required_together=[['subnet', 'mask']],
232230
)
233231

tests/test_playbooks/folder_parent.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
- name: Delete parent/childre folders
2828
ansible.builtin.include_tasks: tasks/folder.yml
2929
vars:
30-
name: delete folder '{{ subent_loop.cidr }}' again, no change
30+
name: delete folder '{{ subent_loop.cidr }}'
3131
override:
3232
state: absent
3333
folder: "{{ folder_loop | combine(override) }}"

tests/test_playbooks/subnet_parent.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
- name: Delete parent/childre subnets
2828
ansible.builtin.include_tasks: tasks/subnet.yml
2929
vars:
30-
name: delete subnet '{{ subent_loop.cidr }}' again, no change
30+
name: delete subnet '{{ subent_loop.cidr }}'
3131
override:
3232
state: absent
3333
subnet: "{{ subnet_loop | combine(override) }}"
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
---
2+
- name: Subnet and folder module tests
3+
hosts: localhost
4+
collections:
5+
- codeaffen.phpipam
6+
gather_facts: false
7+
vars_files:
8+
- vars/server.yml
9+
- vars/subnet.yml
10+
tasks:
11+
- name: Create entities
12+
block:
13+
- name: Create folder
14+
ansible.builtin.include_tasks: tasks/folder.yml
15+
vars:
16+
name: "create folder '{{ subnet_folder_data.folder }}'"
17+
folder:
18+
name: "{{ subnet_folder_data.folder }}"
19+
section: "{{ subnet_folder_data.section }}"
20+
- name: Create subnet within folder
21+
ansible.builtin.include_tasks: tasks/subnet.yml
22+
vars:
23+
name: "create subnet '{{ subnet_folder_data.cidr }}' within folder '{{ subnet_folder_data.folder }}'"
24+
subnet: "{{ subnet_folder_data }}"
25+
26+
- name: Create entities again, no change
27+
block:
28+
- name: Create folder again, no change
29+
ansible.builtin.include_tasks: tasks/folder.yml
30+
vars:
31+
name: "create folder '{{ subnet_folder_data.folder }}'"
32+
folder:
33+
name: "{{ subnet_folder_data.folder }}"
34+
section: "{{ subnet_folder_data.section }}"
35+
- name: Create subnet within folder again, no change
36+
ansible.builtin.include_tasks: tasks/subnet.yml
37+
vars:
38+
name: "create subnet '{{ subnet_folder_data.cidr }}' within folder '{{ subnet_folder_data.folder }}'"
39+
subnet: "{{ subnet_folder_data }}"
40+
41+
- name: Create subnet with folder and parent section
42+
ansible.builtin.import_tasks: tasks/subnet.yml
43+
vars:
44+
name: "Try to setup subent '{{ subnet_folder_data.cidr }}' with parent and folder set"
45+
fragment:
46+
parent: 10.65.22.0/24
47+
subnet: "{{ subnet_folder_data | combine(fragment) }}"
48+
register: result
49+
ignore_errors: True
50+
51+
- name: Delete entities
52+
block:
53+
- name: Delete subnet
54+
ansible.builtin.include_tasks: tasks/subnet.yml
55+
vars:
56+
name: delete subnet '{{ subnet_folder_data.cidr }}' from folder '{{ subnet_folder_data.folder }}'
57+
override:
58+
state: absent
59+
subnet: "{{ subnet_folder_data | combine(override) }}"
60+
- name: Delete folder
61+
ansible.builtin.include_tasks: tasks/folder.yml
62+
vars:
63+
name: delete folder '{{ subnet_folder_data.folder }}'
64+
folder:
65+
name: "{{ subnet_folder_data.folder }}"
66+
section: "{{ subnet_folder_data.section }}"
67+
state: absent

tests/test_playbooks/tasks/subnet.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
routing_domain: "{{ subnet.routing_domain | default(omit) }}"
1616
vrf: "{{ subnet.vrf | default(omit) }}"
1717
parent: "{{ subnet.parent | default(omit) }}"
18+
folder: "{{ subnet.folder | default(omit) }}"
1819
nameserver: "{{ subnet.nameserver | default(omit) }}"
1920
show_as_name: "{{ subnet.show_as_name | default(omit) }}"
2021
permissions: "{{ subnet.permissions | default(omit) }}"

tests/test_playbooks/vars/subnet.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,8 @@ subnet_parents:
2121
- cidr: 172.16.1.0/24
2222
section: "Customers"
2323
parent: 172.16.0.0/20
24+
25+
subnet_folder_data:
26+
cidr: 10.65.22.0/25
27+
section: "Customers"
28+
folder: "Example folder"

0 commit comments

Comments
 (0)