Skip to content

Commit

Permalink
Fix #9538 Inventory iocage fails when DHCP is enbled.
Browse files Browse the repository at this point in the history
  • Loading branch information
vbotka committed Jan 6, 2025
1 parent 007302d commit 924937e
Show file tree
Hide file tree
Showing 14 changed files with 222 additions and 19 deletions.
35 changes: 28 additions & 7 deletions plugins/inventory/iocage.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,28 @@
display = Display()


def _parse_ip4(ip4):
if ip4 == '-':
return ip4
return re.split('\\||/', ip4)[1]
def _parse_ip4(ip4_addr):
''' Return iocage_ip4 dictionary. default = {msg: '', ip4: []}.
If item matches ifc|IP or ifc|CIDR parse ifc, ip, and mask.
Otherwise, append item to msg.
'''

iocage_ip4 = {}
iocage_ip4['msg'] = ''
iocage_ip4['ip4'] = []

items = ip4_addr.split(',')
for item in items:
if re.match('^\\w+\\|(?:\\d{1,3}\\.){3}\\d{1,3}.*$', item):
i = re.split('\\||/', item)
if len(i) == 3:
iocage_ip4['ip4'].append({'ifc': i[0], 'ip': i[1], 'mask': i[2]})
else:
iocage_ip4['ip4'].append({'ifc': i[0], 'ip': i[1], 'mask': '-'})
else:
iocage_ip4['msg'] += item

return iocage_ip4


class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
Expand Down Expand Up @@ -189,7 +207,6 @@ def get_inventory(self, path):

cmd_list = cmd.copy()
cmd_list.append('list')
cmd_list.append('--header')
cmd_list.append('--long')
try:
p = Popen(cmd_list, stdout=PIPE, stderr=PIPE, env=my_env)
Expand Down Expand Up @@ -234,8 +251,12 @@ def get_inventory(self, path):
return results

def get_jails(self, t_stdout, results):
jails = [x.split() for x in t_stdout.splitlines()]
for jail in jails:
lines = t_stdout.splitlines()
if len(lines) < 5:
return
indices = [i for i, val in enumerate(lines[1]) if val == '|']
for line in lines[3::2]:
jail = [line[i + 1:j].strip() for i, j in zip(indices[:-1], indices[1:])]
iocage_name = jail[1]
results['_meta']['hostvars'][iocage_name] = {}
results['_meta']['hostvars'][iocage_name]['iocage_jid'] = jail[0]
Expand Down
21 changes: 18 additions & 3 deletions tests/unit/plugins/inventory/fixtures/iocage_inventory.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,12 @@ all:
test_101:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.101
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.101
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_properties:
Expand Down Expand Up @@ -157,7 +162,12 @@ all:
test_102:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.102
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.102
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_properties:
Expand Down Expand Up @@ -309,7 +319,12 @@ all:
test_103:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.103
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.103
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_properties:
Expand Down
12 changes: 9 additions & 3 deletions tests/unit/plugins/inventory/fixtures/iocage_jails.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
- test_101 off down jail 13.4-RELEASE-p2 vnet0|10.1.0.101/24 - ansible_client yes
- test_102 off down jail 13.4-RELEASE-p2 vnet0|10.1.0.102/24 - ansible_client yes
- test_103 off down jail 13.4-RELEASE-p2 vnet0|10.1.0.103/24 - ansible_client yes
+------+----------+------+-------+------+-----------------+---------------------+-----+----------------+----------+
| JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL |
+======+==========+======+=======+======+=================+=====================+=====+================+==========+
| - | test_101 | off | down | jail | 13.4-RELEASE-p2 | vnet0|10.1.0.101/24 | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+-----+
| - | test_102 | off | down | jail | 13.4-RELEASE-p2 | vnet0|10.1.0.102/24 | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+-----+
| - | test_103 | off | down | jail | 13.4-RELEASE-p2 | vnet0|10.1.0.103/24 | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+-----+
21 changes: 18 additions & 3 deletions tests/unit/plugins/inventory/fixtures/iocage_jails.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ _meta:
test_101:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.101
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.101
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_release: 13.4-RELEASE-p2
Expand All @@ -13,7 +18,12 @@ _meta:
test_102:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.102
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.102
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_release: 13.4-RELEASE-p2
Expand All @@ -23,7 +33,12 @@ _meta:
test_103:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.103
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.103
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_release: 13.4-RELEASE-p2
Expand Down
9 changes: 9 additions & 0 deletions tests/unit/plugins/inventory/fixtures/iocage_jails_dhcp.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL |
+======+================+======+=======+======+=================+====================+=====+================+==========+
| 268 | test_111 | off | up | jail | 14.1-RELEASE-p6 | epair0b|10.1.0.174 | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| 269 | test_112 | off | up | jail | 14.1-RELEASE-p6 | epair0b|10.1.0.147 | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| 270 | test_113 | off | up | jail | 14.1-RELEASE-p6 | epair0b|10.1.0.231 | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
SPDX-License-Identifier: GPL-3.0-or-later
SPDX-FileCopyrightText: Ansible Project
47 changes: 47 additions & 0 deletions tests/unit/plugins/inventory/fixtures/iocage_jails_dhcp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
_meta:
hostvars:
test_111:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4:
ip4:
- ifc: epair0b
ip: 10.1.0.174
mask: '-'
msg: ''
iocage_ip6: '-'
iocage_jid: '268'
iocage_release: 14.1-RELEASE-p6
iocage_state: up
iocage_template: ansible_client
iocage_type: jail
test_112:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4:
ip4:
- ifc: epair0b
ip: 10.1.0.147
mask: '-'
msg: ''
iocage_ip6: '-'
iocage_jid: '269'
iocage_release: 14.1-RELEASE-p6
iocage_state: up
iocage_template: ansible_client
iocage_type: jail
test_113:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4:
ip4:
- ifc: epair0b
ip: 10.1.0.231
mask: '-'
msg: ''
iocage_ip6: '-'
iocage_jid: '270'
iocage_release: 14.1-RELEASE-p6
iocage_state: up
iocage_template: ansible_client
iocage_type: jail
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
SPDX-License-Identifier: GPL-3.0-or-later
SPDX-FileCopyrightText: Ansible Project
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| JID | NAME | BOOT | STATE | TYPE | RELEASE | IP4 | IP6 | TEMPLATE | BASEJAIL |
+======+================+======+=======+======+=================+====================+=====+================+==========+
| None | test_111 | off | down | jail | 14.1-RELEASE-p6 | DHCP (not running) | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| None | test_112 | off | down | jail | 14.1-RELEASE-p6 | DHCP (not running) | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
| None | test_113 | off | down | jail | 14.1-RELEASE-p6 | DHCP (not running) | - | ansible_client | yes |
+------+----------------+------+-------+------+-----------------+--------------------+-----+----------------+----------+
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
SPDX-License-Identifier: GPL-3.0-or-later
SPDX-FileCopyrightText: Ansible Project
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
_meta:
hostvars:
test_111:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4:
ip4: []
msg: 'DHCP (not running)'
iocage_ip6: '-'
iocage_jid: 'None'
iocage_release: 14.1-RELEASE-p6
iocage_state: down
iocage_template: ansible_client
iocage_type: jail
test_112:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4:
ip4: []
msg: 'DHCP (not running)'
iocage_ip6: '-'
iocage_jid: 'None'
iocage_release: 14.1-RELEASE-p6
iocage_state: down
iocage_template: ansible_client
iocage_type: jail
test_113:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4:
ip4: []
msg: 'DHCP (not running)'
iocage_ip6: '-'
iocage_jid: 'None'
iocage_release: 14.1-RELEASE-p6
iocage_state: down
iocage_template: ansible_client
iocage_type: jail
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
SPDX-License-Identifier: GPL-3.0-or-later
SPDX-FileCopyrightText: Ansible Project
21 changes: 18 additions & 3 deletions tests/unit/plugins/inventory/fixtures/iocage_properties.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ _meta:
test_101:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.101
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.101
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_properties:
Expand Down Expand Up @@ -155,7 +160,12 @@ _meta:
test_102:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.102
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.102
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_properties:
Expand Down Expand Up @@ -307,7 +317,12 @@ _meta:
test_103:
iocage_basejail: 'yes'
iocage_boot: 'off'
iocage_ip4: 10.1.0.103
iocage_ip4:
ip4:
- ifc: vnet0
ip: 10.1.0.103
mask: '24'
msg: ''
iocage_ip6: '-'
iocage_jid: '-'
iocage_properties:
Expand Down
16 changes: 16 additions & 0 deletions tests/unit/plugins/inventory/test_iocage.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ def inventory():
inv.templar = Templar(None)
inv.jails = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_jails.txt')
inv.js_ok = load_yml_data('tests/unit/plugins/inventory/fixtures/iocage_jails.yml')
inv.jails_dhcp = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_jails_dhcp.txt')
inv.js_dhcp_ok = load_yml_data('tests/unit/plugins/inventory/fixtures/iocage_jails_dhcp.yml')
inv.jails_dhcp_nr = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_jails_dhcp_not_running.txt')
inv.js_dhcp_nr_ok = load_yml_data('tests/unit/plugins/inventory/fixtures/iocage_jails_dhcp_not_running.yml')
prpts_101 = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_properties_test_101.txt')
prpts_102 = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_properties_test_102.txt')
prpts_103 = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_properties_test_103.txt')
Expand Down Expand Up @@ -72,10 +76,22 @@ def test_verify_file(tmp_path, inventory):


def test_get_jails(inventory):

# jails
results = {'_meta': {'hostvars': {}}}
inventory.get_jails(inventory.jails, results)
assert results == inventory.js_ok

# jails_dhcp
results = {'_meta': {'hostvars': {}}}
inventory.get_jails(inventory.jails_dhcp, results)
assert results == inventory.js_dhcp_ok

# jails_dhcp_not_running
results = {'_meta': {'hostvars': {}}}
inventory.get_jails(inventory.jails_dhcp_nr, results)
assert results == inventory.js_dhcp_nr_ok


def test_get_properties(inventory):
results = {'_meta': {'hostvars': {}}}
Expand Down

0 comments on commit 924937e

Please sign in to comment.