mirror of
https://github.com/ansible-collections/ansible.posix.git
synced 2026-01-12 23:55:19 +01:00
Compare commits
19 commits
0f05be1ede
...
73883977bb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
73883977bb | ||
|
|
7e4d5dd7a9 | ||
|
|
e05b8507a4 | ||
|
|
4f0114eb57 | ||
|
|
6ab2053005 | ||
|
|
e26d9664ba | ||
|
|
97c022871b | ||
|
|
d968ac441e | ||
|
|
e00a4299c1 | ||
|
|
0ed72d0004 | ||
|
|
4efdb43ccd | ||
|
|
52d140895b | ||
|
|
257392f33d | ||
|
|
0df6c21af4 | ||
|
|
71b48d3b5f | ||
|
|
8cdf51b3b3 | ||
|
|
0b6eb4506b | ||
|
|
dea22dcf4e | ||
|
|
dd3b97069b |
32 changed files with 357 additions and 75 deletions
|
|
@ -5,6 +5,48 @@ ansible.posix Release Notes
|
||||||
.. contents:: Topics
|
.. contents:: Topics
|
||||||
|
|
||||||
|
|
||||||
|
v1.6.0
|
||||||
|
======
|
||||||
|
|
||||||
|
Release Summary
|
||||||
|
---------------
|
||||||
|
|
||||||
|
This is the minor release of the ``ansible.posix`` collection.
|
||||||
|
This changelog contains all changes to the modules and plugins
|
||||||
|
in this collection that have been added after the release of
|
||||||
|
``ansible.posix`` 1.5.4.
|
||||||
|
|
||||||
|
Major Changes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- Dropping support for Ansible 2.9, ansible-core 2.15 will be minimum required version for this release
|
||||||
|
|
||||||
|
Minor Changes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- Add summary_only parameter to profile_roles and profile_tasks callbacks.
|
||||||
|
- firewalld - add functionality to set forwarding (https://github.com/ansible-collections/ansible.posix/pull/548).
|
||||||
|
- firewalld - added offline flag implementation (https://github.com/ansible-collections/ansible.posix/pull/484)
|
||||||
|
- firewalld - respawn module to use the system python interpreter when the ``firewall`` python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
- firewalld_info - Only warn about ignored zones, when there are zones ignored.
|
||||||
|
- firewalld_info - respawn module to use the system python interpreter when the ``firewall`` python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
- mount - add no_log option for opts parameter (https://github.com/ansible-collections/ansible.posix/pull/563).
|
||||||
|
- seboolean - respawn module to use the system python interpreter when the ``selinux`` python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
- selinux - respawn module to use the system python interpreter when the ``selinux`` python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
|
||||||
|
Removed Features (previously deprecated)
|
||||||
|
----------------------------------------
|
||||||
|
|
||||||
|
- skippy - Remove skippy pluglin as it is no longer supported(https://github.com/ansible-collections/ansible.posix/issues/350).
|
||||||
|
|
||||||
|
Bugfixes
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Bugfix in the documentation regarding the path option for authorised_key(https://github.com/ansible-collections/ansible.posix/issues/483).
|
||||||
|
- seboolean - make it work with disabled SELinux
|
||||||
|
- synchronize - maintain proper formatting of the remote paths (https://github.com/ansible-collections/ansible.posix/pull/361).
|
||||||
|
- sysctl - fix sysctl to work properly on symlinks (https://github.com/ansible-collections/ansible.posix/issues/111).
|
||||||
|
|
||||||
v1.5.4
|
v1.5.4
|
||||||
======
|
======
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ For more information about communication, see the [Ansible communication guide](
|
||||||
<!--start requires_ansible-->
|
<!--start requires_ansible-->
|
||||||
## Ansible version compatibility
|
## Ansible version compatibility
|
||||||
|
|
||||||
This collection has been tested against following Ansible versions: **>=2.14**.
|
This collection has been tested against following Ansible versions: **>=2.15**.
|
||||||
<!--end requires_ansible-->
|
<!--end requires_ansible-->
|
||||||
|
|
||||||
## Included content
|
## Included content
|
||||||
|
|
@ -74,10 +74,10 @@ None
|
||||||
|
|
||||||
<!-- List the versions of Ansible the collection has been tested with. Must match what is in galaxy.yml. -->
|
<!-- List the versions of Ansible the collection has been tested with. Must match what is in galaxy.yml. -->
|
||||||
|
|
||||||
- ansible-core 2.17 (devel)
|
- ansible-core 2.18 (devel)
|
||||||
|
- ansible-core 2.17 (stable)
|
||||||
- ansible-core 2.16 (stable)
|
- ansible-core 2.16 (stable)
|
||||||
- ansible-core 2.15 (stable)
|
- ansible-core 2.15 (stable)
|
||||||
- ansible-core 2.14 (stable)
|
|
||||||
|
|
||||||
## Roadmap
|
## Roadmap
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -347,3 +347,61 @@ releases:
|
||||||
- 451_firewall_fix_protocol_parameter.yml
|
- 451_firewall_fix_protocol_parameter.yml
|
||||||
- 456_sysctl_fix_nonetype.yml
|
- 456_sysctl_fix_nonetype.yml
|
||||||
release_date: '2023-05-10'
|
release_date: '2023-05-10'
|
||||||
|
1.6.0:
|
||||||
|
changes:
|
||||||
|
bugfixes:
|
||||||
|
- Bugfix in the documentation regarding the path option for authorised_key(https://github.com/ansible-collections/ansible.posix/issues/483).
|
||||||
|
- seboolean - make it work with disabled SELinux
|
||||||
|
- synchronize - maintain proper formatting of the remote paths (https://github.com/ansible-collections/ansible.posix/pull/361).
|
||||||
|
- sysctl - fix sysctl to work properly on symlinks (https://github.com/ansible-collections/ansible.posix/issues/111).
|
||||||
|
major_changes:
|
||||||
|
- Dropping support for Ansible 2.9, ansible-core 2.15 will be minimum required
|
||||||
|
version for this release
|
||||||
|
minor_changes:
|
||||||
|
- Add summary_only parameter to profile_roles and profile_tasks callbacks.
|
||||||
|
- firewalld - add functionality to set forwarding (https://github.com/ansible-collections/ansible.posix/pull/548).
|
||||||
|
- firewalld - added offline flag implementation (https://github.com/ansible-collections/ansible.posix/pull/484)
|
||||||
|
- firewalld - respawn module to use the system python interpreter when the ``firewall``
|
||||||
|
python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
- firewalld_info - Only warn about ignored zones, when there are zones ignored.
|
||||||
|
- firewalld_info - respawn module to use the system python interpreter when
|
||||||
|
the ``firewall`` python module is not available for ``ansible_python_interpreter``
|
||||||
|
(https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
- mount - add no_log option for opts parameter (https://github.com/ansible-collections/ansible.posix/pull/563).
|
||||||
|
- seboolean - respawn module to use the system python interpreter when the ``selinux``
|
||||||
|
python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
- selinux - respawn module to use the system python interpreter when the ``selinux``
|
||||||
|
python module is not available for ``ansible_python_interpreter`` (https://github.com/ansible-collections/ansible.posix/pull/460).
|
||||||
|
release_summary: 'This is the minor release of the ``ansible.posix`` collection.
|
||||||
|
|
||||||
|
This changelog contains all changes to the modules and plugins
|
||||||
|
|
||||||
|
in this collection that have been added after the release of
|
||||||
|
|
||||||
|
``ansible.posix`` 1.5.4.'
|
||||||
|
removed_features:
|
||||||
|
- skippy - Remove skippy pluglin as it is no longer supported(https://github.com/ansible-collections/ansible.posix/issues/350).
|
||||||
|
fragments:
|
||||||
|
- 1.6.0.yml
|
||||||
|
- 206_fix_sysctl_to_work_on_symlinks.yml
|
||||||
|
- 333_doc_absent_precision.yml
|
||||||
|
- 361_maintain_proper_formating_remote_paths.yml
|
||||||
|
- 421-remove-deprecation-warning.yml
|
||||||
|
- 460-respawn.yaml
|
||||||
|
- 466-tests.yml
|
||||||
|
- 477_ci_update.yml
|
||||||
|
- 484-firewalld-offline.yml
|
||||||
|
- 487_ci_update.yml
|
||||||
|
- 490_doc_authorized_key_path.yml
|
||||||
|
- 496_seboolean-make-it-wrk-with-SELinux-disabled.yaml
|
||||||
|
- 504-firewalld_info-warning.yaml
|
||||||
|
- 508_ci_update.yml
|
||||||
|
- 510_ci_update.yml
|
||||||
|
- 511_profile-callbacks-add-summary-only-parameter.yml
|
||||||
|
- 548_add_foward.yml
|
||||||
|
- 556_remove_skippy_callback.yml
|
||||||
|
- 562_update_core_version.yml
|
||||||
|
- 563_add_no_log_option.yml
|
||||||
|
- dropping-ansible29.yml
|
||||||
|
- test-reqs.yml
|
||||||
|
release_date: '2024-09-11'
|
||||||
|
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
bugfixes:
|
|
||||||
- sysctl - fix sysctl to work properly on symlinks (https://github.com/ansible-collections/ansible.posix/issues/111).
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
trivial:
|
|
||||||
- mount - fix description in the documentation of the state ``absent`` to match its actual behavior
|
|
||||||
and point out that ``src`` is ignored with state ``absent`` and ``unmounted`` (https://github.com/ansible-collections/ansible.posix/issues/322)
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
trivial:
|
|
||||||
- synchronize - instantiate the connection plugin without the ``new_stdin`` argument, which is deprecated in ansible-core 2.15 (https://github.com/ansible-collections/ansible.posix/pull/421).
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- synchronize - user-defined ``--out-format`` in ``rsync_opts`` is now honored in the returned output. (https://github.com/ansible-collections/ansible.posix/pull/428)
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
---
|
|
||||||
minor_changes:
|
|
||||||
- "seboolean - respawn module to use the system python interpreter when the ``selinux`` python module is not available for ``ansible_python_interpreter``
|
|
||||||
(https://github.com/ansible-collections/ansible.posix/pull/460)."
|
|
||||||
- "selinux - respawn module to use the system python interpreter when the ``selinux`` python module is not available for ``ansible_python_interpreter``
|
|
||||||
(https://github.com/ansible-collections/ansible.posix/pull/460)."
|
|
||||||
- "firewalld - respawn module to use the system python interpreter when the ``firewall`` python module is not available for ``ansible_python_interpreter``
|
|
||||||
(https://github.com/ansible-collections/ansible.posix/pull/460)."
|
|
||||||
- "firewalld_info - respawn module to use the system python interpreter when the ``firewall`` python module is not available for ``ansible_python_interpreter``
|
|
||||||
(https://github.com/ansible-collections/ansible.posix/pull/460)."
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
trivial:
|
|
||||||
- "Fix integration tests so they work with ansible-core devel / 2.16 (https://github.com/ansible-collections/ansible.posix/pull/466)."
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
trivial:
|
|
||||||
- "Drop Python3.9 and update versions of RHEL,Fedora and FreeBSD for ansible-core:devel test(https://github.com/ansible-collections/ansible.posix/issues/476)."
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
minor_changes:
|
|
||||||
- firewalld - added offline flag implementation (https://github.com/ansible-collections/ansible.posix/pull/484)
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
trivial:
|
|
||||||
- "Drop FreeBSD12.4 from CI for ansible-core:devel(https://github.com/ansible-collections/ansible.posix/issues/486)."
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
bugfixes:
|
|
||||||
- "Bugfix in the documentation regarding the path option for authorised_key(https://github.com/ansible-collections/ansible.posix/issues/483)."
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
bugfixes:
|
|
||||||
- seboolean - make it work with disabled SELinux
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
minor_changes:
|
|
||||||
- firewalld_info - Only warn about ignored zones, when there are zones ignored.
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
trivial:
|
|
||||||
- "Refactoring remote CI targets."
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
trivial:
|
|
||||||
- "Replace Fedora 38 with 39 for container test(https://github.com/ansible-collections/ansible.posix/issues/509)."
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
minor_changes:
|
|
||||||
- "Add summary_only parameter to profile_roles and profile_tasks callbacks."
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
removed_features:
|
|
||||||
- skippy - Remove skippy pluglin as it is no longer supported(https://github.com/ansible-collections/ansible.posix/issues/350).
|
|
||||||
3
changelogs/fragments/566_bump_version_161.yml
Normal file
3
changelogs/fragments/566_bump_version_161.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
trivial:
|
||||||
|
- Bump version to 1.6.1 for next release.
|
||||||
3
changelogs/fragments/567_remove_version_added.yml
Normal file
3
changelogs/fragments/567_remove_version_added.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
trivial:
|
||||||
|
- mount - remove wrong version_added section from ``opts_no_log``.
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
major_changes:
|
|
||||||
- "Dropping support for Ansible 2.9, ansible-core 2.14 will be minimum required version for this release"
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
||||||
trivial:
|
|
||||||
- "Move Galaxy test requirements from old transitional format in tests/requirements.yml to standard Ansible Galaxy requirements files in tests/integration/requirements.yml and tests/unit/requirements.yml."
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
namespace: ansible
|
namespace: ansible
|
||||||
name: posix
|
name: posix
|
||||||
version: 1.5.4
|
version: 1.6.1
|
||||||
readme: README.md
|
readme: README.md
|
||||||
authors:
|
authors:
|
||||||
- Ansible (github.com/ansible)
|
- Ansible (github.com/ansible)
|
||||||
|
|
@ -10,6 +10,6 @@ license_file: COPYING
|
||||||
tags: [posix, networking, shell, unix]
|
tags: [posix, networking, shell, unix]
|
||||||
dependencies: {}
|
dependencies: {}
|
||||||
repository: https://github.com/ansible-collections/ansible.posix
|
repository: https://github.com/ansible-collections/ansible.posix
|
||||||
documentation: https://github.com/ansible-collections/ansible.posix/tree/main/docs
|
documentation: https://docs.ansible.com/ansible/latest/collections/ansible/posix/
|
||||||
homepage: https://github.com/ansible-collections/ansible.posix
|
homepage: https://github.com/ansible-collections/ansible.posix
|
||||||
issues: https://github.com/ansible-collections/ansible.posix
|
issues: https://github.com/ansible-collections/ansible.posix
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
---
|
---
|
||||||
requires_ansible: ">=2.14.0"
|
requires_ansible: ">=2.15.0"
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,14 @@ class ActionModule(ActionBase):
|
||||||
|
|
||||||
if self._host_is_ipv6_address(host):
|
if self._host_is_ipv6_address(host):
|
||||||
return '[%s%s]:%s' % (user_prefix, host, path)
|
return '[%s%s]:%s' % (user_prefix, host, path)
|
||||||
return '%s%s:%s' % (user_prefix, host, path)
|
|
||||||
|
# preserve formatting of remote paths if host or user@host is explicitly defined in the path
|
||||||
|
if ':' not in path:
|
||||||
|
return '%s%s:%s' % (user_prefix, host, path)
|
||||||
|
elif '@' not in path:
|
||||||
|
return '%s%s' % (user_prefix, path)
|
||||||
|
else:
|
||||||
|
return path
|
||||||
|
|
||||||
def _process_origin(self, host, path, user):
|
def _process_origin(self, host, path, user):
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,11 @@ options:
|
||||||
- The amount of time in seconds the rule should be in effect for when non-permanent.
|
- The amount of time in seconds the rule should be in effect for when non-permanent.
|
||||||
type: int
|
type: int
|
||||||
default: 0
|
default: 0
|
||||||
|
forward:
|
||||||
|
description:
|
||||||
|
- The forward setting you would like to enable/disable to/from zones within firewalld.
|
||||||
|
- This option only is supported by firewalld v0.9.0 or later.
|
||||||
|
type: str
|
||||||
masquerade:
|
masquerade:
|
||||||
description:
|
description:
|
||||||
- The masquerade setting you would like to enable/disable to/from zones within firewalld.
|
- The masquerade setting you would like to enable/disable to/from zones within firewalld.
|
||||||
|
|
@ -138,8 +143,8 @@ notes:
|
||||||
- This module needs C(python-firewall) or C(python3-firewall) on managed nodes.
|
- This module needs C(python-firewall) or C(python3-firewall) on managed nodes.
|
||||||
It is usually provided as a subset with C(firewalld) from the OS distributor for the OS default Python interpreter.
|
It is usually provided as a subset with C(firewalld) from the OS distributor for the OS default Python interpreter.
|
||||||
requirements:
|
requirements:
|
||||||
- firewalld >= 0.2.11
|
- firewalld >= 0.9.0
|
||||||
- python-firewall >= 0.2.11
|
- python-firewall >= 0.9.0
|
||||||
author:
|
author:
|
||||||
- Adam Miller (@maxamillion)
|
- Adam Miller (@maxamillion)
|
||||||
'''
|
'''
|
||||||
|
|
@ -198,6 +203,12 @@ EXAMPLES = r'''
|
||||||
permanent: true
|
permanent: true
|
||||||
state: enabled
|
state: enabled
|
||||||
|
|
||||||
|
- ansible.posix.firewalld:
|
||||||
|
forward: true
|
||||||
|
state: enabled
|
||||||
|
permanent: true
|
||||||
|
zone: internal
|
||||||
|
|
||||||
- ansible.posix.firewalld:
|
- ansible.posix.firewalld:
|
||||||
masquerade: true
|
masquerade: true
|
||||||
state: enabled
|
state: enabled
|
||||||
|
|
@ -405,6 +416,49 @@ class ProtocolTransaction(FirewallTransaction):
|
||||||
self.update_fw_settings(fw_zone, fw_settings)
|
self.update_fw_settings(fw_zone, fw_settings)
|
||||||
|
|
||||||
|
|
||||||
|
class ForwardTransaction(FirewallTransaction):
|
||||||
|
"""
|
||||||
|
ForwardTransaction
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, module, action_args=None, zone=None, desired_state=None, permanent=False, immediate=False):
|
||||||
|
super(ForwardTransaction, self).__init__(
|
||||||
|
module, action_args=action_args, desired_state=desired_state, zone=zone, permanent=permanent, immediate=immediate
|
||||||
|
)
|
||||||
|
|
||||||
|
self.enabled_msg = "Added forward to zone %s" % self.zone
|
||||||
|
self.disabled_msg = "Removed forward from zone %s" % self.zone
|
||||||
|
|
||||||
|
def get_enabled_immediate(self):
|
||||||
|
if self.fw.queryForward(self.zone) is True:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_enabled_permanent(self):
|
||||||
|
fw_zone, fw_settings = self.get_fw_zone_settings()
|
||||||
|
if fw_settings.queryForward() is True:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def set_enabled_immediate(self):
|
||||||
|
self.fw.addForward(self.zone)
|
||||||
|
|
||||||
|
def set_enabled_permanent(self):
|
||||||
|
fw_zone, fw_settings = self.get_fw_zone_settings()
|
||||||
|
fw_settings.setForward(True)
|
||||||
|
self.update_fw_settings(fw_zone, fw_settings)
|
||||||
|
|
||||||
|
def set_disabled_immediate(self):
|
||||||
|
self.fw.removeForward(self.zone)
|
||||||
|
|
||||||
|
def set_disabled_permanent(self):
|
||||||
|
fw_zone, fw_settings = self.get_fw_zone_settings()
|
||||||
|
fw_settings.setForward(False)
|
||||||
|
self.update_fw_settings(fw_zone, fw_settings)
|
||||||
|
|
||||||
|
|
||||||
class MasqueradeTransaction(FirewallTransaction):
|
class MasqueradeTransaction(FirewallTransaction):
|
||||||
"""
|
"""
|
||||||
MasqueradeTransaction
|
MasqueradeTransaction
|
||||||
|
|
@ -821,6 +875,7 @@ def main():
|
||||||
state=dict(type='str', required=True, choices=['absent', 'disabled', 'enabled', 'present']),
|
state=dict(type='str', required=True, choices=['absent', 'disabled', 'enabled', 'present']),
|
||||||
timeout=dict(type='int', default=0),
|
timeout=dict(type='int', default=0),
|
||||||
interface=dict(type='str'),
|
interface=dict(type='str'),
|
||||||
|
forward=dict(type='str'),
|
||||||
masquerade=dict(type='str'),
|
masquerade=dict(type='str'),
|
||||||
offline=dict(type='bool', default=False),
|
offline=dict(type='bool', default=False),
|
||||||
target=dict(type='str', choices=['default', 'ACCEPT', 'DROP', '%%REJECT%%']),
|
target=dict(type='str', choices=['default', 'ACCEPT', 'DROP', '%%REJECT%%']),
|
||||||
|
|
@ -833,7 +888,7 @@ def main():
|
||||||
),
|
),
|
||||||
mutually_exclusive=[
|
mutually_exclusive=[
|
||||||
['icmp_block', 'icmp_block_inversion', 'service', 'protocol', 'port', 'port_forward', 'rich_rule',
|
['icmp_block', 'icmp_block_inversion', 'service', 'protocol', 'port', 'port_forward', 'rich_rule',
|
||||||
'interface', 'masquerade', 'source', 'target']
|
'interface', 'forward', 'masquerade', 'source', 'target']
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -842,6 +897,7 @@ def main():
|
||||||
immediate = module.params['immediate']
|
immediate = module.params['immediate']
|
||||||
timeout = module.params['timeout']
|
timeout = module.params['timeout']
|
||||||
interface = module.params['interface']
|
interface = module.params['interface']
|
||||||
|
forward = module.params['forward']
|
||||||
masquerade = module.params['masquerade']
|
masquerade = module.params['masquerade']
|
||||||
offline = module.params['offline']
|
offline = module.params['offline']
|
||||||
|
|
||||||
|
|
@ -905,7 +961,7 @@ def main():
|
||||||
|
|
||||||
modification = False
|
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, port_forward, rich_rule,
|
||||||
interface, masquerade, source, target]):
|
interface, forward, masquerade, source, target]):
|
||||||
modification = True
|
modification = True
|
||||||
if modification and desired_state in ['absent', 'present'] and target is None:
|
if modification and desired_state in ['absent', 'present'] and target is None:
|
||||||
module.fail_json(
|
module.fail_json(
|
||||||
|
|
@ -1072,6 +1128,29 @@ def main():
|
||||||
changed, transaction_msgs = transaction.run()
|
changed, transaction_msgs = transaction.run()
|
||||||
msgs = msgs + transaction_msgs
|
msgs = msgs + transaction_msgs
|
||||||
|
|
||||||
|
if forward is not None:
|
||||||
|
# Type of forward will be changed to boolean in a future release.
|
||||||
|
forward_status = False
|
||||||
|
try:
|
||||||
|
forward_status = boolean(forward, False)
|
||||||
|
except TypeError:
|
||||||
|
module.warn('The value of the forward option is "%s". '
|
||||||
|
'The type of the option will be changed from string to boolean in a future release. '
|
||||||
|
'To avoid unexpected behavior, please change the value to boolean.' % forward)
|
||||||
|
|
||||||
|
expected_state = 'enabled' if (desired_state == 'enabled') == forward_status else 'disabled'
|
||||||
|
transaction = ForwardTransaction(
|
||||||
|
module,
|
||||||
|
action_args=(),
|
||||||
|
zone=zone,
|
||||||
|
desired_state=expected_state,
|
||||||
|
permanent=permanent,
|
||||||
|
immediate=immediate,
|
||||||
|
)
|
||||||
|
|
||||||
|
changed, transaction_msgs = transaction.run()
|
||||||
|
msgs = msgs + transaction_msgs
|
||||||
|
|
||||||
if masquerade is not None:
|
if masquerade is not None:
|
||||||
# Type of masquerade will be changed to boolean in a future release.
|
# Type of masquerade will be changed to boolean in a future release.
|
||||||
masquerade_status = True
|
masquerade_status = True
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,11 @@ options:
|
||||||
description:
|
description:
|
||||||
- Mount options (see fstab(5), or vfstab(4) on Solaris).
|
- Mount options (see fstab(5), or vfstab(4) on Solaris).
|
||||||
type: str
|
type: str
|
||||||
|
opts_no_log:
|
||||||
|
description:
|
||||||
|
- Do not log opts.
|
||||||
|
type: bool
|
||||||
|
default: false
|
||||||
dump:
|
dump:
|
||||||
description:
|
description:
|
||||||
- Dump (see fstab(5)).
|
- Dump (see fstab(5)).
|
||||||
|
|
@ -209,6 +214,7 @@ EXAMPLES = r'''
|
||||||
src: //192.168.1.200/share
|
src: //192.168.1.200/share
|
||||||
path: /mnt/smb_share
|
path: /mnt/smb_share
|
||||||
opts: "rw,vers=3,file_mode=0600,dir_mode=0700,dom={{ ad_domain }},username={{ ad_username }},password={{ ad_password }}"
|
opts: "rw,vers=3,file_mode=0600,dir_mode=0700,dom={{ ad_domain }},username={{ ad_username }},password={{ ad_password }}"
|
||||||
|
opts_no_log: true
|
||||||
fstype: cifs
|
fstype: cifs
|
||||||
state: ephemeral
|
state: ephemeral
|
||||||
'''
|
'''
|
||||||
|
|
@ -768,6 +774,7 @@ def main():
|
||||||
fstype=dict(type='str'),
|
fstype=dict(type='str'),
|
||||||
path=dict(type='path', required=True, aliases=['name']),
|
path=dict(type='path', required=True, aliases=['name']),
|
||||||
opts=dict(type='str'),
|
opts=dict(type='str'),
|
||||||
|
opts_no_log=dict(type='bool', default=False),
|
||||||
passno=dict(type='str', no_log=False, default='0'),
|
passno=dict(type='str', no_log=False, default='0'),
|
||||||
src=dict(type='path'),
|
src=dict(type='path'),
|
||||||
backup=dict(type='bool', default=False),
|
backup=dict(type='bool', default=False),
|
||||||
|
|
@ -781,6 +788,9 @@ def main():
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if module.params['opts_no_log']:
|
||||||
|
module.no_log_values.add(module.params['opts'])
|
||||||
|
|
||||||
# solaris args:
|
# solaris args:
|
||||||
# name, src, fstype, opts, boot, passno, state, fstab=/etc/vfstab
|
# name, src, fstype, opts, boot, passno, state, fstab=/etc/vfstab
|
||||||
# linux args:
|
# linux args:
|
||||||
|
|
|
||||||
|
|
@ -366,6 +366,7 @@ EXAMPLES = r'''
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import errno
|
import errno
|
||||||
|
import re
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils._text import to_bytes, to_native
|
from ansible.module_utils._text import to_bytes, to_native
|
||||||
|
|
@ -597,8 +598,19 @@ def main():
|
||||||
module.fail_json(msg='Hardlinking into a subdirectory of the source would cause recursion. %s and %s' % (destination_path, dest))
|
module.fail_json(msg='Hardlinking into a subdirectory of the source would cause recursion. %s and %s' % (destination_path, dest))
|
||||||
cmd.append('--link-dest=%s' % link_path)
|
cmd.append('--link-dest=%s' % link_path)
|
||||||
|
|
||||||
changed_marker = '<<CHANGED>>'
|
# find the last specified out-format
|
||||||
cmd.append('--out-format=%s' % shlex_quote(changed_marker + '%i %n%L'))
|
out_format = ''
|
||||||
|
for rsync_opt in rsync_opts:
|
||||||
|
if rsync_opt.startswith('--out-format='):
|
||||||
|
out_format = rsync_opt.replace('--out-format=', '', 1)
|
||||||
|
|
||||||
|
# force a known out-format so we can test for changes and return a known format of diff
|
||||||
|
diff_marker = 'DIFF'
|
||||||
|
if out_format == '' or module._diff:
|
||||||
|
diff_detail = '%n%L'
|
||||||
|
else:
|
||||||
|
diff_detail = ''
|
||||||
|
cmd.append('--out-format=%s' % shlex_quote('%s//%s//%%i//%s' % (out_format, diff_marker, diff_detail)))
|
||||||
|
|
||||||
cmd.append(shlex_quote(source))
|
cmd.append(shlex_quote(source))
|
||||||
cmd.append(shlex_quote(dest))
|
cmd.append(shlex_quote(dest))
|
||||||
|
|
@ -624,18 +636,36 @@ def main():
|
||||||
if rc:
|
if rc:
|
||||||
return module.fail_json(msg=err, rc=rc, cmd=cmdstr)
|
return module.fail_json(msg=err, rc=rc, cmd=cmdstr)
|
||||||
|
|
||||||
if link_dest:
|
changed = False
|
||||||
# a leading period indicates no change
|
diff = []
|
||||||
changed = (changed_marker + '.') not in out
|
out_lines = []
|
||||||
else:
|
# remove forced out-format suffix, check for file changes
|
||||||
changed = changed_marker in out
|
for line in out.split('\n'):
|
||||||
|
match = re.match('(.*)//%s//(...*?)//(.*)$' % diff_marker, line)
|
||||||
|
if match:
|
||||||
|
default_diff = '%s %s' % (match.group(2), match.group(3))
|
||||||
|
|
||||||
out_clean = out.replace(changed_marker, '')
|
if module._diff:
|
||||||
out_lines = out_clean.split('\n')
|
diff.append(default_diff)
|
||||||
|
|
||||||
|
if out_format == '':
|
||||||
|
out_lines.append(default_diff)
|
||||||
|
else:
|
||||||
|
out_lines.append(match.group(1))
|
||||||
|
|
||||||
|
# a period in the first position indicates no changes to the file's contents
|
||||||
|
# a period in every other position from the third onward indicates no attribute changes
|
||||||
|
if not re.match(r'\..\.*$', match.group(2)):
|
||||||
|
changed = True
|
||||||
|
else:
|
||||||
|
out_lines.append(line)
|
||||||
|
|
||||||
|
out_clean = '\n'.join(out_lines)
|
||||||
while '' in out_lines:
|
while '' in out_lines:
|
||||||
out_lines.remove('')
|
out_lines.remove('')
|
||||||
|
|
||||||
if module._diff:
|
if module._diff:
|
||||||
diff = {'prepared': out_clean}
|
diff = {'prepared': '\n'.join(diff)}
|
||||||
return module.exit_json(changed=changed, msg=out_clean,
|
return module.exit_json(changed=changed, msg=out_clean,
|
||||||
rc=rc, cmd=cmdstr, stdout_lines=out_lines,
|
rc=rc, cmd=cmdstr, stdout_lines=out_lines,
|
||||||
diff=diff)
|
diff=diff)
|
||||||
|
|
|
||||||
|
|
@ -83,5 +83,6 @@
|
||||||
ansible.builtin.assert:
|
ansible.builtin.assert:
|
||||||
that:
|
that:
|
||||||
- result is not changed
|
- result is not changed
|
||||||
- "result.msg ==
|
- >
|
||||||
'parameters are mutually exclusive: icmp_block|icmp_block_inversion|service|protocol|port|port_forward|rich_rule|interface|masquerade|source|target'"
|
result.msg == 'parameters are mutually exclusive:
|
||||||
|
icmp_block|icmp_block_inversion|service|protocol|port|port_forward|rich_rule|interface|forward|masquerade|source|target'
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,55 @@
|
||||||
that:
|
that:
|
||||||
- result is not changed
|
- result is not changed
|
||||||
|
|
||||||
|
- name: Zone forwarding test
|
||||||
|
when: (ansible_distribution == 'RedHat' and ansible_distribution_major_version is version('8', '>='))
|
||||||
|
block:
|
||||||
|
- name: Enable zone forwarding
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
zone: custom
|
||||||
|
forward: true
|
||||||
|
permanent: true
|
||||||
|
state: enabled
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert zone forwarding is enabled
|
||||||
|
ansible.builtin.debug:
|
||||||
|
var: result is changed
|
||||||
|
|
||||||
|
- name: Enable zone forwarding (verify not changed)
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
zone: custom
|
||||||
|
forward: true
|
||||||
|
permanent: true
|
||||||
|
state: enabled
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert zone forwarding is enabled (verify not changed)
|
||||||
|
ansible.builtin.debug:
|
||||||
|
var: result is not changed
|
||||||
|
|
||||||
|
- name: Disable zone forwarding
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
zone: custom
|
||||||
|
forward: false
|
||||||
|
permanent: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Assert zone forwarding is disabled
|
||||||
|
ansible.builtin.debug:
|
||||||
|
var: result is changed
|
||||||
|
|
||||||
|
- name: Disable zone forwarding (verify not changed)
|
||||||
|
ansible.posix.firewalld:
|
||||||
|
zone: custom
|
||||||
|
forward: false
|
||||||
|
permanent: true
|
||||||
|
state: enabled
|
||||||
|
|
||||||
|
- name: Assert zone forwarding is disabled (verify not changed)
|
||||||
|
ansible.builtin.debug:
|
||||||
|
var: result is not changed
|
||||||
|
|
||||||
- name: Firewalld remove zone custom
|
- name: Firewalld remove zone custom
|
||||||
ansible.posix.firewalld:
|
ansible.posix.firewalld:
|
||||||
zone: custom
|
zone: custom
|
||||||
|
|
|
||||||
|
|
@ -739,3 +739,53 @@
|
||||||
- /tmp/myfs_A.img
|
- /tmp/myfs_A.img
|
||||||
- /tmp/myfs_B.img
|
- /tmp/myfs_B.img
|
||||||
- /tmp/myfs
|
- /tmp/myfs
|
||||||
|
|
||||||
|
- name: Block to test opts_no_log option
|
||||||
|
when: ansible_system == 'Linux'
|
||||||
|
block:
|
||||||
|
- name: Create an empty file
|
||||||
|
community.general.filesize:
|
||||||
|
path: /tmp/myfs.img
|
||||||
|
size: 1M
|
||||||
|
- name: Format FS
|
||||||
|
community.general.filesystem:
|
||||||
|
fstype: ext4
|
||||||
|
dev: /tmp/myfs.img
|
||||||
|
- name: Mount the FS with opts_no_log option true
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /tmp/myfs
|
||||||
|
src: /tmp/myfs.img
|
||||||
|
fstype: ext4
|
||||||
|
state: mounted
|
||||||
|
opts: rw
|
||||||
|
opts_no_log: true
|
||||||
|
register: mount_info
|
||||||
|
- name: Assert opts_no_log option true
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- mount_info.opts == 'VALUE_SPECIFIED_IN_NO_LOG_PARAMETER'
|
||||||
|
- name: Remount the FS with opts_no_log option false
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /tmp/myfs
|
||||||
|
src: /tmp/myfs.img
|
||||||
|
fstype: ext4
|
||||||
|
state: remounted
|
||||||
|
opts: rw,user
|
||||||
|
opts_no_log: false
|
||||||
|
register: mount_info
|
||||||
|
- name: Assert opts_no_log option false
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- mount_info.opts == 'rw,user'
|
||||||
|
always:
|
||||||
|
- name: Unmount FS
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /tmp/myfs
|
||||||
|
state: absent
|
||||||
|
- name: Remove the test FS
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: absent
|
||||||
|
loop:
|
||||||
|
- /tmp/myfs.img
|
||||||
|
- /tmp/myfs
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue