feat: read current wildfly configuration

This commit is contained in:
Mauro Torrez 2020-10-03 02:21:27 -03:00
parent 852d425d25
commit d85aac8715

View File

@ -1,31 +1,119 @@
#!/usr/bin/python
# Make coding more python3-ish, this is required for contributions to Ansible
'''
Ansible action plugin for configuring Wildfly
'''
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.plugins.action import ActionBase
from datetime import datetime
from ansible.utils.display import Display
display = Display()
import json
from six import string_types
class ActionModule(ActionBase):
def run(self, tmp=None, task_vars=None):
super(ActionModule, self).run(tmp, task_vars)
module_args = self._task.args.copy()
module_return = self._execute_module(module_name='setup',
module_args=module_args,
task_vars=task_vars, tmp=tmp)
ret = dict()
remote_date = None
if not module_return.get('failed'):
for key, value in module_return['ansible_facts'].items():
if key == 'ansible_date_time':
remote_date = value['iso8601']
if remote_date:
remote_date_obj = datetime.strptime(remote_date, '%Y-%m-%dT%H:%M:%SZ')
time_delta = datetime.now() - remote_date_obj
ret['delta_seconds'] = time_delta.seconds
ret['delta_days'] = time_delta.days
ret['delta_microseconds'] = time_delta.microseconds
# Define support for check mode and async
self._supports_check_mode = True
self._supports_async = False
return dict(ansible_facts=dict(ret))
# module_args = self._task.args.copy()
# module_return = self._execute_module(module_name='setup',
# module_args=module_args,
# task_vars=task_vars, tmp=tmp)
# ret = dict()
# remote_date = None
# if not module_return.get('failed'):
# for key, value in module_return['ansible_facts'].items():
# if key == 'ansible_date_time':
# remote_date = value['iso8601']
# if remote_date:
# remote_date_obj = datetime.strptime(remote_date, '%Y-%m-%dT%H:%M:%SZ')
# time_delta = datetime.now() - remote_date_obj
# ret['delta_seconds'] = time_delta.seconds
# ret['delta_days'] = time_delta.days
# ret['delta_microseconds'] = time_delta.microseconds
# return dict(ansible_facts=dict(ret))
task_args = self._task.args.copy()
check_mode = self._play_context.check_mode
cli_command, config, dry_run = read_args(task_args, check_mode)
# read current config
# if not self.prev:
cur_result = self.execute_command(
'{} --output-json --command="/:read-resource(recursive)"'.format(
cli_command),
check_mode_unsafe=False
)
if cur_result.get('failed'):
return cur_result
try:
cur_state = json.loads(cur_result.get('stdout')).get('result')
except Exception as e:
return merge_hash(cur_result, dict(
failed=True,
msg="Error parsing JSON from Wildfly CLI: {}".format(str(e))
))
return cur_result
def execute_command(self, command, stdin=None, check_mode_unsafe=True):
'''
Execute command module and return result
'''
return self._execute_module(
module_name='command',
module_args=dict(
_raw_params=command,
stdin=stdin,
_ansible_check_mode=(self._play_context.check_mode
and check_mode_unsafe)
)
)
def read_args(task_args, check_mode):
'''
Read and validate invocation arguments
'''
# CLI command for connecting to Wildfly admin interface
cli_command = task_args.get('cli_cmd', 'jboss-cli.sh --connect')
# desired configuration
config = task_args.get('config', False)
if not config and task_args.get('config_list', False):
config = task_args.get('config_list')
display.deprecated('"config_list" argument should not be used. '
'Please use "config" argument instead.')
# validate config argument
if type(config) is list:
pass
elif type(config) is dict:
config = [dict(
config=config,
root=task_args.get('root'),
state=task_args.get('state', 'present')
)]
else:
raise Exception("config argument should be list or dict")
# dry run argument
dry_run = (task_args.get('dry_run', False) or check_mode)
return cli_command, config, dry_run