mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-03 23:14:02 -07:00
pacemaker_cluster: enhancements and add unit tests (#10227)
* feat(initial): Add unit tests and rewrite pacemaker_cluster
This commit introduces unit tests and pacemaker_cluster module rewrite
to use the pacemaker module utils.
* feat(cleanup): Various fixes and add resource state
This commit migrates the pacemaker_cluster's cleanup state to the
pacemaker_resource module. Additionally, the unit tests for
pacemaker_cluster have been corrected to proper mock run command order.
* doc(botmeta): Add author to pacemaker_cluster
* style(whitespace): Cleanup test files
* refactor(cleanup): Remove unused state value
* bug(fix): Parse apply_all as separate option
* refactor(review): Apply code review suggestions
This commit refactors breaking changes in pacemaker_cluster module into
deprecated features. The following will be scheduled for deprecation:
`state: cleanup` and `state: None`.
* Apply suggestions from code review
* refactor(review): Additional review suggestions
* refactor(deprecations): Remove all deprecation changes
* refactor(review): Enhance rename changelog entry and fix empty string logic
* refactor(cleanup): Remove from pacemaker_resource
* Apply suggestions from code review
* refactor(review): Add changelog and revert required name
* revert(default): Use default state=present
* Update changelogs/fragments/10227-pacemaker-cluster-and-resource-enhancement.yml
* Update changelog fragment.
---------
(cherry picked from commit 283d947f17
)
Co-authored-by: Dexter <45038532+munchtoast@users.noreply.github.com>
Co-authored-by: Felix Fontein <felix@fontein.de>
383 lines
13 KiB
YAML
383 lines
13 KiB
YAML
# -*- coding: utf-8 -*-
|
|
# Copyright (c) Dexter Le (dextersydney2001@gmail.com)
|
|
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
---
|
|
anchors:
|
|
environ: &env-def {environ_update: {LANGUAGE: C, LC_ALL: C}, check_rc: false}
|
|
test_cases:
|
|
- id: test_missing_input
|
|
input: {}
|
|
output:
|
|
failed: true
|
|
msg: "missing required arguments: name"
|
|
- id: test_present_minimal_input_resource_not_exist
|
|
input:
|
|
state: present
|
|
name: virtual-ip
|
|
resource_type:
|
|
resource_name: IPaddr2
|
|
resource_option:
|
|
- "ip=[192.168.2.1]"
|
|
output:
|
|
changed: true
|
|
previous_value: null
|
|
value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- command: [/testbin/pcs, property, config]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: |
|
|
Cluster Properties: cib-bootstrap-options
|
|
cluster-infrastructure=corosync
|
|
cluster-name=hacluster
|
|
dc-version=2.1.9-1.fc41-7188dbf
|
|
have-watchdog=false
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, create, virtual-ip, IPaddr2, "ip=[192.168.2.1]", --wait=300]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: "Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPAddr2')"
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
err: ""
|
|
- id: test_present_filled_input_resource_not_exist
|
|
input:
|
|
state: present
|
|
name: virtual-ip
|
|
resource_type:
|
|
resource_name: IPaddr2
|
|
resource_option:
|
|
- "ip=[192.168.2.1]"
|
|
resource_operation:
|
|
- operation_action: start
|
|
operation_option:
|
|
- timeout=1200
|
|
- operation_action: stop
|
|
operation_option:
|
|
- timeout=1200
|
|
- operation_action: monitor
|
|
operation_option:
|
|
- timeout=1200
|
|
resource_meta:
|
|
- test_meta1=123
|
|
- test_meta2=456
|
|
resource_argument:
|
|
argument_action: group
|
|
argument_option:
|
|
- test_group
|
|
wait: 200
|
|
output:
|
|
changed: true
|
|
previous_value: null
|
|
value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- command: [/testbin/pcs, property, config]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: |
|
|
Cluster Properties: cib-bootstrap-options
|
|
cluster-infrastructure=corosync
|
|
cluster-name=hacluster
|
|
dc-version=2.1.9-1.fc41-7188dbf
|
|
have-watchdog=false
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, create, virtual-ip, IPaddr2, "ip=[192.168.2.1]", op, start, timeout=1200, op, stop, timeout=1200, op, monitor, timeout=1200, meta, test_meta1=123, meta, test_meta2=456, --group, test_group, --wait=200]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: "Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPAddr2')"
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
err: ""
|
|
- id: test_present_minimal_input_resource_exists
|
|
input:
|
|
state: present
|
|
name: virtual-ip
|
|
resource_type:
|
|
resource_name: IPaddr2
|
|
resource_option:
|
|
- "ip=[192.168.2.1]"
|
|
output:
|
|
changed: false
|
|
previous_value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
err: ""
|
|
- command: [/testbin/pcs, property, config]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: |
|
|
Cluster Properties: cib-bootstrap-options
|
|
cluster-infrastructure=corosync
|
|
cluster-name=hacluster
|
|
dc-version=2.1.9-1.fc41-7188dbf
|
|
have-watchdog=false
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, create, virtual-ip, IPaddr2, "ip=[192.168.2.1]", --wait=300]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: 'virtual-ip' already exists\n"
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
err: ""
|
|
- id: test_present_minimal_input_resource_maintenance_mode
|
|
input:
|
|
state: present
|
|
name: virtual-ip
|
|
resource_type:
|
|
resource_name: IPaddr2
|
|
resource_option:
|
|
- "ip=[192.168.2.1]"
|
|
output:
|
|
changed: true
|
|
previous_value: null
|
|
value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Stopped"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: ""
|
|
- command: [/testbin/pcs, property, config]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: |
|
|
Cluster Properties: cib-bootstrap-options
|
|
cluster-infrastructure=corosync
|
|
cluster-name=hacluster
|
|
dc-version=2.1.9-1.fc41-7188dbf
|
|
have-watchdog=false
|
|
maintenance-mode=true
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, create, virtual-ip, IPaddr2, "ip=[192.168.2.1]", --wait=300]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource 'virtual-ip' is not running on any node"
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Stopped"
|
|
err: ""
|
|
- id: test_absent_minimal_input_resource_not_exist
|
|
input:
|
|
state: absent
|
|
name: virtual-ip
|
|
output:
|
|
changed: false
|
|
previous_value: null
|
|
value: null
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- command: [/testbin/pcs, property, config]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: |
|
|
Cluster Properties: cib-bootstrap-options
|
|
cluster-infrastructure=corosync
|
|
cluster-name=hacluster
|
|
dc-version=2.1.9-1.fc41-7188dbf
|
|
have-watchdog=false
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, remove, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: Resource 'virtual-ip' does not exist.\n"
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- id: test_absent_minimal_input_resource_exists
|
|
input:
|
|
state: absent
|
|
name: virtual-ip
|
|
output:
|
|
changed: true
|
|
previous_value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
value: null
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
err: ""
|
|
- command: [/testbin/pcs, property, config]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: |
|
|
Cluster Properties: cib-bootstrap-options
|
|
cluster-infrastructure=corosync
|
|
cluster-name=hacluster
|
|
dc-version=2.1.9-1.fc41-7188dbf
|
|
have-watchdog=false
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, remove, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ""
|
|
err: "Attempting to stop: virtual-ip... Stopped\n"
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- id: test_absent_minimal_input_maintenance_mode
|
|
input:
|
|
state: absent
|
|
name: virtual-ip
|
|
output:
|
|
changed: true
|
|
previous_value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
value: null
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
err: ""
|
|
- command: [/testbin/pcs, property, config]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: |
|
|
Cluster Properties: cib-bootstrap-options
|
|
cluster-infrastructure=corosync
|
|
cluster-name=hacluster
|
|
dc-version=2.1.9-1.fc41-7188dbf
|
|
have-watchdog=false
|
|
maintenance-mode=true
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, remove, virtual-ip, --force]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ""
|
|
err: "Deleting Resource (and group) - virtual-ip"
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- id: test_enabled_minimal_input_resource_not_exists
|
|
input:
|
|
state: enabled
|
|
name: virtual-ip
|
|
output:
|
|
failed: true
|
|
msg: "pcs failed with error (rc=1): bundle/clone/group/resource/tag 'virtual-ip' does not exist"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- command: [/testbin/pcs, resource, enable, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "bundle/clone/group/resource/tag 'virtual-ip' does not exist"
|
|
- id: test_enabled_minimal_input_resource_exists
|
|
input:
|
|
state: enabled
|
|
name: virtual-ip
|
|
output:
|
|
changed: true
|
|
previous_value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Stopped (disabled)"
|
|
value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Starting"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Stopped (disabled)"
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, enable, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ""
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Starting"
|
|
err: ""
|
|
- id: test_disable_minimal_input_resource_not_exists
|
|
input:
|
|
state: disabled
|
|
name: virtual-ip
|
|
output:
|
|
failed: true
|
|
msg: "pcs failed with error (rc=1): bundle/clone/group/resource/tag 'virtual-ip' does not exist"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "Error: resource or tag id 'virtual-ip' not found"
|
|
- command: [/testbin/pcs, resource, disable, virtual-ip]
|
|
environ: *env-def
|
|
rc: 1
|
|
out: ""
|
|
err: "bundle/clone/group/resource/tag 'virtual-ip' does not exist"
|
|
- id: test_disable_minimal_input_resource_exists
|
|
input:
|
|
state: disabled
|
|
name: virtual-ip
|
|
output:
|
|
changed: true
|
|
previous_value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
value: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Stopped (disabled)"
|
|
mocks:
|
|
run_command:
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Started"
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, disable, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: ""
|
|
err: ""
|
|
- command: [/testbin/pcs, resource, status, virtual-ip]
|
|
environ: *env-def
|
|
rc: 0
|
|
out: " * virtual-ip\t(ocf:heartbeat:IPAddr2):\t Stopped (disabled)"
|
|
err: ""
|