diff --git a/library/mt_interface_wireless.py b/library/mt_interface_wireless.py index c82302e..a062cdb 100644 --- a/library/mt_interface_wireless.py +++ b/library/mt_interface_wireless.py @@ -50,70 +50,69 @@ EXAMPLES = ''' ''' -from mt_common import clean_params, MikrotikIdempotent from ansible.module_utils.basic import AnsibleModule - +from mt_common import clean_params, MikrotikIdempotent def main(): - module = AnsibleModule( - argument_spec = dict( - hostname = dict(required=True), - username = dict(required=True), - password = dict(required=True), - settings = dict(required=False, type='dict'), - parameter = dict( - required = True, - choices = ['security-profiles'], - type = 'str' - ), - state = dict( - required = False, - choices = ['present', 'absent'], - type = 'str' - ), - ) + module = AnsibleModule( + argument_spec = dict( + hostname = dict(required=True), + username = dict(required=True), + password = dict(required=True), + settings = dict(required=False, type='dict'), + parameter = dict( + required = True, + choices = ['security-profiles'], + type = 'str' + ), + state = dict( + required = False, + choices = ['present', 'absent'], + type = 'str' + ), + ), + supports_check_mode=True + ) + + idempotent_parameter = None + params = module.params + + idempotent_parameter = 'name' + + mt_obj = MikrotikIdempotent( + hostname = params['hostname'], + username = params['username'], + password = params['password'], + state = params['state'], + desired_params = params['settings'], + idempotent_param = idempotent_parameter, + api_path = '/interface/wireless/' + str(params['parameter']), + check_mode = module.check_mode + ) + + mt_obj.sync_state() + + if mt_obj.failed: + module.fail_json( + msg = mt_obj.failed_msg + ) + elif mt_obj.changed: + module.exit_json( + failed=False, + changed=True, + msg=mt_obj.changed_msg, + diff={ "prepared": { + "old": mt_obj.old_params, + "new": mt_obj.new_params, + }}, ) - - idempotent_parameter = None - params = module.params - - idempotent_parameter = 'name' - - mt_obj = MikrotikIdempotent( - hostname = params['hostname'], - username = params['username'], - password = params['password'], - state = params['state'], - desired_params = params['settings'], - idempotent_param = idempotent_parameter, - api_path = '/interface/wireless/' + str(params['parameter']), - + else: + module.exit_json( + failed=False, + changed=False, + msg=params['settings'], ) - mt_obj.sync_state() - - if mt_obj.failed: - module.fail_json( - msg = mt_obj.failed_msg - ) - elif mt_obj.changed: - 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: - module.exit_json( - failed=False, - changed=False, - #msg='', - msg=params['settings'], - ) - if __name__ == '__main__': main() diff --git a/library/mt_interfaces.py b/library/mt_interfaces.py index ee3fa4f..eac851b 100644 --- a/library/mt_interfaces.py +++ b/library/mt_interfaces.py @@ -66,7 +66,7 @@ def main(): settings=dict(required=True, type='dict'), parameter = dict( required = True, - choices = ['ethernet', 'vlan'], + choices = ['ethernet', 'vlan', 'ovpn-client'], type = 'str' ), state = dict( @@ -89,7 +89,7 @@ def main(): desired_params = params['settings'], idempotent_param = idempotent_parameter, api_path = '/interface/' + str(params['parameter']), - check_mode = module.check_mode, + check_mode = module.check_mode ) # exit if login failed diff --git a/tests/integration/tests.yml b/tests/integration/tests.yml index a7550ec..f39904d 100644 --- a/tests/integration/tests.yml +++ b/tests/integration/tests.yml @@ -422,68 +422,97 @@ ################### - block: - name: Test adding ovpn-client - mt_interface_ovpn_client: - hostname: "{{ mt_hostname }}" - username: "{{ mt_user }}" - password: "{{ mt_pass }}" - state: present - comment: "ansible test 1" - user: ansible_admin - connect_to: 192.168.50.170 - name: ansible_test - vpn_password: 'blablabla' + mt_interfaces: + hostname: "{{ mt_hostname }}" + username: "{{ mt_user }}" + password: "{{ mt_pass }}" + state: present + parameter: ovpn-client + settings: + comment: "ansible test 1" + user: ansible_admin + connect-to: 192.168.50.170 + name: ansible_test + password: 'blablabla' + tags: vpn-client-test - name: NEVER_CHANGES Test adding duplicate ovpn-client - mt_interface_ovpn_client: - hostname: "{{ mt_hostname }}" - username: "{{ mt_user }}" - password: "{{ mt_pass }}" - state: present - comment: "ansible test 1" - user: ansible_admin - connect_to: 192.168.50.170 - name: ansible_test - vpn_password: 'blablabla' + mt_interfaces: + hostname: "{{ mt_hostname }}" + username: "{{ mt_user }}" + password: "{{ mt_pass }}" + state: present + parameter: ovpn-client + settings: + comment: "ansible test 1" + user: ansible_admin + connect-to: 192.168.50.170 + name: ansible_test + password: 'blablabla' register: ovpn_client_test_1_add - failed_when: ( ovpn_client_test_1_add | changed ) + failed_when: ( + not ansible_check_mode + ) and ( + ( ovpn_client_test_1_add | changed ) + ) + tags: vpn-client-test - name: ALWAYS_CHANGES Test editing an existing ovpn-client item (change address) - mt_interface_ovpn_client: - hostname: "{{ mt_hostname }}" - username: "{{ mt_user }}" - password: "{{ mt_pass }}" - state: present - comment: "ansible test 1" - user: ansible_admin - connect_to: 192.168.50.171 - auth: "null" - name: ansible_test - vpn_password: 'bar' + mt_interfaces: + hostname: "{{ mt_hostname }}" + username: "{{ mt_user }}" + password: "{{ mt_pass }}" + state: present + parameter: ovpn-client + settings: + comment: "ansible test 1" + user: ansible_admin + connect-to: 192.168.50.171 + auth: "null" + name: ansible_test + password: 'bar' register: ovpn_client_test_1_edit - failed_when: not ( ovpn_client_test_1_edit | changed ) + failed_when: ( + not ansible_check_mode + ) and ( + not ( ovpn_client_test_1_edit | changed ) + ) + tags: vpn-client-test - name: ALWAYS_CHANGES Test adding a second ovpn-client to later remove - mt_interface_ovpn_client: - hostname: "{{ mt_hostname }}" - username: "{{ mt_user }}" - password: "{{ mt_pass }}" - comment: "ansible test 2" - state: present - user: ansible_admin - connect_to: 192.168.52.111 - name: ansible_test2 + mt_interfaces: + hostname: "{{ mt_hostname }}" + username: "{{ mt_user }}" + password: "{{ mt_pass }}" + state: present + parameter: ovpn-client + settings: + user: ansible_admin + comment: "ansible test 2" + connect_to: 192.168.52.111 + name: ansible_test2 register: ovpn_client_test_2_add - failed_when: not ( ovpn_client_test_2_add | changed ) + failed_when: ( + not ansible_check_mode + ) and ( + not ( ovpn_client_test_2_add | changed ) + ) - name: ALWAYS_CHANGES Test remove ovpn-client - mt_interface_ovpn_client: - hostname: "{{ mt_hostname }}" - username: "{{ mt_user }}" - password: "{{ mt_pass }}" - state: absent - name: ansible_test2 + mt_interfaces: + hostname: "{{ mt_hostname }}" + username: "{{ mt_user }}" + password: "{{ mt_pass }}" + state: absent + parameter: ovpn-client + settings: + name: ansible_test2 register: ovpn_client_test_2_rem - failed_when: not ( ovpn_client_test_2_rem | changed ) + failed_when: ( + not ansible_check_mode + ) and ( + not ( ovpn_client_test_2_rem | changed ) + ) tags: ovpn-client ################### @@ -2163,7 +2192,11 @@ name: test1 supplicant-identity: test register: security_prof_idem - failed_when: ( security_prof_idem | changed ) + failed_when: ( + not ansible_check_mode + ) and ( + ( security_prof_idem | changed ) + ) - name: ALWAYS_CHANGES add security-profiles item, check idempotency mt_interface_wireless: @@ -2177,7 +2210,11 @@ supplicant-identity: test management-protection: allowed register: security_prof_edit - failed_when: not ( security_prof_edit | changed ) + failed_when: ( + not ansible_check_mode + ) and ( + not ( security_prof_edit | changed ) + ) - name: ALWAYS_CHANGES rem security-profiles item mt_interface_wireless: @@ -2189,6 +2226,10 @@ settings: name: test1 register: security_prof_rem - failed_when: not ( security_prof_rem | changed ) + failed_when: ( + not ansible_check_mode + ) and ( + not ( security_prof_rem | changed ) + ) tags: interface-wireless