Compare commits

...

4 commits

Author SHA1 Message Date
Zhanibek Adilbekov
5ab5843a02
Merge c4ff0545f1 into 5f44339fa5 2026-01-04 12:07:59 +08:00
softwarefactory-project-zuul[bot]
5f44339fa5
Merge pull request #693 from saito-hideki/pr/ci_2025120500
[CI] Update AZP CI matrix and sanity tests

SUMMARY

Update AZP CI matrix. Bump the remote target version for 2.16 and 2.17
Add ignore file for Ansible Core 2.21 for the current devel version sanity test

ISSUE TYPE

CI tests Pull Request

COMPONENT NAME

ansible.posix

ADDITIONAL INFORMATION
None
2025-12-09 05:56:49 +00:00
Hideki Saito
7d5aef07e2
Update AZP CI matrix and sanity test
* Update AZP CI matrix
* Add ignore file for Ansible Core 2.21
* Remove ignore lines for ansible-bad-import-from in 2.20 sanity tests

Signed-off-by: Hideki Saito <saito@fgrep.org>
2025-12-09 05:23:05 +00:00
Zhanibek Adilbekov
c4ff0545f1
Firewalld: Add functionality to set source_port 2025-08-01 14:21:01 +05:00
8 changed files with 267 additions and 19 deletions

View file

@ -57,6 +57,21 @@ stages:
test: units
- name: Lint
test: lint
- stage: Sanity_2_20
displayName: Ansible 2.20 Sanity & Units & Lint
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: "{0}"
testFormat: 2.20/{0}
targets:
- name: Sanity
test: sanity
- name: Units
test: units
- name: Lint
test: lint
- stage: Sanity_2_19
displayName: Ansible 2.19 Sanity & Units & Lint
dependsOn: []
@ -132,6 +147,20 @@ stages:
test: ubuntu2204
- name: Ubuntu 24.04
test: ubuntu2404
- stage: Docker_2_20
displayName: Docker 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.20/linux/{0}/1
targets:
- name: Fedora 42
test: fedora42
- name: Ubuntu 22.04
test: ubuntu2204
- name: Ubuntu 24.04
test: ubuntu2404
- stage: Docker_2_19
displayName: Docker 2.19
dependsOn: []
@ -204,6 +233,22 @@ stages:
test: freebsd/14.3
- name: FreeBSD 13.5
test: freebsd/13.5
- stage: Remote_2_20
displayName: Remote 2.20
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.20/{0}/1
targets:
- name: RHEL 10.0
test: rhel/10.0
- name: RHEL 9.6
test: rhel/9.6
- name: FreeBSD 14.3
test: freebsd/14.3
- name: FreeBSD 13.5
test: freebsd/13.5
- stage: Remote_2_19
displayName: Remote 2.19
dependsOn: []
@ -228,6 +273,8 @@ stages:
parameters:
testFormat: 2.18/{0}/1
targets:
- name: RHEL 10.0
test: rhel/10.0
- name: RHEL 9.4
test: rhel/9.4
- name: FreeBSD 13.5
@ -240,8 +287,9 @@ stages:
parameters:
testFormat: 2.17/{0}/1
targets:
- name: RHEL 9.3
test: rhel/9.3
# 2.17 remote target doesn't have RHEL 9 image
- name: RHEL 10.0
test: rhel/10.0
- name: FreeBSD 13.5
test: freebsd/13.5
- stage: Remote_2_16
@ -252,10 +300,9 @@ stages:
parameters:
testFormat: 2.16/{0}/1
targets:
- name: RHEL 8.8
test: rhel/8.8
- name: RHEL 9.2
test: rhel/9.2
# 2.16 remote target only has RHEL 9.6 image
- name: RHEL 9.6
test: rhel/9.6
## Finally
@ -274,6 +321,9 @@ stages:
- Sanity_2_19
- Remote_2_19
- Docker_2_19
- Sanity_2_20
- Remote_2_20
- Docker_2_20
- Sanity_devel
- Remote_devel
- Docker_devel

View file

@ -0,0 +1,5 @@
---
trivial:
- AZP - Update AZP matrix to follow ansible-test changes.
- Add ignore file for Ansible Core 2.21.
- Remove ignore lines for ansible-bad-import-from in 2.20 sanity tests.

View file

@ -28,6 +28,11 @@ options:
- Name of a port or port range to add/remove to/from firewalld.
- Must be in the form PORT/PROTOCOL or PORT-PORT/PROTOCOL for port ranges.
type: str
source_port:
description:
- Name of a source port or port range to add/remove to/from firewalld.
- Must be in the form PORT/PROTOCOL or PORT-PORT/PROTOCOL for port ranges.
type: str
port_forward:
description:
- Port and protocol to forward using firewalld.
@ -185,6 +190,13 @@ EXAMPLES = r'''
permanent: true
state: enabled
- name: Permit traffic in home zone from port 20561/udp
ansible.posix.firewalld:
source_port: 20561/udp
zone: home
permanent: true
state: enabled
- name: Permit traffic in dmz zone on http service
ansible.posix.firewalld:
zone: dmz
@ -552,6 +564,43 @@ class PortTransaction(FirewallTransaction):
self.update_fw_settings(fw_zone, fw_settings)
class SourcePortTransaction(FirewallTransaction):
"""
SourcePortTransaction
"""
def __init__(self, module, action_args=None, zone=None, desired_state=None, permanent=False, immediate=False):
super(SourcePortTransaction, self).__init__(
module, action_args=action_args, desired_state=desired_state, zone=zone, permanent=permanent, immediate=immediate
)
def get_enabled_immediate(self, port, protocol, timeout):
if self.fw_offline:
dummy, fw_settings = self.get_fw_zone_settings()
return fw_settings.querySourcePort(port=port, protocol=protocol)
return self.fw.querySourcePort(zone=self.zone, port=port, protocol=protocol)
def get_enabled_permanent(self, port, protocol, timeout):
dummy, fw_settings = self.get_fw_zone_settings()
return fw_settings.querySourcePort(port=port, protocol=protocol)
def set_enabled_immediate(self, port, protocol, timeout):
self.fw.addSourcePort(zone=self.zone, port=port, protocol=protocol, timeout=timeout)
def set_enabled_permanent(self, port, protocol, timeout):
fw_zone, fw_settings = self.get_fw_zone_settings()
fw_settings.addSourcePort(port=port, protocol=protocol)
self.update_fw_settings(fw_zone, fw_settings)
def set_disabled_immediate(self, port, protocol, timeout):
self.fw.removeSourcePort(zone=self.zone, port=port, protocol=protocol)
def set_disabled_permanent(self, port, protocol, timeout):
fw_zone, fw_settings = self.get_fw_zone_settings()
fw_settings.removeSourcePort(port=port, protocol=protocol)
self.update_fw_settings(fw_zone, fw_settings)
class InterfaceTransaction(FirewallTransaction):
"""
InterfaceTransaction
@ -879,6 +928,7 @@ def main():
service=dict(type='str'),
protocol=dict(type='str'),
port=dict(type='str'),
source_port=dict(type='str'),
port_forward=dict(type='list', elements='dict'),
rich_rule=dict(type='str'),
zone=dict(type='str'),
@ -900,8 +950,8 @@ def main():
source=('permanent',),
),
mutually_exclusive=[
['icmp_block', 'icmp_block_inversion', 'service', 'protocol', 'port', 'port_forward', 'rich_rule',
'interface', 'forward', 'masquerade', 'source', 'target']
['icmp_block', 'icmp_block_inversion', 'service', 'protocol', 'port', 'source_port', 'port_forward',
'rich_rule', 'interface', 'forward', 'masquerade', 'source', 'target']
],
)
@ -957,6 +1007,17 @@ def main():
else:
port_protocol = None
source_port = None
if module.params['source_port'] is not None:
if '/' in module.params['source_port']:
source_port, source_port_protocol = module.params['source_port'].strip().split('/')
else:
source_port_protocol = None
if not source_port_protocol:
module.fail_json(msg='improper source_port format (missing protocol?)')
else:
source_port_protocol = None
port_forward_toaddr = ''
port_forward = None
if module.params['port_forward'] is not None:
@ -973,7 +1034,7 @@ def main():
port_forward_toaddr = port_forward['toaddr']
modification = False
if any([icmp_block, icmp_block_inversion, service, protocol, port, port_forward, rich_rule,
if any([icmp_block, icmp_block_inversion, service, protocol, port, source_port, port_forward, rich_rule,
interface, forward, masquerade, source, target]):
modification = True
if modification and desired_state in ['absent', 'present'] and target is None:
@ -1079,6 +1140,26 @@ def main():
)
)
if source_port is not None:
transaction = SourcePortTransaction(
module,
action_args=(source_port, source_port_protocol, timeout),
zone=zone,
desired_state=desired_state,
permanent=permanent,
immediate=immediate,
)
changed, transaction_msgs = transaction.run()
msgs = msgs + transaction_msgs
if changed is True:
msgs.append(
"Changed source_port %s to %s" % (
"%s/%s" % (source_port, source_port_protocol), desired_state
)
)
if port_forward is not None:
transaction = ForwardPortTransaction(
module,

View file

@ -21,6 +21,10 @@
- name: Include port test cases for firewalld module
ansible.builtin.include_tasks: port_test_cases.yml
# firewalld source_port operation test cases
- name: Include source_port test cases for firewalld module
ansible.builtin.include_tasks: source_port_test_cases.yml
# firewalld source operation test cases
- name: Include source test cases for firewalld module
ansible.builtin.include_tasks: source_test_cases.yml

View file

@ -0,0 +1,107 @@
---
# Test playbook for the firewalld module - source_port operations
- name: Firewalld source_port range test permanent enabled
ansible.posix.firewalld:
source_port: 5500-6850/tcp
permanent: true
state: enabled
register: result
- name: Assert firewalld source_port range test permanent enabled worked
ansible.builtin.assert:
that:
- result is changed
- name: Firewalld source_port range test permanent enabled rerun (verify not changed)
ansible.posix.firewalld:
source_port: 5500-6850/tcp
permanent: true
state: enabled
register: result
- name: Assert firewalld source_port range test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert:
that:
- result is not changed
- name: Firewalld source_port test permanent enabled
ansible.posix.firewalld:
source_port: 6900/tcp
permanent: true
state: enabled
register: result
- name: Assert firewalld source_port test permanent enabled worked
ansible.builtin.assert:
that:
- result is changed
- name: Firewalld source_port test permanent enabled
ansible.posix.firewalld:
source_port: 6900/tcp
permanent: true
state: enabled
register: result
- name: Assert firewalld source_port test permanent enabled worked
ansible.builtin.assert:
that:
- result is not changed
- name: Firewalld source_port test disabled
ansible.posix.firewalld:
source_port: "{{ item }}"
permanent: true
state: disabled
loop:
- 6900/tcp
- 5500-6850/tcp
- name: Firewalld source_port test permanent enabled
ansible.posix.firewalld:
source_port: 8081/tcp
permanent: true
state: enabled
register: result
- name: Assert firewalld source_port test permanent enabled worked
ansible.builtin.assert:
that:
- result is changed
- name: Firewalld source_port test permanent enabled rerun (verify not changed)
ansible.posix.firewalld:
source_port: 8081/tcp
permanent: true
state: enabled
register: result
- name: Assert firewalld source_port test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert:
that:
- result is not changed
- name: Firewalld source_port test permanent disabled
ansible.posix.firewalld:
source_port: 8081/tcp
permanent: true
state: disabled
register: result
- name: Assert firewalld source_port test permanent disabled worked
ansible.builtin.assert:
that:
- result is changed
- name: Firewalld source_port test permanent disabled rerun (verify not changed)
ansible.posix.firewalld:
source_port: 8081/tcp
permanent: true
state: disabled
register: result
- name: Assert firewalld source_port test permanent disabled rerun worked (verify not changed)
ansible.builtin.assert:
that:
- result is not changed

View file

@ -85,4 +85,4 @@
- result is not changed
- >
result.msg == 'parameters are mutually exclusive:
icmp_block|icmp_block_inversion|service|protocol|port|port_forward|rich_rule|interface|forward|masquerade|source|target'
icmp_block|icmp_block_inversion|service|protocol|port|source_port|port_forward|rich_rule|interface|forward|masquerade|source|target'

View file

@ -1,10 +1 @@
tests/utils/shippable/timing.py shebang
plugins/action/synchronize.py pylint:ansible-bad-import-from
plugins/callback/cgroup_perf_recap.py pylint:ansible-bad-import-from
plugins/modules/mount.py pylint:ansible-bad-import-from
plugins/modules/sysctl.py pylint:ansible-bad-import-from
plugins/shell/csh.py pylint:ansible-bad-import-from
plugins/shell/fish.py pylint:ansible-bad-import-from
tests/unit/mock/procenv.py pylint:ansible-bad-import-from
tests/unit/mock/yaml_helper.py pylint:ansible-bad-import-from
tests/unit/modules/conftest.py pylint:ansible-bad-import-from

View file

@ -0,0 +1,10 @@
tests/utils/shippable/timing.py shebang
plugins/action/synchronize.py pylint:ansible-bad-import-from
plugins/callback/cgroup_perf_recap.py pylint:ansible-bad-import-from
plugins/modules/mount.py pylint:ansible-bad-import-from
plugins/modules/sysctl.py pylint:ansible-bad-import-from
plugins/shell/csh.py pylint:ansible-bad-import-from
plugins/shell/fish.py pylint:ansible-bad-import-from
tests/unit/mock/procenv.py pylint:ansible-bad-import-from
tests/unit/mock/yaml_helper.py pylint:ansible-bad-import-from
tests/unit/modules/conftest.py pylint:ansible-bad-import-from