mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-04-08 03:33:10 +00:00
opendj_backendprop: use CmdRunner (#11728)
* opendj_backendprop: use CmdRunner
* add changelog frag
(cherry picked from commit 2acb20bec2)
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
174 lines
5.3 KiB
Python
174 lines
5.3 KiB
Python
#!/usr/bin/python
|
|
# Copyright (c) 2016, Werner Dijkerman (ikben@werner-dijkerman.nl)
|
|
# Copyright (c) 2017, Ansible Project
|
|
# 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 annotations
|
|
|
|
DOCUMENTATION = r"""
|
|
module: opendj_backendprop
|
|
short_description: Update the backend configuration of OpenDJ using the dsconfig set-backend-prop command
|
|
description:
|
|
- This module updates settings for OpenDJ with the command C(set-backend-prop).
|
|
- It checks first using C(get-backend-prop) if configuration needs to be applied.
|
|
author:
|
|
- Werner Dijkerman (@dj-wasabi)
|
|
extends_documentation_fragment:
|
|
- community.general.attributes
|
|
attributes:
|
|
check_mode:
|
|
support: full
|
|
diff_mode:
|
|
support: none
|
|
options:
|
|
opendj_bindir:
|
|
description:
|
|
- The path to the bin directory of OpenDJ.
|
|
default: /opt/opendj/bin
|
|
type: path
|
|
hostname:
|
|
description:
|
|
- The hostname of the OpenDJ server.
|
|
required: true
|
|
type: str
|
|
port:
|
|
description:
|
|
- The Admin port on which the OpenDJ instance is available.
|
|
required: true
|
|
type: str
|
|
username:
|
|
description:
|
|
- The username to connect with.
|
|
default: cn=Directory Manager
|
|
type: str
|
|
password:
|
|
description:
|
|
- The password for O(username).
|
|
- Either O(password) or O(passwordfile) is needed.
|
|
type: str
|
|
passwordfile:
|
|
description:
|
|
- Location to the password file which holds the password for O(username).
|
|
- Either O(password) or O(passwordfile) is needed.
|
|
type: path
|
|
backend:
|
|
description:
|
|
- The name of the backend on which the property needs to be updated.
|
|
required: true
|
|
type: str
|
|
name:
|
|
description:
|
|
- The configuration setting to update.
|
|
required: true
|
|
type: str
|
|
value:
|
|
description:
|
|
- The value for the configuration item.
|
|
required: true
|
|
type: str
|
|
state:
|
|
description:
|
|
- If configuration needs to be added/updated.
|
|
default: "present"
|
|
type: str
|
|
"""
|
|
|
|
EXAMPLES = r"""
|
|
- name: Add or update OpenDJ backend properties
|
|
opendj_backendprop:
|
|
hostname: localhost
|
|
port: 4444
|
|
username: "cn=Directory Manager"
|
|
password: password
|
|
backend: userRoot
|
|
name: index-entry-limit
|
|
value: 5000
|
|
"""
|
|
|
|
RETURN = r"""
|
|
"""
|
|
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
|
|
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt
|
|
|
|
|
|
class BackendProp:
|
|
def __init__(self, module):
|
|
self._module = module
|
|
self.runner = CmdRunner(
|
|
module,
|
|
command=f"{module.params['opendj_bindir']}/dsconfig",
|
|
arg_formats=dict(
|
|
get_cmd=cmd_runner_fmt.as_fixed(["get-backend-prop", "-n", "-X", "-s"]),
|
|
set_cmd=cmd_runner_fmt.as_fixed(["set-backend-prop", "-n", "-X"]),
|
|
hostname=cmd_runner_fmt.as_opt_val("-h"),
|
|
port=cmd_runner_fmt.as_opt_val("--port"),
|
|
username=cmd_runner_fmt.as_opt_val("--bindDN"),
|
|
password=cmd_runner_fmt.as_opt_val("-w"),
|
|
passwordfile=cmd_runner_fmt.as_opt_val("-j"),
|
|
backend=cmd_runner_fmt.as_opt_val("--backend-name"),
|
|
set_prop=cmd_runner_fmt.as_func(cmd_runner_fmt.unpack_args(lambda n, v: ["--set", f"{n}:{v}"])),
|
|
),
|
|
)
|
|
|
|
def get_property(self):
|
|
with self.runner(
|
|
"get_cmd hostname port username password passwordfile backend",
|
|
check_rc=True,
|
|
) as ctx:
|
|
rc, stdout, stderr = ctx.run()
|
|
return stdout
|
|
|
|
def set_property(self, name, value):
|
|
with self.runner(
|
|
"set_cmd hostname port username password passwordfile backend set_prop",
|
|
check_rc=True,
|
|
) as ctx:
|
|
ctx.run(set_prop=[name, value])
|
|
|
|
def validate_data(self, data, name, value):
|
|
for config_line in data.splitlines():
|
|
if config_line:
|
|
split_line = config_line.split()
|
|
if split_line[0] == name:
|
|
if split_line[1] == value:
|
|
return True
|
|
return False
|
|
|
|
|
|
def main():
|
|
module = AnsibleModule(
|
|
argument_spec=dict(
|
|
opendj_bindir=dict(default="/opt/opendj/bin", type="path"),
|
|
hostname=dict(required=True),
|
|
port=dict(required=True),
|
|
username=dict(default="cn=Directory Manager"),
|
|
password=dict(no_log=True),
|
|
passwordfile=dict(type="path"),
|
|
backend=dict(required=True),
|
|
name=dict(required=True),
|
|
value=dict(required=True),
|
|
state=dict(default="present"),
|
|
),
|
|
supports_check_mode=True,
|
|
mutually_exclusive=[["password", "passwordfile"]],
|
|
required_one_of=[["password", "passwordfile"]],
|
|
)
|
|
|
|
opendj = BackendProp(module)
|
|
stdout = opendj.get_property()
|
|
|
|
if stdout and not opendj.validate_data(data=stdout, name=module.params["name"], value=module.params["value"]):
|
|
if module.check_mode:
|
|
module.exit_json(changed=True)
|
|
opendj.set_property(module.params["name"], module.params["value"])
|
|
module.exit_json(changed=True)
|
|
else:
|
|
module.exit_json(changed=False)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|