mirror of
https://github.com/zahodi/ansible-mikrotik.git
synced 2025-07-22 20:04:27 +02:00
commit
e03fe77450
2 changed files with 333 additions and 142 deletions
|
@ -3,57 +3,93 @@ module: mt_ip_address
|
||||||
author:
|
author:
|
||||||
- "Valentin Gurmeza"
|
- "Valentin Gurmeza"
|
||||||
- "Shaun Smiley"
|
- "Shaun Smiley"
|
||||||
|
- "Antoni Matamalas"
|
||||||
version_added: "2.3"
|
version_added: "2.3"
|
||||||
short_description: Manage mikrotik /ip/addresses
|
short_description: Manage mikrotik /ip/addresses
|
||||||
requirements:
|
requirements:
|
||||||
- rosapi
|
- mt_api
|
||||||
description:
|
description:
|
||||||
- FILL ME OUT
|
- Manage addresses on interfaces
|
||||||
options:
|
options:
|
||||||
hostname:
|
hostname:
|
||||||
description:
|
description:
|
||||||
-
|
- hotstname of mikrotik router
|
||||||
|
required: True
|
||||||
username:
|
username:
|
||||||
description:
|
description:
|
||||||
-
|
- username used to connect to mikrotik router
|
||||||
|
required: True
|
||||||
password:
|
password:
|
||||||
description:
|
description:
|
||||||
-
|
- password used for authentication to mikrotik router
|
||||||
interface:
|
required: True
|
||||||
|
idempotent:
|
||||||
description:
|
description:
|
||||||
-
|
- parameter that will define the behavior for the ip address status.
|
||||||
address:
|
- If "interface" is used, only one IP will be allowed per interface.
|
||||||
|
The "state" parameter will define if the IP is added, edited or
|
||||||
|
removed. No settings options are required to removed the IP from an
|
||||||
|
interface
|
||||||
|
- If "address" is used, and interface will be able to have multiple IPs,
|
||||||
|
but address will only be added or removed. In order to change an IP, it
|
||||||
|
will have to be first removed and then added to the interface in two
|
||||||
|
tasks.
|
||||||
|
required: False
|
||||||
|
default: address
|
||||||
|
settings:
|
||||||
description:
|
description:
|
||||||
-
|
- All Mikrotik compatible parameters for this particular endpoint.
|
||||||
network:
|
Any yes/no values must be enclosed in double quotes
|
||||||
description:
|
required: True
|
||||||
-
|
|
||||||
state:
|
state:
|
||||||
description:
|
description:
|
||||||
-
|
- Depending on the idempotent option, it will define the status of the IP
|
||||||
force:
|
on an interface
|
||||||
description:
|
required: False
|
||||||
- True/False value to force removing the address on an interface
|
default: present
|
||||||
even if the address does not match.
|
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
|
# Add IP to an interface with a comment. If the interface has already an IP it
|
||||||
|
# will add as a sencond IP
|
||||||
- mt_ip_address:
|
- mt_ip_address:
|
||||||
hostname: "{{ inventory_hostname }}"
|
hostname: "{{ inventory_hostname }}"
|
||||||
username: "{{ mt_user }}"
|
username: "{{ mt_user }}"
|
||||||
password: "{{ mt_pass }}"
|
password: "{{ mt_pass }}"
|
||||||
interface: "ether2"
|
idempotent: "address"
|
||||||
address: "192.168.88.2/24"
|
|
||||||
network: "192.168.88.0/24"
|
|
||||||
state: "present"
|
state: "present"
|
||||||
comment: "link 3"
|
settings:
|
||||||
|
interface: "ether2"
|
||||||
|
address: "192.168.88.2/24"
|
||||||
|
network: "192.168.88.0/24"
|
||||||
|
comment: "link 3"
|
||||||
|
|
||||||
|
# Assign IP to the interface. If the interface has any previous IP, it will be
|
||||||
|
# replaced by this one.
|
||||||
|
- mt_ip_address:
|
||||||
|
hostname: "{{ inventory_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
idempotent: "interface"
|
||||||
|
state: "present"
|
||||||
|
settings:
|
||||||
|
interface: "ether2"
|
||||||
|
address: "192.168.88.2/24"
|
||||||
|
network: "192.168.88.0/24"
|
||||||
|
comment: "link 3"
|
||||||
|
|
||||||
|
# Remove any IP from an interface
|
||||||
|
- mt_ip_address:
|
||||||
|
hostname: "{{ inventory_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
idempotent: "interface"
|
||||||
|
state: "absent"
|
||||||
|
settings:
|
||||||
|
interface: "ether2"
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils import mt_api
|
from ansible.module_utils.mt_common import clean_params, MikrotikIdempotent
|
||||||
import socket
|
|
||||||
|
|
||||||
#import mt_action #TODO: get this working
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,120 +100,66 @@ def main():
|
||||||
hostname = dict(required=True),
|
hostname = dict(required=True),
|
||||||
username = dict(required=True),
|
username = dict(required=True),
|
||||||
password = dict(required=True, no_log=True),
|
password = dict(required=True, no_log=True),
|
||||||
interface = dict(required=True, type='str'),
|
settings = dict(required=True, type='dict'),
|
||||||
address = dict(required=True, type='str', aliases=['ip', 'addr', 'ip_address']),
|
idempotent = dict(
|
||||||
network = dict(required=False, type='str', default=""),
|
required = False,
|
||||||
comment = dict(required=False, type='str', default=""),
|
default = 'address',
|
||||||
|
choices = ['address', 'interface'],
|
||||||
|
type = 'str'
|
||||||
|
),
|
||||||
state = dict(
|
state = dict(
|
||||||
required = False,
|
required = False,
|
||||||
default = "present",
|
default = "present",
|
||||||
choices = ['present', 'absent'],
|
choices = ['present', 'absent'],
|
||||||
type = 'str'
|
type = 'str'
|
||||||
),
|
),
|
||||||
)
|
),
|
||||||
|
supports_check_mode=True
|
||||||
)
|
)
|
||||||
|
|
||||||
hostname = module.params['hostname']
|
params = module.params
|
||||||
username = module.params['username']
|
mt_obj = MikrotikIdempotent(
|
||||||
password = module.params['password']
|
hostname = params['hostname'],
|
||||||
ip_address = module.params['address']
|
username = params['username'],
|
||||||
interface = module.params['interface']
|
password = params['password'],
|
||||||
network = module.params['network']
|
state = params['state'],
|
||||||
ip_state = module.params['state']
|
desired_params = params['settings'],
|
||||||
comment = module.params['comment']
|
idempotent_param = params['idempotent'],
|
||||||
changed = False
|
api_path = '/ip/address',
|
||||||
msg = ""
|
check_mode = module.check_mode
|
||||||
|
)
|
||||||
|
|
||||||
interface_path = '/interface'
|
# exit if login failed
|
||||||
address_path = '/ip/address'
|
if not mt_obj.login_success:
|
||||||
address_print_params = {
|
|
||||||
".proplist": "interface,address,.id,network,netmask,comment"
|
|
||||||
}
|
|
||||||
interface_print_params = {
|
|
||||||
".proplist": "name,.id,type"
|
|
||||||
}
|
|
||||||
mk = mt_api.Mikrotik(hostname,username,password)
|
|
||||||
try:
|
|
||||||
mk.login()
|
|
||||||
interfaces = mk.api_print(interface_path, interface_print_params)
|
|
||||||
except:
|
|
||||||
module.fail_json(
|
module.fail_json(
|
||||||
msg="Could not log into Mikrotik device." +
|
msg = mt_obj.failed_msg
|
||||||
" Check the username and password.",
|
|
||||||
)
|
)
|
||||||
|
|
||||||
###################################
|
# add, remove or edit things
|
||||||
# Check if interface is present
|
mt_obj.sync_state()
|
||||||
# exit if interface is not present
|
|
||||||
###################################
|
|
||||||
interfacelist = []
|
|
||||||
exitmessage = []
|
|
||||||
for i in range(0, len(interfaces) - 1):
|
|
||||||
interfacelist.append(interfaces[i][1]["name"])
|
|
||||||
intExists = False
|
|
||||||
|
|
||||||
if (interface in interfacelist):
|
if mt_obj.failed:
|
||||||
intExists = True
|
module.fail_json(
|
||||||
# module.exit_json(failed=False, changed=False, msg=interfacelist)
|
msg = mt_obj.failed_msg
|
||||||
if intExists:
|
)
|
||||||
pass
|
elif mt_obj.changed:
|
||||||
#exitmessage.append("Interface " + interface + " exists.") #this is never used
|
module.exit_json(
|
||||||
|
failed=False,
|
||||||
|
changed=True,
|
||||||
|
msg=mt_obj.changed_msg,
|
||||||
|
diff={ "prepared": {
|
||||||
|
"old": mt_obj.old_params,
|
||||||
|
"new": mt_obj.new_params,
|
||||||
|
}},
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
exitmessage.append("Interface " + interface + " does not exist.")
|
module.exit_json(
|
||||||
module.fail_json(failed=True, msg=exitmessage)
|
failed=False,
|
||||||
|
changed=False,
|
||||||
##############################################
|
#msg='',
|
||||||
# Check if IP address is set on the interface
|
msg=params['settings'],
|
||||||
# make no changes if address already set
|
)
|
||||||
##############################################
|
|
||||||
ip_addresses = mk.api_print(address_path, address_print_params)
|
|
||||||
|
|
||||||
iplist = []
|
|
||||||
for i in range(0, len(ip_addresses) - 1):
|
|
||||||
iplist.append(ip_addresses[i][1]["address"])
|
|
||||||
if ip_addresses[i][1]["address"] == ip_address:
|
|
||||||
ip_id = ip_addresses[i][1][".id"]
|
|
||||||
|
|
||||||
if ip_state == "present":
|
|
||||||
if ip_address in iplist:
|
|
||||||
module.exit_json(
|
|
||||||
failed=False,
|
|
||||||
#msg="IP Address: " + ip_address +
|
|
||||||
#" is already configured" +
|
|
||||||
#" on interface " + interface,
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
add_dict = {
|
|
||||||
'address': ip_address,
|
|
||||||
'interface': interface,
|
|
||||||
'comment': comment
|
|
||||||
}
|
|
||||||
response = mk.api_add(address_path, add_dict)
|
|
||||||
module.exit_json(
|
|
||||||
failed=False,
|
|
||||||
changed=True,
|
|
||||||
#msg="IP address: " + ip_address + " has been configured" +
|
|
||||||
#" on interface " + interface
|
|
||||||
)
|
|
||||||
|
|
||||||
if ip_state == "absent":
|
|
||||||
if ip_address in iplist:
|
|
||||||
response = mk.api_remove(address_path, ip_id)
|
|
||||||
module.exit_json(
|
|
||||||
failed=False,
|
|
||||||
changed=True,
|
|
||||||
#msg="IP Address: " + ip_address +
|
|
||||||
#" has been removed"
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
module.exit_json(
|
|
||||||
failed=False,
|
|
||||||
changed=False,
|
|
||||||
#msg="IP Address: " + ip_address +
|
|
||||||
#" is already absent"
|
|
||||||
)
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
|
|
@ -16,46 +16,255 @@
|
||||||
- "bridge3"
|
- "bridge3"
|
||||||
- "bridge4"
|
- "bridge4"
|
||||||
|
|
||||||
- name: ALWAYS_CHANGES Test adding an ip addr ether2
|
- name: Remove any ip from bridge interfaces
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: absent
|
||||||
|
idempotent: interface
|
||||||
|
settings:
|
||||||
|
interface: "{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- "bridge1"
|
||||||
|
- "bridge2"
|
||||||
|
- "bridge3"
|
||||||
|
- "bridge4"
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Test adding an ip addr 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: "ether2"
|
settings:
|
||||||
address: "192.168.88.2/24"
|
interface: "bridge2"
|
||||||
network: "192.168.88.0"
|
address: "192.168.88.2/24"
|
||||||
|
network: "192.168.88.0"
|
||||||
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 bridge2
|
- name: NEVER_CHANGES Test adding the same ip addr again to 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: "bridge2"
|
settings:
|
||||||
address: "192.168.88.3/24"
|
interface: "bridge2"
|
||||||
comment: "bridge #2!!!"
|
address: "192.168.88.2/24"
|
||||||
|
network: "192.168.88.0"
|
||||||
|
register: ip_addr_add_2
|
||||||
|
failed_when: ip_addr_add_2 | changed
|
||||||
|
|
||||||
- name: Test adding an ip addr with comment and network bridge3
|
- name: Test adding an ip addr with comment 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: "bridge3"
|
settings:
|
||||||
address: "192.168.88.4/24"
|
interface: "bridge3"
|
||||||
network: "192.168.88.0"
|
address: "192.168.88.3/24"
|
||||||
comment: "bridge #3!!!"
|
comment: "bridge #3!!!"
|
||||||
|
|
||||||
- name: ALWAYS_CHANGES Test removing ip addr ether2
|
- name: Test adding an ip addr with comment and network bridge4
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
address: "192.168.88.4/24"
|
||||||
|
network: "192.168.88.0"
|
||||||
|
comment: "bridge4 first addition"
|
||||||
|
|
||||||
|
- name: Test adding a second ip addr with comment and network bridge4
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
address: "192.168.88.5/24"
|
||||||
|
network: "192.168.88.0"
|
||||||
|
comment: "bridge #4 second addition"
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Test removing ip addr 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: "absent"
|
state: "absent"
|
||||||
interface: "ether2"
|
settings:
|
||||||
address: "192.168.88.2/24"
|
interface: "bridge2"
|
||||||
|
address: "192.168.88.2/24"
|
||||||
register: ip_addr_rem_2
|
register: ip_addr_rem_2
|
||||||
failed_when: not ( ip_addr_rem_2 | changed )
|
failed_when: not ( ip_addr_rem_2 | changed )
|
||||||
|
|
||||||
|
- name: NEVER_CHANGES Test removing ip addr bridge2 again
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "absent"
|
||||||
|
settings:
|
||||||
|
interface: "bridge2"
|
||||||
|
address: "192.168.88.2/24"
|
||||||
|
register: ip_addr_rem_2
|
||||||
|
failed_when: ip_addr_rem_2 | changed
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Test removing an ip addr from bridge4
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "absent"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
address: "192.168.88.4/24"
|
||||||
|
register: ip_addr_rem_4
|
||||||
|
failed_when: not (ip_addr_rem_4 | changed )
|
||||||
|
|
||||||
|
- name: NEVER_CHANGES Verify ip addr from bridge4 has been removed
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "absent"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
address: "192.168.88.4/24"
|
||||||
|
register: ip_addr_rem_4
|
||||||
|
failed_when: ip_addr_rem_4 | changed
|
||||||
|
|
||||||
|
- name: NEVER_CHANGES Verify that we have the right ip address in bridge4
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
address: "192.168.88.5/24"
|
||||||
|
register: ip_addr_rem_4
|
||||||
|
failed_when: ip_addr_rem_4 | changed
|
||||||
|
|
||||||
|
- name: Remove any IP from bridge interfaces
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: absent
|
||||||
|
idempotent: interface
|
||||||
|
settings:
|
||||||
|
interface: "{{ item }}"
|
||||||
|
with_items:
|
||||||
|
- "bridge1"
|
||||||
|
- "bridge2"
|
||||||
|
- "bridge3"
|
||||||
|
- "bridge4"
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Add ip using idempotent interface on bridge2
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge2"
|
||||||
|
address: "192.168.89.2/24"
|
||||||
|
register: ip_addr_rem_2
|
||||||
|
failed_when: not (ip_addr_rem_2 | changed)
|
||||||
|
|
||||||
|
- name: NEVER_CHANGES Add AGAIN ip using idempotent interface on bridge2
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge2"
|
||||||
|
address: "192.168.89.2/24"
|
||||||
|
register: ip_addr_rem_2
|
||||||
|
failed_when: ip_addr_rem_2 | changed
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Add ip using idempotent interface on bridge3
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge3"
|
||||||
|
address: "192.168.89.3/24"
|
||||||
|
register: ip_addr_rem_3
|
||||||
|
failed_when: not (ip_addr_rem_3 | changed)
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Remove ip using idempotent interface on bridge3
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "absent"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge3"
|
||||||
|
register: ip_addr_rem_3
|
||||||
|
failed_when: not (ip_addr_rem_3 | changed)
|
||||||
|
|
||||||
|
- name: NEVER_CHANGES Remove ip AGAIN using idempotent interface on bridge3
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "absent"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge3"
|
||||||
|
register: ip_addr_rem_3
|
||||||
|
failed_when: ip_addr_rem_3 | changed
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Add ip using idempotent interface on bridge4
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
address: "192.168.89.4/24"
|
||||||
|
register: ip_addr_rem_4
|
||||||
|
failed_when: not (ip_addr_rem_4 | changed)
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Edit ip using idempotent interface on bridge4
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
address: "192.168.89.5/24"
|
||||||
|
register: ip_addr_rem_4
|
||||||
|
failed_when: not (ip_addr_rem_4 | changed)
|
||||||
|
|
||||||
|
- name: ALWAYS_CHANGES Add comment using idempotent interface on bridge4
|
||||||
|
mt_ip_address:
|
||||||
|
hostname: "{{ mt_hostname }}"
|
||||||
|
username: "{{ mt_user }}"
|
||||||
|
password: "{{ mt_pass }}"
|
||||||
|
state: "present"
|
||||||
|
idempotent: "interface"
|
||||||
|
settings:
|
||||||
|
interface: "bridge4"
|
||||||
|
comment: "This is a final comment"
|
||||||
|
register: ip_addr_rem_4
|
||||||
|
failed_when: not (ip_addr_rem_4 | changed)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue