mirror of
https://github.com/thegeeklab/ansible-later.git
synced 2024-09-17 04:52:53 +02:00
105 lines
3.8 KiB
Python
105 lines
3.8 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
#
|
||
|
# Copyright (c) 2017 F5 Networks Inc.
|
||
|
# GNU General Public License v3.0 (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||
|
|
||
|
from __future__ import absolute_import, division, print_function
|
||
|
__metaclass__ = type
|
||
|
|
||
|
|
||
|
import time
|
||
|
|
||
|
try:
|
||
|
from f5.bigiq import ManagementRoot
|
||
|
from icontrol.exceptions import iControlUnexpectedHTTPError
|
||
|
HAS_F5SDK = True
|
||
|
except ImportError:
|
||
|
HAS_F5SDK = False
|
||
|
|
||
|
try:
|
||
|
from library.module_utils.network.f5.common import F5BaseClient
|
||
|
from library.module_utils.network.f5.common import F5ModuleError
|
||
|
from library.module_utils.network.f5.common import is_ansible_debug
|
||
|
from library.module_utils.network.f5.icontrol import iControlRestSession
|
||
|
except ImportError:
|
||
|
from ansible.module_utils.network.f5.common import F5BaseClient
|
||
|
from ansible.module_utils.network.f5.common import F5ModuleError
|
||
|
from ansible.module_utils.network.f5.common import is_ansible_debug
|
||
|
from ansible.module_utils.network.f5.icontrol import iControlRestSession
|
||
|
|
||
|
|
||
|
class F5Client(F5BaseClient):
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
super(F5Client, self).__init__(*args, **kwargs)
|
||
|
self.provider = self.merge_provider_params()
|
||
|
|
||
|
@property
|
||
|
def api(self):
|
||
|
exc = None
|
||
|
if self._client:
|
||
|
return self._client
|
||
|
for x in range(0, 10):
|
||
|
try:
|
||
|
result = ManagementRoot(
|
||
|
self.provider['server'],
|
||
|
self.provider['user'],
|
||
|
self.provider['password'],
|
||
|
port=self.provider['server_port'],
|
||
|
verify=self.provider['validate_certs']
|
||
|
)
|
||
|
self._client = result
|
||
|
return self._client
|
||
|
except Exception as ex:
|
||
|
exc = ex
|
||
|
time.sleep(1)
|
||
|
error = 'Unable to connect to {0} on port {1}.'.format(
|
||
|
self.provider['server'], self.provider['server_port']
|
||
|
)
|
||
|
|
||
|
if exc is not None:
|
||
|
error += ' The reported error was "{0}".'.format(str(exc))
|
||
|
raise F5ModuleError(error)
|
||
|
|
||
|
|
||
|
class F5RestClient(F5BaseClient):
|
||
|
def __init__(self, *args, **kwargs):
|
||
|
super(F5RestClient, self).__init__(*args, **kwargs)
|
||
|
self.provider = self.merge_provider_params()
|
||
|
|
||
|
@property
|
||
|
def api(self):
|
||
|
exc = None
|
||
|
if self._client:
|
||
|
return self._client
|
||
|
for x in range(0, 10):
|
||
|
try:
|
||
|
url = "https://{0}:{1}/mgmt/shared/authn/login".format(
|
||
|
self.provider['server'], self.provider['server_port']
|
||
|
)
|
||
|
payload = {
|
||
|
'username': self.provider['user'],
|
||
|
'password': self.provider['password'],
|
||
|
'loginProviderName': self.provider['auth_provider'] or 'local'
|
||
|
}
|
||
|
session = iControlRestSession()
|
||
|
session.verify = self.provider['validate_certs']
|
||
|
response = session.post(url, json=payload)
|
||
|
|
||
|
if response.status not in [200]:
|
||
|
raise F5ModuleError('Status code: {0}. Unexpected Error: {1} for uri: {2}\nText: {3}'.format(
|
||
|
response.status, response.reason, response.url, response.content
|
||
|
))
|
||
|
|
||
|
session.headers['X-F5-Auth-Token'] = response.json()['token']['token']
|
||
|
self._client = session
|
||
|
return self._client
|
||
|
except Exception as ex:
|
||
|
exc = ex
|
||
|
time.sleep(1)
|
||
|
error = 'Unable to connect to {0} on port {1}.'.format(
|
||
|
self.provider['server'], self.provider['server_port']
|
||
|
)
|
||
|
if exc is not None:
|
||
|
error += ' The reported error was "{0}".'.format(str(exc))
|
||
|
raise F5ModuleError(error)
|