2022-07-18 23:16:54 +02:00
|
|
|
# Copyright (c) 2017 Red Hat Inc.
|
|
|
|
# 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
|
|
|
|
|
2020-04-06 14:17:43 +01:00
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
|
|
__metaclass__ = type
|
|
|
|
|
2024-12-28 15:34:20 +01:00
|
|
|
DOCUMENTATION = r"""
|
2020-09-28 21:21:45 +02:00
|
|
|
author: "Egor Zaitsev (@heuels)"
|
2020-12-25 08:45:55 +01:00
|
|
|
name: routeros
|
2020-04-06 14:17:43 +01:00
|
|
|
short_description: Use routeros cliconf to run command on MikroTik RouterOS platform
|
|
|
|
description:
|
2024-12-28 16:52:27 +01:00
|
|
|
- This routeros plugin provides low level abstraction APIs for sending and receiving CLI commands from MikroTik RouterOS
|
2024-12-28 15:34:20 +01:00
|
|
|
network devices.
|
|
|
|
"""
|
2020-04-06 14:17:43 +01:00
|
|
|
|
|
|
|
import re
|
|
|
|
import json
|
|
|
|
|
2023-02-06 07:42:39 +01:00
|
|
|
from ansible.module_utils.common.text.converters import to_text
|
|
|
|
from ansible.plugins.cliconf import CliconfBase
|
2020-04-06 14:17:43 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Cliconf(CliconfBase):
|
|
|
|
|
|
|
|
def get_device_info(self):
|
|
|
|
device_info = {}
|
|
|
|
device_info['network_os'] = 'RouterOS'
|
|
|
|
|
|
|
|
resource = self.get('/system resource print')
|
|
|
|
data = to_text(resource, errors='surrogate_or_strict').strip()
|
|
|
|
match = re.search(r'version: (\S+)', data)
|
|
|
|
if match:
|
|
|
|
device_info['network_os_version'] = match.group(1)
|
|
|
|
|
|
|
|
routerboard = self.get('/system routerboard print')
|
|
|
|
data = to_text(routerboard, errors='surrogate_or_strict').strip()
|
|
|
|
match = re.search(r'model: (.+)$', data, re.M)
|
|
|
|
if match:
|
|
|
|
device_info['network_os_model'] = match.group(1)
|
|
|
|
|
|
|
|
identity = self.get('/system identity print')
|
|
|
|
data = to_text(identity, errors='surrogate_or_strict').strip()
|
|
|
|
match = re.search(r'name: (.+)$', data, re.M)
|
|
|
|
if match:
|
|
|
|
device_info['network_os_hostname'] = match.group(1)
|
|
|
|
|
|
|
|
return device_info
|
|
|
|
|
2021-08-12 08:53:21 +02:00
|
|
|
def get_config(self, source='running', flags=None, format=None):
|
2020-04-06 14:17:43 +01:00
|
|
|
return
|
|
|
|
|
|
|
|
def edit_config(self, command):
|
|
|
|
return
|
|
|
|
|
|
|
|
def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False):
|
|
|
|
return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all)
|
|
|
|
|
|
|
|
def get_capabilities(self):
|
|
|
|
result = super(Cliconf, self).get_capabilities()
|
|
|
|
return json.dumps(result)
|