summaryrefslogtreecommitdiff
path: root/lib/ansible/plugins/httpapi/eos.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ansible/plugins/httpapi/eos.py')
-rw-r--r--lib/ansible/plugins/httpapi/eos.py171
1 files changed, 0 insertions, 171 deletions
diff --git a/lib/ansible/plugins/httpapi/eos.py b/lib/ansible/plugins/httpapi/eos.py
deleted file mode 100644
index 325c31ede6..0000000000
--- a/lib/ansible/plugins/httpapi/eos.py
+++ /dev/null
@@ -1,171 +0,0 @@
-# (c) 2018 Red Hat 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
-
-DOCUMENTATION = """
----
-author: Ansible Networking Team
-httpapi: eos
-short_description: Use eAPI to run command on eos platform
-description:
- - This eos plugin provides low level abstraction api's for
- sending and receiving CLI commands with eos network devices.
-version_added: "2.6"
-options:
- eos_use_sessions:
- type: int
- default: 1
- description:
- - Specifies if sessions should be used on remote host or not
- env:
- - name: ANSIBLE_EOS_USE_SESSIONS
- vars:
- - name: ansible_eos_use_sessions
- version_added: '2.8'
-"""
-
-import json
-
-from ansible.module_utils._text import to_text
-from ansible.module_utils.connection import ConnectionError
-from ansible.module_utils.network.common.utils import to_list
-from ansible.plugins.httpapi import HttpApiBase
-
-
-OPTIONS = {
- 'format': ['text', 'json'],
- 'diff_match': ['line', 'strict', 'exact', 'none'],
- 'diff_replace': ['line', 'block', 'config'],
- 'output': ['text', 'json']
-}
-
-
-class HttpApi(HttpApiBase):
- def __init__(self, *args, **kwargs):
- super(HttpApi, self).__init__(*args, **kwargs)
- self._device_info = None
- self._session_support = None
-
- def supports_sessions(self):
- use_session = self.get_option('eos_use_sessions')
- try:
- use_session = int(use_session)
- except ValueError:
- pass
-
- if not bool(use_session):
- self._session_support = False
- else:
- if self._session_support:
- return self._session_support
-
- response = self.send_request('show configuration sessions')
- self._session_support = 'error' not in response
-
- return self._session_support
-
- def send_request(self, data, **message_kwargs):
- data = to_list(data)
- become = self._become
- if become:
- self.connection.queue_message('vvvv', 'firing event: on_become')
- data.insert(0, {"cmd": "enable", "input": self._become_pass})
-
- output = message_kwargs.get('output', 'text')
- request = request_builder(data, output)
- headers = {'Content-Type': 'application/json-rpc'}
-
- response, response_data = self.connection.send('/command-api', request, headers=headers, method='POST')
-
- try:
- response_data = json.loads(to_text(response_data.getvalue()))
- except ValueError:
- raise ConnectionError('Response was not valid JSON, got {0}'.format(
- to_text(response_data.getvalue())
- ))
-
- results = handle_response(response_data)
-
- if become:
- results = results[1:]
- if len(results) == 1:
- results = results[0]
-
- return results
-
- def get_device_info(self):
- if self._device_info:
- return self._device_info
-
- device_info = {}
-
- device_info['network_os'] = 'eos'
- reply = self.send_request('show version', output='json')
- data = json.loads(reply)
-
- device_info['network_os_version'] = data['version']
- device_info['network_os_model'] = data['modelName']
-
- reply = self.send_request('show hostname | json')
- data = json.loads(reply)
-
- device_info['network_os_hostname'] = data['hostname']
-
- self._device_info = device_info
- return self._device_info
-
- def get_device_operations(self):
- return {
- 'supports_diff_replace': True,
- 'supports_commit': bool(self.supports_sessions()),
- 'supports_rollback': False,
- 'supports_defaults': False,
- 'supports_onbox_diff': bool(self.supports_sessions()),
- 'supports_commit_comment': False,
- 'supports_multiline_delimiter': False,
- 'supports_diff_match': True,
- 'supports_diff_ignore_lines': True,
- 'supports_generate_diff': not bool(self.supports_sessions()),
- 'supports_replace': bool(self.supports_sessions()),
- }
-
- def get_capabilities(self):
- result = {}
- result['rpc'] = []
- result['device_info'] = self.get_device_info()
- result['device_operations'] = self.get_device_operations()
- result.update(OPTIONS)
- result['network_api'] = 'eapi'
-
- return json.dumps(result)
-
-
-def handle_response(response):
- if 'error' in response:
- error = response['error']
-
- error_text = []
- for data in error['data']:
- error_text.extend(data.get('errors', []))
- error_text = '\n'.join(error_text) or error['message']
-
- raise ConnectionError(error_text, code=error['code'])
-
- results = []
-
- for result in response['result']:
- if 'messages' in result:
- results.append(result['messages'][0])
- elif 'output' in result:
- results.append(result['output'].strip())
- else:
- results.append(json.dumps(result))
-
- return results
-
-
-def request_builder(commands, output, reqid=None):
- params = dict(version=1, cmds=commands, format=output)
- return json.dumps(dict(jsonrpc='2.0', id=reqid, method='runCmds', params=params))