mirror of
https://github.com/ansible-collections/ansible.posix.git
synced 2026-01-11 15:15:26 +01:00
Compare commits
27 commits
2493bc08a2
...
59fef9a11f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
59fef9a11f | ||
|
|
6da1331018 | ||
|
|
ab8dfefd90 | ||
|
|
b96fad5e5b | ||
|
|
2d350e6073 | ||
|
|
ea6ef5c775 | ||
|
|
9007e20b2f | ||
|
|
508e3d920f | ||
|
|
18e023dd77 | ||
|
|
d3204df536 | ||
|
|
162e72182f | ||
|
|
1c1dd005c8 | ||
|
|
40c27e2bee | ||
|
|
c273ac2a01 | ||
|
|
f978998521 | ||
|
|
c319c856ed | ||
|
|
d05a5c70b5 | ||
|
|
572167b9c1 | ||
|
|
2c8aad9f39 | ||
|
|
70b838f031 | ||
|
|
5a16ef3bea | ||
|
|
841a0f3314 | ||
|
|
5bc6f636f7 | ||
|
|
284025660c | ||
|
|
f7f54f242d | ||
|
|
966df79767 | ||
|
|
5ee818ec86 |
18 changed files with 205 additions and 81 deletions
|
|
@ -37,7 +37,7 @@ variables:
|
||||||
resources:
|
resources:
|
||||||
containers:
|
containers:
|
||||||
- container: default
|
- container: default
|
||||||
image: quay.io/ansible/azure-pipelines-test-container:6.0.0
|
image: quay.io/ansible/azure-pipelines-test-container:7.0.0
|
||||||
|
|
||||||
pool: Standard
|
pool: Standard
|
||||||
|
|
||||||
|
|
@ -57,8 +57,23 @@ stages:
|
||||||
test: units
|
test: units
|
||||||
- name: Lint
|
- name: Lint
|
||||||
test: lint
|
test: lint
|
||||||
|
- stage: Sanity_2_19
|
||||||
|
displayName: Ansible 2.19 sanitay & Units & Lint
|
||||||
|
dependsOn: []
|
||||||
|
jobs:
|
||||||
|
- template: templates/matrix.yml
|
||||||
|
parameters:
|
||||||
|
nameFormat: "{0}"
|
||||||
|
testFormat: 2.19/{0}
|
||||||
|
targets:
|
||||||
|
- name: Sanity
|
||||||
|
test: sanity
|
||||||
|
- name: Units
|
||||||
|
test: units
|
||||||
|
- name: Lint
|
||||||
|
test: lint
|
||||||
- stage: Sanity_2_18
|
- stage: Sanity_2_18
|
||||||
displayName: Ansible 2.18 sanity
|
displayName: Ansible 2.18 sanity & Units & Lint
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
jobs:
|
jobs:
|
||||||
- template: templates/matrix.yml
|
- template: templates/matrix.yml
|
||||||
|
|
@ -73,7 +88,7 @@ stages:
|
||||||
- name: Lint
|
- name: Lint
|
||||||
test: lint
|
test: lint
|
||||||
- stage: Sanity_2_17
|
- stage: Sanity_2_17
|
||||||
displayName: Ansible 2.17 sanity
|
displayName: Ansible 2.17 sanity & Units & Lint
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
jobs:
|
jobs:
|
||||||
- template: templates/matrix.yml
|
- template: templates/matrix.yml
|
||||||
|
|
@ -88,7 +103,7 @@ stages:
|
||||||
- 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 & Units & Lint
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
jobs:
|
jobs:
|
||||||
- template: templates/matrix.yml
|
- template: templates/matrix.yml
|
||||||
|
|
@ -100,19 +115,6 @@ stages:
|
||||||
test: sanity
|
test: sanity
|
||||||
- name: Units
|
- name: Units
|
||||||
test: units
|
test: units
|
||||||
- stage: Sanity_2_15
|
|
||||||
displayName: Ansible 2.15 sanity
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
nameFormat: "{0}"
|
|
||||||
testFormat: 2.15/{0}
|
|
||||||
targets:
|
|
||||||
- name: Sanity
|
|
||||||
test: sanity
|
|
||||||
- name: Units
|
|
||||||
test: units
|
|
||||||
## Docker
|
## Docker
|
||||||
- stage: Docker_devel
|
- stage: Docker_devel
|
||||||
displayName: Docker devel
|
displayName: Docker devel
|
||||||
|
|
@ -121,6 +123,20 @@ stages:
|
||||||
- template: templates/matrix.yml
|
- template: templates/matrix.yml
|
||||||
parameters:
|
parameters:
|
||||||
testFormat: devel/linux/{0}/1
|
testFormat: devel/linux/{0}/1
|
||||||
|
targets:
|
||||||
|
- name: Fedora 42
|
||||||
|
test: fedora42
|
||||||
|
- name: Ubuntu 22.04
|
||||||
|
test: ubuntu2204
|
||||||
|
- name: Ubuntu 24.04
|
||||||
|
test: ubuntu2404
|
||||||
|
- stage: Docker_2_19
|
||||||
|
displayName: Docker 2.19
|
||||||
|
dependsOn: []
|
||||||
|
jobs:
|
||||||
|
- template: templates/matrix.yml
|
||||||
|
parameters:
|
||||||
|
testFormat: 2.19/linux/{0}/1
|
||||||
targets:
|
targets:
|
||||||
- name: Fedora 41
|
- name: Fedora 41
|
||||||
test: fedora41
|
test: fedora41
|
||||||
|
|
@ -169,23 +185,6 @@ stages:
|
||||||
- name: Ubuntu 22.04
|
- name: Ubuntu 22.04
|
||||||
test: ubuntu2204
|
test: ubuntu2204
|
||||||
|
|
||||||
- stage: Docker_2_15
|
|
||||||
displayName: Docker 2.15
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.15/linux/{0}/1
|
|
||||||
targets:
|
|
||||||
- name: CentOS 7
|
|
||||||
test: centos7
|
|
||||||
- name: Fedora 37
|
|
||||||
test: fedora37
|
|
||||||
- name: openSUSE 15 py3
|
|
||||||
test: opensuse15
|
|
||||||
- name: Ubuntu 22.04
|
|
||||||
test: ubuntu2204
|
|
||||||
|
|
||||||
## Remote
|
## Remote
|
||||||
- stage: Remote_devel
|
- stage: Remote_devel
|
||||||
displayName: Remote devel
|
displayName: Remote devel
|
||||||
|
|
@ -194,6 +193,22 @@ stages:
|
||||||
- template: templates/matrix.yml
|
- template: templates/matrix.yml
|
||||||
parameters:
|
parameters:
|
||||||
testFormat: devel/{0}/1
|
testFormat: devel/{0}/1
|
||||||
|
targets:
|
||||||
|
- name: RHEL 10.0
|
||||||
|
test: rhel/10.0
|
||||||
|
- name: RHEL 9.6
|
||||||
|
test: rhel/9.6
|
||||||
|
- name: FreeBSD 14.3
|
||||||
|
test: freebsd/14.3
|
||||||
|
- name: FreeBSD 13.5
|
||||||
|
test: freebsd/13.5
|
||||||
|
- stage: Remote_2_19
|
||||||
|
displayName: Remote 2.19
|
||||||
|
dependsOn: []
|
||||||
|
jobs:
|
||||||
|
- template: templates/matrix.yml
|
||||||
|
parameters:
|
||||||
|
testFormat: 2.19/{0}/1
|
||||||
targets:
|
targets:
|
||||||
- name: RHEL 10.0
|
- name: RHEL 10.0
|
||||||
test: rhel/10.0
|
test: rhel/10.0
|
||||||
|
|
@ -213,8 +228,8 @@ stages:
|
||||||
targets:
|
targets:
|
||||||
- name: RHEL 9.4
|
- name: RHEL 9.4
|
||||||
test: rhel/9.4
|
test: rhel/9.4
|
||||||
- name: FreeBSD 13.3
|
- name: FreeBSD 13.5
|
||||||
test: freebsd/13.3
|
test: freebsd/13.5
|
||||||
- stage: Remote_2_17
|
- stage: Remote_2_17
|
||||||
displayName: Remote 2.17
|
displayName: Remote 2.17
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
|
|
@ -225,8 +240,8 @@ stages:
|
||||||
targets:
|
targets:
|
||||||
- name: RHEL 9.3
|
- name: RHEL 9.3
|
||||||
test: rhel/9.3
|
test: rhel/9.3
|
||||||
- name: FreeBSD 13.3
|
- name: FreeBSD 13.5
|
||||||
test: freebsd/13.3
|
test: freebsd/13.5
|
||||||
- stage: Remote_2_16
|
- stage: Remote_2_16
|
||||||
displayName: Remote 2.16
|
displayName: Remote 2.16
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
|
|
@ -240,29 +255,11 @@ stages:
|
||||||
- name: RHEL 9.2
|
- name: RHEL 9.2
|
||||||
test: rhel/9.2
|
test: rhel/9.2
|
||||||
|
|
||||||
- stage: Remote_2_15
|
|
||||||
displayName: Remote 2.15
|
|
||||||
dependsOn: []
|
|
||||||
jobs:
|
|
||||||
- template: templates/matrix.yml
|
|
||||||
parameters:
|
|
||||||
testFormat: 2.15/{0}/1
|
|
||||||
targets:
|
|
||||||
- name: RHEL 7.9
|
|
||||||
test: rhel/7.9
|
|
||||||
- name: RHEL 8.7
|
|
||||||
test: rhel/8.7
|
|
||||||
- name: RHEL 9.1
|
|
||||||
test: rhel/9.1
|
|
||||||
|
|
||||||
## Finally
|
## Finally
|
||||||
|
|
||||||
- stage: Summary
|
- stage: Summary
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- Sanity_2_15
|
|
||||||
- Remote_2_15
|
|
||||||
- Docker_2_15
|
|
||||||
- Sanity_2_16
|
- Sanity_2_16
|
||||||
- Remote_2_16
|
- Remote_2_16
|
||||||
- Docker_2_16
|
- Docker_2_16
|
||||||
|
|
@ -272,6 +269,9 @@ stages:
|
||||||
- Sanity_2_18
|
- Sanity_2_18
|
||||||
- Remote_2_18
|
- Remote_2_18
|
||||||
- Docker_2_18
|
- Docker_2_18
|
||||||
|
- Sanity_2_19
|
||||||
|
- Remote_2_19
|
||||||
|
- Docker_2_19
|
||||||
- Sanity_devel
|
- Sanity_devel
|
||||||
- Remote_devel
|
- Remote_devel
|
||||||
- Docker_devel
|
- Docker_devel
|
||||||
|
|
|
||||||
13
README.md
13
README.md
|
|
@ -21,7 +21,7 @@ An Ansible Collection of modules and plugins that target POSIX UNIX/Linux and de
|
||||||
* Python:
|
* Python:
|
||||||
* The Python interpreter version must meet Ansible Core's requirements.
|
* The Python interpreter version must meet Ansible Core's requirements.
|
||||||
* Ansible Core:
|
* Ansible Core:
|
||||||
- ansible-core 2.15 or later
|
- ansible-core 2.16 or later
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
@ -46,10 +46,10 @@ To upgrade the collection to the latest available version, run the following com
|
||||||
ansible-galaxy collection install ansible.posix --upgrade
|
ansible-galaxy collection install ansible.posix --upgrade
|
||||||
```
|
```
|
||||||
|
|
||||||
You can also install a specific version of the collection, for example, if you need to downgrade when something is broken in the latest version (please report an issue in this repository). Use the following syntax to install version 1.0.0:
|
You can also install a specific version of the collection, for example, if you need to downgrade when something is broken in the latest version (please report an issue in this repository). Use the following syntax to install version 2.0.0:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
ansible-galaxy collection install ansible.posix:==1.0.0
|
ansible-galaxy collection install ansible.posix:==2.0.0
|
||||||
```
|
```
|
||||||
|
|
||||||
See [using Ansible collections](https://docs.ansible.com/ansible/devel/user_guide/collections_using.html) for more details.
|
See [using Ansible collections](https://docs.ansible.com/ansible/devel/user_guide/collections_using.html) for more details.
|
||||||
|
|
@ -78,11 +78,10 @@ ansible-doc -t callback ansible.posix.profile_tasks
|
||||||
|
|
||||||
The following ansible-core versions have been tested with this collection:
|
The following ansible-core versions have been tested with this collection:
|
||||||
|
|
||||||
- ansible-core 2.19 (devel)
|
- ansible-core 2.20 (devel)
|
||||||
- ansible-core 2.18 (stable) *
|
- ansible-core 2.19 (stable) *
|
||||||
|
- ansible-core 2.18 (stable)
|
||||||
- ansible-core 2.17 (stable)
|
- ansible-core 2.17 (stable)
|
||||||
- ansible-core 2.16 (stable)
|
|
||||||
- ansible-core 2.15 (stable)
|
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
|
|
|
||||||
3
changelogs/fragments/569_keep_mountpoint.yml
Normal file
3
changelogs/fragments/569_keep_mountpoint.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
minor_changes:
|
||||||
|
- keep_mountpoint - added keep_mountpoint option with default value false. If set to true keep_mountpoint changes the behaviour of state\: absent by keeping the mountpoint.
|
||||||
2
changelogs/fragments/650-profile_tasks_roles.yml
Normal file
2
changelogs/fragments/650-profile_tasks_roles.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- "profile_tasks and profile_roles callback plugins - avoid deleted/deprecated callback functions, instead use modern interface that was introduced a longer time ago (https://github.com/ansible-collections/ansible.posix/issues/650)."
|
||||||
3
changelogs/fragments/654_ci_bump_core_version.yml
Normal file
3
changelogs/fragments/654_ci_bump_core_version.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
trivial:
|
||||||
|
- Bump ansible-core version to 2.20 of devel branch and add 2.19 to CI
|
||||||
2
changelogs/fragments/660_ci_azp_syntax.yml
Normal file
2
changelogs/fragments/660_ci_azp_syntax.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
trivial:
|
||||||
|
- AZP - fixed syntax error in CI test.
|
||||||
3
changelogs/fragments/665_update_readme_20250728.yml
Normal file
3
changelogs/fragments/665_update_readme_20250728.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
trivial:
|
||||||
|
- README - Update README to reflect Ansible Core 2.19 release.
|
||||||
3
changelogs/fragments/666_azp_update_20250728.yml
Normal file
3
changelogs/fragments/666_azp_update_20250728.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
trivial:
|
||||||
|
- AZP - Update AZP matrix to follow ansible-test changes.
|
||||||
3
changelogs/fragments/670-deprecations.yml
Normal file
3
changelogs/fragments/670-deprecations.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
bugfixes:
|
||||||
|
- "firewalld_info - stop returning warnings as return values; this has been deprecated by ansible-core (https://github.com/ansible-collections/ansible.posix/pull/670)."
|
||||||
|
- "mount - stop returning warnings as return values; this has been deprecated by ansible-core (https://github.com/ansible-collections/ansible.posix/pull/670)."
|
||||||
2
changelogs/fragments/673_update_ci_20250805.yml
Normal file
2
changelogs/fragments/673_update_ci_20250805.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
trivial:
|
||||||
|
- Update AZP CI matrix (https://github.com/ansible-collections/ansible.posix/issues/673).
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
---
|
---
|
||||||
requires_ansible: ">=2.15.0"
|
requires_ansible: ">=2.16.0"
|
||||||
|
|
|
||||||
|
|
@ -124,10 +124,7 @@ class CallbackModule(CallbackBase):
|
||||||
def v2_playbook_on_handler_task_start(self, task):
|
def v2_playbook_on_handler_task_start(self, task):
|
||||||
self._record_task(task)
|
self._record_task(task)
|
||||||
|
|
||||||
def playbook_on_setup(self):
|
def v2_playbook_on_stats(self, stats):
|
||||||
self._display_tasktime()
|
|
||||||
|
|
||||||
def playbook_on_stats(self, stats):
|
|
||||||
# Align summary report header with other callback plugin summary
|
# Align summary report header with other callback plugin summary
|
||||||
self._display.banner("ROLES RECAP")
|
self._display.banner("ROLES RECAP")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -209,10 +209,7 @@ class CallbackModule(CallbackBase):
|
||||||
def v2_playbook_on_handler_task_start(self, task):
|
def v2_playbook_on_handler_task_start(self, task):
|
||||||
self._record_task(task)
|
self._record_task(task)
|
||||||
|
|
||||||
def playbook_on_setup(self):
|
def v2_playbook_on_stats(self, stats):
|
||||||
self._display_tasktime()
|
|
||||||
|
|
||||||
def playbook_on_stats(self, stats):
|
|
||||||
# Align summary report header with other callback plugin summary
|
# Align summary report header with other callback plugin summary
|
||||||
self._display.banner("TASKS RECAP")
|
self._display.banner("TASKS RECAP")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -319,7 +319,6 @@ def main():
|
||||||
active_zones=module.params['active_zones'],
|
active_zones=module.params['active_zones'],
|
||||||
collected_zones=list(),
|
collected_zones=list(),
|
||||||
undefined_zones=list(),
|
undefined_zones=list(),
|
||||||
warnings=list(),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Exit with failure message if requirements modules are not installed.
|
# Exit with failure message if requirements modules are not installed.
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,8 @@ options:
|
||||||
real source. V(absent) does not unmount recursively, and the module will
|
real source. V(absent) does not unmount recursively, and the module will
|
||||||
fail if multiple devices are mounted on the same mount point. Using
|
fail if multiple devices are mounted on the same mount point. Using
|
||||||
V(absent) with a mount point that is not registered in the I(fstab) has
|
V(absent) with a mount point that is not registered in the I(fstab) has
|
||||||
no effect, use V(unmounted) instead.
|
no effect, use V(unmounted) instead. You can set O(keep_mountpoint) to
|
||||||
|
True to keep the mountpoint.
|
||||||
- V(remounted) specifies that the device will be remounted for when you
|
- V(remounted) specifies that the device will be remounted for when you
|
||||||
want to force a refresh on the mount itself (added in 2.9). This will
|
want to force a refresh on the mount itself (added in 2.9). This will
|
||||||
always return RV(ignore:changed=true). If O(opts) is set, the options will be
|
always return RV(ignore:changed=true). If O(opts) is set, the options will be
|
||||||
|
|
@ -132,6 +133,16 @@ options:
|
||||||
the original file back if you somehow clobbered it incorrectly.
|
the original file back if you somehow clobbered it incorrectly.
|
||||||
type: bool
|
type: bool
|
||||||
default: false
|
default: false
|
||||||
|
keep_mountpoint:
|
||||||
|
description:
|
||||||
|
- Change the default behaviour of state=absent by keeping the mountpoint
|
||||||
|
- With keep_mountpoint=true, state=absent is like unmounted plus the
|
||||||
|
fstab update.
|
||||||
|
- Use it if you care about finding original mountpoint content without failing
|
||||||
|
and want to remove the entry in fstab. If you have no entry to clean in
|
||||||
|
fstab you can use state=unmounted
|
||||||
|
type: bool
|
||||||
|
default: false
|
||||||
notes:
|
notes:
|
||||||
- As of Ansible 2.3, the O(name) option has been changed to O(path) as
|
- As of Ansible 2.3, the O(name) option has been changed to O(path) as
|
||||||
default, but O(name) still works as well.
|
default, but O(name) still works as well.
|
||||||
|
|
@ -175,6 +186,23 @@ EXAMPLES = r'''
|
||||||
path: /tmp/mnt-pnt
|
path: /tmp/mnt-pnt
|
||||||
state: remounted
|
state: remounted
|
||||||
|
|
||||||
|
# The following will fail on first run
|
||||||
|
# if /home/mydir is not empty after unmounting,
|
||||||
|
# though unmount and remove from fstab are successfull.
|
||||||
|
# It will be successfull on subsequent runs (already unmounted).
|
||||||
|
- name: Unmount and remove from fstab, then if unmount was necessary try to remove mountpoint /home/mydir
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /home/mydir
|
||||||
|
state: absent
|
||||||
|
# The following will not fail on first run
|
||||||
|
# if /home/mydir is not empty after unmounting.
|
||||||
|
# It will leave /home/mydir and its content (if any) after unmounting.
|
||||||
|
- name: Unmount and remove from fstab, but keep /home/mydir
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /home/mydir
|
||||||
|
state: absent
|
||||||
|
keep_mountpoint: true
|
||||||
|
|
||||||
# The following will not save changes to fstab, and only be temporary until
|
# The following will not save changes to fstab, and only be temporary until
|
||||||
# a reboot, or until calling "state: unmounted" followed by "state: mounted"
|
# a reboot, or until calling "state: unmounted" followed by "state: mounted"
|
||||||
# on the same "path"
|
# on the same "path"
|
||||||
|
|
@ -279,7 +307,7 @@ def _set_mount_save_old(module, args):
|
||||||
old_lines = []
|
old_lines = []
|
||||||
exists = False
|
exists = False
|
||||||
changed = False
|
changed = False
|
||||||
escaped_args = dict([(k, _escape_fstab(v)) for k, v in iteritems(args) if k != 'warnings'])
|
escaped_args = dict([(k, _escape_fstab(v)) for k, v in iteritems(args)])
|
||||||
new_line = '%(src)s %(name)s %(fstype)s %(opts)s %(dump)s %(passno)s\n'
|
new_line = '%(src)s %(name)s %(fstype)s %(opts)s %(dump)s %(passno)s\n'
|
||||||
|
|
||||||
if platform.system() == 'SunOS':
|
if platform.system() == 'SunOS':
|
||||||
|
|
@ -779,6 +807,7 @@ def main():
|
||||||
src=dict(type='path'),
|
src=dict(type='path'),
|
||||||
backup=dict(type='bool', default=False),
|
backup=dict(type='bool', default=False),
|
||||||
state=dict(type='str', required=True, choices=['absent', 'absent_from_fstab', 'mounted', 'present', 'unmounted', 'remounted', 'ephemeral']),
|
state=dict(type='str', required=True, choices=['absent', 'absent_from_fstab', 'mounted', 'present', 'unmounted', 'remounted', 'ephemeral']),
|
||||||
|
keep_mountpoint=dict(type='bool', default=False),
|
||||||
),
|
),
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
required_if=(
|
required_if=(
|
||||||
|
|
@ -804,7 +833,6 @@ def main():
|
||||||
passno='-',
|
passno='-',
|
||||||
fstab=module.params['fstab'],
|
fstab=module.params['fstab'],
|
||||||
boot='yes' if module.params['boot'] else 'no',
|
boot='yes' if module.params['boot'] else 'no',
|
||||||
warnings=[]
|
|
||||||
)
|
)
|
||||||
if args['fstab'] is None:
|
if args['fstab'] is None:
|
||||||
args['fstab'] = '/etc/vfstab'
|
args['fstab'] = '/etc/vfstab'
|
||||||
|
|
@ -816,7 +844,6 @@ def main():
|
||||||
passno='0',
|
passno='0',
|
||||||
fstab=module.params['fstab'],
|
fstab=module.params['fstab'],
|
||||||
boot='yes',
|
boot='yes',
|
||||||
warnings=[]
|
|
||||||
)
|
)
|
||||||
if args['fstab'] is None:
|
if args['fstab'] is None:
|
||||||
args['fstab'] = '/etc/fstab'
|
args['fstab'] = '/etc/fstab'
|
||||||
|
|
@ -834,8 +861,7 @@ def main():
|
||||||
linux_mounts = get_linux_mounts(module)
|
linux_mounts = get_linux_mounts(module)
|
||||||
|
|
||||||
if linux_mounts is None:
|
if linux_mounts is None:
|
||||||
args['warnings'].append('Cannot open file /proc/self/mountinfo.'
|
module.warn('Cannot open file /proc/self/mountinfo. Bind mounts might be misinterpreted.')
|
||||||
' Bind mounts might be misinterpreted.')
|
|
||||||
|
|
||||||
# Override defaults with user specified params
|
# Override defaults with user specified params
|
||||||
for key in ('src', 'fstype', 'passno', 'opts', 'dump', 'fstab'):
|
for key in ('src', 'fstype', 'passno', 'opts', 'dump', 'fstab'):
|
||||||
|
|
@ -847,7 +873,7 @@ def main():
|
||||||
# specified in 'opts', mount module will ignore 'boot'.
|
# specified in 'opts', mount module will ignore 'boot'.
|
||||||
opts = args['opts'].split(',')
|
opts = args['opts'].split(',')
|
||||||
if module.params['boot'] and 'noauto' in opts:
|
if module.params['boot'] and 'noauto' in opts:
|
||||||
args['warnings'].append("Ignore the 'boot' due to 'opts' contains 'noauto'.")
|
module.warn("Ignore the 'boot' due to 'opts' contains 'noauto'.")
|
||||||
elif not module.params['boot']:
|
elif not module.params['boot']:
|
||||||
args['boot'] = 'no'
|
args['boot'] = 'no'
|
||||||
opts.append('noauto')
|
opts.append('noauto')
|
||||||
|
|
@ -896,7 +922,7 @@ def main():
|
||||||
module.fail_json(
|
module.fail_json(
|
||||||
msg="Error unmounting %s: %s" % (name, msg))
|
msg="Error unmounting %s: %s" % (name, msg))
|
||||||
|
|
||||||
if os.path.exists(name):
|
if os.path.exists(name) and module.params['keep_mountpoint'] is False:
|
||||||
try:
|
try:
|
||||||
os.rmdir(name)
|
os.rmdir(name)
|
||||||
except (OSError, IOError) as e:
|
except (OSError, IOError) as e:
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
needs/privileged
|
||||||
|
needs/root
|
||||||
destructive
|
destructive
|
||||||
shippable/posix/group1
|
shippable/posix/group1
|
||||||
skip/aix
|
skip/aix
|
||||||
|
|
|
||||||
|
|
@ -1132,3 +1132,85 @@
|
||||||
loop:
|
loop:
|
||||||
- /tmp/myfs.img
|
- /tmp/myfs.img
|
||||||
- /tmp/myfs
|
- /tmp/myfs
|
||||||
|
|
||||||
|
- name: Block to test keep_mountpoint option
|
||||||
|
block:
|
||||||
|
- name: Create the mount point
|
||||||
|
ansible.builtin.file:
|
||||||
|
state: directory
|
||||||
|
path: '/tmp/myfs'
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Create empty file for FS aaa
|
||||||
|
community.general.filesize:
|
||||||
|
path: /tmp/myfs.img
|
||||||
|
size: 20M
|
||||||
|
|
||||||
|
- name: Format FS bbb
|
||||||
|
community.general.filesystem:
|
||||||
|
fstype: xfs
|
||||||
|
dev: /tmp/myfs.img
|
||||||
|
|
||||||
|
- name: Put data in the mount point before mounting
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: 'Testing
|
||||||
|
This is the data before mounting
|
||||||
|
'
|
||||||
|
dest: '/tmp/myfs/test_file'
|
||||||
|
mode: '0644'
|
||||||
|
register: file_before_info
|
||||||
|
|
||||||
|
- name: Mount with fstab
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: '/tmp/myfs'
|
||||||
|
fstype: xfs
|
||||||
|
state: mounted
|
||||||
|
src: '/tmp/myfs.img'
|
||||||
|
|
||||||
|
- name: Check data disappears - stat data
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: '/tmp/myfs/test_file'
|
||||||
|
register: file_stat_after_mount
|
||||||
|
- name: Check data disappears - file does not exist
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- file_stat_after_mount['stat']['exists'] == false
|
||||||
|
- name: Put data in the mount point after mounting
|
||||||
|
ansible.builtin.copy:
|
||||||
|
content: 'Testing
|
||||||
|
This is the data updated after mounting
|
||||||
|
'
|
||||||
|
dest: '/tmp/myfs/test_file'
|
||||||
|
mode: '0644'
|
||||||
|
register: file_after_info
|
||||||
|
- name: Umount with keep_mountpoint
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: '/tmp/myfs'
|
||||||
|
fstype: xfs
|
||||||
|
state: absent
|
||||||
|
keep_mountpoint: true
|
||||||
|
- name: Check original data reappears - stat data
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: '/tmp/myfs/test_file'
|
||||||
|
register: file_stat_after_umount
|
||||||
|
- name: Check original data reappears - compare checksums
|
||||||
|
ansible.builtin.assert:
|
||||||
|
that:
|
||||||
|
- file_stat_after_umount['stat']['checksum'] == file_before_info['checksum']
|
||||||
|
always:
|
||||||
|
- name: Remove the first test file
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /tmp/myfs/test_file
|
||||||
|
state: absent
|
||||||
|
- name: Unmount FS
|
||||||
|
ansible.posix.mount:
|
||||||
|
path: /tmp/myfs
|
||||||
|
state: absent
|
||||||
|
- name: Remove the test FS and the second test file
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: '{{ item }}'
|
||||||
|
state: absent
|
||||||
|
loop:
|
||||||
|
- /tmp/myfs/test_file
|
||||||
|
- /tmp/myfs.img
|
||||||
|
- /tmp/myfs
|
||||||
|
|
|
||||||
1
tests/sanity/ignore-2.20.txt
Normal file
1
tests/sanity/ignore-2.20.txt
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
tests/utils/shippable/timing.py shebang
|
||||||
Loading…
Reference in a new issue