mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-08 22:30:04 -07:00
Add new modules rundeck_job_run and rundeck_job_executions_info (#3521)
* Add new module rundeck_job_run * Add new module rundeck_job_executions_info * Removed supports_check_mode * Fix supports_check_mode * Fix version_added * Fixes for PR#3521 * Fix default value for loglevel in the doc * Fix job_status_check loop * Add proposed changes in PR#3521 * Add proposed changes in PR#3521 * Change executions_info output to executions * Add rundeck integration tests * Fix rundeck integration test * Add more tests to rundeck integration tests * Update job_options doc * Add more tests to rundeck integration tests * Add more examples to rundeck_job_run doc * Add proposed fixes for PR#3521 * Add proposed fixes for PR#3521 * Fix job_options * Add proposed changes for PR#3521
This commit is contained in:
parent
8ece0d3609
commit
9772485d3c
17 changed files with 841 additions and 0 deletions
8
tests/integration/targets/rundeck/aliases
Normal file
8
tests/integration/targets/rundeck/aliases
Normal file
|
@ -0,0 +1,8 @@
|
|||
destructive
|
||||
shippable/posix/group1
|
||||
skip/aix
|
||||
skip/osx
|
||||
skip/macos
|
||||
skip/windows
|
||||
skip/freebsd
|
||||
unsupported
|
3
tests/integration/targets/rundeck/defaults/main.yml
Normal file
3
tests/integration/targets/rundeck/defaults/main.yml
Normal file
|
@ -0,0 +1,3 @@
|
|||
rundeck_url: http://localhost:4440
|
||||
rundeck_api_version: 39
|
||||
rundeck_job_id: 3b8a6e54-69fb-42b7-b98f-f82e59238478
|
23
tests/integration/targets/rundeck/files/test_job.yaml
Normal file
23
tests/integration/targets/rundeck/files/test_job.yaml
Normal file
|
@ -0,0 +1,23 @@
|
|||
- defaultTab: nodes
|
||||
description: ''
|
||||
executionEnabled: true
|
||||
id: 3b8a6e54-69fb-42b7-b98f-f82e59238478
|
||||
loglevel: INFO
|
||||
name: test_job
|
||||
nodeFilterEditable: false
|
||||
options:
|
||||
- label: Exit Code
|
||||
name: exit_code
|
||||
value: '0'
|
||||
- label: Sleep
|
||||
name: sleep
|
||||
value: '1'
|
||||
plugins:
|
||||
ExecutionLifecycle: null
|
||||
scheduleEnabled: true
|
||||
sequence:
|
||||
commands:
|
||||
- exec: sleep $RD_OPTION_SLEEP && echo "Test done!" && exit $RD_OPTION_EXIT_CODE
|
||||
keepgoing: false
|
||||
strategy: node-first
|
||||
uuid: 3b8a6e54-69fb-42b7-b98f-f82e59238478
|
2
tests/integration/targets/rundeck/meta/main.yml
Normal file
2
tests/integration/targets/rundeck/meta/main.yml
Normal file
|
@ -0,0 +1,2 @@
|
|||
dependencies:
|
||||
- setup_rundeck
|
123
tests/integration/targets/rundeck/tasks/main.yml
Normal file
123
tests/integration/targets/rundeck/tasks/main.yml
Normal file
|
@ -0,0 +1,123 @@
|
|||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
|
||||
- name: Generate a Rundeck API Token
|
||||
ansible.builtin.command: java -jar {{ rdeck_base }}/rundeck-cli.jar tokens create -u admin -d 24h -r admin
|
||||
environment:
|
||||
RD_URL: "{{ rundeck_url }}"
|
||||
RD_USER: admin
|
||||
RD_PASSWORD: admin
|
||||
register: rundeck_api_token
|
||||
|
||||
- name: Create a Rundeck project
|
||||
community.general.rundeck_project:
|
||||
name: "test_project"
|
||||
api_version: "{{ rundeck_api_version }}"
|
||||
url: "{{ rundeck_url }}"
|
||||
token: "{{ rundeck_api_token.stdout_lines[-1] }}"
|
||||
state: present
|
||||
|
||||
- name: Copy test_job definition to /tmp
|
||||
copy:
|
||||
src: test_job.yaml
|
||||
dest: /tmp/test_job.yaml
|
||||
|
||||
- name: Create Rundeck job Test
|
||||
ansible.builtin.command: java -jar {{ rdeck_base }}/rundeck-cli.jar jobs load -f /tmp/test_job.yaml -F yaml -p test_project
|
||||
environment:
|
||||
RD_URL: "{{ rundeck_url }}"
|
||||
RD_USER: admin
|
||||
RD_PASSWORD: admin
|
||||
|
||||
- name: Wrong Rundeck API Token
|
||||
community.general.rundeck_job_run:
|
||||
url: "{{ rundeck_url }}"
|
||||
api_version: "{{ rundeck_api_version }}"
|
||||
api_token: wrong_token
|
||||
job_id: "{{ rundeck_job_id }}"
|
||||
ignore_errors: true
|
||||
register: rundeck_job_run_wrong_token
|
||||
|
||||
- name: Assert that Rundeck authorization failed
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- rundeck_job_run_wrong_token.msg == "Token authorization failed"
|
||||
|
||||
- name: Success run Rundeck job test_job
|
||||
community.general.rundeck_job_run:
|
||||
url: "{{ rundeck_url }}"
|
||||
api_version: "{{ rundeck_api_version }}"
|
||||
api_token: "{{ rundeck_api_token.stdout_lines[-1] }}"
|
||||
job_id: "{{ rundeck_job_id }}"
|
||||
register: rundeck_job_run_success
|
||||
|
||||
- name: Assert that Rundeck job test_job runs successfully
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- rundeck_job_run_success.execution_info.status == "succeeded"
|
||||
|
||||
- name: Fail run Rundeck job test_job
|
||||
community.general.rundeck_job_run:
|
||||
url: "{{ rundeck_url }}"
|
||||
api_version: "{{ rundeck_api_version }}"
|
||||
api_token: "{{ rundeck_api_token.stdout_lines[-1] }}"
|
||||
job_id: "{{ rundeck_job_id }}"
|
||||
job_options:
|
||||
exit_code: "1"
|
||||
ignore_errors: true
|
||||
register: rundeck_job_run_fail
|
||||
|
||||
- name: Assert that Rundeck job test_job failed
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- rundeck_job_run_fail.execution_info.status == "failed"
|
||||
|
||||
- name: Abort run Rundeck job test_job due timeout
|
||||
community.general.rundeck_job_run:
|
||||
url: "{{ rundeck_url }}"
|
||||
api_version: "{{ rundeck_api_version }}"
|
||||
api_token: "{{ rundeck_api_token.stdout_lines[-1] }}"
|
||||
job_id: "{{ rundeck_job_id }}"
|
||||
job_options:
|
||||
sleep: "5"
|
||||
wait_execution_timeout: 2
|
||||
abort_on_timeout: true
|
||||
ignore_errors: true
|
||||
register: rundeck_job_run_aborted
|
||||
|
||||
- name: Assert that Rundeck job test_job is aborted
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- rundeck_job_run_aborted.execution_info.status == "aborted"
|
||||
|
||||
- name: Fire-and-forget run Rundeck job test_job
|
||||
community.general.rundeck_job_run:
|
||||
url: "{{ rundeck_url }}"
|
||||
api_version: "{{ rundeck_api_version }}"
|
||||
api_token: "{{ rundeck_api_token.stdout_lines[-1] }}"
|
||||
job_id: "{{ rundeck_job_id }}"
|
||||
job_options:
|
||||
sleep: "5"
|
||||
wait_execution: False
|
||||
register: rundeck_job_run_forget
|
||||
|
||||
- name: Assert that Rundeck job test_job is running
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- rundeck_job_run_forget.execution_info.status == "running"
|
||||
|
||||
- name: Get Rundeck job test_job executions info
|
||||
community.general.rundeck_job_executions_info:
|
||||
url: "{{ rundeck_url }}"
|
||||
api_version: "{{ rundeck_api_version }}"
|
||||
api_token: "{{ rundeck_api_token.stdout_lines[-1] }}"
|
||||
job_id: "{{ rundeck_job_id }}"
|
||||
register: rundeck_job_executions_info
|
||||
|
||||
- name: Assert that Rundeck job executions info has 4 registers
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- rundeck_job_executions_info.paging.total | int == 4
|
|
@ -0,0 +1,2 @@
|
|||
rundeck_war_url: https://packagecloud.io/pagerduty/rundeck/packages/java/org.rundeck/rundeck-3.4.4-20210920.war/artifacts/rundeck-3.4.4-20210920.war/download
|
||||
rundeck_cli_url: https://github.com/rundeck/rundeck-cli/releases/download/v1.3.10/rundeck-cli-1.3.10-all.jar
|
0
tests/integration/targets/setup_rundeck/meta/main.yml
Normal file
0
tests/integration/targets/setup_rundeck/meta/main.yml
Normal file
37
tests/integration/targets/setup_rundeck/tasks/main.yml
Normal file
37
tests/integration/targets/setup_rundeck/tasks/main.yml
Normal file
|
@ -0,0 +1,37 @@
|
|||
---
|
||||
####################################################################
|
||||
# WARNING: These are designed specifically for Ansible tests #
|
||||
# and should not be used as examples of how to write Ansible roles #
|
||||
####################################################################
|
||||
|
||||
- name: Skip unsupported platforms
|
||||
meta: end_play
|
||||
when: ansible_distribution not in ['CentOS', 'Fedora', 'Debian', 'Ubuntu']
|
||||
|
||||
- name: Include OS-specific variables
|
||||
include_vars: '{{ ansible_os_family }}.yml'
|
||||
when: ansible_os_family in ['Debian', 'RedHat']
|
||||
|
||||
- name: Set Rundeck base dir
|
||||
set_fact:
|
||||
rdeck_base: /home/rundeck
|
||||
|
||||
- name: Install OpenJDK
|
||||
package:
|
||||
name: "{{ openjdk_pkg }}"
|
||||
state: present
|
||||
|
||||
- name: Install Rundeck
|
||||
shell: |
|
||||
mkdir -p $RDECK_BASE;
|
||||
curl -k -o $RDECK_BASE/rundeck.war -L '{{ rundeck_war_url }}';
|
||||
curl -k -o $RDECK_BASE/rundeck-cli.jar -L '{{ rundeck_cli_url }}'
|
||||
cd $RDECK_BASE;
|
||||
java -Xmx4g -jar rundeck.war &
|
||||
environment:
|
||||
RDECK_BASE: "{{ rdeck_base }}"
|
||||
|
||||
- name: Wait for Rundeck port 4440
|
||||
wait_for:
|
||||
host: localhost
|
||||
port: 4440
|
1
tests/integration/targets/setup_rundeck/vars/Debian.yml
Normal file
1
tests/integration/targets/setup_rundeck/vars/Debian.yml
Normal file
|
@ -0,0 +1 @@
|
|||
openjdk_pkg: openjdk-8-jre-headless
|
1
tests/integration/targets/setup_rundeck/vars/RedHat.yml
Normal file
1
tests/integration/targets/setup_rundeck/vars/RedHat.yml
Normal file
|
@ -0,0 +1 @@
|
|||
openjdk_pkg: java-1.8.0-openjdk
|
Loading…
Add table
Add a link
Reference in a new issue