mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-01 05:53:26 -07:00
pacemaker_info: new module and enhance cli_action (#10291)
* feat(info): Add pacemaker_info module and enhance cli_action util This commit adds in the pacemaker_info module which is responsible for retrieving pacemaker facts. Additionally, the cli_action var has been refactored for the pacemaker.py util, which is passed through the runner. * refactor(version): Bump version_added to 11.2.0 * Apply suggestions from code review Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/modules/pacemaker_info.py Co-authored-by: Felix Fontein <felix@fontein.de> * refactor(process): Simplify command output --------- Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
e91e2ef6f8
commit
47aec26001
5 changed files with 242 additions and 0 deletions
|
@ -67,6 +67,8 @@ def pacemaker_runner(module, **kwargs):
|
|||
wait=cmd_runner_fmt.as_opt_eq_val("--wait"),
|
||||
config=cmd_runner_fmt.as_fixed("config"),
|
||||
force=cmd_runner_fmt.as_bool("--force"),
|
||||
version=cmd_runner_fmt.as_fixed("--version"),
|
||||
output_format=cmd_runner_fmt.as_opt_eq_val("--output-format"),
|
||||
),
|
||||
**kwargs
|
||||
)
|
||||
|
|
109
plugins/modules/pacemaker_info.py
Normal file
109
plugins/modules/pacemaker_info.py
Normal file
|
@ -0,0 +1,109 @@
|
|||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (c) 2025, 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
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
DOCUMENTATION = r"""
|
||||
module: pacemaker_info
|
||||
short_description: Gather information about Pacemaker cluster
|
||||
author:
|
||||
- Dexter Le (@munchtoast)
|
||||
version_added: 11.2.0
|
||||
description:
|
||||
- Gather information about a Pacemaker cluster.
|
||||
extends_documentation_fragment:
|
||||
- community.general.attributes
|
||||
- community.general.attributes.info_module
|
||||
"""
|
||||
|
||||
EXAMPLES = r"""
|
||||
- name: Gather Pacemaker cluster info
|
||||
community.general.pacemaker_info:
|
||||
register: result
|
||||
|
||||
- name: Debug cluster info
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ result }}"
|
||||
"""
|
||||
|
||||
RETURN = r"""
|
||||
version:
|
||||
description: Pacemaker CLI version
|
||||
returned: always
|
||||
type: str
|
||||
cluster_info:
|
||||
description: Cluster information such as the name, UUID, and nodes.
|
||||
returned: always
|
||||
type: dict
|
||||
resource_info:
|
||||
description: All resources available on the cluster and their status.
|
||||
returned: success
|
||||
type: dict
|
||||
stonith_info:
|
||||
description: All STONITH information on the cluster.
|
||||
returned: success
|
||||
type: dict
|
||||
constraint_info:
|
||||
description: All cluster resource constraints on the cluster.
|
||||
returned: success
|
||||
type: dict
|
||||
property_info:
|
||||
description: All properties present on the cluster.
|
||||
returned: success
|
||||
type: dict
|
||||
"""
|
||||
|
||||
import json
|
||||
|
||||
from ansible_collections.community.general.plugins.module_utils.module_helper import ModuleHelper
|
||||
from ansible_collections.community.general.plugins.module_utils.pacemaker import pacemaker_runner
|
||||
|
||||
|
||||
class PacemakerInfo(ModuleHelper):
|
||||
module = dict(
|
||||
argument_spec=dict(),
|
||||
supports_check_mode=True,
|
||||
)
|
||||
info_vars = {
|
||||
"cluster_info": "cluster",
|
||||
"resource_info": "resource",
|
||||
"stonith_info": "stonith",
|
||||
"constraint_info": "constraint",
|
||||
"property_info": "property"
|
||||
}
|
||||
output_params = info_vars.keys()
|
||||
|
||||
def __init_module__(self):
|
||||
self.runner = pacemaker_runner(self.module)
|
||||
with self.runner("version") as ctx:
|
||||
rc, out, err = ctx.run()
|
||||
self.vars.version = out.strip()
|
||||
|
||||
def _process_command_output(self, cli_action=""):
|
||||
def process(rc, out, err):
|
||||
if rc != 0:
|
||||
self.do_raise('pcs {0} config failed with error (rc={1}): {2}'.format(cli_action, rc, err))
|
||||
out = json.loads(out)
|
||||
return None if out == "" else out
|
||||
return process
|
||||
|
||||
def _get_info(self, cli_action):
|
||||
with self.runner("cli_action config output_format", output_process=self._process_command_output(cli_action)) as ctx:
|
||||
return ctx.run(cli_action=cli_action, output_format="json")
|
||||
|
||||
def __run__(self):
|
||||
for key, cli_action in sorted(self.info_vars.items()):
|
||||
self.vars.set(key, self._get_info(cli_action))
|
||||
|
||||
|
||||
def main():
|
||||
PacemakerInfo.execute()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Add table
Add a link
Reference in a new issue