mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-25 03:41:25 -07:00
Fixes and additions for f5 modules (#39986)
Small fixes in the f5 module utils. I believe the action plugins now work consistently across types of connections
This commit is contained in:
parent
8654508cbd
commit
00a6b19e58
6 changed files with 172 additions and 162 deletions
|
@ -19,6 +19,7 @@
|
|||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import os
|
||||
import sys
|
||||
import copy
|
||||
|
||||
|
@ -43,17 +44,16 @@ except ImportError:
|
|||
class ActionModule(_ActionModule):
|
||||
|
||||
def run(self, tmp=None, task_vars=None):
|
||||
del tmp # tmp no longer has any effect
|
||||
socket_path = None
|
||||
transport = 'rest'
|
||||
|
||||
if self._play_context.connection == 'network_cli':
|
||||
provider = self._task.args.get('provider', {})
|
||||
if any(provider.values()):
|
||||
display.warning('provider is unnecessary when using network_cli and will be ignored')
|
||||
del self._task.args['provider']
|
||||
display.warning("'provider' is unnecessary when using 'network_cli' and will be ignored")
|
||||
elif self._play_context.connection == 'local':
|
||||
provider = load_provider(f5_provider_spec, self._task.args)
|
||||
|
||||
transport = provider['transport'] or 'rest'
|
||||
transport = provider['transport'] or transport
|
||||
|
||||
display.vvvv('connection transport is %s' % transport, self._play_context.remote_addr)
|
||||
|
||||
|
@ -70,17 +70,14 @@ class ActionModule(_ActionModule):
|
|||
|
||||
display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr)
|
||||
connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin)
|
||||
|
||||
socket_path = connection.run()
|
||||
display.vvvv('socket_path: %s' % socket_path, pc.remote_addr)
|
||||
if not socket_path:
|
||||
return {'failed': True,
|
||||
'msg': 'unable to open shell. Please see: ' +
|
||||
'msg': 'Unable to open shell. Please see: ' +
|
||||
'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'}
|
||||
|
||||
task_vars['ansible_socket'] = socket_path
|
||||
else:
|
||||
self._task.args['provider'] = ActionModule.rest_implementation(provider, self._play_context)
|
||||
else:
|
||||
return {'failed': True, 'msg': 'Connection type %s is not valid for this module' % self._play_context.connection}
|
||||
|
||||
|
@ -96,61 +93,5 @@ class ActionModule(_ActionModule):
|
|||
conn.send_command('exit')
|
||||
out = conn.get_prompt()
|
||||
|
||||
result = super(ActionModule, self).run(task_vars=task_vars)
|
||||
result = super(ActionModule, self).run(tmp, task_vars)
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def rest_implementation(provider, play_context):
|
||||
"""Provides a generic argument spec using Play context vars
|
||||
|
||||
This method will return a set of default values to use for connecting
|
||||
to a remote BIG-IP in the event that you do not use either
|
||||
|
||||
* The environment fallback variables F5_USER, F5_PASSWORD, etc
|
||||
* The "provider" spec
|
||||
|
||||
With this "spec" (for lack of a better name) Ansible will attempt
|
||||
to fill in the provider arguments itself using the play context variables.
|
||||
These variables are contained in the list of MAGIC_VARIABLE_MAPPING
|
||||
found in the constants file
|
||||
|
||||
* https://github.com/ansible/ansible/blob/devel/lib/ansible/constants.py
|
||||
|
||||
Therefore, if you do not use the provider nor that environment args, this
|
||||
method here will be populate the "provider" dict with with the necessary
|
||||
F5 connection params, from the following host vars,
|
||||
|
||||
* remote_addr=('ansible_ssh_host', 'ansible_host'),
|
||||
* remote_user=('ansible_ssh_user', 'ansible_user'),
|
||||
* password=('ansible_ssh_pass', 'ansible_password'),
|
||||
* port=('ansible_ssh_port', 'ansible_port'),
|
||||
* timeout=('ansible_ssh_timeout', 'ansible_timeout'),
|
||||
* private_key_file=('ansible_ssh_private_key_file', 'ansible_private_key_file'),
|
||||
|
||||
For example, this may leave your inventory looking like this
|
||||
|
||||
bigip2 ansible_host=1.2.3.4 ansible_port=10443 ansible_user=admin ansible_password=admin
|
||||
|
||||
:param provider:
|
||||
:param play_context:
|
||||
:return:
|
||||
"""
|
||||
provider['transport'] = 'rest'
|
||||
|
||||
if provider.get('server') is None:
|
||||
provider['server'] = play_context.remote_addr
|
||||
|
||||
if provider.get('server_port') is None:
|
||||
default_port = provider['server_port'] if provider['server_port'] else 443
|
||||
provider['server_port'] = int(play_context.port or default_port)
|
||||
|
||||
if provider.get('timeout') is None:
|
||||
provider['timeout'] = C.PERSISTENT_COMMAND_TIMEOUT
|
||||
|
||||
if provider.get('user') is None:
|
||||
provider['user'] = play_context.connection_user
|
||||
|
||||
if provider.get('password') is None:
|
||||
provider['password'] = play_context.password
|
||||
|
||||
return provider
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue