-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
puppet: refactored to use CmdRunner (#5612)
* puppet: refactored to use CmdRunner * add changelog fragment * add more tests (cherry picked from commit f95e0d7)
- Loading branch information
1 parent
6f845f6
commit d16a028
Showing
10 changed files
with
282 additions
and
105 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
minor_changes: | ||
- puppet - refactored module to use ``CmdRunner`` for executing ``puppet`` (https://github.com/ansible-collections/community.general/pull/5612). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright (c) 2022, Alexei Znamensky <russoz@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 | ||
|
||
|
||
import os | ||
|
||
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt | ||
|
||
|
||
_PUPPET_PATH_PREFIX = ["/opt/puppetlabs/bin"] | ||
|
||
|
||
def get_facter_dir(): | ||
if os.getuid() == 0: | ||
return '/etc/facter/facts.d' | ||
else: | ||
return os.path.expanduser('~/.facter/facts.d') | ||
|
||
|
||
def _puppet_cmd(module): | ||
return module.get_bin_path("puppet", False, _PUPPET_PATH_PREFIX) | ||
|
||
|
||
# If the `timeout` CLI command feature is removed, | ||
# Then we could add this as a fixed param to `puppet_runner` | ||
def ensure_agent_enabled(module): | ||
runner = CmdRunner( | ||
module, | ||
command="puppet", | ||
path_prefix=_PUPPET_PATH_PREFIX, | ||
arg_formats=dict( | ||
_agent_disabled=cmd_runner_fmt.as_fixed(['config', 'print', 'agent_disabled_lockfile']), | ||
), | ||
check_rc=False, | ||
) | ||
|
||
rc, stdout, stderr = runner("_agent_disabled").run() | ||
if os.path.exists(stdout.strip()): | ||
module.fail_json( | ||
msg="Puppet agent is administratively disabled.", | ||
disabled=True) | ||
elif rc != 0: | ||
module.fail_json( | ||
msg="Puppet agent state could not be determined.") | ||
|
||
|
||
def puppet_runner(module): | ||
|
||
# Keeping backward compatibility, allow for running with the `timeout` CLI command. | ||
# If this can be replaced with ansible `timeout` parameter in playbook, | ||
# then this function could be removed. | ||
def _prepare_base_cmd(): | ||
_tout_cmd = module.get_bin_path("timeout", False) | ||
if _tout_cmd: | ||
cmd = ["timeout", "-s", "9", module.params["timeout"], _puppet_cmd(module)] | ||
else: | ||
cmd = ["puppet"] | ||
return cmd | ||
|
||
def noop_func(v): | ||
_noop = cmd_runner_fmt.as_map({ | ||
True: "--noop", | ||
False: "--no-noop", | ||
}) | ||
return _noop(module.check_mode or v) | ||
|
||
_logdest_map = { | ||
"syslog": ["--logdest", "syslog"], | ||
"all": ["--logdest", "syslog", "--logdest", "console"], | ||
} | ||
|
||
@cmd_runner_fmt.unpack_args | ||
def execute_func(execute, manifest): | ||
if execute: | ||
return ["--execute", execute] | ||
else: | ||
return [manifest] | ||
|
||
runner = CmdRunner( | ||
module, | ||
command=_prepare_base_cmd(), | ||
path_prefix=_PUPPET_PATH_PREFIX, | ||
arg_formats=dict( | ||
_agent_fixed=cmd_runner_fmt.as_fixed([ | ||
"agent", "--onetime", "--no-daemonize", "--no-usecacheonfailure", | ||
"--no-splay", "--detailed-exitcodes", "--verbose", "--color", "0", | ||
]), | ||
_apply_fixed=cmd_runner_fmt.as_fixed(["apply", "--detailed-exitcodes"]), | ||
puppetmaster=cmd_runner_fmt.as_opt_val("--server"), | ||
show_diff=cmd_runner_fmt.as_bool("--show-diff"), | ||
confdir=cmd_runner_fmt.as_opt_val("--confdir"), | ||
environment=cmd_runner_fmt.as_opt_val("--environment"), | ||
tags=cmd_runner_fmt.as_func(lambda v: ["--tags", ",".join(v)]), | ||
certname=cmd_runner_fmt.as_opt_eq_val("--certname"), | ||
noop=cmd_runner_fmt.as_func(noop_func), | ||
use_srv_records=cmd_runner_fmt.as_map({ | ||
True: "--usr_srv_records", | ||
False: "--no-usr_srv_records", | ||
}), | ||
logdest=cmd_runner_fmt.as_map(_logdest_map, default=[]), | ||
modulepath=cmd_runner_fmt.as_opt_eq_val("--modulepath"), | ||
_execute=cmd_runner_fmt.as_func(execute_func), | ||
summarize=cmd_runner_fmt.as_bool("--summarize"), | ||
debug=cmd_runner_fmt.as_bool("--debug"), | ||
verbose=cmd_runner_fmt.as_bool("--verbose"), | ||
), | ||
check_rc=False, | ||
) | ||
return runner |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.