mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
83738f21a3
puppet_utils: Do not force lang for cmd (#8001)
puppet_utils: Add option to set LANG for puppet execution
Add option `environment_lang` to force the LANG when executing the
puppet agent. The default is the `C` LANG
(cherry picked from commit 1b8e6bc95b
)
Co-authored-by: Niklas Schwarz <schwarz.niklas@hotmail.de>
112 lines
3.9 KiB
Python
112 lines
3.9 KiB
Python
# -*- 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):
|
|
return ["--noop"] if module.check_mode or v else ["--no-noop"]
|
|
|
|
_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)]),
|
|
skip_tags=cmd_runner_fmt.as_func(lambda v: ["--skip_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,
|
|
force_lang=module.params["environment_lang"],
|
|
)
|
|
return runner
|