Compare commits

..

1 commit

Author SHA1 Message Date
Mark Asbach
f35b18cba5
Merge 230e5f2a98 into 05ee6ebc2a 2023-12-01 23:19:43 +00:00
70 changed files with 2403 additions and 2667 deletions

View file

@ -1,4 +1,3 @@
---
trigger: trigger:
batch: true batch: true
branches: branches:
@ -14,7 +13,7 @@ pr:
- stable-* - stable-*
schedules: schedules:
- cron: "0 9 * * *" - cron: 0 9 * * *
displayName: Nightly displayName: Nightly
always: true always: true
branches: branches:
@ -42,6 +41,7 @@ resources:
pool: Standard pool: Standard
stages: stages:
- stage: Sanity_devel - stage: Sanity_devel
displayName: Ansible devel sanity displayName: Ansible devel sanity
dependsOn: [] dependsOn: []
@ -49,14 +49,14 @@ stages:
- template: templates/matrix.yml - template: templates/matrix.yml
parameters: parameters:
nameFormat: "{0}" nameFormat: "{0}"
testFormat: devel/{0} testFormat: "devel/{0}"
targets: targets:
- name: Sanity - name: Sanity
test: sanity test: sanity
- name: Units - name: Units
test: units test: units
- name: Lint # - name: Lint
test: lint # test: lint
- stage: Sanity_2_16 - stage: Sanity_2_16
displayName: Ansible 2.16 sanity displayName: Ansible 2.16 sanity
dependsOn: [] dependsOn: []
@ -64,14 +64,12 @@ stages:
- template: templates/matrix.yml - template: templates/matrix.yml
parameters: parameters:
nameFormat: "{0}" nameFormat: "{0}"
testFormat: 2.16/{0} testFormat: "2.16/{0}"
targets: targets:
- name: Sanity - name: Sanity
test: sanity test: sanity
- name: Units - name: Units
test: units test: units
- name: Lint
test: lint
- stage: Sanity_2_15 - stage: Sanity_2_15
displayName: Ansible 2.15 sanity displayName: Ansible 2.15 sanity
dependsOn: [] dependsOn: []
@ -79,7 +77,7 @@ stages:
- template: templates/matrix.yml - template: templates/matrix.yml
parameters: parameters:
nameFormat: "{0}" nameFormat: "{0}"
testFormat: 2.15/{0} testFormat: "2.15/{0}"
targets: targets:
- name: Sanity - name: Sanity
test: sanity test: sanity
@ -92,13 +90,26 @@ stages:
- template: templates/matrix.yml - template: templates/matrix.yml
parameters: parameters:
nameFormat: "{0}" nameFormat: "{0}"
testFormat: 2.14/{0} testFormat: "2.14/{0}"
targets: targets:
- name: Sanity - name: Sanity
test: sanity test: sanity
- name: Units - name: Units
test: units test: units
## Docker - stage: Sanity_2_9
displayName: Ansible 2.9 sanity
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
nameFormat: "{0}"
testFormat: "2.9/{0}"
targets:
- name: Sanity
test: sanity
- name: Units
test: units
## Docker
- stage: Docker_devel - stage: Docker_devel
displayName: Docker devel displayName: Docker devel
dependsOn: [] dependsOn: []
@ -166,8 +177,28 @@ stages:
test: ubuntu2004 test: ubuntu2004
- name: Ubuntu 22.04 - name: Ubuntu 22.04
test: ubuntu2204 test: ubuntu2204
- stage: Docker_2_9
displayName: Docker 2.9
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.9/linux/{0}/1
targets:
- name: CentOS 6
test: centos6
- name: CentOS 7
test: centos7
- name: openSUSE 15 py2
test: opensuse15py2
- name: openSUSE 15 py3
test: opensuse15
- name: Ubuntu 16.04
test: ubuntu1604
- name: Ubuntu 18.04
test: ubuntu1804
## Remote ## Remote
- stage: Remote_devel - stage: Remote_devel
displayName: Remote devel displayName: Remote devel
dependsOn: [] dependsOn: []
@ -229,12 +260,27 @@ stages:
test: freebsd/13.1 test: freebsd/13.1
- name: FreeBSD 12.4 - name: FreeBSD 12.4
test: freebsd/12.4 test: freebsd/12.4
- stage: Remote_2_9
displayName: Remote 2.9
dependsOn: []
jobs:
- template: templates/matrix.yml
parameters:
testFormat: 2.9/{0}/1
targets:
- name: RHEL 7.9
test: rhel/7.9
- name: RHEL 8.1
test: rhel/8.1
## Finally ## Finally
- stage: Summary - stage: Summary
condition: succeededOrFailed() condition: succeededOrFailed()
dependsOn: dependsOn:
- Sanity_2_9
- Remote_2_9
- Docker_2_9
- Sanity_2_14 - Sanity_2_14
- Remote_2_14 - Remote_2_14
- Docker_2_14 - Docker_2_14

1
.github/BOTMETA.yml vendored
View file

@ -1,4 +1,3 @@
---
automerge: false automerge: false
files: files:
$module_utils/mount.py: $module_utils/mount.py:

View file

@ -11,7 +11,13 @@ An Ansible Collection of modules and plugins that target POSIX UNIX/Linux and de
<!--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.9**.
For collections that support Ansible 2.9, please ensure you update your `network_os` to use the
fully qualified collection name (for example, `cisco.ios.ios`).
Plugins and modules within a collection may be tested with only specific Ansible versions.
A collection may contain metadata that identifies these versions.
PEP440 is the schema used to describe the versions of Ansible.
<!--end requires_ansible--> <!--end requires_ansible-->
## Included content ## Included content
@ -57,6 +63,8 @@ collections:
See [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details. See [Ansible Using collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) for more details.
**NOTE**: For Ansible 2.9, you may not see deprecation warnings when you run your playbooks with this collection. Use this documentation to track when a module is deprecated.
## Contributing to this collection ## Contributing to this collection
<!--Describe how the community can contribute to your collection. At a minimum, include how and where users can create issues to report problems or request features for this collection. List contribution requirements, including preferred workflows and necessary testing, so you can benefit from community PRs. If you are following general Ansible contributor guidelines, you can link to - [Ansible Community Guide](https://docs.ansible.com/ansible/latest/community/index.html). --> <!--Describe how the community can contribute to your collection. At a minimum, include how and where users can create issues to report problems or request features for this collection. List contribution requirements, including preferred workflows and necessary testing, so you can benefit from community PRs. If you are following general Ansible contributor guidelines, you can link to - [Ansible Community Guide](https://docs.ansible.com/ansible/latest/community/index.html). -->
@ -83,10 +91,12 @@ 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.14 (devel)
- ansible-core 2.16 (stable) - ansible-core 2.13 (stable)
- ansible-core 2.15 (stable) - ansible-core 2.12 (stable)
- ansible-core 2.14 (stable) - ansible-core 2.11 (stable)
- ansible-base 2.10 (stable)
- ansible 2.9 (stable)
## Roadmap ## Roadmap

View file

@ -1,2 +0,0 @@
minor_changes:
- firewalld - added offline flag implementation (https://github.com/ansible-collections/ansible.posix/pull/484)

View file

@ -1,2 +0,0 @@
major_changes:
- "Dropping support for Ansible 2.9, ansible-core 2.14 will be minimum required version for this release"

View file

@ -1,2 +1 @@
---
comment: false comment: false

View file

@ -1,4 +1,3 @@
---
namespace: ansible namespace: ansible
name: posix name: posix
version: 1.5.4 version: 1.5.4

View file

@ -1,8 +1,8 @@
--- ---
requires_ansible: ">=2.14.0" requires_ansible: '>=2.9'
plugin_routing: plugin_routing:
callback: callback:
skippy: skippy:
deprecation: deprecation:
removal_date: "2022-06-01" removal_date: '2022-06-01'
warning_text: See the plugin documentation for more details warning_text: See the plugin documentation for more details

View file

@ -177,7 +177,7 @@ class ActionModule(ActionBase):
# Store remote connection type # Store remote connection type
self._remote_transport = self._connection.transport self._remote_transport = self._connection.transport
use_ssh_args = _tmp_args.pop('use_ssh_args', False) use_ssh_args = _tmp_args.pop('use_ssh_args', None)
if use_ssh_args and self._connection.transport == 'ssh': if use_ssh_args and self._connection.transport == 'ssh':
ssh_args = [ ssh_args = [
@ -185,7 +185,7 @@ class ActionModule(ActionBase):
self._connection.get_option('ssh_common_args'), self._connection.get_option('ssh_common_args'),
self._connection.get_option('ssh_extra_args'), self._connection.get_option('ssh_extra_args'),
] ]
_tmp_args['_ssh_args'] = ' '.join([a for a in ssh_args if a]) _tmp_args['ssh_args'] = ' '.join([a for a in ssh_args if a])
# Handle docker connection options # Handle docker connection options
if self._remote_transport in DOCKER: if self._remote_transport in DOCKER:

View file

@ -84,15 +84,13 @@ options:
type: str type: str
permanent: permanent:
description: description:
- Whether to apply this change to the permanent firewalld configuration. - Should this configuration be in the running firewalld configuration or persist across reboots.
- As of Ansible 2.3, permanent operations can operate on firewalld configs when it is not running (requires firewalld >= 0.3.9). - As of Ansible 2.3, permanent operations can operate on firewalld configs when it is not running (requires firewalld >= 0.3.9).
- Note that if this is C(false), I(immediate) defaults to C(true). - Note that if this is C(false), immediate is assumed C(true).
type: bool type: bool
default: false
immediate: immediate:
description: description:
- Whether to apply this change to the runtime firewalld configuration. - Should this configuration be applied immediately, if set as permanent.
- Defaults to C(true) if I(permanent=false).
type: bool type: bool
default: false default: false
state: state:
@ -114,9 +112,8 @@ options:
type: str type: str
offline: offline:
description: description:
- Ignores I(immediate) if I(permanent=true) and firewalld is not running. - Whether to run this module even when firewalld is offline.
type: bool type: bool
default: false
target: target:
description: description:
- firewalld Zone target - firewalld Zone target
@ -145,14 +142,6 @@ author:
''' '''
EXAMPLES = r''' EXAMPLES = r'''
- name: permanently enable https service, also enable it immediately if possible
ansible.posix.firewalld:
service: https
state: enabled
permanent: true
immediate: true
offline: true
- name: permit traffic in default zone for https service - name: permit traffic in default zone for https service
ansible.posix.firewalld: ansible.posix.firewalld:
service: https service: https
@ -817,12 +806,12 @@ def main():
zone=dict(type='str'), zone=dict(type='str'),
immediate=dict(type='bool', default=False), immediate=dict(type='bool', default=False),
source=dict(type='str'), source=dict(type='str'),
permanent=dict(type='bool', default=False), permanent=dict(type='bool'),
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'),
masquerade=dict(type='str'), masquerade=dict(type='str'),
offline=dict(type='bool', default=False), offline=dict(type='bool'),
target=dict(type='str', choices=['default', 'ACCEPT', 'DROP', '%%REJECT%%']), target=dict(type='str', choices=['default', 'ACCEPT', 'DROP', '%%REJECT%%']),
), ),
supports_check_mode=True, supports_check_mode=True,
@ -843,29 +832,19 @@ def main():
timeout = module.params['timeout'] timeout = module.params['timeout']
interface = module.params['interface'] interface = module.params['interface']
masquerade = module.params['masquerade'] masquerade = module.params['masquerade']
offline = module.params['offline']
# Sanity checks # Sanity checks
FirewallTransaction.sanity_check(module) FirewallTransaction.sanity_check(module)
# `offline`, `immediate`, and `permanent` have a weird twisty relationship. # If neither permanent or immediate is provided, assume immediate (as
if offline: # written in the module's docs)
# specifying offline without permanent makes no sense
if not permanent:
module.fail_json(msg='offline cannot be enabled unless permanent changes are allowed')
# offline overrides immediate to false if firewalld is offline
if fw_offline:
immediate = False
# immediate defaults to true if permanent is not enabled
if not permanent and not immediate: if not permanent and not immediate:
immediate = True immediate = True
# Verify required params are provided
if immediate and fw_offline: if immediate and fw_offline:
module.fail_json(msg='firewall is not currently running, unable to perform immediate actions without a running firewall daemon') module.fail_json(msg='firewall is not currently running, unable to perform immediate actions without a running firewall daemon')
# Verify required params are provided
changed = False changed = False
msgs = [] msgs = []
icmp_block = module.params['icmp_block'] icmp_block = module.params['icmp_block']

View file

@ -26,13 +26,13 @@ options:
description: description:
- Path on the source host that will be synchronized to the destination. - Path on the source host that will be synchronized to the destination.
- The path can be absolute or relative. - The path can be absolute or relative.
type: path type: str
required: true required: true
dest: dest:
description: description:
- Path on the destination host that will be synchronized from the source. - Path on the destination host that will be synchronized from the source.
- The path can be absolute or relative. - The path can be absolute or relative.
type: path type: str
required: true required: true
dest_port: dest_port:
description: description:
@ -135,6 +135,13 @@ options:
that does not match the inventory user, you should set this parameter to C(false). that does not match the inventory user, you should set this parameter to C(false).
type: bool type: bool
default: true default: true
use_ssh_args:
description:
- In Ansible 2.10 and lower, it uses the ssh_args specified in C(ansible.cfg).
- In Ansible 2.11 and onwards, when set to C(true), it uses all SSH connection configurations like
C(ansible_ssh_args), C(ansible_ssh_common_args), and C(ansible_ssh_extra_args).
type: bool
default: false
ssh_connection_multiplexing: ssh_connection_multiplexing:
description: description:
- SSH connection multiplexing for rsync is disabled by default to prevent misconfigured ControlSockets from resulting in failed SSH connections. - SSH connection multiplexing for rsync is disabled by default to prevent misconfigured ControlSockets from resulting in failed SSH connections.
@ -150,7 +157,7 @@ options:
- Specify additional rsync options by passing in an array. - Specify additional rsync options by passing in an array.
- Note that an empty string in C(rsync_opts) will end up transfer the current working directory. - Note that an empty string in C(rsync_opts) will end up transfer the current working directory.
type: list type: list
default: [] default:
elements: str elements: str
partial: partial:
description: description:
@ -171,7 +178,7 @@ options:
- Add a destination to hard link against during the rsync. - Add a destination to hard link against during the rsync.
type: list type: list
default: default:
elements: path elements: str
delay_updates: delay_updates:
description: description:
- This option puts the temporary file from each updated file into a holding directory until the end of the transfer, - This option puts the temporary file from each updated file into a holding directory until the end of the transfer,
@ -179,30 +186,6 @@ options:
type: bool type: bool
default: true default: true
version_added: '1.3.0' version_added: '1.3.0'
use_ssh_args:
description:
- In Ansible 2.10 and lower, it uses the ssh_args specified in C(ansible.cfg).
- In Ansible 2.11 and onwards, when set to C(true), it uses all SSH connection configurations like
C(ansible_ssh_args), C(ansible_ssh_common_args), and C(ansible_ssh_extra_args).
type: bool
default: false
_local_rsync_path:
description: Internal use only.
type: path
default: 'rsync'
required: false
_local_rsync_password:
description: Internal use only, never logged.
type: str
required: false
_substitute_controller:
description: Internal use only.
type: bool
default: false
_ssh_args:
description: Internal use only. See C(use_ssh_args) for ssh arg settings.
type: str
required: false
notes: notes:
- rsync must be installed on both the local and remote host. - rsync must be installed on both the local and remote host.
@ -252,7 +235,7 @@ EXAMPLES = r'''
src: rsync://somehost.com/path/ src: rsync://somehost.com/path/
dest: /some/absolute/path/ dest: /some/absolute/path/
- name: Synchronization using rsync protocol on delegate host (push) - name: Synchronization using rsync protocol on delegate host (push)
ansible.posix.synchronize: ansible.posix.synchronize:
src: /some/absolute/path/ src: /some/absolute/path/
dest: rsync://somehost.com/path/ dest: rsync://somehost.com/path/
@ -379,11 +362,11 @@ def substitute_controller(path):
if not client_addr: if not client_addr:
ssh_env_string = os.environ.get('SSH_CLIENT', None) ssh_env_string = os.environ.get('SSH_CLIENT', None)
try: try:
client_addr, _ = ssh_env_string.split(None, 1) # pylint: disable=disallowed-name client_addr, _ = ssh_env_string.split(None, 1)
except AttributeError: except AttributeError:
ssh_env_string = os.environ.get('SSH_CONNECTION', None) ssh_env_string = os.environ.get('SSH_CONNECTION', None)
try: try:
client_addr, _ = ssh_env_string.split(None, 1) # pylint: disable=disallowed-name client_addr, _ = ssh_env_string.split(None, 1)
except AttributeError: except AttributeError:
pass pass
if not client_addr: if not client_addr:
@ -405,8 +388,8 @@ def is_rsh_needed(source, dest):
def main(): def main():
module = AnsibleModule( module = AnsibleModule(
argument_spec=dict( argument_spec=dict(
src=dict(type='path', required=True), src=dict(type='str', required=True),
dest=dict(type='path', required=True), dest=dict(type='str', required=True),
dest_port=dict(type='int'), dest_port=dict(type='int'),
delete=dict(type='bool', default=False), delete=dict(type='bool', default=False),
private_key=dict(type='path'), private_key=dict(type='path'),
@ -429,15 +412,14 @@ def main():
set_remote_user=dict(type='bool', default=True), set_remote_user=dict(type='bool', default=True),
rsync_timeout=dict(type='int', default=0), rsync_timeout=dict(type='int', default=0),
rsync_opts=dict(type='list', default=[], elements='str'), rsync_opts=dict(type='list', default=[], elements='str'),
_ssh_args=dict(type='str'), ssh_args=dict(type='str'),
use_ssh_args=dict(type='bool', default=False),
ssh_connection_multiplexing=dict(type='bool', default=False), ssh_connection_multiplexing=dict(type='bool', default=False),
_ssh_wrapper=dict(type='bool', default=False), _ssh_wrapper=dict(type='bool', default=False),
partial=dict(type='bool', default=False), partial=dict(type='bool', default=False),
verify_host=dict(type='bool', default=False), verify_host=dict(type='bool', default=False),
delay_updates=dict(type='bool', default=True), delay_updates=dict(type='bool', default=True),
mode=dict(type='str', default='push', choices=['pull', 'push']), mode=dict(type='str', default='push', choices=['pull', 'push']),
link_dest=dict(type='list', elements='path'), link_dest=dict(type='list', elements='str'),
), ),
supports_check_mode=True, supports_check_mode=True,
) )
@ -473,7 +455,7 @@ def main():
owner = module.params['owner'] owner = module.params['owner']
group = module.params['group'] group = module.params['group']
rsync_opts = module.params['rsync_opts'] rsync_opts = module.params['rsync_opts']
ssh_args = module.params['_ssh_args'] ssh_args = module.params['ssh_args']
ssh_connection_multiplexing = module.params['ssh_connection_multiplexing'] ssh_connection_multiplexing = module.params['ssh_connection_multiplexing']
ssh_wrapper = module.params['_ssh_wrapper'] ssh_wrapper = module.params['_ssh_wrapper']
verify_host = module.params['verify_host'] verify_host = module.params['verify_host']
@ -599,7 +581,7 @@ def main():
# hardlink is actually a change # hardlink is actually a change
cmd.append('-vv') cmd.append('-vv')
for x in link_dest: for x in link_dest:
link_path = os.path.abspath(x) link_path = os.path.abspath(os.path.expanduser(x))
destination_path = os.path.abspath(os.path.dirname(dest)) destination_path = os.path.abspath(os.path.dirname(dest))
if destination_path.find(link_path) == 0: if destination_path.find(link_path) == 0:
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))
@ -608,6 +590,12 @@ def main():
changed_marker = '<<CHANGED>>' changed_marker = '<<CHANGED>>'
cmd.append('--out-format=%s' % shlex_quote(changed_marker + '%i %n%L')) cmd.append('--out-format=%s' % shlex_quote(changed_marker + '%i %n%L'))
# expand the paths
if '@' not in source:
source = os.path.expanduser(source)
if '@' not in dest:
dest = os.path.expanduser(dest)
cmd.append(shlex_quote(source)) cmd.append(shlex_quote(source))
cmd.append(shlex_quote(dest)) cmd.append(shlex_quote(dest))
cmdstr = ' '.join(cmd) cmdstr = ' '.join(cmd)

View file

@ -1,4 +1,3 @@
---
language: python language: python
env: env:
@ -16,14 +15,14 @@ matrix:
- env: T=2.9/freebsd/12.0/1 - env: T=2.9/freebsd/12.0/1
- env: T=2.9/linux/centos6/1 - env: T=2.9/linux/centos6/1
- env: T=2.9/linux/centos7/1 - env: T=2.9/linux/centos7/1
# - env: T=2.9/linux/centos8/1 # - env: T=2.9/linux/centos8/1
- env: T=2.9/linux/fedora30/1 - env: T=2.9/linux/fedora30/1
- env: T=2.9/linux/fedora31/1 - env: T=2.9/linux/fedora31/1
- env: T=2.9/linux/opensuse15py2/1 - env: T=2.9/linux/opensuse15py2/1
- env: T=2.9/linux/opensuse15/1 - env: T=2.9/linux/opensuse15/1
- env: T=2.9/linux/ubuntu1604/1 - env: T=2.9/linux/ubuntu1604/1
- env: T=2.9/linux/ubuntu1804/1 - env: T=2.9/linux/ubuntu1804/1
# - env: T=2.10/aix/7.2/1 # - env: T=2.10/aix/7.2/1
- env: T=2.10/osx/10.11/1 - env: T=2.10/osx/10.11/1
- env: T=2.10/rhel/7.6/1 - env: T=2.10/rhel/7.6/1
- env: T=2.10/rhel/8.2/1 - env: T=2.10/rhel/8.2/1
@ -31,14 +30,14 @@ matrix:
- env: T=2.10/freebsd/12.1/1 - env: T=2.10/freebsd/12.1/1
- env: T=2.10/linux/centos6/1 - env: T=2.10/linux/centos6/1
- env: T=2.10/linux/centos7/1 - env: T=2.10/linux/centos7/1
# - env: T=2.10/linux/centos8/1 # - env: T=2.10/linux/centos8/1
- env: T=2.10/linux/fedora30/1 - env: T=2.10/linux/fedora30/1
- env: T=2.10/linux/fedora31/1 - env: T=2.10/linux/fedora31/1
- env: T=2.10/linux/opensuse15py2/1 - env: T=2.10/linux/opensuse15py2/1
- env: T=2.10/linux/opensuse15/1 - env: T=2.10/linux/opensuse15/1
- env: T=2.10/linux/ubuntu1604/1 - env: T=2.10/linux/ubuntu1604/1
- env: T=2.10/linux/ubuntu1804/1 - env: T=2.10/linux/ubuntu1804/1
# - env: T=devel/aix/7.2/1 # - env: T=devel/aix/7.2/1
- env: T=devel/osx/10.11/1 - env: T=devel/osx/10.11/1
- env: T=devel/rhel/7.6/1 - env: T=devel/rhel/7.6/1
- env: T=devel/rhel/8.1/1 - env: T=devel/rhel/8.1/1
@ -46,7 +45,7 @@ matrix:
- env: T=devel/freebsd/12.1/1 - env: T=devel/freebsd/12.1/1
- env: T=devel/linux/centos6/1 - env: T=devel/linux/centos6/1
- env: T=devel/linux/centos7/1 - env: T=devel/linux/centos7/1
# - env: T=devel/linux/centos8/1 # - env: T=devel/linux/centos8/1
- env: T=devel/linux/fedora30/1 - env: T=devel/linux/fedora30/1
- env: T=devel/linux/fedora31/1 - env: T=devel/linux/fedora31/1
- env: T=devel/linux/opensuse15py2/1 - env: T=devel/linux/opensuse15py2/1
@ -57,7 +56,7 @@ matrix:
branches: branches:
except: except:
- "*-patch-*" - "*-patch-*"
- revert-*-* - "revert-*-*"
build: build:
ci: ci:

View file

@ -1,3 +1,3 @@
--- ---
collections: collections:
- community.general - community.general

View file

@ -1,4 +1,3 @@
---
# (c) 2017, Martin Krizek <mkrizek@redhat.com> # (c) 2017, Martin Krizek <mkrizek@redhat.com>
# This file is part of Ansible # This file is part of Ansible
@ -17,38 +16,35 @@
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Create ansible user - name: Create ansible user
ansible.builtin.user: user:
name: "{{ test_user }}" name: "{{ test_user }}"
- name: Create ansible group - name: Create ansible group
ansible.builtin.group: group:
name: "{{ test_group }}" name: "{{ test_group }}"
- name: Clean up working directory and files - name: Clean up working directory and files
ansible.builtin.file: file:
path: "{{ output_dir }}" path: "{{ output_dir }}"
state: absent state: absent
- name: Create working directory - name: Create working directory
ansible.builtin.file: file:
path: "{{ output_dir }}" path: "{{ output_dir }}"
state: directory state: directory
mode: "0755"
- name: Create ansible file - name: Create ansible file
ansible.builtin.file: file:
path: "{{ test_file }}" path: "{{ test_file }}"
state: touch state: touch
mode: "0644"
- name: Create ansible dir - name: Create ansible dir
ansible.builtin.file: file:
path: "{{ test_dir }}" path: "{{ test_dir }}"
state: directory state: directory
mode: "0755"
############################################################################## ##############################################################################
- name: Grant ansible user read access to a file - name: Grant ansible user read access to a file
ansible.posix.acl: acl:
path: "{{ test_file }}" path: "{{ test_file }}"
entity: "{{ test_user }}" entity: "{{ test_user }}"
etype: user etype: user
@ -56,21 +52,12 @@
state: present state: present
register: output register: output
- name: Debug ansible.posix.acl output - name: get getfacl output
ansible.builtin.debug: shell: "getfacl {{ test_file | quote }}"
msg: "{{ output }}"
- name: Get getfacl output
ansible.builtin.command: getfacl {{ test_file | quote }}
changed_when: false
register: getfacl_output register: getfacl_output
- name: Debug getfacl output - name: verify output
ansible.builtin.debug: assert:
msg: "{{ getfacl_output.stdout_lines }}"
- name: Verify Output
ansible.builtin.assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed
@ -78,25 +65,16 @@
- "'user:{{ test_user }}:r--' in getfacl_output.stdout_lines" - "'user:{{ test_user }}:r--' in getfacl_output.stdout_lines"
############################################################################## ##############################################################################
- name: Obtain the acl for a specific file - name: Obtain the acl for a specific file
ansible.posix.acl: acl:
path: "{{ test_file }}" path: "{{ test_file }}"
register: output register: output
- name: Debug ansible.posix.acl output - name: get getfacl output
ansible.builtin.debug: shell: "getfacl {{ test_file | quote }}"
msg: "{{ output }}"
- name: Get getfacl output
ansible.builtin.command: getfacl {{ test_file | quote }}
changed_when: false
register: getfacl_output register: getfacl_output
- name: Debug getfacl output - name: verify output
ansible.builtin.debug: assert:
msg: "{{ getfacl_output.stdout_lines }}"
- name: Verify output
ansible.builtin.assert:
that: that:
- output is not changed - output is not changed
- output is not failed - output is not failed
@ -111,22 +89,20 @@
- "'mask::r--' in getfacl_output.stdout_lines" - "'mask::r--' in getfacl_output.stdout_lines"
- "'other::r--' in getfacl_output.stdout_lines" - "'other::r--' in getfacl_output.stdout_lines"
############################################################################## ##############################################################################
#
- name: Removes the acl for ansible user on a specific file - name: Removes the acl for ansible user on a specific file
ansible.posix.acl: acl:
path: "{{ test_file }}" path: "{{ test_file }}"
entity: "{{ test_user }}" entity: "{{ test_user }}"
etype: user etype: user
state: absent state: absent
register: output register: output
- name: Get getfacl output - name: get getfacl output
ansible.builtin.command: getfacl {{ test_file | quote }} shell: "getfacl {{ test_file | quote }}"
changed_when: false
register: getfacl_output register: getfacl_output
- name: Verify output - name: verify output
ansible.builtin.assert: assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed
@ -134,22 +110,21 @@
- "'user:{{ test_user }}:r--' not in getfacl_output.stdout_lines" - "'user:{{ test_user }}:r--' not in getfacl_output.stdout_lines"
############################################################################## ##############################################################################
- name: Sets default acl for ansible user on ansible dir - name: Sets default acl for ansible user on ansible dir
ansible.posix.acl: acl:
path: "{{ test_dir }}" path: "{{ test_dir }}"
entity: "{{ test_user }}" entity: "{{ test_user }}"
etype: user etype: user
permissions: rw permissions: rw
default: true default: yes
state: present state: present
register: output register: output
- name: Get getfacl output - name: get getfacl output
ansible.builtin.command: getfacl {{ test_dir | quote }} shell: "getfacl {{ test_dir | quote }}"
changed_when: false
register: getfacl_output register: getfacl_output
- name: Verify output - name: verify output
ansible.builtin.assert: assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed
@ -157,24 +132,22 @@
- "'default:user:{{ test_user }}:rw-' in getfacl_output.stdout_lines" - "'default:user:{{ test_user }}:rw-' in getfacl_output.stdout_lines"
############################################################################## ##############################################################################
- name: Cleanup - name: Cleanup
ansible.builtin.command: setfacl -b {{ test_dir | quote }} shell: "setfacl -b {{ test_dir | quote }}"
changed_when: false
############################################################################## ##############################################################################
- name: Same as previous but using entry shorthand - name: Same as previous but using entry shorthand
ansible.posix.acl: acl:
path: "{{ test_dir }}" path: "{{ test_dir }}"
entry: user:{{ test_user }}:rw- entry: "user:{{ test_user }}:rw-"
default: true default: yes
state: present state: present
register: output register: output
- name: Get getfacl output - name: get getfacl output
ansible.builtin.command: getfacl {{ test_dir | quote }} shell: "getfacl {{ test_dir | quote }}"
changed_when: false
register: getfacl_output register: getfacl_output
- name: Verify output - name: verify output
ansible.builtin.assert: assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed
@ -182,20 +155,19 @@
- "'default:user:{{ test_user }}:rw-' in getfacl_output.stdout_lines" - "'default:user:{{ test_user }}:rw-' in getfacl_output.stdout_lines"
############################################################################## ##############################################################################
- name: Same as previous, to test idempotence - name: Same as previous, to test idempotence
ansible.posix.acl: acl:
path: "{{ test_dir }}" path: "{{ test_dir }}"
entry: user:{{ test_user }}:rw- entry: "user:{{ test_user }}:rw-"
default: true default: yes
state: present state: present
register: output register: output
- name: Get getfacl output - name: get getfacl output
ansible.builtin.command: getfacl {{ test_dir | quote }} shell: "getfacl {{ test_dir | quote }}"
changed_when: false
register: getfacl_output register: getfacl_output
- name: Verify output - name: verify output
ansible.builtin.assert: assert:
that: that:
- output is not changed - output is not changed
- output is not failed - output is not failed
@ -203,34 +175,32 @@
- "'default:user:{{ test_user }}:rw-' in getfacl_output.stdout_lines" - "'default:user:{{ test_user }}:rw-' in getfacl_output.stdout_lines"
############################################################################## ##############################################################################
- name: Cleanup - name: Cleanup
ansible.builtin.command: setfacl -b {{ test_dir | quote }} shell: "setfacl -b {{ test_dir | quote }}"
changed_when: false
############################################################################## ##############################################################################
- name: Set default acls - name: Set default acls
ansible.posix.acl: acl:
path: "{{ test_dir }}" path: "{{ test_dir }}"
entry: "{{ item }}" entry: "{{ item }}"
default: true default: yes
state: present state: present
with_items: with_items:
- user:{{ test_user }}:rw- - "user:{{ test_user }}:rw-"
- group:{{ test_group }}:rw- - "group:{{ test_group }}:rw-"
- name: Remove default group test_user acl - name: Remove default group test_user acl
ansible.posix.acl: acl:
path: "{{ test_dir }}" path: "{{ test_dir }}"
entry: group:{{ test_group }}:rw- entry: "group:{{ test_group }}:rw-"
default: true default: yes
state: absent state: absent
register: output register: output
- name: Get getfacl output - name: get getfacl output
ansible.builtin.command: getfacl {{ test_dir | quote }} shell: "getfacl {{ test_dir | quote }}"
changed_when: false
register: getfacl_output register: getfacl_output
- name: Verify output - name: verify output
ansible.builtin.assert: assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed

View file

@ -1,4 +1,3 @@
---
# (c) 2017, Martin Krizek <mkrizek@redhat.com> # (c) 2017, Martin Krizek <mkrizek@redhat.com>
# This file is part of Ansible # This file is part of Ansible
@ -16,21 +15,22 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Test ACL - block:
- include_tasks: acl.yml
when: ansible_system == 'Linux' # TODO enable acls mount option on FreeBSD to test it there too
always:
- name: delete created directory and file
file:
path: '{{ item }}'
state: absent
with_items:
- '{{ test_dir }}'
- '{{ test_file }}'
vars: vars:
test_user: ansible_user test_user: ansible_user
test_group: ansible_group test_group: ansible_group
test_file: "{{ output_dir }}/ansible file" test_file: '{{ output_dir }}/ansible file'
test_dir: "{{ output_dir }}/ansible_dir/with some space" test_dir: "{{ output_dir }}/ansible_dir/with some space"
block:
- name: Include tests task file
ansible.builtin.include_tasks: acl.yml
when: ansible_system == 'Linux' # TODO enable acls mount option on FreeBSD to test it there too
always:
- name: Delete created directory and file
ansible.builtin.file:
path: "{{ item }}"
state: absent
with_items:
- "{{ test_dir }}"
- "{{ test_file }}"

View file

@ -1,3 +1,2 @@
---
dependencies: dependencies:
- prepare_tests - prepare_tests

View file

@ -1,4 +1,3 @@
---
# Test code for the at module. # Test code for the at module.
# (c) 2017, James Tanner <tanner.jc@gmail.com> # (c) 2017, James Tanner <tanner.jc@gmail.com>
@ -17,56 +16,47 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Set output_dir_test fast - set_fact: output_dir_test={{output_dir}}/at
ansible.builtin.set_fact:
output_dir_test: "{{ output_dir }}/at"
- name: Make sure our testing sub-directory does not exist - name: make sure our testing sub-directory does not exist
ansible.builtin.file: file: path="{{ output_dir_test }}" state=absent
path: "{{ output_dir_test }}"
state: absent
- name: Create our testing sub-directory - name: create our testing sub-directory
ansible.builtin.file: file: path="{{ output_dir_test }}" state=directory
path: "{{ output_dir_test }}"
state: directory
mode: "0755"
## ##
## at ## at
## ##
- name: Define distros to attempt installing at on - name: define distros to attempt installing at on
ansible.builtin.set_fact: set_fact:
package_distros: package_distros:
- RedHat - RedHat
- CentOS - CentOS
- ScientificLinux - ScientificLinux
- Fedora - Fedora
- Ubuntu - Ubuntu
- Debian - Debian
- openSUSE Leap - openSUSE Leap
- name: Ensure at is installed - name: ensure at is installed
ansible.builtin.package: package:
name: at name: at
state: present state: present
when: ansible_distribution in package_distros when: ansible_distribution in package_distros
- name: Run the first example - name: run the first example
ansible.posix.at: at:
command: ls -d / > /dev/null command: "ls -d / > /dev/null"
count: 20 count: 20
units: minutes units: minutes
register: at_test0 register: at_test0
- name: Debug var=at_test0 - debug: var=at_test0
ansible.builtin.debug: - name: validate results
var: at_test0 assert:
- name: Validate results that:
ansible.builtin.assert: - 'at_test0.changed is defined'
that: - 'at_test0.count is defined'
- at_test0.changed is defined - 'at_test0.script_file is defined'
- at_test0.count is defined - 'at_test0.state is defined'
- at_test0.script_file is defined - 'at_test0.units is defined'
- at_test0.state is defined
- at_test0.units is defined

View file

@ -1,4 +1,3 @@
---
dss_key_basic: ssh-dss DATA_BASIC root@testing dss_key_basic: ssh-dss DATA_BASIC root@testing
dss_key_unquoted_option: idle-timeout=5m ssh-dss DATA_UNQUOTED_OPTION root@testing dss_key_unquoted_option: idle-timeout=5m ssh-dss DATA_UNQUOTED_OPTION root@testing
dss_key_command: command="/bin/true" ssh-dss DATA_COMMAND root@testing dss_key_command: command="/bin/true" ssh-dss DATA_COMMAND root@testing
@ -9,27 +8,27 @@ dss_key_trailing: ssh-dss DATA_TRAILING root@testing foo bar baz
rsa_key_basic: ssh-rsa DATA_BASIC root@testing rsa_key_basic: ssh-rsa DATA_BASIC root@testing
multiple_key_base: | multiple_key_base: |
ssh-rsa DATA_BASIC 1@testing ssh-rsa DATA_BASIC 1@testing
ssh-dss DATA_TRAILING 2@testing foo bar baz ssh-dss DATA_TRAILING 2@testing foo bar baz
ssh-dss DATA_TRAILING 3@testing foo bar baz ssh-dss DATA_TRAILING 3@testing foo bar baz
ecdsa-sha2-nistp521 ECDSA_DATA 4@testing ecdsa-sha2-nistp521 ECDSA_DATA 4@testing
multiple_key_different_order: | multiple_key_different_order: |
ssh-dss DATA_TRAILING 2@testing foo bar baz ssh-dss DATA_TRAILING 2@testing foo bar baz
ssh-dss DATA_TRAILING 3@testing foo bar baz ssh-dss DATA_TRAILING 3@testing foo bar baz
ssh-rsa DATA_BASIC 1@testing ssh-rsa DATA_BASIC 1@testing
ecdsa-sha2-nistp521 ECDSA_DATA 4@testing ecdsa-sha2-nistp521 ECDSA_DATA 4@testing
multiple_key_different_order_2: | multiple_key_different_order_2: |
ssh-dss DATA_TRAILING 2@testing foo bar baz ssh-dss DATA_TRAILING 2@testing foo bar baz
ssh-rsa WHATEVER 2.5@testing ssh-rsa WHATEVER 2.5@testing
ssh-dss DATA_TRAILING 3@testing foo bar baz ssh-dss DATA_TRAILING 3@testing foo bar baz
ssh-rsa DATA_BASIC 1@testing ssh-rsa DATA_BASIC 1@testing
ecdsa-sha2-nistp521 ECDSA_DATA 4@testing ecdsa-sha2-nistp521 ECDSA_DATA 4@testing
multiple_key_exclusive: | multiple_key_exclusive: |
ssh-rsa DATA_BASIC 1@testing ssh-rsa DATA_BASIC 1@testing
ecdsa-sha2-nistp521 ECDSA_DATA 4@testing ecdsa-sha2-nistp521 ECDSA_DATA 4@testing
multiple_keys_comments: | multiple_keys_comments: |
ssh-rsa DATA_BASIC 1@testing ssh-rsa DATA_BASIC 1@testing

View file

@ -1,3 +1,2 @@
---
dependencies: dependencies:
- prepare_tests - prepare_tests

View file

@ -1,37 +1,34 @@
---
# ------------------------------------------------------------- # -------------------------------------------------------------
# check mode # check mode
- name: CHECK MODE | copy an existing file in place with comments - name: CHECK MODE | copy an existing file in place with comments
ansible.builtin.copy: copy:
src: existing_authorized_keys src: existing_authorized_keys
dest: "{{ output_dir | expanduser }}/authorized_keys" dest: "{{ output_dir | expanduser }}/authorized_keys"
mode: "0600"
- name: CHECK MODE | add key in check mode to validate return codes - name: CHECK MODE | add key in check mode to validate return codes
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ multiple_key_different_order_2 }}" key: "{{ multiple_key_different_order_2 }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
check_mode: true check_mode: True
register: result register: result
- name: CHECK MODE | assert that authorized_keys return values are consistent - name: CHECK MODE | assert that authorized_keys return values are consistent
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- '"user" in result' - '"user" in result'
- '"key" in result' - '"key" in result'
- name: CHECK MODE | recopy authorized_keys to ensure it was not changed - name: CHECK MODE | recopy authorized_keys to ensure it was not changed
ansible.builtin.copy: copy:
src: existing_authorized_keys src: existing_authorized_keys
dest: "{{ output_dir | expanduser }}/authorized_keys" dest: "{{ output_dir | expanduser }}/authorized_keys"
mode: "0600"
register: result register: result
- name: CHECK MODE | assert that the authorized_keys file was not changed - name: CHECK MODE | assert that the authorized_keys file was not changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'

View file

@ -1,9 +1,8 @@
---
# ------------------------------------------------------------- # -------------------------------------------------------------
# comments # comments
- name: Add rsa key with existing comment - name: Add rsa key with existing comment
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ rsa_key_basic }}" key: "{{ rsa_key_basic }}"
state: present state: present
@ -11,7 +10,7 @@
register: result register: result
- name: Change the comment on an existing key - name: Change the comment on an existing key
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ rsa_key_basic }}" key: "{{ rsa_key_basic }}"
comment: user@acme.com comment: user@acme.com
@ -19,18 +18,18 @@
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Get the file content - name: get the file content
ansible.builtin.command: fgrep DATA_BASIC "{{ output_dir | expanduser }}/authorized_keys" shell: cat "{{ output_dir | expanduser }}/authorized_keys" | fgrep DATA_BASIC
changed_when: false changed_when: no
register: content register: content
- name: Assert that comment on an existing key was changed - name: Assert that comment on an existing key was changed
ansible.builtin.assert: assert:
that: that:
- "'user@acme.com' in content.stdout" - "'user@acme.com' in content.stdout"
- name: Set the same key with comment to ensure no changes are reported - name: Set the same key with comment to ensure no changes are reported
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ rsa_key_basic }}" key: "{{ rsa_key_basic }}"
comment: user@acme.com comment: user@acme.com
@ -39,12 +38,11 @@
register: result register: result
- name: Assert that no changes were made when running again - name: Assert that no changes were made when running again
ansible.builtin.assert: assert:
that: that:
- not result.changed - not result.changed
- name: Debug the result and content - debug:
ansible.builtin.debug:
var: "{{ item }}" var: "{{ item }}"
verbosity: 1 verbosity: 1
with_items: with_items:

View file

@ -1,4 +1,3 @@
---
# test code for the authorized_key module # test code for the authorized_key module
# - (c) 2014, James Cammarata <jcammarata@ansible.com> # - (c) 2014, James Cammarata <jcammarata@ansible.com>
# - (c) 2021, Hideki Saito <saito@fgrep.org> # - (c) 2021, Hideki Saito <saito@fgrep.org>
@ -18,16 +17,16 @@
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Setup testing environment - name: Setup testing environment
ansible.builtin.import_tasks: setup_steps.yml import_tasks: setup_steps.yml
- name: Test for multiple keys handling - name: Test for multiple keys handling
ansible.builtin.import_tasks: multiple_keys.yml import_tasks: multiple_keys.yml
- name: Test for ssh-dss key handling - name: Test for ssh-dss key handling
ansible.builtin.import_tasks: ssh_dss.yml import_tasks: ssh_dss.yml
- name: Test for check mode - name: Test for check mode
ansible.builtin.import_tasks: check_mode.yml import_tasks: check_mode.yml
- name: Test for the management of comments with key - name: Test for the management of comments with key
ansible.builtin.import_tasks: comments.yml import_tasks: comments.yml

View file

@ -1,39 +1,38 @@
---
# ------------------------------------------------------------- # -------------------------------------------------------------
# multiple keys # multiple keys
- name: Add multiple keys - name: add multiple keys
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ multiple_key_base }}" key: "{{ multiple_key_base }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == multiple_key_base - 'result.key == multiple_key_base'
- result.key_options == None - 'result.key_options == None'
- name: Add multiple keys different order - name: add multiple keys different order
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ multiple_key_different_order }}" key: "{{ multiple_key_different_order }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == multiple_key_different_order - 'result.key == multiple_key_different_order'
- result.key_options == None - 'result.key_options == None'
- name: Add multiple keys exclusive - name: add multiple keys exclusive
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ multiple_key_exclusive }}" key: "{{ multiple_key_exclusive }}"
state: present state: present
@ -41,42 +40,42 @@
exclusive: true exclusive: true
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == multiple_key_exclusive - 'result.key == multiple_key_exclusive'
- result.key_options == None - 'result.key_options == None'
- name: Add multiple keys in different calls - name: add multiple keys in different calls
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: ecdsa-sha2-nistp521 ECDSA_DATA 4@testing key: "ecdsa-sha2-nistp521 ECDSA_DATA 4@testing"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Add multiple keys in different calls - name: add multiple keys in different calls
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: ssh-rsa DATA_BASIC 1@testing key: "ssh-rsa DATA_BASIC 1@testing"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Get the file content - name: get the file content
ansible.builtin.command: /bin/cat "{{ output_dir | expanduser }}/authorized_keys" shell: cat "{{ output_dir | expanduser }}/authorized_keys"
changed_when: false changed_when: no
register: multiple_keys_at_a_time register: multiple_keys_at_a_time
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == false - 'result.changed == false'
- multiple_keys_at_a_time.stdout == multiple_key_exclusive.strip() - 'multiple_keys_at_a_time.stdout == multiple_key_exclusive.strip()'
- name: Add multiple keys comment - name: add multiple keys comment
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ multiple_keys_comments }}" key: "{{ multiple_keys_comments }}"
state: present state: present
@ -84,14 +83,14 @@
exclusive: true exclusive: true
register: result register: result
- name: Get the file content - name: get the file content
ansible.builtin.command: /bin/cat "{{ output_dir | expanduser }}/authorized_keys" shell: cat "{{ output_dir | expanduser }}/authorized_keys"
changed_when: false changed_when: no
register: multiple_keys_comments register: multiple_keys_comments
- name: Assert that the keys exist and comment only lines were not added - name: assert that the keys exist and comment only lines were not added
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
- multiple_keys_comments.stdout == multiple_key_exclusive.strip() - 'multiple_keys_comments.stdout == multiple_key_exclusive.strip()'
- result.key_options == None - 'result.key_options == None'

View file

@ -1,40 +1,37 @@
---
# ------------------------------------------------------------- # -------------------------------------------------------------
# Setup steps # Setup steps
- name: Clean up the working directory and files - name: Clean up the working directory and files
ansible.builtin.file: file:
path: "{{ output_dir }}" path: '{{ output_dir }}'
state: absent state: absent
- name: Create the working directory - name: Create the working directory
ansible.builtin.file: file:
path: "{{ output_dir }}" path: '{{ output_dir }}'
state: directory state: directory
mode: "0744"
- name: Copy an existing file in place with comments - name: copy an existing file in place with comments
ansible.builtin.copy: copy:
src: existing_authorized_keys src: existing_authorized_keys
dest: "{{ output_dir | expanduser }}/authorized_keys" dest: "{{ output_dir | expanduser }}/authorized_keys"
mode: "0600"
- name: Add multiple keys different order - name: add multiple keys different order
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ multiple_key_different_order_2 }}" key: "{{ multiple_key_different_order_2 }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Get the file content - name: get the file content
ansible.builtin.command: /bin/cat "{{ output_dir | expanduser }}/authorized_keys" shell: cat "{{ output_dir | expanduser }}/authorized_keys"
changed_when: false changed_when: no
register: multiple_keys_existing register: multiple_keys_existing
- name: Assert that the key was added and comments and ordering preserved - name: assert that the key was added and comments and ordering preserved
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- '"# I like candy" in multiple_keys_existing.stdout' - '"# I like candy" in multiple_keys_existing.stdout'
- '"# I like candy" in multiple_keys_existing.stdout_lines[0]' - '"# I like candy" in multiple_keys_existing.stdout_lines[0]'
- '"ssh-rsa DATA_BASIC 1@testing" in multiple_keys_existing.stdout' - '"ssh-rsa DATA_BASIC 1@testing" in multiple_keys_existing.stdout'
@ -44,20 +41,19 @@
# start afresh # start afresh
- name: Remove file foo.txt - name: remove file foo.txt
ansible.builtin.file: file:
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
state: absent state: absent
- name: Touch the authorized_keys file - name: touch the authorized_keys file
ansible.builtin.file: file:
dest: "{{ output_dir }}/authorized_keys" dest: "{{ output_dir }}/authorized_keys"
state: touch state: touch
mode: "0600"
register: result register: result
- name: Assert that the authorized_keys file was created - name: assert that the authorized_keys file was created
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.state == "file" - 'result.state == "file"'

View file

@ -1,250 +1,241 @@
---
# ------------------------------------------------------------- # -------------------------------------------------------------
# basic ssh-dss key # basic ssh-dss key
- name: Add basic ssh-dss key - name: add basic ssh-dss key
ansible.posix.authorized_key: authorized_key: user=root key="{{ dss_key_basic }}" state=present path="{{ output_dir | expanduser }}/authorized_keys"
user: root
key: "{{ dss_key_basic }}"
state: present
path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_basic - 'result.key == dss_key_basic'
- result.key_options == None - 'result.key_options == None'
- name: Re-add basic ssh-dss key - name: re-add basic ssh-dss key
ansible.posix.authorized_key: authorized_key: user=root key="{{ dss_key_basic }}" state=present path="{{ output_dir | expanduser }}/authorized_keys"
user: root
key: "{{ dss_key_basic }}"
state: present
path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that nothing changed - name: assert that nothing changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
# ------------------------------------------------------------- # -------------------------------------------------------------
# ssh-dss key with an unquoted option # ssh-dss key with an unquoted option
- name: Add ssh-dss key with an unquoted option - name: add ssh-dss key with an unquoted option
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_unquoted_option }}" key: "{{ dss_key_unquoted_option }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_unquoted_option - 'result.key == dss_key_unquoted_option'
- result.key_options == None - 'result.key_options == None'
- name: Re-add ssh-dss key with an unquoted option - name: re-add ssh-dss key with an unquoted option
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_unquoted_option }}" key: "{{ dss_key_unquoted_option }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that nothing changed - name: assert that nothing changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
# ------------------------------------------------------------- # -------------------------------------------------------------
# ssh-dss key with a leading command="/bin/foo" # ssh-dss key with a leading command="/bin/foo"
- name: Add ssh-dss key with a leading command - name: add ssh-dss key with a leading command
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_command }}" key: "{{ dss_key_command }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_command - 'result.key == dss_key_command'
- result.key_options == None - 'result.key_options == None'
- name: Re-add ssh-dss key with a leading command - name: re-add ssh-dss key with a leading command
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_command }}" key: "{{ dss_key_command }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that nothing changed - name: assert that nothing changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
# ------------------------------------------------------------- # -------------------------------------------------------------
# ssh-dss key with a complex quoted leading command # ssh-dss key with a complex quoted leading command
# ie. command="/bin/echo foo 'bar baz'" # ie. command="/bin/echo foo 'bar baz'"
- name: Add ssh-dss key with a complex quoted leading command - name: add ssh-dss key with a complex quoted leading command
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_complex_command }}" key: "{{ dss_key_complex_command }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_complex_command - 'result.key == dss_key_complex_command'
- result.key_options == None - 'result.key_options == None'
- name: Re-add ssh-dss key with a complex quoted leading command - name: re-add ssh-dss key with a complex quoted leading command
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_complex_command }}" key: "{{ dss_key_complex_command }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that nothing changed - name: assert that nothing changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
# ------------------------------------------------------------- # -------------------------------------------------------------
# ssh-dss key with a command and a single option, which are # ssh-dss key with a command and a single option, which are
# in a comma-separated list # in a comma-separated list
- name: Add ssh-dss key with a command and a single option - name: add ssh-dss key with a command and a single option
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_command_single_option }}" key: "{{ dss_key_command_single_option }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_command_single_option - 'result.key == dss_key_command_single_option'
- result.key_options == None - 'result.key_options == None'
- name: Re-add ssh-dss key with a command and a single option - name: re-add ssh-dss key with a command and a single option
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_command_single_option }}" key: "{{ dss_key_command_single_option }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that nothing changed - name: assert that nothing changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
# ------------------------------------------------------------- # -------------------------------------------------------------
# ssh-dss key with a command and multiple other options # ssh-dss key with a command and multiple other options
- name: Add ssh-dss key with a command and multiple options - name: add ssh-dss key with a command and multiple options
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_command_multiple_options }}" key: "{{ dss_key_command_multiple_options }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_command_multiple_options - 'result.key == dss_key_command_multiple_options'
- result.key_options == None - 'result.key_options == None'
- name: Re-add ssh-dss key with a command and multiple options - name: re-add ssh-dss key with a command and multiple options
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_command_multiple_options }}" key: "{{ dss_key_command_multiple_options }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that nothing changed - name: assert that nothing changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
# ------------------------------------------------------------- # -------------------------------------------------------------
# ssh-dss key with multiple trailing parts, which are space- # ssh-dss key with multiple trailing parts, which are space-
# separated and not quoted in any way # separated and not quoted in any way
- name: Add ssh-dss key with trailing parts - name: add ssh-dss key with trailing parts
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_trailing }}" key: "{{ dss_key_trailing }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key was added - name: assert that the key was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_trailing - 'result.key == dss_key_trailing'
- result.key_options == None - 'result.key_options == None'
- name: Re-add ssh-dss key with trailing parts - name: re-add ssh-dss key with trailing parts
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_trailing }}" key: "{{ dss_key_trailing }}"
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that nothing changed - name: assert that nothing changed
ansible.builtin.assert: assert:
that: that:
- result.changed == False - 'result.changed == False'
# ------------------------------------------------------------- # -------------------------------------------------------------
# basic ssh-dss key with mutliple permit-open options # basic ssh-dss key with mutliple permit-open options
# https://github.com/ansible/ansible-modules-core/issues/1715 # https://github.com/ansible/ansible-modules-core/issues/1715
- name: Add basic ssh-dss key with multi-opts - name: add basic ssh-dss key with multi-opts
ansible.posix.authorized_key: authorized_key:
user: root user: root
key: "{{ dss_key_basic }}" key: "{{ dss_key_basic }}"
key_options: no-agent-forwarding,no-X11-forwarding,permitopen="10.9.8.1:8080",permitopen="10.9.8.1:9001" key_options: 'no-agent-forwarding,no-X11-forwarding,permitopen="10.9.8.1:8080",permitopen="10.9.8.1:9001"'
state: present state: present
path: "{{ output_dir | expanduser }}/authorized_keys" path: "{{ output_dir | expanduser }}/authorized_keys"
register: result register: result
- name: Assert that the key with multi-opts was added - name: assert that the key with multi-opts was added
ansible.builtin.assert: assert:
that: that:
- result.changed == True - 'result.changed == True'
- result.key == dss_key_basic - 'result.key == dss_key_basic'
- result.key_options == "no-agent-forwarding,no-X11-forwarding,permitopen=\"10.9.8.1:8080\",permitopen=\"10.9.8.1:9001\"" - 'result.key_options == "no-agent-forwarding,no-X11-forwarding,permitopen=\"10.9.8.1:8080\",permitopen=\"10.9.8.1:9001\""'
- name: Get the file content - name: get the file content
ansible.builtin.command: fgrep DATA_BASIC "{{ output_dir | expanduser }}/authorized_keys" shell: cat "{{ output_dir | expanduser }}/authorized_keys" | fgrep DATA_BASIC
changed_when: false changed_when: no
register: content register: content
- name: Validate content - name: validate content
ansible.builtin.assert: assert:
that: that:
- content.stdout == "no-agent-forwarding,no-X11-forwarding,permitopen=\"10.9.8.1:8080\",permitopen=\"10.9.8.1:9001\" ssh-dss DATA_BASIC root@testing" - 'content.stdout == "no-agent-forwarding,no-X11-forwarding,permitopen=\"10.9.8.1:8080\",permitopen=\"10.9.8.1:9001\" ssh-dss DATA_BASIC root@testing"'

View file

@ -1,3 +1,2 @@
---
dependencies: dependencies:
- setup_pkg_mgr - setup_pkg_mgr

View file

@ -1,173 +1,172 @@
---
# Test playbook for the firewalld module - icmp block inversion operations # Test playbook for the firewalld module - icmp block inversion operations
# (c) 2022, Gregory Furlong <gnfzdz@fzdz.io> # (c) 2022, Gregory Furlong <gnfzdz@fzdz.io>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Icmp block inversion enabled when icmp block inversion is truthy and state is enabled - name: Icmp block inversion enabled when icmp block inversion is truthy and state is enabled
block: block:
- name: Testing enable icmp block inversion - name: Testing enable icmp block inversion
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: true icmp_block_inversion: yes
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert icmp block inversion is enabled - name: assert icmp block inversion is enabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing enable icmp block inversion (verify not changed) - name: Testing enable icmp block inversion (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: true icmp_block_inversion: yes
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert icmp block inversion is enabled (verify not changed) - name: assert icmp block inversion is enabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Icmp block inversion disabled when icmp block inversion is falsy and state is enabled - name: Icmp block inversion disabled when icmp block inversion is falsy and state is enabled
block: block:
- name: Testing disable icmp block inversion - name: Testing disable icmp block inversion
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: false icmp_block_inversion: no
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert icmp block inversion is disabled - name: assert icmp block inversion is disabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing disable icmp block inversion (verify not changed) - name: Testing disable icmp block inversion (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: false icmp_block_inversion: no
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert icmp block inversion is disabled (verify not changed) - name: assert icmp block inversion is disabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Icmp block inversion enabled when icmp block inversion is falsy and state is disabled - name: Icmp block inversion enabled when icmp block inversion is falsy and state is disabled
block: block:
- name: Testing enable icmp block inversion - name: Testing enable icmp block inversion
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: false icmp_block_inversion: no
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert icmp block inversion is enabled - name: assert icmp block inversion is enabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing enable icmp block inversion (verify not changed) - name: Testing enable icmp block inversion (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: false icmp_block_inversion: no
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert icmp block inversion is enabled (verify not changed) - name: assert icmp block inversion is enabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Icmp block inversion disabled when icmp block inversion is truthy and state is disabled - name: Icmp block inversion disabled when icmp block inversion is truthy and state is disabled
block: block:
- name: Testing disable icmp block inversion - name: Testing disable icmp block inversion
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: true icmp_block_inversion: yes
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert icmp block inversion is disabled - name: assert icmp block inversion is disabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing disable icmp block inversion (verify not changed) - name: Testing disable icmp block inversion (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: true icmp_block_inversion: yes
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert icmp block inversion is disabled (verify not changed) - name: assert icmp block inversion is disabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
# Validate backwards compatible behavior until icmp block inversion is switched from string to boolean type # Validate backwards compatible behavior until icmp block inversion is switched from string to boolean type
- name: Icmp block inversion enabled when icmp block inversion is non-boolean string and state is enabled - name: Icmp block inversion enabled when icmp block inversion is non-boolean string and state is enabled
block: block:
- name: Testing enable icmp block inversion - name: Testing enable icmp block inversion
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: some string icmp_block_inversion: 'some string'
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert icmp block inversion is enabled - name: assert icmp block inversion is enabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing enable icmp block inversion (verify not changed) - name: Testing enable icmp block inversion (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: some string icmp_block_inversion: 'some string'
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert icmp block inversion is enabled (verify not changed) - name: assert icmp block inversion is enabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Icmp block inversion disabled when icmp block inversion is non-boolean string and state is disabled - name: Icmp block inversion disabled when icmp block inversion is non-boolean string and state is disabled
block: block:
- name: Testing disable icmp block inversion - name: Testing disable icmp block inversion
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: some string icmp_block_inversion: 'some string'
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert icmp block inversion is disabled - name: assert icmp block inversion is disabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing disable icmp block inversion (verify not changed) - name: Testing disable icmp block inversion (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
icmp_block_inversion: some string icmp_block_inversion: 'some string'
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert icmp block inversion is disabled (verify not changed) - name: assert icmp block inversion is disabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,88 +1,87 @@
---
# Test playbook for the firewalld module - interface operations # Test playbook for the firewalld module - interface operations
# (c) 2022, Gregory Furlong <gnfzdz@fzdz.io> # (c) 2022, Gregory Furlong <gnfzdz@fzdz.io>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Validate adding interface - name: Validate adding interface
block: block:
- name: Add lo interface to trusted zone - name: Add lo interface to trusted zone
ansible.posix.firewalld: ansible.posix.firewalld:
interface: lo interface: lo
zone: trusted zone: trusted
permanent: true permanent: Yes
state: enabled state: enabled
register: result register: result
- name: Assert lo was added to trusted zone - name: assert lo was added to trusted zone
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Add lo interface to trusted zone (verify not changed) - name: Add lo interface to trusted zone (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
interface: lo interface: lo
zone: trusted zone: trusted
permanent: true permanent: Yes
state: enabled state: enabled
register: result register: result
- name: Assert lo was added to trusted zone (verify not changed) - name: assert lo was added to trusted zone (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Validate moving interfaces - name: Validate moving interfaces
block: block:
- name: Move lo interface from trusted zone to internal zone - name: Move lo interface from trusted zone to internal zone
ansible.posix.firewalld: ansible.posix.firewalld:
interface: lo interface: lo
zone: internal zone: internal
permanent: true permanent: Yes
state: enabled state: enabled
register: result register: result
- name: Assert lo was moved from trusted zone to internal zone - name: Assert lo was moved from trusted zone to internal zone
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Move lo interface from trusted zone to internal zone (verify not changed) - name: Move lo interface from trusted zone to internal zone (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
interface: lo interface: lo
zone: internal zone: internal
permanent: true permanent: Yes
state: enabled state: enabled
register: result register: result
- name: Assert lo was moved from trusted zone to internal zone (verify not changed) - name: assert lo was moved from trusted zone to internal zone (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Validate removing interface - name: Validate removing interface
block: block:
- name: Remove lo interface from internal zone - name: Remove lo interface from internal zone
ansible.posix.firewalld: ansible.posix.firewalld:
interface: lo interface: lo
zone: internal zone: internal
permanent: true permanent: Yes
state: disabled state: disabled
register: result register: result
- name: Assert lo interface was removed from internal zone - name: Assert lo interface was removed from internal zone
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Remove lo interface from internal zone (verify not changed) - name: Remove lo interface from internal zone (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
interface: lo interface: lo
zone: internal zone: internal
permanent: true permanent: Yes
state: disabled state: disabled
register: result register: result
- name: Assert lo interface was removed from internal zone (verify not changed) - name: Assert lo interface was removed from internal zone (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,24 +1,17 @@
---
# Test playbook for the firewalld module # Test playbook for the firewalld module
# (c) 2017, Adam Miller <admiller@redhat.com> # (c) 2017, Adam Miller <admiller@redhat.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Run firewalld tests - name: Run firewalld tests
when:
- ansible_facts.os_family == "RedHat" and ansible_facts.distribution_major_version is version('7', '>=')
- not (ansible_distribution == "Ubuntu" and ansible_distribution_version is version('14.04', '=='))
# Firewalld package on OpenSUSE (15+) require Python 3, so we skip on OpenSUSE running py2 on these newer distros
- not (ansible_os_family == "Suse" and ansible_distribution_major_version|int != 42 and ansible_python.version.major != 3)
- not (ansible_facts.distribution == "CentOS" and ansible_distribution_major_version is version('7', '==')) # FIXME
block: block:
- name: Ensure firewalld is installed - name: Ensure firewalld is installed
ansible.builtin.package: package:
name: firewalld name: firewalld
state: present state: present
# This doesn't work for CentOS 6 because firewalld doesn't exist in CentOS6 # This doesn't work for CentOS 6 because firewalld doesn't exist in CentOS6
- name: Enable dbus-broker daemon - name: Enable dbus-broker daemon
ansible.builtin.service: service:
name: dbus-broker name: dbus-broker
enabled: true enabled: true
state: started state: started
@ -26,20 +19,25 @@
- name: Test Online Operations - name: Test Online Operations
block: block:
- name: Start firewalld - name: start firewalld
ansible.builtin.service: service:
name: firewalld name: firewalld
state: started state: started
- name: Import test tasks - import_tasks: run_all_tests.yml
ansible.builtin.import_tasks: run_all_tests.yml
- name: Test Offline Operations - name: Test Offline Operations
block: block:
- name: Stop firewalld - name: stop firewalld
ansible.builtin.service: service:
name: firewalld name: firewalld
state: stopped state: stopped
- name: Import test tasks - import_tasks: run_all_tests.yml
ansible.builtin.import_tasks: run_all_tests.yml
when:
- ansible_facts.os_family == "RedHat" and ansible_facts.distribution_major_version is version('7', '>=')
- not (ansible_distribution == "Ubuntu" and ansible_distribution_version is version('14.04', '=='))
# Firewalld package on OpenSUSE (15+) require Python 3, so we skip on OpenSUSE running py2 on these newer distros
- not (ansible_os_family == "Suse" and ansible_distribution_major_version|int != 42 and ansible_python.version.major != 3)
- not (ansible_facts.distribution == "CentOS" and ansible_distribution_major_version is version('7', '==')) # FIXME

View file

@ -1,173 +1,172 @@
---
# Test playbook for the firewalld module - masquerade operations # Test playbook for the firewalld module - masquerade operations
# (c) 2022, Gregory Furlong <gnfzdz@fzdz.io> # (c) 2022, Gregory Furlong <gnfzdz@fzdz.io>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Masquerade enabled when masquerade is truthy and state is enabled - name: Masquerade enabled when masquerade is truthy and state is enabled
block: block:
- name: Testing enable masquerade - name: Testing enable masquerade
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: true masquerade: yes
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert masquerade is enabled - name: assert masquerade is enabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing enable masquerade (verify not changed) - name: Testing enable masquerade (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: true masquerade: yes
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert masquerade is enabled (verify not changed) - name: assert masquerade is enabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Masquerade disabled when masquerade is falsy and state is enabled - name: Masquerade disabled when masquerade is falsy and state is enabled
block: block:
- name: Testing disable masquerade - name: Testing disable masquerade
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: false masquerade: no
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert masquerade is disabled - name: assert masquerade is disabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing disable masquerade (verify not changed) - name: Testing disable masquerade (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: false masquerade: no
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert masquerade is disabled (verify not changed) - name: assert masquerade is disabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Masquerade enabled when masquerade is falsy and state is disabled - name: Masquerade enabled when masquerade is falsy and state is disabled
block: block:
- name: Testing enable masquerade - name: Testing enable masquerade
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: false masquerade: no
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert masquerade is enabled - name: assert masquerade is enabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing enable masquerade (verify not changed) - name: Testing enable masquerade (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: false masquerade: no
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert masquerade is enabled (verify not changed) - name: assert masquerade is enabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Masquerade disabled when masquerade is truthy and state is disabled - name: Masquerade disabled when masquerade is truthy and state is disabled
block: block:
- name: Testing disable masquerade - name: Testing disable masquerade
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: true masquerade: yes
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert masquerade is disabled - name: assert masquerade is disabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing disable masquerade (verify not changed) - name: Testing disable masquerade (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: true masquerade: yes
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert masquerade is disabled (verify not changed) - name: assert masquerade is disabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
# Validate backwards compatible behavior until masquerade is switched from string to boolean type # Validate backwards compatible behavior until masquerade is switched from string to boolean type
- name: Masquerade enabled when masquerade is non-boolean string and state is enabled - name: Masquerade enabled when masquerade is non-boolean string and state is enabled
block: block:
- name: Testing enable masquerade - name: Testing enable masquerade
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: some string masquerade: 'some string'
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert masquerade is enabled - name: assert masquerade is enabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing enable masquerade (verify not changed) - name: Testing enable masquerade (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: some string masquerade: 'some string'
permanent: true permanent: yes
state: enabled state: enabled
register: result register: result
- name: Assert masquerade is enabled (verify not changed) - name: assert masquerade is enabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Masquerade disabled when masquerade is non-boolean string and state is disabled - name: Masquerade disabled when masquerade is non-boolean string and state is disabled
block: block:
- name: Testing disable masquerade - name: Testing disable masquerade
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: some string masquerade: 'some string'
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert masquerade is disabled - name: assert masquerade is disabled
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Testing disable masquerade (verify not changed) - name: Testing disable masquerade (verify not changed)
ansible.posix.firewalld: ansible.posix.firewalld:
zone: trusted zone: trusted
masquerade: some string masquerade: 'some string'
permanent: true permanent: yes
state: disabled state: disabled
register: result register: result
- name: Assert masquerade is disabled (verify not changed) - name: assert masquerade is disabled (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,10 +1,9 @@
---
# Test playbook for the firewalld module - port operations # Test playbook for the firewalld module - port operations
# (c) 2017, Adam Miller <admiller@redhat.com> # (c) 2017, Adam Miller <admiller@redhat.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Firewalld port forward test permanent enabled - name: firewalld port forward test permanent enabled
ansible.posix.firewalld: firewalld:
port_forward: port_forward:
- port: 8080 - port: 8080
proto: tcp proto: tcp
@ -13,13 +12,13 @@
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port test permanent enabled worked - name: assert firewalld port test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld port test permanent enabled rerun (verify not changed) - name: firewalld port test permanent enabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
port_forward: port_forward:
- port: 8080 - port: 8080
proto: tcp proto: tcp
@ -28,13 +27,13 @@
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port test permanent enabled rerun worked (verify not changed) - name: assert firewalld port test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld port test permanent disabled - name: firewalld port test permanent disabled
ansible.posix.firewalld: firewalld:
port_forward: port_forward:
- port: 8080 - port: 8080
proto: tcp proto: tcp
@ -43,13 +42,13 @@
state: disabled state: disabled
register: result register: result
- name: Assert firewalld port test permanent disabled worked - name: assert firewalld port test permanent disabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld port test permanent disabled rerun (verify not changed) - name: firewalld port test permanent disabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
port_forward: port_forward:
- port: 8080 - port: 8080
proto: tcp proto: tcp
@ -58,7 +57,7 @@
state: disabled state: disabled
register: result register: result
- name: Assert firewalld port test permanent disabled rerun worked (verify not changed) - name: assert firewalld port test permanent disabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,58 +1,57 @@
---
# Test playbook for the firewalld module - port operations # Test playbook for the firewalld module - port operations
# (c) 2017, Adam Miller <admiller@redhat.com> # (c) 2017, Adam Miller <admiller@redhat.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Firewalld port range test permanent enabled - name: firewalld port range test permanent enabled
ansible.posix.firewalld: firewalld:
port: 5500-6850/tcp port: 5500-6850/tcp
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port range test permanent enabled worked - name: assert firewalld port range test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld port range test permanent enabled rerun (verify not changed) - name: firewalld port range test permanent enabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
port: 5500-6850/tcp port: 5500-6850/tcp
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port range test permanent enabled rerun worked (verify not changed) - name: assert firewalld port range test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld port test permanent enabled - name: firewalld port test permanent enabled
ansible.posix.firewalld: firewalld:
port: 6900/tcp port: 6900/tcp
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port test permanent enabled worked - name: assert firewalld port test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld port test permanent enabled - name: firewalld port test permanent enabled
ansible.posix.firewalld: firewalld:
port: 6900/tcp port: 6900/tcp
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port test permanent enabled worked - name: assert firewalld port test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld port test disabled - name: firewalld port test disabled
ansible.posix.firewalld: firewalld:
port: "{{ item }}" port: "{{ item }}"
permanent: true permanent: true
state: disabled state: disabled
@ -60,50 +59,50 @@
- 6900/tcp - 6900/tcp
- 5500-6850/tcp - 5500-6850/tcp
- name: Firewalld port test permanent enabled - name: firewalld port test permanent enabled
ansible.posix.firewalld: firewalld:
port: 8081/tcp port: 8081/tcp
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port test permanent enabled worked - name: assert firewalld port test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld port test permanent enabled rerun (verify not changed) - name: firewalld port test permanent enabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
port: 8081/tcp port: 8081/tcp
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld port test permanent enabled rerun worked (verify not changed) - name: assert firewalld port test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld port test permanent disabled - name: firewalld port test permanent disabled
ansible.posix.firewalld: firewalld:
port: 8081/tcp port: 8081/tcp
permanent: true permanent: true
state: disabled state: disabled
register: result register: result
- name: Assert firewalld port test permanent disabled worked - name: assert firewalld port test permanent disabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld port test permanent disabled rerun (verify not changed) - name: firewalld port test permanent disabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
port: 8081/tcp port: 8081/tcp
permanent: true permanent: true
state: disabled state: disabled
register: result register: result
- name: Assert firewalld port test permanent disabled rerun worked (verify not changed) - name: assert firewalld port test permanent disabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,4 +1,3 @@
---
# Test playbook for the firewalld module - protocol operations # Test playbook for the firewalld module - protocol operations
# (c) 2022, Robért S. Guhr <rguhr@cronon.net> # (c) 2022, Robért S. Guhr <rguhr@cronon.net>
@ -17,50 +16,50 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Firewalld protocol test permanent enabled - name: firewalld protocol test permanent enabled
ansible.posix.firewalld: firewalld:
protocol: ospf protocol: ospf
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld protocol test permanent enabled worked - name: assert firewalld protocol test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld protocol test permanent enabled rerun (verify not changed) - name: firewalld protocol test permanent enabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
protocol: ospf protocol: ospf
permanent: true permanent: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld protocol test permanent enabled rerun worked (verify not changed) - name: assert firewalld protocol test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld protocol test permanent disabled - name: firewalld protocol test permanent disabled
ansible.posix.firewalld: firewalld:
protocol: ospf protocol: ospf
permanent: true permanent: true
state: disabled state: disabled
register: result register: result
- name: Assert firewalld protocol test permanent disabled worked - name: assert firewalld protocol test permanent disabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld protocol test permanent disabled rerun (verify not changed) - name: firewalld protocol test permanent disabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
protocol: ospf protocol: ospf
permanent: true permanent: true
state: disabled state: disabled
register: result register: result
- name: Assert firewalld protocol test permanent disabled rerun worked (verify not changed) - name: assert firewalld protocol test permanent disabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,50 +1,38 @@
---
# Test playbook for the firewalld module # Test playbook for the firewalld module
# (c) 2017, Adam Miller <admiller@redhat.com> # (c) 2017, Adam Miller <admiller@redhat.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Ensure /run/firewalld exists - name: Ensure /run/firewalld exists
ansible.builtin.file: file:
path: /run/firewalld path: /run/firewalld
state: directory state: directory
mode: "0755"
# firewalld service operation test cases # firewalld service operation test cases
- name: Include service test cases for firewalld module - include_tasks: service_test_cases.yml
ansible.builtin.include_tasks: service_test_cases.yml
# firewalld protocol operation test cases # firewalld protocol operation test cases
- name: Include protocol test cases for firewalld module - include_tasks: protocol_test_cases.yml
ansible.builtin.include_tasks: protocol_test_cases.yml
# firewalld port operation test cases # firewalld port operation test cases
- name: Include port test cases for firewalld module - include_tasks: port_test_cases.yml
ansible.builtin.include_tasks: port_test_cases.yml
# firewalld source operation test cases # firewalld source operation test cases
- name: Include source test cases for firewalld module - include_tasks: source_test_cases.yml
ansible.builtin.include_tasks: source_test_cases.yml
# firewalld zone operation test cases # firewalld zone operation test cases
- name: Include zone test cases for firewalld module - include_tasks: zone_test_cases.yml
ansible.builtin.include_tasks: zone_test_cases.yml
# firewalld zone target operation test cases # firewalld zone target operation test cases
- name: Include zone target test cases for firewalld module - include_tasks: zone_target_test_cases.yml
ansible.builtin.include_tasks: zone_target_test_cases.yml
# firewalld port forwarding operation test cases # firewalld port forwarding operation test cases
- name: Include port forward target test cases for firewalld module - include_tasks: port_forward_test_cases.yml
ansible.builtin.include_tasks: port_forward_test_cases.yml
# firewalld masquerade operation test cases # firewalld masquerade operation test cases
- name: Include masquerade target test cases for firewalld module - include_tasks: masquerade_test_cases.yml
ansible.builtin.include_tasks: masquerade_test_cases.yml
# firewalld icmp block inversion operation test cases # firewalld icmp block inversion operation test cases
- name: Include icmp block inversion target test cases for firewalld module - include_tasks: icmp_block_inversion_test_cases.yml
ansible.builtin.include_tasks: icmp_block_inversion_test_cases.yml
# firewalld interface operation test cases # firewalld interface operation test cases
- name: Include interface target test cases for firewalld module - include_tasks: interface_test_cases.yml
ansible.builtin.include_tasks: interface_test_cases.yml

View file

@ -1,4 +1,3 @@
---
# Test playbook for the firewalld module - service operations # Test playbook for the firewalld module - service operations
# (c) 2017, Adam Miller <admiller@redhat.com> # (c) 2017, Adam Miller <admiller@redhat.com>
@ -17,58 +16,50 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Firewalld service test permanent enabled - name: firewalld service test permanent enabled
ansible.posix.firewalld: firewalld:
service: https service: https
permanent: true permanent: true
immediate: true
offline: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld service test permanent enabled worked - name: assert firewalld service test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld service test permanent enabled rerun (verify not changed) - name: firewalld service test permanent enabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
service: https service: https
permanent: true permanent: true
immediate: true
offline: true
state: enabled state: enabled
register: result register: result
- name: Assert firewalld service test permanent enabled rerun worked (verify not changed) - name: assert firewalld service test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld service test permanent disabled - name: firewalld service test permanent disabled
ansible.posix.firewalld: firewalld:
service: https service: https
permanent: true permanent: true
immediate: true
offline: true
state: disabled state: disabled
register: result register: result
- name: Assert firewalld service test permanent disabled worked - name: assert firewalld service test permanent disabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld service test permanent disabled rerun (verify not changed) - name: firewalld service test permanent disabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
service: https service: https
permanent: true permanent: true
immediate: true
offline: true
state: disabled state: disabled
register: result register: result
- name: Assert firewalld service test permanent disabled rerun worked (verify not changed) - name: assert firewalld service test permanent disabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,4 +1,3 @@
---
# Test playbook for the firewalld module - source operations # Test playbook for the firewalld module - source operations
# (c) 2019, Hideki Saito <saito@fgrep.org> # (c) 2019, Hideki Saito <saito@fgrep.org>
@ -17,71 +16,70 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Firewalld source test permanent enabled - name: firewalld source test permanent enabled
ansible.posix.firewalld: firewalld:
source: 192.0.2.0/24 source: 192.0.2.0/24
zone: internal zone: internal
permanent: true permanent: True
state: enabled state: enabled
register: result register: result
- name: Assert firewalld source test permanent enabled worked - name: assert firewalld source test permanent enabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld source test permanent enabled rerun (verify not changed) - name: firewalld source test permanent enabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
source: 192.0.2.0/24 source: 192.0.2.0/24
zone: internal zone: internal
permanent: true permanent: True
state: enabled state: enabled
register: result register: result
- name: Assert firewalld source test permanent enabled rerun worked (verify not changed) - name: assert firewalld source test permanent enabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld source test permanent disabled - name: firewalld source test permanent disabled
ansible.posix.firewalld: firewalld:
source: 192.0.2.0/24 source: 192.0.2.0/24
zone: internal zone: internal
permanent: true permanent: True
state: disabled state: disabled
register: result register: result
- name: Assert firewalld source test permanent disabled worked - name: assert firewalld source test permanent disabled worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld source test permanent disabled rerun (verify not changed) - name: firewalld source test permanent disabled rerun (verify not changed)
ansible.posix.firewalld: firewalld:
source: 192.0.2.0/24 source: 192.0.2.0/24
zone: internal zone: internal
permanent: true permanent: True
state: disabled state: disabled
register: result register: result
- name: Assert firewalld source test permanent disabled rerun worked (verify not changed) - name: assert firewalld source test permanent disabled rerun worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld source test permanent enabled is exclusive (verify exclusive error) - name: firewalld source test permanent enabled is exclusive (verify exclusive error)
ansible.posix.firewalld: firewalld:
source: 192.0.2.0/24 source: 192.0.2.0/24
port: 8081/tcp port: 8081/tcp
zone: internal zone: internal
permanent: true permanent: True
state: enabled state: enabled
register: result register: result
ignore_errors: true ignore_errors: true
- name: Assert firewalld source test permanent enabled is exclusive (verify exclusive error) - name: assert firewalld source test permanent enabled is exclusive (verify exclusive error)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- "result.msg == - "result.msg == 'parameters are mutually exclusive: icmp_block|icmp_block_inversion|service|protocol|port|port_forward|rich_rule|interface|masquerade|source|target'"
'parameters are mutually exclusive: icmp_block|icmp_block_inversion|service|protocol|port|port_forward|rich_rule|interface|masquerade|source|target'"

View file

@ -1,4 +1,3 @@
---
# Test playbook for the firewalld module - source operations # Test playbook for the firewalld module - source operations
# (c) 2020, Adam Miller <admiller@redhat.com> # (c) 2020, Adam Miller <admiller@redhat.com>
@ -17,106 +16,106 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Firewalld dmz zone target DROP - name: firewalld dmz zone target DROP
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: present state: present
target: DROP target: DROP
register: result register: result
- name: Assert firewalld dmz zone target DROP present worked - name: assert firewalld dmz zone target DROP present worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld dmz zone target DROP rerun (verify not changed) - name: firewalld dmz zone target DROP rerun (verify not changed)
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: present state: present
target: DROP target: DROP
register: result register: result
- name: Assert firewalld dmz zone target DROP present worked (verify not changed) - name: assert firewalld dmz zone target DROP present worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld dmz zone target DROP absent - name: firewalld dmz zone target DROP absent
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: absent state: absent
target: DROP target: DROP
register: result register: result
- name: Assert firewalld dmz zone target DROP absent worked - name: assert firewalld dmz zone target DROP absent worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld dmz zone target DROP rerun (verify not changed) - name: firewalld dmz zone target DROP rerun (verify not changed)
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: absent state: absent
target: DROP target: DROP
register: result register: result
- name: Assert firewalld dmz zone target DROP present worked (verify not changed) - name: assert firewalld dmz zone target DROP present worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld dmz zone target %%REJECT%% - name: firewalld dmz zone target %%REJECT%%
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: present state: present
target: "%%REJECT%%" target: '%%REJECT%%'
register: result register: result
- name: Assert firewalld dmz zone target %%REJECT%% present worked - name: assert firewalld dmz zone target %%REJECT%% present worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld dmz zone target %%REJECT%% rerun (verify not changed) - name: firewalld dmz zone target %%REJECT%% rerun (verify not changed)
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: present state: present
target: "%%REJECT%%" target: '%%REJECT%%'
register: result register: result
- name: Assert firewalld dmz zone target %%REJECT%% present worked (verify not changed) - name: assert firewalld dmz zone target %%REJECT%% present worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld dmz zone target %%REJECT%% absent - name: firewalld dmz zone target %%REJECT%% absent
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: absent state: absent
target: "%%REJECT%%" target: '%%REJECT%%'
register: result register: result
- name: Assert firewalld dmz zone target %%REJECT%% absent worked - name: assert firewalld dmz zone target %%REJECT%% absent worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld dmz zone target %%REJECT%% rerun (verify not changed) - name: firewalld dmz zone target %%REJECT%% rerun (verify not changed)
ansible.posix.firewalld: firewalld:
zone: dmz zone: dmz
permanent: true permanent: True
state: absent state: absent
target: "%%REJECT%%" target: '%%REJECT%%'
register: result register: result
- name: Assert firewalld dmz zone target %%REJECT%% present worked (verify not changed) - name: assert firewalld dmz zone target %%REJECT%% present worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,48 +1,47 @@
--- - name: firewalld create zone custom
- name: Firewalld create zone custom firewalld:
ansible.posix.firewalld:
zone: custom zone: custom
permanent: true permanent: True
state: present state: present
register: result register: result
- name: Assert firewalld custom zone created worked - name: assert firewalld custom zone created worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld create zone custom rerun (verify not changed) - name: firewalld create zone custom rerun (verify not changed)
ansible.posix.firewalld: firewalld:
zone: custom zone: custom
permanent: true permanent: True
state: present state: present
register: result register: result
- name: Assert firewalld custom zone created worked (verify not changed) - name: assert firewalld custom zone created worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Firewalld remove zone custom - name: firewalld remove zone custom
ansible.posix.firewalld: firewalld:
zone: custom zone: custom
permanent: true permanent: True
state: absent state: absent
register: result register: result
- name: Assert firewalld custom zone removed worked - name: assert firewalld custom zone removed worked
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Firewalld remove custom zone rerun (verify not changed) - name: firewalld remove custom zone rerun (verify not changed)
ansible.posix.firewalld: firewalld:
zone: custom zone: custom
permanent: true permanent: True
state: absent state: absent
register: result register: result
- name: Assert firewalld custom zone removed worked (verify not changed) - name: assert firewalld custom zone removed worked (verify not changed)
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed

View file

@ -1,53 +1,52 @@
---
# Test playbook for the firewalld_info module # Test playbook for the firewalld_info module
# (c) 2021, Hideki Saito <saito@fgrep.org> # (c) 2021, Hideki Saito <saito@fgrep.org>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
# This test is based on the integration test playbook for firewalld module. # This test is based on the integration test playbook for firewalld module.
- name: Run firewalld tests - name: Run firewalld tests
when:
- ansible_facts.os_family == "RedHat" and ansible_facts.distribution_major_version is version('7', '>=')
- not (ansible_distribution == "Ubuntu" and ansible_distribution_version is version('14.04', '=='))
# Firewalld package on OpenSUSE (15+) require Python 3, so we skip on OpenSUSE running py2 on these newer distros
- not (ansible_os_family == "Suse" and ansible_distribution_major_version|int != 42 and ansible_python.version.major != 3)
block: block:
- name: Ensure firewalld is installed - name: Ensure firewalld is installed
ansible.builtin.package: package:
name: firewalld name: firewalld
state: present state: present
# This doesn't work for CentOS 6 because firewalld doesn't exist in CentOS6 # This doesn't work for CentOS 6 because firewalld doesn't exist in CentOS6
- name: Check to make sure the firewalld python module is available. - name: Check to make sure the firewalld python module is available.
ansible.builtin.command: "{{ ansible_python.executable }} -c 'import firewall'" shell: "{{ansible_python.executable}} -c 'import firewall'"
changed_when: false
register: check_output_firewall register: check_output_firewall
ignore_errors: true ignore_errors: true
- name: Check to make sure the dbus python module is available. - name: Check to make sure the dbus python module is available.
ansible.builtin.command: "{{ ansible_python.executable }} -c 'import dbus'" shell: "{{ansible_python.executable}} -c 'import dbus'"
changed_when: false
register: check_output_dbus register: check_output_dbus
ignore_errors: true ignore_errors: true
- name: Test Online Operations - name: Test Online Operations
block: block:
- name: Start firewalld - name: start firewalld
ansible.builtin.service: service:
name: firewalld name: firewalld
state: started state: started
- name: Import test tasks from run_tests_in_started.yml - import_tasks: run_tests_in_started.yml
ansible.builtin.import_tasks: run_tests_in_started.yml
- name: Test Offline Operations
when: when:
- check_output_firewall.rc == 0 - check_output_firewall.rc == 0
- check_output_dbus.rc == 0 - check_output_dbus.rc == 0
- name: Test Offline Operations
block: block:
- name: Stop firewalld - name: stop firewalld
ansible.builtin.service: service:
name: firewalld name: firewalld
state: stopped state: stopped
- name: Import test tasks from run_tests_in_stopped.yml - import_tasks: run_tests_in_stopped.yml
ansible.builtin.import_tasks: run_tests_in_stopped.yml when:
- check_output_firewall.rc == 0
- check_output_dbus.rc == 0
when:
- ansible_facts.os_family == "RedHat" and ansible_facts.distribution_major_version is version('7', '>=')
- not (ansible_distribution == "Ubuntu" and ansible_distribution_version is version('14.04', '=='))
# Firewalld package on OpenSUSE (15+) require Python 3, so we skip on OpenSUSE running py2 on these newer distros
- not (ansible_os_family == "Suse" and ansible_distribution_major_version|int != 42 and ansible_python.version.major != 3)

View file

@ -1,33 +1,32 @@
---
# Test playbook for the firewalld_info module # Test playbook for the firewalld_info module
# (c) 2021, Hideki Saito <saito@fgrep.org> # (c) 2021, Hideki Saito <saito@fgrep.org>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Ensure firewalld_info without options - name: Ensure firewalld_info without options
ansible.posix.firewalld_info: firewalld_info:
register: result register: result
- name: Assert collected_zones and undefined_zones - name: Assert collected_zones and undefined_zones
ansible.builtin.assert: assert:
that: that:
- result.collected_zones and not result.undefined_zones - 'result.collected_zones and not result.undefined_zones'
- name: Ensure firewalld_info with active_zones - name: Ensure firewalld_info with active_zones
ansible.posix.firewalld_info: firewalld_info:
active_zones: true active_zones: yes
register: result register: result
- name: Assert turn active_zones true - name: Assert turn active_zones true
ansible.builtin.assert: assert:
that: that:
- name: Ensure firewalld_zones with zone list - name: Ensure firewalld_zones with zone list
ansible.posix.firewalld_info: firewalld_info:
zones: zones:
- public - public
- invalid_zone - invalid_zone
register: result register: result
- name: Assert specified zones - name: Assert specified zones
ansible.builtin.assert: assert:
that: that:

View file

@ -1,41 +1,40 @@
---
# Test playbook for the firewalld_info module # Test playbook for the firewalld_info module
# (c) 2021, Hideki Saito <saito@fgrep.org> # (c) 2021, Hideki Saito <saito@fgrep.org>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: Ensure firewalld_info without options - name: Ensure firewalld_info without options
ansible.posix.firewalld_info: firewalld_info:
register: result register: result
ignore_errors: true ignore_errors: yes
- name: Assert firewalld_info fails if firewalld is not running. - name: Assert firewalld_info fails if firewalld is not running.
ansible.builtin.assert: assert:
that: that:
- result.failed - result.failed
- "'firewalld probably not be running,' in result.msg" - "'firewalld probably not be running,' in result.msg"
- name: Ensure firewalld_info with active_zones - name: Ensure firewalld_info with active_zones
ansible.posix.firewalld_info: firewalld_info:
active_zones: true active_zones: yes
register: result register: result
ignore_errors: true ignore_errors: yes
- name: Assert firewalld_info with active_zones fails if firewalld is not running. - name: Assert firewalld_info with active_zones fails if firewalld is not running.
ansible.builtin.assert: assert:
that: that:
- result.failed - result.failed
- "'firewalld probably not be running,' in result.msg" - "'firewalld probably not be running,' in result.msg"
- name: Ensure firewalld_zones with zone list - name: Ensure firewalld_zones with zone list
ansible.posix.firewalld_info: firewalld_info:
zones: zones:
- public - public
- invalid_zone - invalid_zone
register: result register: result
ignore_errors: true ignore_errors: yes
- name: Assert firewalld_info with zones list fails if firewalld is not running. - name: Assert firewalld_info with zones list fails if firewalld is not running.
ansible.builtin.assert: assert:
that: that:
- result.failed - result.failed
- "'firewalld probably not be running,' in result.msg" - "'firewalld probably not be running,' in result.msg"

File diff suppressed because it is too large Load diff

View file

@ -1,147 +1,124 @@
--- - name: ensure idempotency installed
- name: Ensure idempotency installed package:
ansible.builtin.package:
name: patch name: patch
when: ansible_distribution != "MacOSX" when: ansible_distribution != "MacOSX"
- name: create a directory for the result
- name: Create a directory for the result file:
ansible.builtin.file: dest: '{{ output_dir }}/patch'
dest: "{{ output_dir }}/patch"
state: directory state: directory
mode: "0755"
register: result register: result
- name: assert the directory was created
- name: Assert the directory was created assert:
ansible.builtin.assert:
that: that:
- result.state == 'directory' - result.state == 'directory'
- name: copy the origin file
- name: Copy the origin file copy:
ansible.builtin.copy:
src: ./origin.txt src: ./origin.txt
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
mode: "0644"
register: result register: result
- name: patch the origin file in check mode
- name: Patch the origin file in check mode
check_mode: true check_mode: true
register: result register: result
ansible.posix.patch: patch:
src: result.patch src: result.patch
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
- name: verify patch the origin file in check mode
- name: Verify patch the origin file in check mode assert:
ansible.builtin.assert:
that: that:
- result is changed - result is changed
- name: patch the origin file
- name: Patch the origin file
register: result register: result
ansible.posix.patch: patch:
src: result.patch src: result.patch
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
- name: verify patch the origin file
- name: Verify patch the origin file assert:
ansible.builtin.assert:
that: that:
- result is changed - result is changed
- name: test patch the origin file idempotency
- name: Test patch the origin file idempotency
register: result register: result
ansible.posix.patch: patch:
src: result.patch src: result.patch
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
- name: Verify test patch the origin file idempotency - name: verify test patch the origin file idempotency
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: verify the resulted file matches expectations
- name: Verify the resulted file matches expectations copy:
ansible.builtin.copy:
src: ./result.txt src: ./result.txt
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
mode: "0644"
register: result register: result
failed_when: result is changed failed_when: result is changed
- name: patch the workfile file in check mode state absent
- name: Patch the workfile file in check mode state absent
check_mode: true check_mode: true
register: result register: result
ansible.posix.patch: patch:
src: result.patch src: result.patch
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
state: absent state: absent
- name: verify patch the workfile file in check mode state absent
- name: Verify patch the workfile file in check mode state absent assert:
ansible.builtin.assert:
that: that:
- result is changed - result is changed
- name: patch the workfile file state absent
- name: Patch the workfile file state absent
register: result register: result
ansible.posix.patch: patch:
src: result.patch src: result.patch
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
state: absent state: absent
- name: verify patch the workfile file state absent
- name: Verify patch the workfile file state absent assert:
ansible.builtin.assert:
that: that:
- result is changed - result is changed
- name: patch the workfile file state absent idempotency
- name: Patch the workfile file state absent idempotency
register: result register: result
ansible.posix.patch: patch:
src: result.patch src: result.patch
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
state: absent state: absent
- name: verify patch the workfile file state absent idempotency
- name: Verify patch the workfile file state absent idempotency assert:
ansible.builtin.assert:
that: that:
- result is not changed - result is not changed
- name: verify the resulted file matches expectations
- name: Verify the resulted file matches expectations copy:
ansible.builtin.copy:
src: ./origin.txt src: ./origin.txt
dest: "{{ output_dir }}/patch/workfile.txt" dest: '{{ output_dir }}/patch/workfile.txt'
mode: "0644"
register: result register: result
failed_when: result is changed failed_when: result is changed
- name: Copy the origin file whitespace - name: copy the origin file whitespace
ansible.builtin.copy: copy:
src: ./origin.txt src: ./origin.txt
dest: "{{ output_dir }}/patch/workfile_whitespace.txt" dest: '{{ output_dir }}/patch/workfile_whitespace.txt'
mode: "0644"
register: result register: result
- name: Patch the origin file - name: patch the origin file
register: result register: result
ansible.posix.patch: patch:
src: result_whitespace.patch src: result_whitespace.patch
dest: "{{ output_dir }}/patch/workfile_whitespace.txt" dest: '{{ output_dir }}/patch/workfile_whitespace.txt'
ignore_whitespace: true ignore_whitespace: yes
- name: Verify patch the origin file - name: verify patch the origin file
ansible.builtin.assert: assert:
that: that:
- result is changed - result is changed
- name: Test patch the origin file idempotency - name: test patch the origin file idempotency
register: result register: result
ansible.posix.patch: patch:
src: result_whitespace.patch src: result_whitespace.patch
dest: "{{ output_dir }}/patch/workfile_whitespace.txt" dest: '{{ output_dir }}/patch/workfile_whitespace.txt'
ignore_whitespace: true ignore_whitespace: yes
- name: Verify test patch the origin file idempotency - name: verify test patch the origin file idempotency
ansible.builtin.assert: assert:
that: that:
- result is not changed - result is not changed
- name: Verify the resulted file matches expectations - name: verify the resulted file matches expectations
ansible.builtin.copy: copy:
src: ./result_whitespace.txt src: ./result_whitespace.txt
dest: "{{ output_dir }}/patch/workfile_whitespace.txt" dest: '{{ output_dir }}/patch/workfile_whitespace.txt'
mode: "0644"
register: result register: result
failed_when: result is changed failed_when: result is changed

View file

@ -1,4 +1,3 @@
---
# (c) 2017, Martin Krizek <mkrizek@redhat.com> # (c) 2017, Martin Krizek <mkrizek@redhat.com>
# This file is part of Ansible # This file is part of Ansible
@ -16,9 +15,8 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Include_tasks for when SELinux is enabled - include_tasks: seboolean.yml
ansible.builtin.include_tasks: seboolean.yml
when: when:
- ansible_selinux is defined - ansible_selinux is defined
- ansible_selinux - ansible_selinux != False
- ansible_selinux.status == 'enabled' - ansible_selinux.status == 'enabled'

View file

@ -1,4 +1,3 @@
---
# (c) 2017, Martin Krizek <mkrizek@redhat.com> # (c) 2017, Martin Krizek <mkrizek@redhat.com>
# This file is part of Ansible # This file is part of Ansible
@ -16,89 +15,69 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Install requirements for RHEL 7 and earlier - name: install requirements for RHEL 7 and earlier
ansible.builtin.package: package:
name: policycoreutils-python name: policycoreutils-python
when: when:
- ansible_distribution == 'RedHat' and ansible_distribution_major_version is version('7', '<=') - ansible_distribution == 'RedHat' and ansible_distribution_major_version is version('7', '<=')
- name: Install requirements for RHEL 8 and later - name: install requirements for RHEL 8 and later
ansible.builtin.package: package:
name: policycoreutils-python-utils name: policycoreutils-python-utils
when: when:
- ansible_distribution == 'RedHat' and ansible_distribution_major_version is version('8', '>=') - ansible_distribution == 'RedHat' and ansible_distribution_major_version is version('8', '>=')
- name: Get getsebool output preflight
ansible.builtin.shell:
cmd: set -o pipefail && semanage boolean -l | grep 'httpd_can_network_connect\W'
executable: /bin/bash
changed_when: false
register: getsebool_output_preflight
- name: Cleanup - name: Cleanup
ansible.builtin.shell: shell: setsebool -P httpd_can_network_connect 0
cmd: set -o pipefail && setsebool -P httpd_can_network_connect 0 ##########################################################################################
executable: /bin/bash - name: set flag and don't keep it persistent
changed_when: getsebool_output_preflight.stdout.startswith('httpd_can_network_connect --> on') seboolean:
- name: Set flag and don't keep it persistent
ansible.posix.seboolean:
name: httpd_can_network_connect name: httpd_can_network_connect
state: true state: yes
register: output register: output
- name: Get getsebool output - name: get getsebool output
ansible.builtin.shell: shell: semanage boolean -l | grep 'httpd_can_network_connect\W'
cmd: set -o pipefail && semanage boolean -l | grep 'httpd_can_network_connect\W'
executable: /bin/bash
changed_when: false
register: getsebool_output register: getsebool_output
- name: Check output - name: check output
ansible.builtin.assert: assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed
- output.name == 'httpd_can_network_connect' - output.name == 'httpd_can_network_connect'
- getsebool_output.stdout.startswith('httpd_can_network_connect (on , off)') - getsebool_output.stdout.startswith('httpd_can_network_connect (on , off)')
########################################################################################## ##########################################################################################
- name: Unset flag - name: unset flag
ansible.posix.seboolean: seboolean:
name: httpd_can_network_connect name: httpd_can_network_connect
state: false state: no
- name: Get getsebool output - name: get getsebool output
ansible.builtin.shell: shell: semanage boolean -l | grep 'httpd_can_network_connect\W'
cmd: set -o pipefail && semanage boolean -l | grep 'httpd_can_network_connect\W'
executable: /bin/bash
changed_when: false
register: getsebool_output register: getsebool_output
- name: Check output - name: check output
ansible.builtin.assert: assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed
- output.name == 'httpd_can_network_connect' - output.name == 'httpd_can_network_connect'
- getsebool_output.stdout.startswith('httpd_can_network_connect (off , off)') - getsebool_output.stdout.startswith('httpd_can_network_connect (off , off)')
########################################################################################## ##########################################################################################
- name: Set flag and keep it persistent - name: set flag and keep it persistent
ansible.posix.seboolean: seboolean:
name: httpd_can_network_connect name: httpd_can_network_connect
state: true state: yes
persistent: true persistent: yes
register: output register: output
- name: Get getsebool output - name: get getsebool output
ansible.builtin.shell: shell: semanage boolean -l | grep 'httpd_can_network_connect\W'
cmd: set -o pipefail && semanage boolean -l | grep 'httpd_can_network_connect\W'
executable: /bin/bash
changed_when: false
register: getsebool_output register: getsebool_output
- name: Check output - name: check output
ansible.builtin.assert: assert:
that: that:
- output is changed - output is changed
- output is not failed - output is not failed

View file

@ -1,4 +1,3 @@
---
# (c) 2017, Sam Doran <sdoran@redhat.com> # (c) 2017, Sam Doran <sdoran@redhat.com>
# This file is part of Ansible # This file is part of Ansible
@ -16,26 +15,22 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
- name: Debug message for when SELinux is disabled - debug:
ansible.builtin.debug:
msg: SELinux is disabled msg: SELinux is disabled
when: ansible_selinux is defined and not ansible_selinux when: ansible_selinux is defined and ansible_selinux == False
- name: Debug message for when SELinux is enabled and not disabled - debug:
ansible.builtin.debug:
msg: SELinux is {{ ansible_selinux.status }} msg: SELinux is {{ ansible_selinux.status }}
when: ansible_selinux is defined and ansible_selinux when: ansible_selinux is defined and ansible_selinux != False
- name: Include_tasks for when SELinux is enabled - include_tasks: selinux.yml
ansible.builtin.include_tasks: selinux.yml
when: when:
- ansible_selinux is defined - ansible_selinux is defined
- ansible_selinux - ansible_selinux != False
- ansible_selinux.status == 'enabled' - ansible_selinux.status == 'enabled'
- name: Include tasks for selogin when SELinux is enabled - include_tasks: selogin.yml
ansible.builtin.include_tasks: selogin.yml
when: when:
- ansible_selinux is defined - ansible_selinux is defined
- ansible_selinux - ansible_selinux != False
- ansible_selinux.status == 'enabled' - ansible_selinux.status == 'enabled'

View file

@ -1,4 +1,3 @@
---
# (c) 2017, Sam Doran <sdoran@redhat.com> # (c) 2017, Sam Doran <sdoran@redhat.com>
# This file is part of Ansible # This file is part of Ansible
@ -15,67 +14,67 @@
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>. # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
# First Test # First Test
# ############################################################################## # ##############################################################################
# Test changing the state, which requires a reboot # Test changing the state, which requires a reboot
- name: TEST 1 | Make sure grubby is present - name: TEST 1 | Make sure grubby is present
ansible.builtin.package: package:
name: grubby name: grubby
state: present state: present
- name: TEST 1 | Get current SELinux config file contents - name: TEST 1 | Get current SELinux config file contents
ansible.builtin.slurp: slurp:
src: /etc/sysconfig/selinux src: /etc/sysconfig/selinux
register: selinux_config_original_base64 register: selinux_config_original_base64
- name: TEST 1 | Register SELinux config and SELinux status - name: TEST 1 | Register SELinux config and SELinux status
ansible.builtin.set_fact: set_fact:
selinux_config_original_raw: "{{ selinux_config_original_base64.content | b64decode }}" selinux_config_original_raw: "{{ selinux_config_original_base64.content | b64decode }}"
before_test_sestatus: "{{ ansible_selinux }}" before_test_sestatus: "{{ ansible_selinux }}"
- name: TEST 1 | Split by line and register original config - name: TEST 1 | Split by line and register original config
ansible.builtin.set_fact: set_fact:
selinux_config_original: "{{ selinux_config_original_raw.split('\n') }}" selinux_config_original: "{{ selinux_config_original_raw.split('\n') }}"
- name: TEST 1 | Debug selinux_config_original, before_test_sestatus, and ansible_selinux - debug:
ansible.builtin.debug:
var: "{{ item }}" var: "{{ item }}"
verbosity: 1 verbosity: 1
loop: with_items:
- selinux_config_original - selinux_config_original
- before_test_sestatus - before_test_sestatus
- ansible_selinux - ansible_selinux
- name: TEST 1 | Setup SELinux configuration for tests - name: TEST 1 | Setup SELinux configuration for tests
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: targeted policy: targeted
- name: TEST 1 | Disable SELinux - name: TEST 1 | Disable SELinux
ansible.posix.selinux: selinux:
state: disabled state: disabled
policy: targeted policy: targeted
register: _disable_test1 register: _disable_test1
- name: TEST 1 | Debug _disable_test1 - debug:
ansible.builtin.debug:
var: _disable_test1 var: _disable_test1
verbosity: 1 verbosity: 1
- name: Before gathering the fact - name: Before gathering the fact
ansible.builtin.debug: debug:
msg: "{{ ansible_selinux }}" msg: "{{ ansible_selinux }}"
- name: TEST 1 | Re-gather facts - name: TEST 1 | Re-gather facts
ansible.builtin.setup: setup:
- name: After gathering the fact - name: After gathering the fact
ansible.builtin.debug: debug:
msg: "{{ ansible_selinux }}" msg: "{{ ansible_selinux }}"
- name: TEST 1 | Assert that status was changed, reboot_required is True, a warning was displayed, and SELinux is configured properly - name: TEST 1 | Assert that status was changed, reboot_required is True, a warning was displayed, and SELinux is configured properly
ansible.builtin.assert: assert:
that: that:
- _disable_test1 is changed - _disable_test1 is changed
- _disable_test1.reboot_required - _disable_test1.reboot_required
@ -83,56 +82,53 @@
- ansible_selinux.config_mode == 'disabled' - ansible_selinux.config_mode == 'disabled'
- ansible_selinux.type == 'targeted' - ansible_selinux.type == 'targeted'
- name: TEST 1 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
- name: TEST 1 | Disable SELinux again - name: TEST 1 | Disable SELinux again
ansible.posix.selinux: selinux:
state: disabled state: disabled
policy: targeted policy: targeted
register: _disable_test2 register: _disable_test2
- name: Test 1 | Debug _disable_test2 - debug:
ansible.builtin.debug:
var: _disable_test2 var: _disable_test2
verbosity: 1 verbosity: 1
- name: TEST 1 | Assert that no change is reported, a warning was displayed, and reboot_required is True - name: TEST 1 | Assert that no change is reported, a warning was displayed, and reboot_required is True
ansible.builtin.assert: assert:
that: that:
- _disable_test2 is not changed - _disable_test2 is not changed
- (_disable_test1.warnings | length ) >= 1 - (_disable_test1.warnings | length ) >= 1
- _disable_test2.reboot_required - _disable_test2.reboot_required
- name: TEST 1 | Get modified config file - name: TEST 1 | Get modified config file
ansible.builtin.slurp: slurp:
src: /etc/sysconfig/selinux src: /etc/sysconfig/selinux
register: selinux_config_after_base64 register: selinux_config_after_base64
- name: TEST 1 | Register modified config - name: TEST 1 | Register modified config
ansible.builtin.set_fact: set_fact:
selinux_config_after_raw: "{{ selinux_config_after_base64.content | b64decode }}" selinux_config_after_raw: "{{ selinux_config_after_base64.content | b64decode }}"
- name: TEST 1 | Split by line and register modified config - name: TEST 1 | Split by line and register modified config
ansible.builtin.set_fact: set_fact:
selinux_config_after: "{{ selinux_config_after_raw.split('\n') }}" selinux_config_after: "{{ selinux_config_after_raw.split('\n') }}"
- name: TEST 1 | Debug selinux_config_after - debug:
ansible.builtin.debug:
var: selinux_config_after var: selinux_config_after
verbosity: 1 verbosity: 1
- name: TEST 1 | Ensure SELinux config file is properly formatted - name: TEST 1 | Ensure SELinux config file is properly formatted
ansible.builtin.assert: assert:
that: that:
- selinux_config_original | length == selinux_config_after | length - selinux_config_original | length == selinux_config_after | length
- selinux_config_after[selinux_config_after.index('SELINUX=disabled')] is search("^SELINUX=\w+$") - selinux_config_after[selinux_config_after.index('SELINUX=disabled')] is search("^SELINUX=\w+$")
- selinux_config_after[selinux_config_after.index('SELINUXTYPE=targeted')] is search("^SELINUXTYPE=\w+$") - selinux_config_after[selinux_config_after.index('SELINUXTYPE=targeted')] is search("^SELINUXTYPE=\w+$")
- name: TEST 1 | Disable SELinux again, with kernel arguments update - name: TEST 1 | Disable SELinux again, with kernel arguments update
ansible.posix.selinux: selinux:
state: disabled state: disabled
policy: targeted policy: targeted
update_kernel_param: true update_kernel_param: true
@ -140,76 +136,72 @@
- name: Check kernel command-line arguments - name: Check kernel command-line arguments
ansible.builtin.command: grubby --info=DEFAULT ansible.builtin.command: grubby --info=DEFAULT
changed_when: false
register: _grubby_test1 register: _grubby_test1
- name: TEST 1 | Assert that kernel cmdline contains selinux=0 - name: TEST 1 | Assert that kernel cmdline contains selinux=0
ansible.builtin.assert: assert:
that: that:
- "' selinux=0' in _grubby_test1.stdout" - "' selinux=0' in _grubby_test1.stdout"
- name: TEST 1 | Enable SELinux, without kernel arguments update - name: TEST 1 | Enable SELinux, without kernel arguments update
ansible.posix.selinux: selinux:
state: disabled state: disabled
policy: targeted policy: targeted
register: _disable_test2 register: _disable_test2
- name: Check kernel command-line arguments - name: Check kernel command-line arguments
ansible.builtin.command: grubby --info=DEFAULT ansible.builtin.command: grubby --info=DEFAULT
changed_when: false
register: _grubby_test1 register: _grubby_test1
- name: TEST 1 | Assert that kernel cmdline still contains selinux=0 - name: TEST 1 | Assert that kernel cmdline still contains selinux=0
ansible.builtin.assert: assert:
that: that:
- "' selinux=0' in _grubby_test1.stdout" - "' selinux=0' in _grubby_test1.stdout"
- name: TEST 1 | Reset SELinux configuration for next test (also kernel args) - name: TEST 1 | Reset SELinux configuration for next test (also kernel args)
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
update_kernel_param: true update_kernel_param: true
policy: targeted policy: targeted
- name: Check kernel command-line arguments - name: Check kernel command-line arguments
ansible.builtin.command: grubby --info=DEFAULT ansible.builtin.command: grubby --info=DEFAULT
changed_when: false
register: _grubby_test2 register: _grubby_test2
- name: TEST 1 | Assert that kernel cmdline doesn't contain selinux=0 - name: TEST 1 | Assert that kernel cmdline doesn't contain selinux=0
ansible.builtin.assert: assert:
that: that:
- "' selinux=0' not in _grubby_test2.stdout" - "' selinux=0' not in _grubby_test2.stdout"
# Second Test # Second Test
# ############################################################################## # ##############################################################################
# Test changing only the policy, which does not require a reboot # Test changing only the policy, which does not require a reboot
- name: TEST 2 | Make sure the policy is present - name: TEST 2 | Make sure the policy is present
ansible.builtin.package: package:
name: selinux-policy-mls name: selinux-policy-mls
state: present state: present
- name: TEST 2 | Set SELinux policy - name: TEST 2 | Set SELinux policy
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: mls policy: mls
register: _state_test1 register: _state_test1
- name: TEST 2 | Debug _state_test1 - debug:
ansible.builtin.debug:
var: _state_test1 var: _state_test1
verbosity: 1 verbosity: 1
- name: TEST 2 | Re-gather facts - name: TEST 2 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 2 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
tags: debug tags: debug
- name: TEST 2 | Assert that status was changed, reboot_required is False, no warnings were displayed, and SELinux is configured properly - name: TEST 2 | Assert that status was changed, reboot_required is False, no warnings were displayed, and SELinux is configured properly
ansible.builtin.assert: assert:
that: that:
- _state_test1 is changed - _state_test1 is changed
- not _state_test1.reboot_required - not _state_test1.reboot_required
@ -218,79 +210,76 @@
- ansible_selinux.type == 'mls' - ansible_selinux.type == 'mls'
- name: TEST 2 | Set SELinux policy again - name: TEST 2 | Set SELinux policy again
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: mls policy: mls
register: _state_test2 register: _state_test2
- name: TEST 2 | Debug _state_test2 - debug:
ansible.builtin.debug:
var: _state_test2 var: _state_test2
verbosity: 1 verbosity: 1
- name: TEST 2 | Assert that no change was reported, no warnings were displayed, and reboot_required is False - name: TEST 2 | Assert that no change was reported, no warnings were displayed, and reboot_required is False
ansible.builtin.assert: assert:
that: that:
- _state_test2 is not changed - _state_test2 is not changed
- _state_test2.warnings is not defined - _state_test2.warnings is not defined
- not _state_test2.reboot_required - not _state_test2.reboot_required
- name: TEST 2 | Get modified config file - name: TEST 2 | Get modified config file
ansible.builtin.slurp: slurp:
src: /etc/sysconfig/selinux src: /etc/sysconfig/selinux
register: selinux_config_after_base64 register: selinux_config_after_base64
- name: TEST 2 | Register modified config - name: TEST 2 | Register modified config
ansible.builtin.set_fact: set_fact:
selinux_config_after_raw: "{{ selinux_config_after_base64.content | b64decode }}" selinux_config_after_raw: "{{ selinux_config_after_base64.content | b64decode }}"
- name: TEST 2 | Split by line and register modified config - name: TEST 2 | Split by line and register modified config
ansible.builtin.set_fact: set_fact:
selinux_config_after: "{{ selinux_config_after_raw.split('\n') }}" selinux_config_after: "{{ selinux_config_after_raw.split('\n') }}"
- name: TEST 2 | Debug selinux_config_after - debug:
ansible.builtin.debug:
var: selinux_config_after var: selinux_config_after
verbosity: 1 verbosity: 1
- name: TEST 2 | Ensure SELinux config file is properly formatted - name: TEST 2 | Ensure SELinux config file is properly formatted
ansible.builtin.assert: assert:
that: that:
- selinux_config_original | length == selinux_config_after | length - selinux_config_original | length == selinux_config_after | length
- selinux_config_after[selinux_config_after.index('SELINUX=enforcing')] is search("^SELINUX=\w+$") - selinux_config_after[selinux_config_after.index('SELINUX=enforcing')] is search("^SELINUX=\w+$")
- selinux_config_after[selinux_config_after.index('SELINUXTYPE=mls')] is search("^SELINUXTYPE=\w+$") - selinux_config_after[selinux_config_after.index('SELINUXTYPE=mls')] is search("^SELINUXTYPE=\w+$")
- name: TEST 2 | Reset SELinux configuration for next test - name: TEST 2 | Reset SELinux configuration for next test
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: targeted policy: targeted
# Third Test # Third Test
# ############################################################################## # ##############################################################################
# Test changing non-existing policy # Test changing non-existing policy
- name: TEST 3 | Set SELinux policy - name: TEST 3 | Set SELinux policy
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: non-existing-selinux-policy policy: non-existing-selinux-policy
register: _state_test1 register: _state_test1
ignore_errors: true ignore_errors: yes
- name: TEST 3 | Debug _state_test1 - debug:
ansible.builtin.debug:
var: _state_test1 var: _state_test1
verbosity: 1 verbosity: 1
- name: TEST 3 | Re-gather facts - name: TEST 3 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST3 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
tags: debug tags: debug
- name: TEST 3 | Assert that status was not changed, the task failed, the msg contains proper information and SELinux was not changed - name: TEST 3 | Assert that status was not changed, the task failed, the msg contains proper information and SELinux was not changed
ansible.builtin.assert: assert:
that: that:
- _state_test1 is not changed - _state_test1 is not changed
- _state_test1 is failed - _state_test1 is failed
@ -298,40 +287,40 @@
- ansible_selinux.config_mode == 'enforcing' - ansible_selinux.config_mode == 'enforcing'
- ansible_selinux.type == 'targeted' - ansible_selinux.type == 'targeted'
# Fourth Test # Fourth Test
# ############################################################################## # ##############################################################################
# Test if check mode returns correct changed values and # Test if check mode returns correct changed values and
# doesn't make any changes # doesn't make any changes
- name: TEST 4 | Set SELinux to enforcing - name: TEST 4 | Set SELinux to enforcing
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: targeted policy: targeted
register: _check_mode_test1 register: _check_mode_test1
- name: TEST 4 | Debug _check_mode_test1 - debug:
ansible.builtin.debug:
var: _check_mode_test1 var: _check_mode_test1
verbosity: 1 verbosity: 1
- name: TEST 4 | Set SELinux to enforcing in check mode - name: TEST 4 | Set SELinux to enforcing in check mode
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: targeted policy: targeted
register: _check_mode_test1 register: _check_mode_test1
check_mode: true check_mode: yes
- name: TEST 4 | Re-gather facts - name: TEST 4 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 4| Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
tags: debug tags: debug
- name: TEST 4 | Assert that check mode is idempotent - name: TEST 4 | Assert that check mode is idempotent
ansible.builtin.assert: assert:
that: that:
- _check_mode_test1 is success - _check_mode_test1 is success
- not _check_mode_test1.reboot_required - not _check_mode_test1.reboot_required
@ -339,23 +328,22 @@
- ansible_selinux.type == 'targeted' - ansible_selinux.type == 'targeted'
- name: TEST 4 | Set SELinux to permissive in check mode - name: TEST 4 | Set SELinux to permissive in check mode
ansible.posix.selinux: selinux:
state: permissive state: permissive
policy: targeted policy: targeted
register: _check_mode_test2 register: _check_mode_test2
check_mode: true check_mode: yes
- name: TEST 4 | Re-gather facts - name: TEST 4 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 4 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
tags: debug tags: debug
- name: TEST 4 | Assert that check mode doesn't set state permissive and returns changed - name: TEST 4 | Assert that check mode doesn't set state permissive and returns changed
ansible.builtin.assert: assert:
that: that:
- _check_mode_test2 is changed - _check_mode_test2 is changed
- not _check_mode_test2.reboot_required - not _check_mode_test2.reboot_required
@ -363,22 +351,21 @@
- ansible_selinux.type == 'targeted' - ansible_selinux.type == 'targeted'
- name: TEST 4 | Disable SELinux in check mode - name: TEST 4 | Disable SELinux in check mode
ansible.posix.selinux: selinux:
state: disabled state: disabled
register: _check_mode_test3 register: _check_mode_test3
check_mode: true check_mode: yes
- name: TEST 4 | Re-gather facts - name: TEST 4 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 4 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
tags: debug tags: debug
- name: TEST 4 | Assert that check mode didn't change anything, status is changed, reboot_required is True, a warning was displayed - name: TEST 4 | Assert that check mode didn't change anything, status is changed, reboot_required is True, a warning was displayed
ansible.builtin.assert: assert:
that: that:
- _check_mode_test3 is changed - _check_mode_test3 is changed
- _check_mode_test3.reboot_required - _check_mode_test3.reboot_required
@ -387,33 +374,31 @@
- ansible_selinux.type == 'targeted' - ansible_selinux.type == 'targeted'
- name: TEST 4 | Set SELinux to permissive - name: TEST 4 | Set SELinux to permissive
ansible.posix.selinux: selinux:
state: permissive state: permissive
policy: targeted policy: targeted
register: _check_mode_test4 register: _check_mode_test4
- name: TEST 4 | Debug _check_mode_test4 - debug:
ansible.builtin.debug:
var: _check_mode_test4 var: _check_mode_test4
verbosity: 1 verbosity: 1
- name: TEST 4 | Disable SELinux in check mode - name: TEST 4 | Disable SELinux in check mode
ansible.posix.selinux: selinux:
state: disabled state: disabled
register: _check_mode_test4 register: _check_mode_test4
check_mode: true check_mode: yes
- name: TEST 4 | Re-gather facts - name: TEST 4 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 4 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
tags: debug tags: debug
- name: TEST 4 | Assert that check mode didn't change anything, status is changed, reboot_required is True, a warning was displayed - name: TEST 4 | Assert that check mode didn't change anything, status is changed, reboot_required is True, a warning was displayed
ansible.builtin.assert: assert:
that: that:
- _check_mode_test4 is changed - _check_mode_test4 is changed
- _check_mode_test4.reboot_required - _check_mode_test4.reboot_required
@ -422,38 +407,36 @@
- ansible_selinux.type == 'targeted' - ansible_selinux.type == 'targeted'
- name: TEST 4 | Set SELinux to enforcing - name: TEST 4 | Set SELinux to enforcing
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: targeted policy: targeted
register: _check_mode_test5 register: _check_mode_test5
- name: TEST 4 | Debug _check_mode_test5 - debug:
ansible.builtin.debug:
var: _check_mode_test5 var: _check_mode_test5
verbosity: 1 verbosity: 1
- name: TEST 4 | Disable SELinux - name: TEST 4 | Disable SELinux
ansible.posix.selinux: selinux:
state: disabled state: disabled
register: _check_mode_test5 register: _check_mode_test5
- name: TEST 4 | Disable SELinux in check mode - name: TEST 4 | Disable SELinux in check mode
ansible.posix.selinux: selinux:
state: disabled state: disabled
register: _check_mode_test5 register: _check_mode_test5
check_mode: true check_mode: yes
- name: TEST 4 | Re-gather facts - name: TEST 4 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 4 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
tags: debug tags: debug
- name: TEST 4 | Assert that in check mode status was not changed, reboot_required is True, a warning was displayed, and SELinux is configured properly - name: TEST 4 | Assert that in check mode status was not changed, reboot_required is True, a warning was displayed, and SELinux is configured properly
ansible.builtin.assert: assert:
that: that:
- _check_mode_test5 is success - _check_mode_test5 is success
- _check_mode_test5.reboot_required - _check_mode_test5.reboot_required
@ -467,34 +450,32 @@
# sure the module re-adds the expected lines # sure the module re-adds the expected lines
- name: TEST 5 | Remove SELINUX key from /etc/selinux/config - name: TEST 5 | Remove SELINUX key from /etc/selinux/config
ansible.builtin.lineinfile: lineinfile:
path: /etc/selinux/config path: /etc/selinux/config
regexp: ^SELINUX= regexp: '^SELINUX='
state: absent state: absent
backup: true backup: yes
register: _lineinfile_out1 register: _lineinfile_out1
- name: TEST 5 | Debug _lineinfile_out1 - debug:
ansible.builtin.debug:
var: _lineinfile_out1 var: _lineinfile_out1
verbosity: 1 verbosity: 1
- name: TEST 5 | Set SELinux to enforcing - name: TEST 5 | Set SELinux to enforcing
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: targeted policy: targeted
register: _set_enforcing1 register: _set_enforcing1
- name: TEST 5 | Re-gather facts - name: TEST 5 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 5 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
- name: TEST 5 | Assert that SELINUX key is populated - name: TEST 5 | Assert that SELINUX key is populated
ansible.builtin.assert: assert:
that: that:
- _set_enforcing1 is success - _set_enforcing1 is success
- _set_enforcing1 is changed - _set_enforcing1 is changed
@ -502,33 +483,31 @@
- ansible_selinux.config_mode == 'enforcing' - ansible_selinux.config_mode == 'enforcing'
- name: TEST 5 | Remove SELINUXTYPE key from /etc/selinux/config - name: TEST 5 | Remove SELINUXTYPE key from /etc/selinux/config
ansible.builtin.lineinfile: lineinfile:
path: /etc/selinux/config path: /etc/selinux/config
regexp: ^SELINUXTYPE= regexp: '^SELINUXTYPE='
state: absent state: absent
register: _lineinfile_out2 register: _lineinfile_out2
- name: TEST 5 | Debug _lineinfile_out2 - debug:
ansible.builtin.debug:
var: _lineinfile_out2 var: _lineinfile_out2
verbosity: 1 verbosity: 1
- name: TEST 5 | Set SELinux Policy to targeted - name: TEST 5 | Set SELinux Policy to targeted
ansible.posix.selinux: selinux:
state: enforcing state: enforcing
policy: targeted policy: targeted
register: _set_policy2 register: _set_policy2
- name: TEST 5 | Re-gather facts - name: TEST 5 | Re-gather facts
ansible.builtin.setup: setup:
- name: TEST 5 | Debug ansible_selinux - debug:
ansible.builtin.debug:
var: ansible_selinux var: ansible_selinux
verbosity: 1 verbosity: 1
- name: TEST 5 | Assert that SELINUXTYPE key is populated - name: TEST 5 | Assert that SELINUXTYPE key is populated
ansible.builtin.assert: assert:
that: that:
- _set_policy2 is success - _set_policy2 is success
- _set_policy2 is changed - _set_policy2 is changed
@ -536,8 +515,7 @@
- ansible_selinux.type == 'targeted' - ansible_selinux.type == 'targeted'
- name: TEST 5 | Restore original SELinux config file /etc/selinux/config - name: TEST 5 | Restore original SELinux config file /etc/selinux/config
ansible.builtin.copy: copy:
dest: /etc/selinux/config dest: /etc/selinux/config
src: "{{ _lineinfile_out1['backup'] }}" src: "{{ _lineinfile_out1['backup'] }}"
remote_src: true remote_src: yes
mode: "0644"

View file

@ -1,71 +1,70 @@
--- - name: create user for testing
- name: Create user for testing user:
ansible.builtin.user:
name: seuser name: seuser
- name: Attempt to add mapping without 'seuser' - name: attempt to add mapping without 'seuser'
register: selogin_error register: selogin_error
ignore_errors: true ignore_errors: true
community.general.system.selogin: community.general.system.selogin:
login: seuser login: seuser
- name: Verify failure - name: verify failure
ansible.builtin.assert: assert:
that: that:
- selogin_error is failed - selogin_error is failed
- name: Map login to SELinux user - name: map login to SELinux user
register: selogin_new_mapping register: selogin_new_mapping
check_mode: "{{ item }}" check_mode: '{{ item }}'
with_items: with_items:
- true - true
- false - false
- true - true
- false - false
community.general.system.selogin: community.general.system.selogin:
login: seuser login: seuser
seuser: staff_u seuser: staff_u
- name: New mapping- verify functionality and check_mode - name: new mapping- verify functionality and check_mode
ansible.builtin.assert: assert:
that: that:
- selogin_new_mapping.results[0] is changed - selogin_new_mapping.results[0] is changed
- selogin_new_mapping.results[1] is changed - selogin_new_mapping.results[1] is changed
- selogin_new_mapping.results[2] is not changed - selogin_new_mapping.results[2] is not changed
- selogin_new_mapping.results[3] is not changed - selogin_new_mapping.results[3] is not changed
- name: Change SELinux user login mapping - name: change SELinux user login mapping
register: selogin_mod_mapping register: selogin_mod_mapping
check_mode: "{{ item }}" check_mode: '{{ item }}'
with_items: with_items:
- true - true
- false - false
- true - true
- false - false
community.general.system.selogin: community.general.system.selogin:
login: seuser login: seuser
seuser: user_u seuser: user_u
- name: Changed mapping- verify functionality and check_mode - name: changed mapping- verify functionality and check_mode
ansible.builtin.assert: assert:
that: that:
- selogin_mod_mapping.results[0] is changed - selogin_mod_mapping.results[0] is changed
- selogin_mod_mapping.results[1] is changed - selogin_mod_mapping.results[1] is changed
- selogin_mod_mapping.results[2] is not changed - selogin_mod_mapping.results[2] is not changed
- selogin_mod_mapping.results[3] is not changed - selogin_mod_mapping.results[3] is not changed
- name: Remove SELinux user mapping - name: remove SELinux user mapping
register: selogin_del_mapping register: selogin_del_mapping
check_mode: "{{ item }}" check_mode: '{{ item }}'
with_items: with_items:
- true - true
- false - false
- true - true
- false - false
community.general.system.selogin: community.general.system.selogin:
login: seuser login: seuser
state: absent state: absent
- name: Delete mapping- verify functionality and check_mode - name: delete mapping- verify functionality and check_mode
ansible.builtin.assert: assert:
that: that:
- selogin_del_mapping.results[0] is changed - selogin_del_mapping.results[0] is changed
- selogin_del_mapping.results[1] is changed - selogin_del_mapping.results[1] is changed
- selogin_del_mapping.results[2] is not changed - selogin_del_mapping.results[2] is not changed
- selogin_del_mapping.results[3] is not changed - selogin_del_mapping.results[3] is not changed
- name: Remove test user - name: remove test user
ansible.builtin.user: user:
name: seuser name: seuser
state: absent state: absent

View file

@ -4,16 +4,14 @@
# and should not be used as examples of how to write Ansible roles # # and should not be used as examples of how to write Ansible roles #
#################################################################### ####################################################################
- name: Set pkg_mgr and ansible_pkg_mgr on FreeBSD - set_fact:
ansible.builtin.set_fact:
pkg_mgr: community.general.pkgng pkg_mgr: community.general.pkgng
ansible_pkg_mgr: community.general.pkgng ansible_pkg_mgr: community.general.pkgng
cacheable: true cacheable: yes
when: ansible_os_family == "FreeBSD" when: ansible_os_family == "FreeBSD"
- name: Set pkg_mgr and ansible_pkg_mgr on Suse - set_fact:
ansible.builtin.set_fact:
pkg_mgr: community.general.zypper pkg_mgr: community.general.zypper
ansible_pkg_mgr: community.general.zypper ansible_pkg_mgr: community.general.zypper
cacheable: true cacheable: yes
when: ansible_os_family == "Suse" when: ansible_os_family == "Suse"

View file

@ -1,3 +1,2 @@
---
dependencies: dependencies:
- prepare_tests - prepare_tests

View file

@ -1,350 +1,310 @@
--- - name: install rsync
- name: Install rsync package:
ansible.builtin.package:
name: rsync name: rsync
when: ansible_distribution != "MacOSX" when: ansible_distribution != "MacOSX"
- name: Clean up the working directory and files
- name: Clean up the working disrectory and files file:
ansible.builtin.file: path: '{{ output_dir }}'
path: "{{ output_dir }}"
state: absent state: absent
- name: Create the working directory - name: Create the working directory
ansible.builtin.file: file:
path: "{{ output_dir }}" path: '{{ output_dir }}'
state: directory state: directory
mode: "0755" - name: create test new files
copy:
dest: '{{output_dir}}/{{item}}'
mode: '0644'
content: 'hello world'
with_items:
- foo.txt
- bar.txt
- name: Create test new files - name: synchronize file to new filename
ansible.builtin.copy: synchronize:
dest: "{{ output_dir }}/{{ item }}" src: '{{output_dir}}/foo.txt'
mode: "0644" dest: '{{output_dir}}/foo.result'
content: hello world
loop:
- foo.txt
- bar.txt
- name: Synchronize file to new filename
ansible.posix.synchronize:
src: "{{ output_dir }}/foo.txt"
dest: "{{ output_dir }}/foo.result"
register: sync_result register: sync_result
delegate_to: "{{ inventory_hostname }}" delegate_to: '{{ inventory_hostname }}'
- assert:
- name: Check that the file was copied over correctly
ansible.builtin.assert:
that: that:
- "'changed' in sync_result" - '''changed'' in sync_result'
- sync_result.changed == true - sync_result.changed == true
- "'cmd' in sync_result" - '''cmd'' in sync_result'
- "'rsync' in sync_result.cmd" - '''rsync'' in sync_result.cmd'
- "'msg' in sync_result" - '''msg'' in sync_result'
- sync_result.msg.startswith('>f+') - sync_result.msg.startswith('>f+')
- "sync_result.msg.endswith('+ foo.txt\n')" - 'sync_result.msg.endswith(''+ foo.txt
- name: Test that the file was really copied over '')'
ansible.builtin.stat: - name: test that the file was really copied over
path: "{{ output_dir }}/foo.result" stat:
path: '{{ output_dir }}/foo.result'
register: stat_result register: stat_result
- assert:
- name: Test that the file was really copied over
ansible.builtin.assert:
that: that:
- stat_result.stat.exists == True - stat_result.stat.exists == True
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed' - stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
- name: Test that the file is not copied a second time - name: test that the file is not copied a second time
ansible.posix.synchronize: synchronize:
src: "'{{ output_dir }}/foo.txt'" src='{{output_dir}}/foo.txt'
dest: "'{{ output_dir }}/foo.result'" dest='{{output_dir}}/foo.result'
register: sync_result register: sync_result
delegate_to: "{{ inventory_hostname }}" delegate_to: '{{ inventory_hostname }}'
- assert:
- name: Test that no change occurred
ansible.builtin.assert:
that: that:
- not sync_result.changed - sync_result.changed == False
- name: Cleanup - name: Cleanup
ansible.builtin.file: file:
state: absent state: absent
path: "{{ output_dir }}/{{ item }}" path: '{{output_dir}}/{{item}}'
loop: with_items:
- foo.result - foo.result
- bar.result - bar.result
- name: Synchronize using the mode=push param - name: Synchronize using the mode=push param
ansible.posix.synchronize: synchronize:
src: "{{ output_dir }}/foo.txt" src: '{{output_dir}}/foo.txt'
dest: "{{ output_dir }}/foo.result" dest: '{{output_dir}}/foo.result'
mode: push mode: push
register: sync_result register: sync_result
delegate_to: "{{ inventory_hostname }}" delegate_to: '{{ inventory_hostname }}'
- assert:
- name: Check that the file was copied over correctly mode=push
ansible.builtin.assert:
that: that:
- "'changed' in sync_result" - '''changed'' in sync_result'
- sync_result.changed == true - sync_result.changed == true
- "'cmd' in sync_result" - '''cmd'' in sync_result'
- "'rsync' in sync_result.cmd" - '''rsync'' in sync_result.cmd'
- "'msg' in sync_result" - '''msg'' in sync_result'
- sync_result.msg.startswith('>f+') - sync_result.msg.startswith('>f+')
- "sync_result.msg.endswith('+ foo.txt\n')" - 'sync_result.msg.endswith(''+ foo.txt
- name: Test that the file was really copied over '')'
ansible.builtin.stat: - name: test that the file was really copied over
path: "{{ output_dir }}/foo.result" stat:
path: '{{ output_dir }}/foo.result'
register: stat_result register: stat_result
- assert:
- name: Ensure file exists and checksum matches
ansible.builtin.assert:
that: that:
- stat_result.stat.exists == True - stat_result.stat.exists == True
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed' - stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
- name: Test that the file is not copied a second time - name: test that the file is not copied a second time
ansible.posix.synchronize: synchronize:
src: "{{ output_dir }}/foo.txt" src: '{{output_dir}}/foo.txt'
dest: "{{ output_dir }}/foo.result" dest: '{{output_dir}}/foo.result'
mode: push mode: push
register: sync_result register: sync_result
delegate_to: "{{ inventory_hostname }}" delegate_to: '{{ inventory_hostname }}'
- assert:
- name: Ensure no change occorred
ansible.builtin.assert:
that: that:
- sync_result.changed == False - sync_result.changed == False
- name: Cleanup - name: Cleanup
ansible.builtin.file: file:
state: absent state: absent
path: "{{ output_dir }}/{{ item }}" path: '{{output_dir}}/{{item}}'
loop: with_items:
- foo.result - foo.result
- bar.result - bar.result
- name: Synchronize using the mode=pull param - name: Synchronize using the mode=pull param
ansible.posix.synchronize: synchronize:
src: "{{ output_dir }}/foo.txt" src: '{{output_dir}}/foo.txt'
dest: "{{ output_dir }}/foo.result" dest: '{{output_dir}}/foo.result'
mode: pull mode: pull
register: sync_result register: sync_result
delegate_to: "{{ inventory_hostname }}" delegate_to: '{{ inventory_hostname }}'
- assert:
- name: Check that the file was copied over correctly mode=pull
ansible.builtin.assert:
that: that:
- "'changed' in sync_result" - '''changed'' in sync_result'
- sync_result.changed == true - sync_result.changed == true
- "'cmd' in sync_result" - '''cmd'' in sync_result'
- "'rsync' in sync_result.cmd" - '''rsync'' in sync_result.cmd'
- "'msg' in sync_result" - '''msg'' in sync_result'
- sync_result.msg.startswith('>f+') - sync_result.msg.startswith('>f+')
- "sync_result.msg.endswith('+ foo.txt\n')" - 'sync_result.msg.endswith(''+ foo.txt
- name: Test that the file was really copied over '')'
ansible.builtin.stat: - name: test that the file was really copied over
path: "{{ output_dir }}/foo.result" stat:
path: '{{ output_dir }}/foo.result'
register: stat_result register: stat_result
- assert:
- name: Ensure file exists and checksum matches
ansible.builtin.assert:
that: that:
- stat_result.stat.exists == True - stat_result.stat.exists == True
- stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed' - stat_result.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
- name: Test that the file is not copied a second time - name: test that the file is not copied a second time
ansible.posix.synchronize: synchronize:
src: "{{ output_dir }}/foo.txt" src: '{{output_dir}}/foo.txt'
dest: "{{ output_dir }}/foo.result" dest: '{{output_dir}}/foo.result'
mode: pull mode: pull
register: sync_result register: sync_result
delegate_to: "{{ inventory_hostname }}" delegate_to: '{{ inventory_hostname }}'
- assert:
- name: Ensure no change occorred
ansible.builtin.assert:
that: that:
- sync_result.changed == False - sync_result.changed == False
- name: Cleanup - name: Cleanup
ansible.builtin.file: file:
state: absent state: absent
path: "{{ output_dir }}/{{ item }}" path: '{{output_dir}}/{{item}}'
loop: with_items:
- foo.result - foo.result
- bar.result - bar.result
- name: Synchronize files using with_items (issue#5965) - name: synchronize files using with_items (issue#5965)
ansible.posix.synchronize: synchronize:
src: "{{ output_dir }}/{{ item }}" src: '{{output_dir}}/{{item}}'
dest: "{{ output_dir }}/{{ item }}.result" dest: '{{output_dir}}/{{item}}.result'
with_items:
- foo.txt
- bar.txt
register: sync_result
delegate_to: '{{ inventory_hostname }}'
- assert:
that:
- sync_result.changed
- sync_result.msg == 'All items completed'
- '''results'' in sync_result'
- sync_result.results|length == 2
- 'sync_result.results[0].msg.endswith(''+ foo.txt
'')'
- 'sync_result.results[1].msg.endswith(''+ bar.txt
'')'
- name: Cleanup
file:
state: absent
path: '{{output_dir}}/{{item}}.result'
with_items:
- foo.txt
- bar.txt
- name: synchronize files using rsync_path (issue#7182)
synchronize:
src: '{{output_dir}}/foo.txt'
dest: '{{output_dir}}/foo.rsync_path'
rsync_path: 'sudo rsync'
register: sync_result
delegate_to: '{{ inventory_hostname }}'
- assert:
that:
- '''changed'' in sync_result'
- sync_result.changed == true
- '''cmd'' in sync_result'
- '''rsync'' in sync_result.cmd'
- '''rsync_path'' in sync_result.cmd'
- '''msg'' in sync_result'
- sync_result.msg.startswith('>f+')
- 'sync_result.msg.endswith(''+ foo.txt
'')'
- name: Cleanup
file:
state: absent
path: '{{output_dir}}/{{item}}'
with_items:
- foo.rsync_path
- name: add subdirectories for link-dest test
file:
path: '{{output_dir}}/{{item}}/'
state: directory
mode: '0755'
with_items:
- directory_a
- directory_b
- name: copy foo.txt into the first directory
synchronize:
src: '{{output_dir}}/foo.txt'
dest: '{{output_dir}}/{{item}}/foo.txt'
with_items:
- directory_a
delegate_to: '{{ inventory_hostname }}'
- name: synchronize files using link_dest
synchronize:
src: '{{output_dir}}/directory_a/foo.txt'
dest: '{{output_dir}}/directory_b/foo.txt'
link_dest:
- '{{output_dir}}/directory_a'
register: sync_result
delegate_to: '{{ inventory_hostname }}'
- name: get stat information for directory_a
stat:
path: '{{ output_dir }}/directory_a/foo.txt'
register: stat_result_a
- name: get stat information for directory_b
stat:
path: '{{ output_dir }}/directory_b/foo.txt'
register: stat_result_b
- assert:
that:
- '''changed'' in sync_result'
- sync_result.changed == true
- stat_result_a.stat.inode == stat_result_b.stat.inode
- name: synchronize files using link_dest that would be recursive
synchronize:
src: '{{output_dir}}/foo.txt'
dest: '{{output_dir}}/foo.result'
link_dest:
- '{{output_dir}}'
register: sync_result
ignore_errors: true
delegate_to: '{{ inventory_hostname }}'
- assert:
that:
- sync_result is not changed
- sync_result is failed
- name: Cleanup
file:
state: absent
path: '{{output_dir}}/{{item}}'
with_items:
- directory_b/foo.txt
- directory_a/foo.txt
- directory_a
- directory_b
- name: setup - test for source with working dir with spaces in path
file:
state: directory
path: '{{output_dir}}/{{item}}'
delegate_to: '{{ inventory_hostname }}'
with_items:
- 'directory a'
- 'directory b'
- name: setup - create test new files
copy:
dest: '{{output_dir}}/directory a/{{item}}'
mode: '0644'
content: 'hello world'
with_items: with_items:
- foo.txt - foo.txt
- bar.txt delegate_to: '{{ inventory_hostname }}'
register: sync_result - name: copy source with spaces in dir path
delegate_to: "{{ inventory_hostname }}" synchronize:
src: '{{output_dir}}/directory a/foo.txt'
- name: Validate syncrhonize with_items dest: '{{output_dir}}/directory b/'
ansible.builtin.assert: delegate_to: '{{ inventory_hostname }}'
that:
- sync_result.changed
- sync_result.msg == 'All items completed'
- "'results' in sync_result"
- sync_result.results|length == 2
- "sync_result.results[0].msg.endswith('+ foo.txt\n')"
- "sync_result.results[1].msg.endswith('+ bar.txt\n')"
- name: Cleanup
ansible.builtin.file:
state: absent
path: "{{ output_dir }}/{{ item }}.result"
loop:
- foo.txt
- bar.txt
- name: Synchronize files using rsync_path (issue#7182)
ansible.posix.synchronize:
src: "{{ output_dir }}/foo.txt"
dest: "{{ output_dir }}/foo.rsync_path"
rsync_path: sudo rsync
register: sync_result
delegate_to: "{{ inventory_hostname }}"
- name: Validate syncrhonize using rsync_path (issue#7182)
ansible.builtin.assert:
that:
- "'changed' in sync_result"
- sync_result.changed == true
- "'cmd' in sync_result"
- "'rsync' in sync_result.cmd"
- "'rsync_path' in sync_result.cmd"
- "'msg' in sync_result"
- sync_result.msg.startswith('>f+')
- "sync_result.msg.endswith('+ foo.txt\n')"
- name: Cleanup
ansible.builtin.file:
state: absent
path: "{{ output_dir }}/{{ item }}"
loop:
- foo.rsync_path
- name: Add subdirectories for link-dest test
ansible.builtin.file:
path: "{{ output_dir }}/{{ item }}/"
state: directory
mode: "0755"
loop:
- directory_a
- directory_b
- name: Copy foo.txt into the first directory
ansible.posix.synchronize:
src: "{{ output_dir }}/foo.txt"
dest: "{{ output_dir }}/{{ item }}/foo.txt"
loop:
- directory_a
delegate_to: "{{ inventory_hostname }}"
- name: Synchronize files using link_dest
ansible.posix.synchronize:
src: "{{ output_dir }}/directory_a/foo.txt"
dest: "{{ output_dir }}/directory_b/foo.txt"
link_dest:
- "{{ output_dir }}/directory_a"
register: sync_result
delegate_to: "{{ inventory_hostname }}"
- name: Get stat information for directory_a
ansible.builtin.stat:
path: "{{ output_dir }}/directory_a/foo.txt"
register: stat_result_a
- name: Get stat information for directory_b
ansible.builtin.stat:
path: "{{ output_dir }}/directory_b/foo.txt"
register: stat_result_b
- name: Ensure file exists and inode matches
ansible.builtin.assert:
that:
- "'changed' in sync_result"
- sync_result.changed == true
- stat_result_a.stat.inode == stat_result_b.stat.inode
- name: Synchronize files using link_dest that would be recursive
ansible.posix.synchronize:
src: "{{ output_dir }}/foo.txt"
dest: "{{ output_dir }}/foo.result"
link_dest:
- "{{ output_dir }}"
register: sync_result register: sync_result
ignore_errors: true ignore_errors: true
delegate_to: "{{ inventory_hostname }}" - name: get stat information for directory_b
stat:
- name: Ensure no change occorred and failed path: '{{ output_dir }}/directory b/foo.txt'
ansible.builtin.assert:
that:
- sync_result is not changed
- sync_result is failed
- name: Cleanup
ansible.builtin.file:
state: absent
path: "{{ output_dir }}/{{ item }}"
loop:
- directory_b/foo.txt
- directory_a/foo.txt
- directory_a
- directory_b
- name: Setup - test for source with working dir with spaces in path
ansible.builtin.file:
state: directory
path: "{{ output_dir }}/{{ item }}"
mode: "0755"
delegate_to: "{{ inventory_hostname }}"
loop:
- directory a
- directory b
- name: Setup - create test new files
ansible.builtin.copy:
dest: "{{ output_dir }}/directory a/{{ item }}"
mode: "0644"
content: hello world
loop:
- foo.txt
delegate_to: "{{ inventory_hostname }}"
- name: Copy source with spaces in dir path
ansible.posix.synchronize:
src: "{{ output_dir }}/directory a/foo.txt"
dest: "{{ output_dir }}/directory b/"
delegate_to: "{{ inventory_hostname }}"
register: sync_result
ignore_errors: true
- name: Get stat information for directory_b
ansible.builtin.stat:
path: "{{ output_dir }}/directory b/foo.txt"
register: stat_result_b register: stat_result_b
- assert:
- name: Ensure file exists and checksum matches
ansible.builtin.assert:
that: that:
- "'changed' in sync_result" - '''changed'' in sync_result'
- sync_result.changed == true - sync_result.changed == true
- stat_result_b.stat.exists == True - stat_result_b.stat.exists == True
- stat_result_b.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed' - stat_result_b.stat.checksum == '2aae6c35c94fcfb415dbe95f408b9ce91ee846ed'
- name: Cleanup - name: Cleanup
ansible.builtin.file: file:
state: absent state: absent
path: "{{ output_dir }}/{{ item }}" path: '{{output_dir}}/{{item}}'
loop: with_items:
- directory b/foo.txt - 'directory b/foo.txt'
- directory a/foo.txt - 'directory a/foo.txt'
- directory a - 'directory a'
- directory b - 'directory b'

View file

@ -1,3 +1,2 @@
---
dependencies: dependencies:
- prepare_tests - prepare_tests

View file

@ -1,4 +1,3 @@
---
# Test code for the sysctl module. # Test code for the sysctl module.
# (c) 2017, James Tanner <tanner.jc@gmail.com> # (c) 2017, James Tanner <tanner.jc@gmail.com>
@ -25,91 +24,79 @@
when: when:
- ansible_facts.virtualization_type == 'docker' or ansible_facts.virtualization_type == 'container' - ansible_facts.virtualization_type == 'docker' or ansible_facts.virtualization_type == 'container'
block: block:
- name: Set output_dir_test fact - set_fact:
ansible.builtin.set_fact:
output_dir_test: "{{ output_dir }}/test_sysctl" output_dir_test: "{{ output_dir }}/test_sysctl"
- name: Make sure our testing sub-directory does not exist - name: make sure our testing sub-directory does not exist
ansible.builtin.file: file:
path: "{{ output_dir_test }}" path: "{{ output_dir_test }}"
state: absent state: absent
- name: Create our testing sub-directory - name: create our testing sub-directory
ansible.builtin.file: file:
path: "{{ output_dir_test }}" path: "{{ output_dir_test }}"
state: directory state: directory
mode: "0755"
## ##
## sysctl - file manipulation ## sysctl - file manipulation
## ##
- name: Copy the example conf to the test dir - name: copy the example conf to the test dir
ansible.builtin.copy: copy:
src: sysctl.conf src: sysctl.conf
dest: "{{ output_dir_test }}" dest: "{{ output_dir_test }}"
mode: "0644"
- name: Set vm.swappiness to 5 - name: Set vm.swappiness to 5
ansible.posix.sysctl: sysctl:
name: vm.swappiness name: vm.swappiness
value: 5 value: 5
state: present state: present
reload: false reload: no
sysctl_file: "{{ output_dir_test }}/sysctl.conf" sysctl_file: "{{ output_dir_test }}/sysctl.conf"
register: sysctl_test0 register: sysctl_test0
- name: Debug sysctl_test0 - debug:
ansible.builtin.debug:
var: sysctl_test0 var: sysctl_test0
verbosity: 1 verbosity: 1
- name: Get file content - name: get file content
ansible.builtin.shell: shell: "cat {{ output_dir_test }}/sysctl.conf | egrep -v ^\\#"
cmd: set -o pipefail && cat {{ output_dir_test }}/sysctl.conf | egrep -v ^\#
executable: /bin/bash
changed_when: false
register: sysctl_content0 register: sysctl_content0
- name: Debug sysctl_content0 - debug:
ansible.builtin.debug:
var: sysctl_content0 var: sysctl_content0
verbosity: 1 verbosity: 1
- name: Set vm.swappiness to 5 again - name: Set vm.swappiness to 5 again
ansible.posix.sysctl: sysctl:
name: vm.swappiness name: vm.swappiness
value: 5 value: 5
state: present state: present
reload: false reload: no
sysctl_file: "{{ output_dir_test }}/sysctl.conf" sysctl_file: "{{ output_dir_test }}/sysctl.conf"
register: sysctl_test1 register: sysctl_test1
- name: Validate results - name: validate results
ansible.builtin.assert: assert:
that: that:
- sysctl_test0 is changed - sysctl_test0 is changed
- sysctl_test1 is not changed - sysctl_test1 is not changed
- sysctl_content0.stdout_lines[sysctl_content0.stdout_lines.index("vm.swappiness=5")] == "vm.swappiness=5" - 'sysctl_content0.stdout_lines[sysctl_content0.stdout_lines.index("vm.swappiness=5")] == "vm.swappiness=5"'
- name: Remove kernel.panic - name: Remove kernel.panic
ansible.posix.sysctl: sysctl:
name: kernel.panic name: kernel.panic
value: 2 value: 2
reload: false reload: no
state: absent state: absent
sysctl_file: "{{ output_dir_test }}/sysctl.conf" sysctl_file: "{{ output_dir_test }}/sysctl.conf"
register: sysctl_test2 register: sysctl_test2
- name: Get file content - name: get file content
ansible.builtin.shell: shell: "cat {{ output_dir_test }}/sysctl.conf | egrep -v ^\\#"
cmd: set -o pipefail && cat {{ output_dir_test }}/sysctl.conf | egrep -v ^\#
executable: /bin/bash
changed_when: false
register: sysctl_content2 register: sysctl_content2
- name: Debug sysctl_test2 sysctl_content2 - debug:
ansible.builtin.debug:
var: item var: item
verbosity: 1 verbosity: 1
with_items: with_items:
@ -117,39 +104,38 @@
- "{{ sysctl_content2 }}" - "{{ sysctl_content2 }}"
- name: Validate results for key removal - name: Validate results for key removal
ansible.builtin.assert: assert:
that: that:
- sysctl_test2 is changed - sysctl_test2 is changed
- "'kernel.panic' not in sysctl_content2.stdout_lines" - "'kernel.panic' not in sysctl_content2.stdout_lines"
- name: Test remove kernel.panic again - name: Test remove kernel.panic again
ansible.posix.sysctl: sysctl:
name: kernel.panic name: kernel.panic
value: 2 value: 2
state: absent state: absent
reload: false reload: no
sysctl_file: "{{ output_dir_test }}/sysctl.conf" sysctl_file: "{{ output_dir_test }}/sysctl.conf"
register: sysctl_test2_change_test register: sysctl_test2_change_test
- name: Assert that no change was made - name: Assert that no change was made
ansible.builtin.assert: assert:
that: that:
- sysctl_test2_change_test is not changed - sysctl_test2_change_test is not changed
- name: Try sysctl with an invalid name - name: Try sysctl with an invalid name
ansible.posix.sysctl: sysctl:
name: test.invalid name: test.invalid
value: 1 value: 1
register: sysctl_test3 register: sysctl_test3
ignore_errors: true ignore_errors: yes
- name: Debug sysctl_test3 - debug:
ansible.builtin.debug:
var: sysctl_test3 var: sysctl_test3
verbosity: 1 verbosity: 1
- name: Validate results for test 3 - name: validate results for test 3
ansible.builtin.assert: assert:
that: that:
- sysctl_test3 is failed - sysctl_test3 is failed
@ -157,79 +143,77 @@
## sysctl - sysctl_set ## sysctl - sysctl_set
## ##
- name: Set net.ipv4.ip_forward - name: set net.ipv4.ip_forward
ansible.posix.sysctl: sysctl:
name: net.ipv4.ip_forward name: net.ipv4.ip_forward
value: 1 value: 1
sysctl_set: true sysctl_set: yes
reload: false reload: no
register: sysctl_test3 register: sysctl_test3
- name: Check with sysctl command - name: check with sysctl command
ansible.builtin.command: sysctl net.ipv4.ip_forward shell: sysctl net.ipv4.ip_forward
changed_when: false
register: sysctl_check3 register: sysctl_check3
- name: Debug sysctl_test3 sysctl_check3 - debug:
ansible.builtin.debug:
var: item var: item
verbosity: 1 verbosity: 1
with_items: with_items:
- "{{ sysctl_test3 }}" - "{{ sysctl_test3 }}"
- "{{ sysctl_check3 }}" - "{{ sysctl_check3 }}"
- name: Validate results for test 3 - name: validate results for test 3
ansible.builtin.assert: assert:
that: that:
- sysctl_test3 is changed - sysctl_test3 is changed
- sysctl_check3.stdout_lines == ["net.ipv4.ip_forward = 1"] - 'sysctl_check3.stdout_lines == ["net.ipv4.ip_forward = 1"]'
- name: Try sysctl with no name - name: Try sysctl with no name
ansible.posix.sysctl: sysctl:
name: "" name: ""
value: 1 value: 1
sysctl_set: true sysctl_set: yes
ignore_errors: true ignore_errors: True
register: sysctl_no_name register: sysctl_no_name
- name: Validate nameless results - name: validate nameless results
ansible.builtin.assert: assert:
that: that:
- sysctl_no_name is failed - sysctl_no_name is failed
- sysctl_no_name.msg == 'name cannot be blank' - "sysctl_no_name.msg == 'name cannot be blank'"
- name: Try sysctl with no value - name: Try sysctl with no value
ansible.posix.sysctl: sysctl:
name: Foo name: Foo
value: value:
sysctl_set: true sysctl_set: yes
ignore_errors: true ignore_errors: True
register: sysctl_no_value register: sysctl_no_value
- name: Validate nameless results - name: validate nameless results
ansible.builtin.assert: assert:
that: that:
- sysctl_no_value is failed - sysctl_no_value is failed
- sysctl_no_value.msg == 'value cannot be None' - "sysctl_no_value.msg == 'value cannot be None'"
- name: Try sysctl with an invalid name - name: Try sysctl with an invalid name
ansible.posix.sysctl: sysctl:
name: test.invalid name: test.invalid
value: 1 value: 1
sysctl_set: true sysctl_set: yes
register: sysctl_test4 register: sysctl_test4
ignore_errors: true ignore_errors: yes
- name: Debug sysctl_test4 - debug:
ansible.builtin.debug:
var: sysctl_test4 var: sysctl_test4
verbosity: 1 verbosity: 1
- name: Validate results for test 4 - name: validate results for test 4
ansible.builtin.assert: assert:
that: that:
- sysctl_test4 is failed - sysctl_test4 is failed
- name: Test on RHEL VMs - name: Test on RHEL VMs
when: when:
- ansible_facts.virtualization_type != 'docker' - ansible_facts.virtualization_type != 'docker'
@ -237,37 +221,34 @@
block: block:
# Test reload: yes # Test reload: yes
- name: Set sysctl property using module - name: Set sysctl property using module
ansible.posix.sysctl: sysctl:
name: vm.swappiness name: vm.swappiness
value: "22" value: '22'
state: present state: present
reload: true reload: yes
register: sysctl_set1 register: sysctl_set1
- name: Change sysctl property using command - name: Change sysctl property using command
ansible.builtin.command: sysctl vm.swappiness=33 command: sysctl vm.swappiness=33
changed_when: true
- name: Set sysctl property using module - name: Set sysctl property using module
ansible.posix.sysctl: sysctl:
name: vm.swappiness name: vm.swappiness
value: "22" value: '22'
state: present state: present
reload: true reload: yes
register: sysctl_set2 register: sysctl_set2
- name: Read /etc/sysctl.conf - name: Read /etc/sysctl.conf
ansible.builtin.command: egrep -v ^# /etc/sysctl.conf command: 'egrep -v ^# /etc/sysctl.conf'
changed_when: false
register: sysctl_conf_content register: sysctl_conf_content
- name: Get current value of vm.swappiness - name: Get current value of vm.swappiness
ansible.builtin.command: sysctl -n vm.swappiness command: sysctl -n vm.swappiness
changed_when: false
register: sysctl_current_vm_swappiness register: sysctl_current_vm_swappiness
- name: Ensure changes were made appropriately - name: Ensure changes were made appropriately
ansible.builtin.assert: assert:
that: that:
- sysctl_set1 is changed - sysctl_set1 is changed
- sysctl_set2 is changed - sysctl_set2 is changed
@ -276,35 +257,33 @@
# Test reload: yes in check mode # Test reload: yes in check mode
- name: Set the same value using module in check mode - name: Set the same value using module in check mode
ansible.posix.sysctl: sysctl:
name: vm.swappiness name: vm.swappiness
value: "22" value: '22'
state: present state: present
reload: true reload: yes
check_mode: true check_mode: yes
register: sysctl_check_mode1 register: sysctl_check_mode1
- name: Set a different value using module in check mode - name: Set a different value using module in check mode
ansible.posix.sysctl: sysctl:
name: vm.swappiness name: vm.swappiness
value: "44" value: '44'
state: present state: present
reload: true reload: yes
check_mode: true check_mode: yes
register: sysctl_check_mode2 register: sysctl_check_mode2
- name: Read /etc/sysctl.conf - name: Read /etc/sysctl.conf
ansible.builtin.command: egrep -v ^# /etc/sysctl.conf command: 'egrep -v ^# /etc/sysctl.conf'
changed_when: false
register: sysctl_check_mode_conf_content register: sysctl_check_mode_conf_content
- name: Get current value of vm.swappiness - name: Get current value of vm.swappiness
ansible.builtin.command: sysctl -n vm.swappiness command: sysctl -n vm.swappiness
changed_when: false
register: sysctl_check_mode_current_vm_swappiness register: sysctl_check_mode_current_vm_swappiness
- name: Ensure no changes were made in check mode - name: Ensure no changes were made in check mode
ansible.builtin.assert: assert:
that: that:
- sysctl_check_mode1 is success - sysctl_check_mode1 is success
- sysctl_check_mode2 is changed - sysctl_check_mode2 is changed
@ -313,22 +292,21 @@
# Test sysctl: invalid value # Test sysctl: invalid value
- name: Set invalid sysctl property using module - name: Set invalid sysctl property using module
ansible.posix.sysctl: sysctl:
name: vm.mmap_rnd_bits name: vm.mmap_rnd_bits
value: "1024" value: '1024'
state: present state: present
reload: true reload: yes
sysctl_set: true sysctl_set: True
ignore_errors: true ignore_errors: True
register: sysctl_invalid_set1 register: sysctl_invalid_set1
- name: Read /etc/sysctl.conf - name: Read /etc/sysctl.conf
ansible.builtin.command: cat /etc/sysctl.conf command: 'cat /etc/sysctl.conf'
changed_when: false
register: sysctl_invalid_conf_content register: sysctl_invalid_conf_content
- name: Ensure changes were not made - name: Ensure changes were not made
ansible.builtin.assert: assert:
that: that:
- sysctl_invalid_set1 is failed - sysctl_invalid_set1 is failed
- "'vm.mmap_rnd_bits' not in sysctl_invalid_conf_content.stdout" - "'vm.mmap_rnd_bits' not in sysctl_invalid_conf_content.stdout"

View file

@ -1,2 +1,8 @@
plugins/modules/synchronize.py pylint:disallowed-name
plugins/modules/synchronize.py use-argspec-type-path
plugins/modules/synchronize.py validate-modules:doc-default-does-not-match-spec
plugins/modules/synchronize.py validate-modules:nonexistent-parameter-documented
plugins/modules/synchronize.py validate-modules:parameter-type-not-in-doc
plugins/modules/synchronize.py validate-modules:undocumented-parameter
tests/utils/shippable/check_matrix.py replace-urlopen tests/utils/shippable/check_matrix.py replace-urlopen
tests/utils/shippable/timing.py shebang tests/utils/shippable/timing.py shebang

View file

@ -1,2 +1,8 @@
plugins/modules/synchronize.py pylint:disallowed-name
plugins/modules/synchronize.py use-argspec-type-path
plugins/modules/synchronize.py validate-modules:doc-default-does-not-match-spec
plugins/modules/synchronize.py validate-modules:nonexistent-parameter-documented
plugins/modules/synchronize.py validate-modules:parameter-type-not-in-doc
plugins/modules/synchronize.py validate-modules:undocumented-parameter
tests/utils/shippable/check_matrix.py replace-urlopen tests/utils/shippable/check_matrix.py replace-urlopen
tests/utils/shippable/timing.py shebang tests/utils/shippable/timing.py shebang

View file

@ -1 +1,7 @@
plugins/modules/synchronize.py pylint:disallowed-name
plugins/modules/synchronize.py use-argspec-type-path
plugins/modules/synchronize.py validate-modules:doc-default-does-not-match-spec
plugins/modules/synchronize.py validate-modules:nonexistent-parameter-documented
plugins/modules/synchronize.py validate-modules:parameter-type-not-in-doc
plugins/modules/synchronize.py validate-modules:undocumented-parameter
tests/utils/shippable/timing.py shebang tests/utils/shippable/timing.py shebang

View file

@ -1 +1,7 @@
plugins/modules/synchronize.py pylint:disallowed-name
plugins/modules/synchronize.py use-argspec-type-path
plugins/modules/synchronize.py validate-modules:doc-default-does-not-match-spec
plugins/modules/synchronize.py validate-modules:nonexistent-parameter-documented
plugins/modules/synchronize.py validate-modules:parameter-type-not-in-doc
plugins/modules/synchronize.py validate-modules:undocumented-parameter
tests/utils/shippable/timing.py shebang tests/utils/shippable/timing.py shebang

View file

@ -0,0 +1,8 @@
plugins/modules/synchronize.py pylint:blacklisted-name
plugins/modules/synchronize.py use-argspec-type-path
plugins/modules/synchronize.py validate-modules:doc-default-does-not-match-spec
plugins/modules/synchronize.py validate-modules:nonexistent-parameter-documented
plugins/modules/synchronize.py validate-modules:parameter-type-not-in-doc
plugins/modules/synchronize.py validate-modules:undocumented-parameter
tests/utils/shippable/check_matrix.py replace-urlopen
tests/utils/shippable/timing.py shebang

View file

@ -1,18 +1,17 @@
---
fixtures: fixtures:
taskvars_in: taskvars_in.json taskvars_in: taskvars_in.json
taskvars_out: taskvars_out.json taskvars_out: taskvars_out.json
connection: connection:
transport: ssh transport: 'ssh'
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'local' - "SAM._connection.transport == 'local'"
- self._play_context.shell == 'sh' - "self._play_context.shell == 'sh'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"

View file

@ -1,40 +1,39 @@
---
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
# rsync_path: rsync #rsync_path: rsync
_task: _task:
become: true become: True
become_method: None become_method: None
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
connection: connection:
transport: ssh transport: 'ssh'
_play_context: _play_context:
become: true become: True
become_method: sudo become_method: sudo
remote_addr: el6host remote_addr: el6host
remote_user: root remote_user: root
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'local' - "SAM._connection.transport == 'local'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
# this is a crucial aspect of this scenario ... # this is a crucial aspect of this scenario ...
# note: become_user None -> root # note: become_user None -> root
- self.final_module_args['rsync_path'] == 'sudo -u root rsync' - "self.final_module_args['rsync_path'] == 'sudo -u root rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"
- self.task.become == True - "self.task.become == True"
- self.task.become_user == None - "self.task.become_user == None"
- self._play_context.shell == 'sh' - "self._play_context.shell == 'sh'"
- self._play_context.remote_addr == 'el6host' - "self._play_context.remote_addr == 'el6host'"
- self._play_context.remote_user == 'root' - "self._play_context.remote_user == 'root'"
- self._play_context.become == False - "self._play_context.become == False"
- self._play_context.become_user == 'root' - "self._play_context.become_user == 'root'"
- self._play_context.password == None - "self._play_context.password == None"

View file

@ -1,40 +1,39 @@
---
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
# rsync_path: rsync #rsync_path: rsync
_task: _task:
become: None become: None
become_method: None become_method: None
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
connection: connection:
transport: ssh transport: 'ssh'
_play_context: _play_context:
become: true become: True
become_method: sudo become_method: sudo
remote_addr: el6host remote_addr: el6host
remote_user: root remote_user: root
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'local' - "SAM._connection.transport == 'local'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
# this is a crucial aspect of this scenario ... # this is a crucial aspect of this scenario ...
# note: become_user None -> root # note: become_user None -> root
- self.final_module_args['rsync_path'] == 'sudo -u root rsync' - "self.final_module_args['rsync_path'] == 'sudo -u root rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"
- self.task.become == None - "self.task.become == None"
- self.task.become_user == None - "self.task.become_user == None"
- self._play_context.shell == 'sh' - "self._play_context.shell == 'sh'"
- self._play_context.remote_addr == 'el6host' - "self._play_context.remote_addr == 'el6host'"
- self._play_context.remote_user == 'root' - "self._play_context.remote_user == 'root'"
- self._play_context.become == False - "self._play_context.become == False"
- self._play_context.become_user == 'root' - "self._play_context.become_user == 'root'"
- self._play_context.password == None - "self._play_context.password == None"

View file

@ -1,30 +1,29 @@
---
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
connection: connection:
transport: ssh transport: 'ssh'
_play_context: _play_context:
remote_addr: 127.0.0.1 remote_addr: '127.0.0.1'
remote_user: vagrant remote_user: vagrant
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'local' - "SAM._connection.transport == 'local'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['dest_port'] == 2202 - "self.final_module_args['dest_port'] == 2202"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme' - "self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme'"
- self._play_context.shell == 'sh' - "self._play_context.shell == 'sh'"
- self._play_context.remote_addr == '127.0.0.1' - "self._play_context.remote_addr == '127.0.0.1'"
- self._play_context.remote_user == 'vagrant' - "self._play_context.remote_user == 'vagrant'"
- self._play_context.become == False - "self._play_context.become == False"
- self._play_context.become_user == 'root' - "self._play_context.become_user == 'root'"
- self._play_context.password == None - "self._play_context.password == None"

View file

@ -1,33 +1,32 @@
---
task: task:
# become: None #become: None
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
connection: connection:
transport: ssh transport: 'ssh'
_play_context: _play_context:
become: true become: True
remote_addr: 127.0.0.1 remote_addr: '127.0.0.1'
remote_user: vagrant remote_user: vagrant
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'local' - "SAM._connection.transport == 'local'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['dest_port'] == 2202 - "self.final_module_args['dest_port'] == 2202"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme' - "self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme'"
- self._play_context.shell == 'sh' - "self._play_context.shell == 'sh'"
- self._play_context.remote_addr == '127.0.0.1' - "self._play_context.remote_addr == '127.0.0.1'"
- self._play_context.remote_user == 'vagrant' - "self._play_context.remote_user == 'vagrant'"
- self._play_context.become == False - "self._play_context.become == False"
- self._play_context.become_user == 'root' - "self._play_context.become_user == 'root'"
- self._play_context.password == None - "self._play_context.password == None"

View file

@ -1,30 +1,29 @@
---
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
connection: connection:
transport: ssh transport: 'ssh'
_play_context: _play_context:
remote_addr: 127.0.0.1 remote_addr: '127.0.0.1'
remote_user: vagrant remote_user: vagrant
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'local' - "SAM._connection.transport == 'local'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['dest_port'] == 2202 - "self.final_module_args['dest_port'] == 2202"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme' - "self.final_module_args['dest'] == 'vagrant@127.0.0.1:/tmp/deleteme'"
- self._play_context.shell == 'sh' - "self._play_context.shell == 'sh'"
- self._play_context.remote_addr == '127.0.0.1' - "self._play_context.remote_addr == '127.0.0.1'"
- self._play_context.remote_user == 'vagrant' - "self._play_context.remote_user == 'vagrant'"
- self._play_context.become == False - "self._play_context.become == False"
- self._play_context.become_user == 'root' - "self._play_context.become_user == 'root'"
- self._play_context.password == None - "self._play_context.password == None"

View file

@ -1,26 +1,25 @@
---
fixtures: fixtures:
taskvars_in: taskvars_in.json taskvars_in: taskvars_in.json
taskvars_out: taskvars_out.json taskvars_out: taskvars_out.json
connection: connection:
transport: ssh transport: 'ssh'
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
_play_context: _play_context:
private_key_file: ~/test.pem private_key_file: ~/test.pem
task_args: task_args:
private_key: ~/.ssh/id_rsa private_key: ~/.ssh/id_rsa
dest: /tmp/deleteme dest: /tmp/deleteme
src: /tmp/deleteme src: /tmp/deleteme
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'local' - "SAM._connection.transport == 'local'"
- self._play_context.shell == 'sh' - "self._play_context.shell == 'sh'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"
- self.final_module_args['private_key'] == '~/.ssh/id_rsa' - "self.final_module_args['private_key'] == '~/.ssh/id_rsa'"

View file

@ -1,27 +1,26 @@
---
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
_task: _task:
delegate_to: u1404 delegate_to: u1404
_play_context: _play_context:
shell: None shell: None
remote_addr: u1404 remote_addr: u1404
remote_user: root remote_user: root
connection: connection:
transport: ssh transport: 'ssh'
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'ssh' - "SAM._connection.transport == 'ssh'"
- self._play_context.shell == None - "self._play_context.shell == None"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"

View file

@ -1,29 +1,28 @@
---
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
_task: _task:
delegate_to: u1404 delegate_to: u1404
_play_context: _play_context:
shell: None shell: None
remote_addr: u1404 remote_addr: u1404
remote_user: root remote_user: root
private_key_file: ~/test.pem private_key_file: ~/test.pem
connection: connection:
transport: ssh transport: 'ssh'
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'ssh' - "SAM._connection.transport == 'ssh'"
- self._play_context.shell == None - "self._play_context.shell == None"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"
- self.final_module_args['private_key'] == '~/test.pem' - "self.final_module_args['private_key'] == '~/test.pem'"

View file

@ -1,34 +1,33 @@
---
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
_task: _task:
delegate_to: u1404 delegate_to: u1404
_play_context: _play_context:
become: true become: True
become_user: None # if ! None|root, different testcase become_user: None #if ! None|root, different testcase
become_method: su become_method: su
shell: None shell: None
remote_addr: u1404 remote_addr: u1404
remote_user: root remote_user: root
connection: connection:
transport: ssh transport: 'ssh'
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'ssh' - "SAM._connection.transport == 'ssh'"
- self._play_context.shell == None - "self._play_context.shell == None"
- self._play_context.remote_addr == 'u1404' - "self._play_context.remote_addr == 'u1404'"
- self._play_context.remote_user == 'root' - "self._play_context.remote_user == 'root'"
- not self._play_context.become - "not self._play_context.become"
- self._play_context.become_method == 'su' - "self._play_context.become_method == 'su'"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"

View file

@ -1,30 +1,29 @@
---
fixtures: fixtures:
taskvars_in: task_vars_in.json taskvars_in: task_vars_in.json
taskvars_out: task_vars_out.json taskvars_out: task_vars_out.json
task_args: task_args:
src: /tmp/deleteme src: /tmp/deleteme
dest: /tmp/deleteme dest: /tmp/deleteme
private_key: ~/.ssh/id_rsa private_key: ~/.ssh/id_rsa
_task: _task:
delegate_to: u1404 delegate_to: u1404
_play_context: _play_context:
shell: None shell: None
remote_addr: u1404 remote_addr: u1404
remote_user: root remote_user: root
private_key_file: ~/test.pem private_key_file: ~/test.pem
connection: connection:
transport: ssh transport: 'ssh'
hostvars: hostvars:
127.0.0.1: {} '127.0.0.1': {}
::1: {} '::1': {}
localhost: {} 'localhost': {}
asserts: asserts:
- hasattr(SAM._connection, 'ismock') - "hasattr(SAM._connection, 'ismock')"
- SAM._connection.transport == 'ssh' - "SAM._connection.transport == 'ssh'"
- self._play_context.shell == None - "self._play_context.shell == None"
- self.execute_called - "self.execute_called"
- self.final_module_args['_local_rsync_path'] == 'rsync' - "self.final_module_args['_local_rsync_path'] == 'rsync'"
- self.final_module_args['src'] == '/tmp/deleteme' - "self.final_module_args['src'] == '/tmp/deleteme'"
- self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme' - "self.final_module_args['dest'] == 'root@el6host:/tmp/deleteme'"
- self.final_module_args['private_key'] == '~/.ssh/id_rsa' - "self.final_module_args['private_key'] == '~/.ssh/id_rsa'"

View file

@ -1,3 +1,3 @@
--- ---
collections: collections:
- community.general - community.general