def test_create(self, *args):
        set_module_args(dict(image='/path/to/BIGIP-13.0.0.0.0.1645.iso', ))

        current = ApiParameters(
            params=load_fixture('load_sys_software_image_1.json'))
        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)

        # Override methods in the specific type of manager
        mm = ModuleManager(module=module)
        mm.exists = Mock(side_effect=[False, True])
        mm.read_current_from_device = Mock(return_value=current)
        mm.create_on_device = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert results['file_size'] == 1948
    def test_tenant_remove(self, *args):
        set_module_args(dict(
            name='foo',
            state='absent'
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.exists = Mock(side_effect=[True, False])
        mm.client.delete = Mock(return_value=dict(code=204, content={}))

        results = mm.exec_module()
        assert results['changed'] is True
        assert mm.client.delete.called
Beispiel #3
0
    def test_vlan_delete(self, *args):
        set_module_args(dict(
            vlan_id=3333,
            state='absent'
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )

        mm = ModuleManager(module=module)
        mm.exists = Mock(side_effect=[True, False])
        mm.client.delete = Mock(return_value=dict(code=204, contents=""))

        results = mm.exec_module()

        assert results['changed'] is True
        mm.client.delete.assert_called_once_with('/openconfig-vlan:vlans/vlan=3333')
Beispiel #4
0
    def test_vlan_create_name_provided(self, *args):
        set_module_args(dict(
            name="foobar",
            vlan_id=1234,
            state='present'
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        expected = {'openconfig-vlan:vlans': {'vlan': [{'vlan-id': 1234, 'config': {'vlan-id': 1234, 'name': 'foobar'}}]}}
        mm = ModuleManager(module=module)
        mm.exists = Mock(return_value=False)
        mm.client.patch = Mock(return_value=dict(code=201, contents={}))

        results = mm.exec_module()
        assert results['changed'] is True
        assert mm.client.patch.call_args[1]['data'] == expected
Beispiel #5
0
    def test_create(self, *args):
        set_module_args(
            dict(license_key='XXXX-XXXX-XXXX-XXXX-XXXX', accept_eula=True))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            required_if=self.spec.required_if)
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exists = Mock(side_effect=[False, True])
        mm.create_on_device = Mock(return_value=True)
        mm.wait_for_initial_license_activation = Mock(return_value=True)
        mm.wait_for_utility_license_activation = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
Beispiel #6
0
    def test_delete_icap_service_object_dump_json(self, *args):
        # Configure the arguments that would be sent to the Ansible module
        expected = load_fixture('sslo_icap_delete_generated.json')
        set_module_args(dict(name='foobar', state='absent', dump_json=True))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.client.get = Mock(return_value=dict(
            code=200, contents=load_fixture('load_sslo_service_icap.json')))

        results = mm.exec_module()

        assert results['changed'] is False
        assert results['json'] == expected
    def test_invalid_timeout(self, *args):
        set_module_args(
            dict(name='defaultbip',
                 state='configured',
                 delay=1,
                 sleep=3,
                 timeout=2))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.tenant_exists = Mock(side_effect=[False, False, False])

        with self.assertRaises(F5ModuleError):
            # exception: The combined delay and sleep should not be greater than or equal to the timeout.
            mm.exec_module()
Beispiel #8
0
    def test_modify_swg_service_object_defaults(self, *args):
        # Configure the arguments that would be sent to the Ansible module
        set_module_args(
            dict(name='swg_default',
                 rules=['/Common/test_rule_1', '/Common/test_rule_2'],
                 access_profile='/Common/test_access1'))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)

        exists = dict(
            code=200,
            contents=load_fixture('load_sslo_service_swg_default.json'))
        done = dict(
            code=200,
            contents=load_fixture('reply_sslo_swg_modify_defaults_done.json'))
        # Override methods to force specific logic in the module to happen
        mm.client.post = Mock(return_value=dict(
            code=202,
            contents=load_fixture(
                'reply_sslo_swg_modify_defaults_start.json')))
        mm.client.get = Mock(side_effect=[exists, exists, done])

        results = mm.exec_module()

        assert results['changed'] is True
        assert results['access_profile'] == '/Common/test_access1'
        assert results['rules'] == [{
            'name':
            '/Common/ssloS_swg_default.app/ssloS_swg_default-swg',
            'value':
            '/Common/ssloS_swg_default.app/ssloS_swg_default-swg'
        }, {
            'name': '/Common/test_rule_1',
            'value': '/Common/test_rule_1'
        }, {
            'name': '/Common/test_rule_2',
            'value': '/Common/test_rule_2'
        }]
    def test_import_image(self, *args):
        set_module_args(
            dict(
                image_name='F5OS-C-1.1.0-3198.PARTITION.iso',
                remote_host='fake.imageserver.foo.bar.com',
                remote_user='******',
                remote_password='******',
                remote_path='/test/',
                state='import',
            ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            required_if=self.spec.required_if)
        expected = {
            'input': [{
                'protocol': 'scp',
                'remote-host': 'fake.imageserver.foo.bar.com',
                'remote-file': '/test/F5OS-C-1.1.0-3198.PARTITION.iso',
                'username': '******',
                'password': '******',
                'local-file': ('/var/import/staging/', ),
                'insecure': ''
            }]
        }
        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.exists = Mock(return_value=False)
        mm.client.post = Mock(return_value=dict(
            code=200,
            contents=dict(load_fixture('start_partition_image_import.json'))))

        results = mm.exec_module()
        assert results['changed'] is True
        assert mm.client.post.call_args[1]['data'] == expected
        assert results['image_name'] == "F5OS-C-1.1.0-3198.PARTITION.iso"
        assert results[
            'remote_path'] == "/test/F5OS-C-1.1.0-3198.PARTITION.iso"
        assert results['iso_version'] == '1.1.0-3198'
        assert results[
            'message'] == "Image F5OS-C-1.1.0-3198.PARTITION.iso import started."
    def test_wait_provisioned(self, *args):
        """ Transition from configured to provisioned state. """
        set_module_args(dict(name='defaultbip', state='provisioned'))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.tenant_exists = Mock(side_effect=[True, True])
        configured_state = load_fixture('load_tenant_state_configured.json')
        provisioned_state = load_fixture('load_tenant_state_provisioned.json')
        mm.read_tenant_from_device = Mock(
            side_effect=[configured_state, provisioned_state])

        results = mm.exec_module()
        assert results['changed'] is False
        assert mm.tenant_exists.call_count == 2
        assert mm.read_tenant_from_device.call_count == 2
Beispiel #11
0
    def test_command_with_commas(self, *args):
        set_module_args(
            dict(commands="""
              tmsh create /auth ldap system-auth {bind-dn uid=binduser,
              cn=users,dc=domain,dc=com bind-pw $ENCRYPTEDPW check-roles-group
              enabled search-base-dn cn=users,dc=domain,dc=com servers add {
              ldap.server.com } }
            """))
        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)
        m1 = V2Manager(module=module)
        m1.execute_on_device = Mock(return_value=['resp1', 'resp2'])

        mm = ModuleManager(module=module)
        mm.get_manager = Mock(return_value=m1)

        results = mm.exec_module()

        assert results['changed'] is True
Beispiel #12
0
    def test_create(self, *args):
        set_module_args(
            dict(regkey_pool='foo',
                 license_key='XXXX-XXXX-XXXX-XXXX-XXXX',
                 accept_eula=True,
                 description='this is a description'))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exists = Mock(side_effect=[False, True])
        mm.create_on_device = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert results['description'] == 'this is a description'
    def test_import_from_file(self, *args):
        set_module_args(dict(name='fake_policy', source=self.policy))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            mutually_exclusive=self.spec.mutually_exclusive,
        )

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.exists = Mock(return_value=False)
        mm.import_file_to_device = Mock(return_value=True)
        mm.remove_temp_policy_from_device = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert results['name'] == 'fake_policy'
        assert results['source'] == self.policy
    def test_run_single_command(self, *args):
        set_module_args(
            dict(save='yes', reset='yes', merge_content='asdasd', verify='no'))
        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exit_json = Mock(return_value=True)
        mm.reset_device = Mock(return_value='reset output')
        mm.upload_to_device = Mock(return_value=True)
        mm.move_on_device = Mock(return_value=True)
        mm.merge_on_device = Mock(return_value='merge output')
        mm.remove_temporary_file = Mock(return_value=True)
        mm.save_on_device = Mock(return_value='save output')

        results = mm.exec_module()

        assert results['changed'] is True
    def test_change_password_fail(self, *args):
        set_module_args(dict(
            user_name='foo',
            old_password='******',
            new_password='******'
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.client.post = Mock(return_value=dict(code=400, contents=load_fixture('password_change_error.json')))

        with self.assertRaises(F5ModuleError) as err:
            mm.exec_module()

        assert 'Incorrect old password' in str(err.exception)
    def test_change_password_same_password_raises(self, *args):
        set_module_args(dict(
            user_name='foo',
            old_password='******',
            new_password='******'
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)

        with self.assertRaises(F5ModuleError) as err:
            mm.exec_module()

        assert 'Old and new password cannot be the same.' in str(err.exception)
        assert mm.client.post.call_count == 0
Beispiel #17
0
    def test_remove_tenant_declaration(self, *args):
        set_module_args(dict(
            tenant='Sample_01',
            state='absent',
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            required_if=self.spec.required_if)
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.resource_exists = Mock(side_effect=[True, False])
        mm.remove_from_device = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert mm.want.timeout == (3, 100)
Beispiel #18
0
    def test_create(self, *args):
        set_module_args(
            dict(name='fake_policy', file='foobar.xml',
                 dest='/tmp/foobar.xml'))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            mutually_exclusive=self.spec.mutually_exclusive,
        )

        mm = ModuleManager(module=module)
        mm.want.binary = False
        mm.exists = Mock(return_value=False)
        mm.create_on_device = Mock(return_value=True)
        mm.execute = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
Beispiel #19
0
    def test_get_facts(self, *args):
        set_module_args(dict(gather_subset=['system-info'], ))

        fixture1 = load_fixture('load_shared_system_setup_1.json')

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)

        tm = SystemInfoFactManager(module=module)
        tm.read_collection_from_device = Mock(return_value=fixture1)

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.get_manager = Mock(return_value=tm)

        results = mm.exec_module()

        assert results['changed'] is True
        assert 'system_info' in results
Beispiel #20
0
    def test_upsert_ts_declaration_no_change(self, *args):
        declaration = load_fixture('ts_declaration.json')
        set_module_args(dict(
            content=declaration,
            state='present',
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            required_if=self.spec.required_if)
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.read_from_device = Mock(
            return_value=load_fixture('ts_response.json'))

        results = mm.exec_module()

        assert results['changed'] is False
    def test_start_declaration_task(self, *args):
        uuid = "e7550a12-994b-483f-84ee-761eb9af6750"
        declaration = load_fixture('do_declaration.json')
        set_module_args(dict(content=declaration, ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.upsert_on_device = Mock(
            return_value="e7550a12-994b-483f-84ee-761eb9af6750")
        results = mm.exec_module()

        assert results['changed'] is True
        assert results['task_id'] == uuid
        assert results[
            'message'] == "DO async task started with id: {0}".format(uuid)
Beispiel #22
0
    def test_create_fast_template_set(self, *args):
        set_module_args(dict(source='/var/fake/fake.zip', state='present'))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            required_if=self.spec.required_if,
        )
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exists = Mock(return_value=False)
        mm.create_on_device = Mock(return_value=True)
        mm.remove_temp_file_from_device = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert results['source'] == '/var/fake/fake.zip'
        assert results['name'] == 'fake'
Beispiel #23
0
    def test_vlans_parameter_missing(self, *args):
        # Configure the arguments that would be sent to the Ansible module
        set_module_args(dict(name='l2_topo_out', topology_type='inbound_l2'))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            mutually_exclusive=self.spec.mutually_exclusive,
            required_together=self.spec.required_together,
            required_if=self.spec.required_if)
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exists = Mock(return_value=False)
        mm.return_sslo_global = Mock(return_value=True)

        with self.assertRaises(F5ModuleError) as res:
            mm.exec_module()

        assert str(res.exception) == 'At least one VLAN must be defined.'
    def test_invalid_delay_timeout(self, *args):
        set_module_args(
            dict(
                name='foo',
                state='running',
                delay=2,
                sleep=2,
                timeout=1,
            ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode)

        # Override methods to force specific logic in the module to happen
        mm = ModuleManager(module=module)
        mm.partition_exists = Mock(side_effect=[False, False, False])

        with self.assertRaises(F5ModuleError):
            # exception: The delay should not be greater than or equal to the timeout.
            mm.exec_module()
    def test_check_declaration_task_status(self, *args):
        response = (200, {
            "result": {
                "status": "FINISHED",
                "message": "success"
            }
        })
        uuid = "e7550a12-994b-483f-84ee-761eb9af6750"
        set_module_args(dict(task_id=uuid, timeout=500))
        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)
        # Override methods to force specific logic in the module to happen
        mm._check_task_on_device = Mock(return_value=response)

        results = mm.exec_module()

        assert results['changed'] is True
        assert mm.want.timeout == (5.0, 100)
    def test_partition_interface_create_switched_vlan(self, *args):
        set_module_args(dict(name="2/1.0", trunk_vlans=[444], state='present'))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)
        mm.exists = Mock(return_value=True)
        mm.client.patch = Mock(return_value=dict(code=201, contents={}))
        fixdata = []
        fixdata.append(
            load_fixture("load_velos_partition_interface_config.json"))
        newdata = {
            "openconfig-interfaces:interface": fixdata,
        }
        mm.client.get = Mock(
            return_value=dict(code=200, contents=dict(newdata)))

        results = mm.exec_module()
        assert results['changed'] is False
Beispiel #27
0
    def test_create_swg_service_object_with_defaults_dump_json(self, *args):
        # Configure the arguments that would be sent to the Ansible module
        expected = load_fixture('sslo_swg_create_defaults_generated.json')
        set_module_args(
            dict(name='swg_default',
                 swg_policy='/Common/test-swg',
                 dump_json=True))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exists = Mock(return_value=False)

        results = mm.exec_module()

        assert results['changed'] is False
        assert results['json'] == expected
    def test_delete_authentication_object(self, *args):
        # Configure the arguments that would be sent to the Ansible module
        set_module_args(dict(name='foobar', state='absent'), )

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)
        exists = dict(code=200,
                      contents=load_fixture('load_sslo_config_auth.json'))
        done = dict(code=200,
                    contents=load_fixture('reply_sslo_auth_delete_done.json'))
        # Override methods to force specific logic in the module to happen
        mm.client.post = Mock(return_value=dict(
            code=202,
            contents=load_fixture('reply_sslo_auth_delete_start.json')))
        mm.client.get = Mock(side_effect=[exists, done])

        results = mm.exec_module()
        assert results['changed'] is True
Beispiel #29
0
    def test_remove_fast_template(self, *args):
        set_module_args(dict(
            name='fake',
            state='absent',
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
            required_if=self.spec.required_if,
        )
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exists = Mock(side_effect=[True, False])
        mm.remove_from_device = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert results['name'] == 'fake'
    def test_upsert_declaration(self, *args):
        declaration = load_fixture('as3_declare.json')
        set_module_args(dict(
            content=declaration,
            timeout=600
        ))

        module = AnsibleModule(
            argument_spec=self.spec.argument_spec,
            supports_check_mode=self.spec.supports_check_mode,
        )
        mm = ModuleManager(module=module)

        # Override methods to force specific logic in the module to happen
        mm.exists = Mock(return_value=False)
        mm.upsert_on_device = Mock(return_value=True)

        results = mm.exec_module()

        assert results['changed'] is True
        assert mm.want.timeout == (6, 100)