mirror of
https://github.com/ansible-collections/ansible.posix.git
synced 2026-01-11 15:15:26 +01:00
Compare commits
19 commits
41ebff5be3
...
91e9657a42
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
91e9657a42 | ||
|
|
12a1c25f5e | ||
|
|
7062be892e | ||
|
|
20c2c30d23 | ||
|
|
4f1e6b4a6d | ||
|
|
806ab9ef9d | ||
|
|
99585a9696 | ||
|
|
c7d610b662 | ||
|
|
8788d4d103 | ||
|
|
12d3db3414 | ||
|
|
a18fce2f3a | ||
|
|
b8fcfdd247 | ||
|
|
faf1ea4132 | ||
|
|
3206c5c1b7 | ||
|
|
17f8c02361 | ||
|
|
ceaee68c85 | ||
|
|
09299f1b9a | ||
|
|
a699771c87 | ||
|
|
269c66fbdb |
7 changed files with 125 additions and 46 deletions
|
|
@ -53,8 +53,8 @@ stages:
|
||||||
targets:
|
targets:
|
||||||
- name: CentOS 7
|
- name: CentOS 7
|
||||||
test: centos7
|
test: centos7
|
||||||
- name: Fedora 37
|
- name: Fedora 38
|
||||||
test: fedora37
|
test: fedora38
|
||||||
- name: openSUSE 15 py3
|
- name: openSUSE 15 py3
|
||||||
test: opensuse15
|
test: opensuse15
|
||||||
- name: Ubuntu 20.04
|
- name: Ubuntu 20.04
|
||||||
|
|
@ -213,14 +213,14 @@ stages:
|
||||||
test: macos/13.2
|
test: macos/13.2
|
||||||
- name: RHEL 7.9
|
- name: RHEL 7.9
|
||||||
test: rhel/7.9
|
test: rhel/7.9
|
||||||
- name: RHEL 8.7
|
- name: RHEL 8.8
|
||||||
test: rhel/8.7
|
test: rhel/8.8
|
||||||
- name: RHEL 9.1
|
- name: RHEL 9.2
|
||||||
test: rhel/9.1
|
test: rhel/9.2
|
||||||
- name: FreeBSD 12.4
|
- name: FreeBSD 12.4
|
||||||
test: freebsd/12.4
|
test: freebsd/12.4
|
||||||
- name: FreeBSD 13.1
|
- name: FreeBSD 13.2
|
||||||
test: freebsd/13.1
|
test: freebsd/13.2
|
||||||
- stage: Remote_2_15
|
- stage: Remote_2_15
|
||||||
displayName: Remote 2.15
|
displayName: Remote 2.15
|
||||||
dependsOn: []
|
dependsOn: []
|
||||||
|
|
|
||||||
2
changelogs/fragments/102_module_at_add_chdir_option.yml
Normal file
2
changelogs/fragments/102_module_at_add_chdir_option.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- at - add option ``chdir`` to permit to launch the ``at`` command from a specific directory (https://github.com/ansible-collections/ansible.posix/issues/13).
|
||||||
3
changelogs/fragments/477_ci_update.yml
Normal file
3
changelogs/fragments/477_ci_update.yml
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
---
|
||||||
|
trivial:
|
||||||
|
- "Drop Python3.9 and update versions of RHEL,Fedora and FreeBSD for ansible-core:devel test(https://github.com/ansible-collections/ansible.posix/issues/476)."
|
||||||
|
|
@ -17,6 +17,12 @@ description:
|
||||||
- All jobs are executed in the 'a' queue.
|
- All jobs are executed in the 'a' queue.
|
||||||
version_added: "1.0.0"
|
version_added: "1.0.0"
|
||||||
options:
|
options:
|
||||||
|
chdir:
|
||||||
|
description:
|
||||||
|
- An optional location from where to run the command C(at).
|
||||||
|
- Useful for instance when running a playbook using ansible-pull with C(purge) option.
|
||||||
|
type: path
|
||||||
|
version_added: 1.3.0
|
||||||
command:
|
command:
|
||||||
description:
|
description:
|
||||||
- A command to be executed in the future.
|
- A command to be executed in the future.
|
||||||
|
|
@ -78,32 +84,32 @@ import tempfile
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
|
||||||
|
|
||||||
def add_job(module, result, at_cmd, count, units, command, script_file):
|
def add_job(module, result, at_cmd, count, units, command, script_file, chdir=None):
|
||||||
at_command = "%s -f %s now + %s %s" % (at_cmd, script_file, count, units)
|
at_command = "%s -f %s now + %s %s" % (at_cmd, script_file, count, units)
|
||||||
rc, out, err = module.run_command(at_command, check_rc=True)
|
rc, out, err = module.run_command(at_command, cwd=chdir, check_rc=True)
|
||||||
if command:
|
if command:
|
||||||
os.unlink(script_file)
|
os.unlink(script_file)
|
||||||
result['changed'] = True
|
result['changed'] = True
|
||||||
|
|
||||||
|
|
||||||
def delete_job(module, result, at_cmd, command, script_file):
|
def delete_job(module, result, at_cmd, command, script_file, chdir=None):
|
||||||
for matching_job in get_matching_jobs(module, at_cmd, script_file):
|
for matching_job in get_matching_jobs(module, at_cmd, script_file):
|
||||||
at_command = "%s -r %s" % (at_cmd, matching_job)
|
at_command = "%s -r %s" % (at_cmd, matching_job)
|
||||||
rc, out, err = module.run_command(at_command, check_rc=True)
|
rc, out, err = module.run_command(at_command, cwd=chdir, check_rc=True)
|
||||||
result['changed'] = True
|
result['changed'] = True
|
||||||
if command:
|
if command:
|
||||||
os.unlink(script_file)
|
os.unlink(script_file)
|
||||||
module.exit_json(**result)
|
module.exit_json(**result)
|
||||||
|
|
||||||
|
|
||||||
def get_matching_jobs(module, at_cmd, script_file):
|
def get_matching_jobs(module, at_cmd, script_file, chdir=None):
|
||||||
matching_jobs = []
|
matching_jobs = []
|
||||||
|
|
||||||
atq_cmd = module.get_bin_path('atq', True)
|
atq_cmd = module.get_bin_path('atq', True)
|
||||||
|
|
||||||
# Get list of job numbers for the user.
|
# Get list of job numbers for the user.
|
||||||
atq_command = "%s" % atq_cmd
|
atq_command = "%s" % atq_cmd
|
||||||
rc, out, err = module.run_command(atq_command, check_rc=True)
|
rc, out, err = module.run_command(atq_command, cwd=chdir, check_rc=True)
|
||||||
current_jobs = out.splitlines()
|
current_jobs = out.splitlines()
|
||||||
if len(current_jobs) == 0:
|
if len(current_jobs) == 0:
|
||||||
return matching_jobs
|
return matching_jobs
|
||||||
|
|
@ -118,7 +124,7 @@ def get_matching_jobs(module, at_cmd, script_file):
|
||||||
split_current_job = current_job.split()
|
split_current_job = current_job.split()
|
||||||
at_opt = '-c' if platform.system() != 'AIX' else '-lv'
|
at_opt = '-c' if platform.system() != 'AIX' else '-lv'
|
||||||
at_command = "%s %s %s" % (at_cmd, at_opt, split_current_job[0])
|
at_command = "%s %s %s" % (at_cmd, at_opt, split_current_job[0])
|
||||||
rc, out, err = module.run_command(at_command, check_rc=True)
|
rc, out, err = module.run_command(at_command, cwd=chdir, check_rc=True)
|
||||||
if script_file_string in out:
|
if script_file_string in out:
|
||||||
matching_jobs.append(split_current_job[0])
|
matching_jobs.append(split_current_job[0])
|
||||||
|
|
||||||
|
|
@ -139,6 +145,7 @@ def main():
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec=dict(
|
argument_spec=dict(
|
||||||
command=dict(type='str'),
|
command=dict(type='str'),
|
||||||
|
chdir=dict(type='path'),
|
||||||
script_file=dict(type='str'),
|
script_file=dict(type='str'),
|
||||||
count=dict(type='int'),
|
count=dict(type='int'),
|
||||||
units=dict(type='str', choices=['minutes', 'hours', 'days', 'weeks']),
|
units=dict(type='str', choices=['minutes', 'hours', 'days', 'weeks']),
|
||||||
|
|
@ -152,6 +159,7 @@ def main():
|
||||||
|
|
||||||
at_cmd = module.get_bin_path('at', True)
|
at_cmd = module.get_bin_path('at', True)
|
||||||
|
|
||||||
|
chdir = module.params['chdir']
|
||||||
command = module.params['command']
|
command = module.params['command']
|
||||||
script_file = module.params['script_file']
|
script_file = module.params['script_file']
|
||||||
count = module.params['count']
|
count = module.params['count']
|
||||||
|
|
@ -173,7 +181,7 @@ def main():
|
||||||
|
|
||||||
# if absent remove existing and return
|
# if absent remove existing and return
|
||||||
if state == 'absent':
|
if state == 'absent':
|
||||||
delete_job(module, result, at_cmd, command, script_file)
|
delete_job(module, result, at_cmd, command, script_file, chdir=chdir)
|
||||||
|
|
||||||
# if unique if existing return unchanged
|
# if unique if existing return unchanged
|
||||||
if unique:
|
if unique:
|
||||||
|
|
@ -186,7 +194,7 @@ def main():
|
||||||
result['count'] = count
|
result['count'] = count
|
||||||
result['units'] = units
|
result['units'] = units
|
||||||
|
|
||||||
add_job(module, result, at_cmd, count, units, command, script_file)
|
add_job(module, result, at_cmd, count, units, command, script_file, chdir=chdir)
|
||||||
|
|
||||||
module.exit_json(**result)
|
module.exit_json(**result)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,2 @@
|
||||||
shippable/posix/group1
|
shippable/posix/group1
|
||||||
destructive
|
destructive
|
||||||
disabled # fixme package
|
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
# 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/>.
|
||||||
|
|
||||||
|
|
||||||
- set_fact: output_dir_test={{output_dir}}/at
|
- 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
|
||||||
|
|
@ -28,35 +29,103 @@
|
||||||
## at
|
## at
|
||||||
##
|
##
|
||||||
|
|
||||||
- name: define distros to attempt installing at on
|
- name: Run At tests
|
||||||
set_fact:
|
block:
|
||||||
package_distros:
|
- name: define distros to attempt installing at on
|
||||||
- RedHat
|
set_fact:
|
||||||
- CentOS
|
package_distros:
|
||||||
- ScientificLinux
|
- RedHat
|
||||||
- Fedora
|
- CentOS
|
||||||
- Ubuntu
|
- ScientificLinux
|
||||||
- Debian
|
- Fedora
|
||||||
- openSUSE Leap
|
- Ubuntu
|
||||||
|
- Debian
|
||||||
|
- openSUSE Leap
|
||||||
|
|
||||||
- name: ensure at is installed
|
- name: ensure at is installed
|
||||||
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
|
||||||
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
|
||||||
- debug: var=at_test0
|
|
||||||
- name: validate results
|
- debug: var=at_test0
|
||||||
assert:
|
|
||||||
that:
|
- name: validate results
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
- 'at_test0.changed is defined'
|
- 'at_test0.changed is defined'
|
||||||
- 'at_test0.count is defined'
|
- 'at_test0.count is defined'
|
||||||
- 'at_test0.script_file is defined'
|
- 'at_test0.script_file is defined'
|
||||||
- 'at_test0.state is defined'
|
- 'at_test0.state is defined'
|
||||||
- 'at_test0.units is defined'
|
- 'at_test0.units is defined'
|
||||||
|
|
||||||
|
- name: Add a useless command using at
|
||||||
|
at:
|
||||||
|
command: /bin/logger 'AT task ran from Ansible'
|
||||||
|
count: 1
|
||||||
|
units: minutes
|
||||||
|
unique: yes
|
||||||
|
register: at_add
|
||||||
|
|
||||||
|
- debug: var=at_add
|
||||||
|
|
||||||
|
- name: Wait for at to run the previous command
|
||||||
|
pause:
|
||||||
|
minutes: 1
|
||||||
|
|
||||||
|
- name: Add a useless command
|
||||||
|
at:
|
||||||
|
command: /bin/logger 'AT task ran from Ansible'
|
||||||
|
count: 1
|
||||||
|
units: minutes
|
||||||
|
unique: true
|
||||||
|
state: absent
|
||||||
|
register: at_removal
|
||||||
|
|
||||||
|
- debug: var=at_removal
|
||||||
|
|
||||||
|
- name: Wait for at to run the previous command
|
||||||
|
pause:
|
||||||
|
minutes: 1
|
||||||
|
|
||||||
|
- name: Validate results
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- at_add is changed
|
||||||
|
- at_removal is changed
|
||||||
|
|
||||||
|
- name: Create an at command with chdir with valid value
|
||||||
|
at:
|
||||||
|
command: /bin/logger 'AT task ran from Ansible with chdir'
|
||||||
|
count: 1
|
||||||
|
units: minutes
|
||||||
|
chdir: /tmp
|
||||||
|
register: at_chdir_valid
|
||||||
|
- debug: var=at_chdir_valid
|
||||||
|
|
||||||
|
- name: Create an at command with chdir with invalid value
|
||||||
|
at:
|
||||||
|
command: /bin/logger 'AT task ran from Ansible with chdir'
|
||||||
|
count: 1
|
||||||
|
units: minutes
|
||||||
|
chdir: /invalid
|
||||||
|
register: at_chdir_invalid
|
||||||
|
ignore_errors: true
|
||||||
|
|
||||||
|
- debug: var=at_chdir_invalid
|
||||||
|
|
||||||
|
- name: Validate results
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- at_chdir_valid is changed
|
||||||
|
- at_chdir_invalid is changed
|
||||||
|
when:
|
||||||
|
- not (ansible_facts['distribution'] in ('Ubuntu','FreeBSD'))
|
||||||
|
- not (ansible_distribution == "CentOS" and ansible_distribution_version is version('6', '=='))
|
||||||
|
|
@ -145,9 +145,7 @@ function cleanup
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${process_coverage}" ]; then
|
if [ "${process_coverage}" ]; then
|
||||||
# use python 3.9 for coverage to avoid running out of memory during coverage xml processing
|
python3 -m venv ~/ansible-venv
|
||||||
# only use it for coverage to avoid the additional overhead of setting up a virtual environment for a potential no-op job
|
|
||||||
virtualenv --python /usr/bin/python3.9 ~/ansible-venv
|
|
||||||
set +ux
|
set +ux
|
||||||
. ~/ansible-venv/bin/activate
|
. ~/ansible-venv/bin/activate
|
||||||
set -ux
|
set -ux
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue