fix conflicts

This commit is contained in:
Valentin Gurmeza 2018-01-31 10:15:55 -08:00
commit ea6de9712b
9 changed files with 156 additions and 626 deletions

View file

@ -10,6 +10,8 @@ devices.
Requirements Requirements
------------ ------------
Ansible=2.4.2.0
At this time there are no external dependencies. However, there are additional At this time there are no external dependencies. However, there are additional
Python modules that are required by the Ansible modules. You may find these in Python modules that are required by the Ansible modules. You may find these in
`pythonlibs`. Before using Ansible you should add these libraries to your `pythonlibs`. Before using Ansible you should add these libraries to your
@ -18,12 +20,20 @@ Python path:
Development Development
----------- -----------
-----------
In order to test this module, you'll need a RouterOS instance to target. If you In order to test this module, you'll need a RouterOS instance to target. If you
have an existing RouterOS-based MikroTik device, you need only make sure the have an existing RouterOS-based MikroTik device, you need only make sure the
API service is enabled. API service is enabled.
Otherwise, this repository provides a Vagrantfile for setting up the x86 build AWS EC2
-------
You can use an ec2 CHR image for testing. Keep in mind that as of right now we can only set up two interfaces on most ec2 instances.
https://aws.amazon.com/marketplace/pp/B01E00PU50?qid=1517274040207&sr=0-1&ref_=srh_res_product_title
Vagrant
-------
This repository provides a Vagrantfile for setting up the x86 build
of RouterOS for testing. To use it, you must first ensure Vagrant and of RouterOS for testing. To use it, you must first ensure Vagrant and
VirtualBox are installed. Then, run `./create_vagrant_mikrotik.sh` to download VirtualBox are installed. Then, run `./create_vagrant_mikrotik.sh` to download
the official MikroTik Cloud Hosted Router (CHR) image from MikroTik, package the official MikroTik Cloud Hosted Router (CHR) image from MikroTik, package
@ -31,6 +41,9 @@ it as a Vagrant .box file, and register the .box with Vagrant.
Then, you need only run `vagrant up` in the repository root to start the CHR. Then, you need only run `vagrant up` in the repository root to start the CHR.
Ansible setup
------------
To use pipenv ensure pipenv is installed: To use pipenv ensure pipenv is installed:
`pip install pipenv` `pip install pipenv`

View file

@ -1,296 +0,0 @@
# -*- coding: utf-8 -*-
DOCUMENTATION = '''
module: mt_interface_bridge
author:
- "Valentin Gurmeza"
- "Shaun Smiley"
version_added: "2.3"
short_description: Manage mikrotik bridge
requirements:
- mt_api
description:
- add, remove, or modify a bridge.
options:
hostname:
description:
- hotstname of mikrotik router
required: True
username:
description:
- username used to connect to mikrotik router
required: True
password:
description:
- password used for authentication to mikrotik router
required: True
state:
description:
- bridge present or absent
required: True # if modifying bridge
choices:
- present
- absent
name:
description:
- name of the bridge
comment:
description:
- brige comment
admin_mac:
description:
- Static MAC address of the bridge (takes effect if auto-mac=no)
ageing_time:
description:
- How long a host's information will be kept in the bridge database
arp:
description:
- Address Resolution Protocol setting
choices:
- disabled
- enabled
- proxy-arp
- reply-only
auto_mac:
description:
- Automatically select one MAC address of bridge ports as a bridge MAC address
choices:
- yes
- no
forward_delay:
description:
- Time which is spent during the initialization phase of the bridge interface (i.e., after router startup or enabling the interface) in listening/learning state before the bridge will start functioning normally
max_message_age:
description:
- How long to remember Hello messages received from other bridges
mtu:
description:
- Maximum Transmission Unit
priority:
description:
- Spanning tree protocol priority for bridge interface
protocol_mode:
description:
- Select Spanning tree protocol (STP) or Rapid spanning tree protocol (RSTP) to ensure a loop-free topology for any bridged LAN
choices:
- none
- rstp
- stp
transmit_hold_count:
description:
- The Transmit Hold Count used by the Port Transmit state machine to limit transmission rate
settings:
description:
- Bridge settings. If defined this argument is a key/value dictionary
choices:
- allow-fast-path: yes/no
- use-ip-firewall: yes/no
- use-ip-firewall-for-ppoe: yes/no
- use-ip-firewall-for-bridge: yes/no
'''
EXAMPLES = '''
- mt_interface_bridge:
hostname: "{{ inventory_hostname }}"
username: "{{ mt_user }}"
password: "{{ mt_pass }}"
state: present
name: bridge_native
interface: ether7
comment: ansible_test
'''
from ansible.module_utils import mt_api
from ansible.module_utils.mt_common import clean_params
from ansible.module_utils.basic import AnsibleModule
def main():
module = AnsibleModule(
argument_spec=dict(
hostname = dict(required=True),
username = dict(required=True),
password = dict(required=True, no_log=True),
name = dict(required=False, type='str'),
comment = dict(required=False, type='str'),
admin_mac = dict(required=False, type='str'),
auto_mac = dict(required=False, type='str'),
ageing_time = dict(required=False, type='str'),
forward_delay = dict(required=False, type='str'),
max_message_age=dict(required=False, type='str'),
transmit_hold_count=dict(required=False, type='str'),
arp = dict(
required = False,
choices = ['disabled', 'enabled', 'proxy-arp', 'reply-only'],
type='str'
),
protocol_mode= dict(
required = False,
choices = ['none', 'rstp', 'stp'],
type='str'
),
settings= dict(
required = False,
type='dict'
),
state= dict(
required = False,
choices = ['present', 'absent'],
type = 'str'
),
),
supports_check_mode=True
)
hostname = module.params['hostname']
username = module.params['username']
password = module.params['password']
state = module.params['state']
ansible_bridge_name = module.params['name']
check_mode = module.check_mode
changed = False
changed_message = []
msg = ""
mk = mt_api.Mikrotik(hostname, username, password)
try:
mk.login()
except:
module.fail_json(
msg="Could not log into Mikrotik device." +
" Check the username and password.",
)
bridge_path = '/interface/bridge'
response = mk.api_print(base_path=bridge_path)
bridge_params = module.params
mikrotik_bridge = {}
for item in response:
if 'name' in item[1]:
if ansible_bridge_name == item[1]['name']:
mikrotik_bridge = item[1]
########################################################
# Check if we need to edit the bridge settings
########################################################
if bridge_params['settings'] is not None:
settings_path = '/interface/bridge/settings'
settings_response = mk.api_print(settings_path)
settings_response = settings_response[0][1]
settings = bridge_params['settings']
bridge_settings_diff_keys = {}
for key in settings:
if isinstance(settings[key], bool):
settings[key] = str(settings[key])
settings[key] = str.lower(settings[key])
else:
if settings[key] == "yes":
settings[key] = "true"
if settings[key] == "no":
settings[key] = "false"
for key in settings:
if key in settings_response:
if settings[key] != settings_response[key]:
bridge_settings_diff_keys[key] = settings[key]
else:
bridge_settings_diff_keys[key] = settings[key]
if bridge_settings_diff_keys != {}:
if not check_mode:
mk.api_edit(base_path=settings_path, params=bridge_settings_diff_keys)
changed_message.append(bridge_settings_diff_keys)
changed = True
else:
changed = False
#######################################
# remove unneeded parameters
# clean up parameters
######################################
remove_params = ['hostname', 'username', 'password', 'state', 'settings']
for i in remove_params:
del bridge_params[i]
clean_params(bridge_params)
if '.id' in mikrotik_bridge:
client_id = mikrotik_bridge['.id']
else:
client_id = False
##################################################################
# We need to make sure that bridge_bridge name is a string
# if it's null then it has not been defined.
###################################################################
if (state == "present" and isinstance(ansible_bridge_name, str)):
if mikrotik_bridge == {}:
if not check_mode:
mk.api_add(
base_path=bridge_path,
params=bridge_params
)
changed_message.append(ansible_bridge_name + " added")
changed = True,
else:
bridge_diff_keys = {}
for key in bridge_params:
if key in mikrotik_bridge:
if bridge_params[key] != mikrotik_bridge[key]:
bridge_diff_keys[key] = bridge_params[key]
else:
bridge_diff_keys[key] = bridge_params[key]
if bridge_diff_keys != {}:
bridge_diff_keys['numbers'] = client_id
if not check_mode:
mk.api_edit(base_path=bridge_path, params=bridge_diff_keys)
changed = True
changed_message.append("Changed bridge: " + bridge_params['name'])
else:
####################
# Already up date
###################
if not changed:
changed = False
elif state == "absent":
if client_id:
if not check_mode:
mk.api_remove(base_path=bridge_path, remove_id=client_id)
changed_message.append(bridge_params['name'] + " removed")
changed = True
#####################################################
# if client_id is not set there is nothing to remove
#####################################################
else:
if not changed:
changed = False
elif settings:
########################################################
# if settings were set we were modifying bridge settings
# only
pass
else:
module.exit_json(
failed=True,
changed=False,
)
if changed:
module.exit_json(
failed=False,
changed=True,
msg=changed_message
)
else:
module.exit_json(
failed=False,
changed=False,
)
if __name__ == '__main__':
main()

View file

@ -1,247 +0,0 @@
# -*- coding: utf-8 -*-
DOCUMENTATION = '''
module: mt_interface_bridge_port
author:
- "Valentin Gurmeza"
- "Shaun Smiley"
version_added: "2.3"
short_description: Manage mikrotik bridge_port
requirements:
- mt_api
description:
- add, remove, or modify a bridge_port.
options:
hostname:
description:
- hotstname of mikrotik router
required: True
username:
description:
- username used to connect to mikrotik router
required: True
password:
description:
- password used for authentication to mikrotik router
required: True
state:
description:
- inteface present or absent in the bridge
required: True
choices:
- present
- absent
comment:
description:
- brige comment
auto_isolate:
description:
- Prevents STP blocking port from erroneously moving into a forwarding state if no BPDU's are received on the bridge
choices:
- yes
- no
bridge:
description:
- The bridge interface the respective interface is grouped in
edge:
description:
- Set port as edge port or non-edge port, or enable automatic detection. Edge ports are connected to a LAN that has no other bridge attached. If the port is configured to discover edge port then as soon as the bridge_ detects a BPDU coming to an edge port, the port becomes a non-edge port
choices:
- auto
- no
- no-discover
- yes
- yes-discover
external_fdb:
description:
- Whether to use wireless registration table to speed up bridge host learning
choices:
- yes
- no
- auto
horizon:
description:
- Use split horizon bridging to prevent bridging loops
interface:
description:
- Name of the interface
path_cost:
description:
- Path cost to the interface, used by STP to determine the "best" path
point_to_point:
description:
- point to point
choices:
- yes
- no
- auto
priority:
description:
- The priority of the interface in comparison with other going to the same subnet
'''
EXAMPLES = '''
- mt_interface_bridge_port:
hostname: "{{ inventory_hostname }}"
username: "{{ mt_user }}"
password: "{{ mt_pass }}"
state: present
name: bridge_port_native
interface: ether7
comment: ansible_test
'''
from ansible.module_utils import mt_api
from ansible.module_utils.mt_common import clean_params
from ansible.module_utils.basic import AnsibleModule
def main():
module = AnsibleModule(
argument_spec=dict(
hostname =dict(required=True),
username =dict(required=True),
password =dict(required=True, no_log=True),
interface =dict(required=True, type='str'),
bridge =dict(required=False, type='str'),
comment =dict(required=False, type='str'),
path_cost =dict(required=False, type='str'),
priority =dict(required=False, type='str'),
horizon =dict(required=False, type='str'),
external_fdb=dict(
required=False,
choices=['yes', 'no', 'auto'],
type='str'
),
auto_isolate=dict(
required=False,
choices=['yes', 'no'],
type='str'
),
edge=dict(
required=False,
choices=['auto', 'yes', 'no', 'no-discover', 'yes-discover'],
type='str'
),
point_to_point=dict(
required=False,
choices=['yes', 'no', 'auto'],
type='str'
),
state=dict(
required=True,
choices=['present', 'absent'],
type='str'
),
),
supports_check_mode=True
)
hostname = module.params['hostname']
username = module.params['username']
password = module.params['password']
state = module.params['state']
ansible_bridge_port_interface = module.params['interface']
changed = False
changed_message = []
check_mode = module.check_mode
msg = ""
mk = mt_api.Mikrotik(hostname, username, password)
try:
mk.login()
except:
module.fail_json(
msg="Could not log into Mikrotik device." +
" Check the username and password.",
)
bridge_port_path = '/interface/bridge/port'
response = mk.api_print(base_path=bridge_port_path)
bridge_port_params = module.params
mikrotik_bridge_port = {}
for item in response:
if 'interface' in item[1].keys():
if ansible_bridge_port_interface == item[1]['interface']:
mikrotik_bridge_port = item[1]
#######################################
# remove unneeded parameters
######################################
remove_params = ['hostname', 'username', 'password', 'state']
for i in remove_params:
del bridge_port_params[i]
##########################################
# modify clean_params in place
############################################
clean_params(bridge_port_params)
if '.id' in mikrotik_bridge_port:
client_id = mikrotik_bridge_port['.id']
else:
client_id = False
if state == "present":
if mikrotik_bridge_port == {}:
if not check_mode:
mk.api_add(
base_path=bridge_port_path,
params=bridge_port_params
)
changed_message.append(ansible_bridge_port_interface + " added to bridge")
changed = True,
else:
bridge_port_diff_keys = {}
for key in bridge_port_params:
if key in mikrotik_bridge_port:
if bridge_port_params[key] != mikrotik_bridge_port[key]:
bridge_port_diff_keys[key] = bridge_port_params[key]
else:
bridge_port_diff_keys[key] = bridge_port_params[key]
if bridge_port_diff_keys != {}:
bridge_port_diff_keys['numbers'] = client_id
if not check_mode:
mk.api_edit(base_path=bridge_port_path, params=bridge_port_diff_keys)
changed = True
changed_message.append("Changed bridge port: " + bridge_port_params['bridge'])
else:
####################
# Already up date
###################
if not changed:
changed = False
elif state == "absent":
if client_id:
if not check_mode:
mk.api_remove(base_path=bridge_port_path, remove_id=client_id)
changed_message.append(bridge_port_params['interface'] + " removed")
changed = True
#####################################################
# if client_id is not set there is nothing to remove
#####################################################
else:
if not changed:
changed = False
else:
module.exit_json(
failed=True,
changed=False,
)
if changed:
module.exit_json(
failed=False,
changed=True,
msg=changed_message
)
else:
module.exit_json(
failed=False,
changed=False,
)
if __name__ == '__main__':
main()

View file

@ -9,7 +9,7 @@ short_description: Manage mikrotik interfaces
requirements: requirements:
- mt_api - mt_api
description: description:
- manage settings on interfaces - manage interfaces and settings
options: options:
hostname: hostname:
description: description:
@ -28,9 +28,12 @@ options:
- sub endpoint for mikrotik tool - sub endpoint for mikrotik tool
required: True required: True
options: options:
- ovpn-client
- ethernet - ethernet
- vlan - vlan
- ovpn-client - bridge
- bridge port
- bridge settings
settings: settings:
description: description:
- All Mikrotik compatible parameters for this particular endpoint. - All Mikrotik compatible parameters for this particular endpoint.
@ -39,6 +42,7 @@ options:
state: state:
description: description:
- absent or present - absent or present
required: Flase
''' '''
EXAMPLES = ''' EXAMPLES = '''
@ -65,12 +69,19 @@ def main():
username=dict(required=True), username=dict(required=True),
password=dict(required=True, no_log=True), password=dict(required=True, no_log=True),
settings=dict(required=True, type='dict'), settings=dict(required=True, type='dict'),
parameter = dict( parameter=dict(
required = True, required=True,
choices = ['ethernet', 'vlan', 'ovpn-client'], choices=[
type = 'str' 'ethernet',
'vlan',
'ovpn-client',
'bridge',
'bridge port',
'bridge settings'
],
type='str'
), ),
state = dict( state=dict(
required = False, required = False,
choices = ['present', 'absent'], choices = ['present', 'absent'],
type = 'str' type = 'str'
@ -80,7 +91,14 @@ def main():
) )
params = module.params params = module.params
idempotent_parameter = 'name' if params['parameter'] == 'bridge port':
params['parameter'] = 'bridge/port'
idempotent_parameter = "interface"
elif params['parameter'] == 'bridge settings':
params['parameter'] = 'bridge/settings'
idempotent_parameter = None
else:
idempotent_parameter = 'name'
mt_obj = MikrotikIdempotent( mt_obj = MikrotikIdempotent(
hostname = params['hostname'], hostname = params['hostname'],

View file

@ -1,23 +1,37 @@
--- ---
- name: Add bridge1 - name: add eoip interface
mt_interface_bridge: mt_command:
hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}"
password: "{{ mt_pass }}"
command: /interface/eoip/add
command_arguments:
name: eoip-interface1
ignore_errors: yes
- name: Add bridge1
mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
name: "{{ item }}"
state: present state: present
arp: proxy-arp parameter: bridge
settings:
name: "{{ item }}"
arp: proxy-arp
with_items: with_items:
- "bridge1" - "bridge1"
- name: Add bridge1 again (idempotency test) - name: Add bridge1 again (idempotency test)
mt_interface_bridge: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
name: "{{ item }}"
state: present state: present
arp: proxy-arp parameter: bridge
settings:
name: "{{ item }}"
arp: proxy-arp
with_items: with_items:
- "bridge1" - "bridge1"
register: mod_bridge1 register: mod_bridge1
@ -30,28 +44,32 @@
# bridge ports depend on bridge being created first # bridge ports depend on bridge being created first
- name: Add interface to bridge1 (port) - name: Add interface to bridge1 (port)
mt_interface_bridge_port: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
bridge: "{{ item[0] }}" parameter: "bridge port"
interface: "{{ item[1] }}"
state: present state: present
settings:
bridge: "{{ item[0] }}"
interface: "{{ item[1] }}"
with_nested: with_nested:
- [ "bridge1" ] - [ "bridge1" ]
- [ "ether8" ] - [ "ether2" ]
- name: Add interface to bridge1 (port) again (idempotency test) - name: Add interface to bridge1 (port) again (idempotency test)
mt_interface_bridge_port: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
bridge: "{{ item[0] }}" parameter: "bridge port"
interface: "{{ item[1] }}"
state: present state: present
settings:
bridge: "{{ item[0] }}"
interface: "{{ item[1] }}"
with_nested: with_nested:
- [ "bridge1" ] - [ "bridge1" ]
- [ "ether8" ] - [ "ether2" ]
register: mod_bridge1_port register: mod_bridge1_port
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode
@ -60,30 +78,31 @@
) )
- name: Add additional param to bridge port - name: Add additional param to bridge port
mt_interface_bridge_port: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
bridge: "{{ item[0] }}" parameter: "bridge port"
interface: "{{ item[1] }}"
edge: "{{ item[2] }}"
state: present state: present
settings:
bridge: "{{ item[0] }}"
interface: "{{ item[1] }}"
edge: "{{ item[2] }}"
with_nested: with_nested:
- [ "bridge1" ] - [ "bridge1" ]
- [ "ether8" ] - [ "ether2" ]
- [ "yes-discover" ] - [ "yes-discover" ]
- name: ALWAYS_CHANGES Add 2nd interface to bridge1 port - name: ALWAYS_CHANGES Add 2nd interface to bridge1 port
mt_interface_bridge_port: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
bridge: bridge1 parameter: "bridge port"
interface: ether7 state: present
state: present settings:
with_nested: bridge: bridge1
- [ "bridge1" ] interface: eoip-tunnel1
- [ "ether7" ]
register: bridge1_add_2nd_inter register: bridge1_add_2nd_inter
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode
@ -92,16 +111,15 @@
) )
- name: ALWAYS_CHANGES Remove 2nd interface to bridge1 port - name: ALWAYS_CHANGES Remove 2nd interface to bridge1 port
mt_interface_bridge_port: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
bridge: bridge1 parameter: "bridge port"
interface: ether7
state: absent state: absent
with_nested: settings:
- [ "bridge1" ] bridge: bridge1
- [ "ether7" ] interface: "eoip-tunnel1"
register: bridge1_rem_2nd_inter register: bridge1_rem_2nd_inter
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode
@ -110,39 +128,38 @@
) )
- name: Add bridge2 - name: Add bridge2
mt_interface_bridge: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
state: present parameter: "bridge"
name: "{{ item.key }}" state: present
arp: "{{ item.value.arp }}" settings:
with_dict: name: "bridge2"
bridge2: arp: "reply-only"
arp: "reply-only"
- name: Adjust settings - name: Adjust settings
mt_interface_bridge: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
#state: present parameter: "bridge settings"
settings: settings:
allow-fast-path: yes allow-fast-path: "yes"
use-ip-firewall-for-vlan: yes use-ip-firewall: "yes"
use-ip-firewall-for-pppoe: no use-ip-firewall-for-vlan: "yes"
use-ip-firewall-for-pppoe: "no"
- name: Adjust settings (test changes) - name: Adjust settings (test changes)
mt_interface_bridge: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
#state: present parameter: "bridge settings"
settings: settings:
allow-fast-path: yes allow-fast-path: "yes"
use-ip-firewall-for-vlan: no use-ip-firewall-for-vlan: "no"
use-ip-firewall-for-pppoe: no use-ip-firewall-for-pppoe: "no"
register: bridge_settings_1 register: bridge_settings_1
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode
@ -151,15 +168,15 @@
) )
- name: Adjust settings again (idempotency test) - name: Adjust settings again (idempotency test)
mt_interface_bridge: mt_interfaces:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
#state: present parameter: "bridge settings"
settings: settings:
allow-fast-path: yes allow-fast-path: "yes"
use-ip-firewall-for-vlan: no use-ip-firewall-for-vlan: "no"
use-ip-firewall-for-pppoe: no use-ip-firewall-for-pppoe: "no"
register: bridge_settings_2 register: bridge_settings_2
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode

View file

@ -20,8 +20,8 @@
settings: settings:
name: ansible_test name: ansible_test
address-pool: 'pool1' address-pool: 'pool1'
interface: ether1 interface: ether2
use-radius: "yes" always-broadcast: "yes"
authoritative: after-2sec-delay authoritative: after-2sec-delay
- name: ALWAYS_CHANGES Test editing an existing dhcp server (change authoritative) - name: ALWAYS_CHANGES Test editing an existing dhcp server (change authoritative)
@ -35,7 +35,7 @@
name: ansible_test name: ansible_test
address-pool: 'pool1' address-pool: 'pool1'
interface: ether1 interface: ether1
use-radius: "yes" always-broadcast: "yes"
authoritative: after-10sec-delay authoritative: after-10sec-delay
register: dhcp_server_test_1_edit register: dhcp_server_test_1_edit
failed_when: ( failed_when: (
@ -55,7 +55,7 @@
name: ansible_test name: ansible_test
address-pool: 'pool1' address-pool: 'pool1'
interface: ether1 interface: ether1
use-radius: "yes" always-broadcast: "yes"
register: dhcp_server_test_1_duplicate register: dhcp_server_test_1_duplicate
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode
@ -71,7 +71,7 @@
state: "present" state: "present"
parameter: dhcp-server parameter: dhcp-server
settings: settings:
interface: "ether5" interface: "ether2"
name: "ansible_test_2" name: "ansible_test_2"
register: dhcp_server_test_2 register: dhcp_server_test_2
failed_when: ( failed_when: (

View file

@ -9,7 +9,7 @@
settings: settings:
name: vlan_test1 name: vlan_test1
vlan_id: 30 vlan_id: 30
interface: ether3 interface: ether1
comment: Testing vlan1 comment: Testing vlan1
- name: NEVER_CHANGES Test adding duplicate vlan interface - name: NEVER_CHANGES Test adding duplicate vlan interface
@ -22,7 +22,7 @@
settings: settings:
name: vlan_test1 name: vlan_test1
vlan_id: 30 vlan_id: 30
interface: ether3 interface: ether1
register: vlan_test_1_add register: vlan_test_1_add
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode
@ -40,7 +40,7 @@
settings: settings:
name: vlan_test2 name: vlan_test2
vlan_id: 32 vlan_id: 32
interface: ether4 interface: ether2
register: vlan_test_2_add register: vlan_test_2_add
failed_when: ( failed_when: (
not ansible_check_mode not ansible_check_mode
@ -58,7 +58,7 @@
settings: settings:
name: vlan_test1 name: vlan_test1
vlan_id: 36 vlan_id: 36
interface: ether3 interface: ether1
comment: "testing ansible stuff" comment: "testing ansible stuff"
register: vlan_test_1_edit register: vlan_test_1_edit
failed_when: ( failed_when: (

View file

@ -1,4 +1,21 @@
--- ---
- name: generate bridge interfaces for testing ip addresses
mt_interfaces:
hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}"
password: "{{ mt_pass }}"
state: present
parameter: bridge
settings:
name: "{{ item }}"
arp: proxy-arp
with_items:
- "bridge1"
- "bridge2"
- "bridge3"
- "bridge4"
- name: ALWAYS_CHANGES Test adding an ip addr ether2 - name: ALWAYS_CHANGES Test adding an ip addr ether2
mt_ip_address: mt_ip_address:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
@ -11,26 +28,26 @@
register: ip_addr_add_2 register: ip_addr_add_2
failed_when: not ( ip_addr_add_2 | changed ) failed_when: not ( ip_addr_add_2 | changed )
- name: Test adding an ip addr with comment ether3 - name: Test adding an ip addr with comment bridge2
mt_ip_address: mt_ip_address:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
state: "present" state: "present"
interface: "ether3" interface: "bridge2"
address: "192.168.88.3/24" address: "192.168.88.3/24"
comment: "interface #3!!!" comment: "bridge #2!!!"
- name: Test adding an ip addr with comment and network ether4 - name: Test adding an ip addr with comment and network bridge3
mt_ip_address: mt_ip_address:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}" username: "{{ mt_user }}"
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
state: "present" state: "present"
interface: "ether4" interface: "bridge3"
address: "192.168.88.4/24" address: "192.168.88.4/24"
network: "192.168.88.0" network: "192.168.88.0"
comment: "interface #4!!!" comment: "bridge #3!!!"
- name: ALWAYS_CHANGES Test removing ip addr ether2 - name: ALWAYS_CHANGES Test removing ip addr ether2
mt_ip_address: mt_ip_address:

View file

@ -8,6 +8,15 @@
settings: settings:
name: Test_mikrotik name: Test_mikrotik
- name: check if physical hardware
mt_command:
hostname: "{{ mt_hostname }}"
username: "{{ mt_user }}"
password: "{{ mt_pass }}"
command: /system/routerboard/print
register: routerboard
tags: routerboard
- name: set routerboard settings on physical device - name: set routerboard settings on physical device
mt_system: mt_system:
hostname: "{{ mt_hostname }}" hostname: "{{ mt_hostname }}"
@ -15,10 +24,9 @@
password: "{{ mt_pass }}" password: "{{ mt_pass }}"
parameter: routerboard_settings parameter: routerboard_settings
settings: settings:
#protected-routerboot: disabled protected-routerboot: disabled
boot-protocol: dhcp boot-protocol: dhcp
when: '"127.0.0.1" not in mt_hostname' when: routerboard['msg'][0][0][1]['routerboard'] != "false"
tags: routerboard_settings
- name: set clock - name: set clock
mt_system: mt_system: