Verbose config extra fact (#23)

* allow nonverbose idempotent config

* nonverbose config output

* typpo

* typpo

* release fragment

* config extra fact

* add fact ansible_net_config_nonverbose

* unit tests

* changelog fragments

* remove version fragment

* remove extra debug printf()

* update chlog fragment

* corrections for upstream pull request

* corrections for upstream pull request

* typo in changelog fragment

Co-authored-by: Felix Fontein <felix@fontein.de>

* typo in filename

Co-authored-by: Petr Klima <petr.klima@madeta.cz>
Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
Petr Klíma 2021-03-29 19:05:10 +02:00 committed by GitHub
parent 7bab58eae9
commit 1c18d34536
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 53 additions and 1 deletions

View file

@ -0,0 +1,2 @@
minor_changes:
- fact - add fact ``ansible_net_config_nonverbose`` to get idempotent config (no date, no verbose) (https://github.com/ansible-collections/community.routeros/pull/23).

View file

@ -110,6 +110,16 @@ ansible_facts:
returned: when config is configured returned: when config is configured
type: str type: str
ansible_net_config_nonverbose:
description:
- The current active config from the device in minimal form.
- This value is idempotent in the sense that if the facts module is run twice and the device's config
was not changed between the runs, the value is identical. This is achieved by running C(/export)
and stripping the timestamp from the comment in the first line.
returned: when config is configured
type: str
version_added: 1.2.0
# interfaces # interfaces
ansible_net_all_ipv4_addresses: ansible_net_all_ipv4_addresses:
description: All IPv4 addresses configured on the device description: All IPv4 addresses configured on the device
@ -280,14 +290,26 @@ class Hardware(FactsBase):
class Config(FactsBase): class Config(FactsBase):
COMMANDS = ['/export verbose'] COMMANDS = [
'/export verbose',
'/export',
]
RM_DATE_RE = re.compile(r'^# [a-z0-9/][a-z0-9/]* [0-9:]* by RouterOS')
def populate(self): def populate(self):
super(Config, self).populate() super(Config, self).populate()
data = self.responses[0] data = self.responses[0]
if data: if data:
self.facts['config'] = data self.facts['config'] = data
data = self.responses[1]
if data:
# remove datetime
data = re.sub(self.RM_DATE_RE, r'# RouterOS', data)
self.facts['config_nonverbose'] = data
class Interfaces(FactsBase): class Interfaces(FactsBase):

View file

@ -0,0 +1,24 @@
# sep/25/2018 10:10:52 by RouterOS 6.42.5
# software id = 9EER-511K
#
#
#
/interface wireless security-profiles
set [ find default=yes ] supplicant-identity=MikroTik
/tool user-manager customer
set admin access=own-routers,own-users,own-profiles,own-limits,config-payment-gw
/ip address
add address=192.168.88.1/24 comment=defconf interface=ether1 network=192.168.88.0
/ip dhcp-client
add dhcp-options=hostname,clientid disabled=no interface=ether1
/system lcd page
set time disabled=yes display-time=5s
set resources disabled=yes display-time=5s
set uptime disabled=yes display-time=5s
set packets disabled=yes display-time=5s
set bits disabled=yes display-time=5s
set version disabled=yes display-time=5s
set identity disabled=yes display-time=5s
set ether1 disabled=yes display-time=5s
/tool user-manager database
set db-path=user-manager

View file

@ -94,6 +94,10 @@ class TestRouterosFactsModule(TestRouterosModule):
result['ansible_facts']['ansible_net_config'], str result['ansible_facts']['ansible_net_config'], str
) )
self.assertIsInstance(
result['ansible_facts']['ansible_net_config_nonverbose'], str
)
def test_facts_interfaces(self): def test_facts_interfaces(self):
set_module_args(dict(gather_subset='interfaces')) set_module_args(dict(gather_subset='interfaces'))
result = self.execute_module() result = self.execute_module()