예제 #1
0
def delete_gateway(ctx, name):
    try:
        restore_session(ctx, vdc_required=True)
        client = ctx.obj['client']
        vdc_href = ctx.obj['profiles'].get('vdc_href')
        vdc = VDC(client, href=vdc_href)
        task = vdc.delete_gateway(name)
        stdout(task, ctx)
    except Exception as e:
        stderr(e, ctx)
예제 #2
0
    def test_0098_teardown(self):
        """Removes the added vdc, gateway and routed networks.

        """
        vdc = VDC(TestIpSecVpn._client, resource=TestIpSecVpn._vdc_resource)
        task1 = vdc.delete_routed_orgvdc_network(
            name=TestIpSecVpn._routed_network_name)
        TestIpSecVpn._client.get_task_monitor().wait_for_success(task=task1)
        task2 = vdc.delete_gateway(name=TestIpSecVpn._gateway_name)
        TestIpSecVpn._client.get_task_monitor().wait_for_success(task=task2)
        vdc.enable_vdc(enable=False)
        vdc.delete_vdc()
예제 #3
0
    def test_0098_teardown(self):
        """Removes the added vdc, gateway and routed networks.

        """
        vdc = VDC(TestIpSecVpn._client, resource=TestIpSecVpn._vdc_resource)
        task1 = vdc.delete_routed_orgvdc_network(
            name=TestIpSecVpn._routed_network_name)
        TestIpSecVpn._client.get_task_monitor().wait_for_success(task=task1)
        task2 = vdc.delete_gateway(name=TestIpSecVpn._gateway_name)
        TestIpSecVpn._client.get_task_monitor().wait_for_success(task=task2)
        vdc.enable_vdc(enable=False)
        vdc.delete_vdc()
예제 #4
0
def delete_gateway(ctx, name):
    """delete a gateway.
        \b
            Note
                System Administrators can delete gateway.
        \b
            Examples
                vcd gateway delete <gateway-name>
                 Delete gateway by providing gateway name
    """
    try:
        restore_session(ctx, vdc_required=True)
        client = ctx.obj['client']
        vdc_href = ctx.obj['profiles'].get('vdc_href')
        vdc = VDC(client, href=vdc_href)
        task = vdc.delete_gateway(name)
        stdout(task, ctx)
    except Exception as e:
        stderr(e, ctx)
예제 #5
0
class VdcGW(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(VdcGW, self).__init__(**kwargs)
        self.vdc_name = self.params.get('vdc_name')
        self.org_name = self.params.get('org_name')
        org_resource = self.client.get_org_by_name(self.org_name)
        self.org = Org(self.client, resource=org_resource)
        vdc_resource = self.org.get_vdc(self.vdc_name)
        self.vdc = VDC(self.client, name=self.vdc_name, resource=vdc_resource)

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create_gw()

        if state == "update":
            return self.update_gw()

        if state == "absent":
            return self.delete_gw()

    def get_gateway(self, gateway_name):
        gateway = self.vdc.get_gateway(gateway_name)
        if gateway is None:
            raise EntityNotFoundException(
                "Edge gateway {0} is not present".format(gateway_name))

        return gateway

    def create_gw(self):
        api_version = self.client.get_api_version()
        if api_version == "30.0":
            return self.create_gateway_api_version_30()

        if api_version == "31.0":
            return self.create_gateway_api_version_31()

        if api_version == "32.0":
            return self.create_gateway_api_version_32()

    def create_gateway_api_version_30(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_30(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def create_gateway_api_version_31(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        flips_mode = self.params.get('flips_mode')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_31(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit,
                is_flips_mode_enabled=flips_mode)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def create_gateway_api_version_32(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        edge_gateway_type = self.params.get('edge_gateway_type')
        flips_mode = self.params.get('flips_mode')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_32(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit,
                is_flips_mode_enabled=flips_mode,
                edgeGatewayType=edge_gateway_type)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def update_gw(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        new_gateway_name = self.params.get('new_gateway_name')
        description = self.params.get('description')
        ha_enabled = self.params.get('ha_enabled')
        edge_gateway_href = None

        try:
            gateway = self.get_gateway(gateway_name)
            for key, value in gateway.items():
                if key == "href":
                    edge_gateway_href = value
                    break
            gateway = Gateway(
                self.client, name=gateway_name, href=edge_gateway_href)
            update_task = gateway.edit_gateway(newname=new_gateway_name,
                                               desc=description, ha=ha_enabled)
            self.execute_task(update_task)
            msg = "Edge Gateway {0} has been updated with {1}"
            response['msg'] = msg.format(gateway_name, new_gateway_name)
            response['changed'] = True
        except EntityNotFoundException:
            msg = 'Edge Gateway {0} is not present'
            response['warnings'] = msg.format(gateway_name)

        return response

    def delete_gw(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            msg = "Edge Gateway {0} is not present"
            response['warnings'] = msg.format(gateway_name)
        else:
            delete_task = self.vdc.delete_gateway(gateway_name)
            self.execute_task(delete_task)
            msg = "Edge Gateway {0} has been deleted"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True

        return response
예제 #6
0
class VdcGW(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(VdcGW, self).__init__(**kwargs)
        self.vdc_name = self.params.get('vdc_name')
        self.gateway_name = self.params.get('gateway_name')
        self.description = self.params.get('description')
        self.external_networks = self.params.get('external_networks')
        self.gateway_backing_config = self.params.get('gateway_backing_config')
        self.default_gateway = self.params.get('default_gateway')
        self.extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        self.default_gateway_ip = self.params.get('default_gateway_ip')
        self.default_gw_for_dns_relay = self.params.get(
            'default_gw_for_dns_relay')
        self.ha_enabled = self.params.get('ha_enabled')
        self.create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        self.dr_enabled = self.params.get('dr_enabled')
        self.configure_ip_settings = self.params.get('configure_ip_settings')
        self.ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')
        self.sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        self.ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        self.ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        self.flips_mode = self.params.get('flips_mode')
        self.org_name = self.params.get('org_name')

        org_resource = self.client.get_org_by_name(self.org_name)
        self.org = Org(self.client, resource=org_resource)
        vdc_resource = self.org.get_vdc(self.vdc_name)
        self.vdc = VDC(self.client, name=self.vdc_name, resource=vdc_resource)

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create_gw()

        if state == "absent":
            return self.delete_gw()

    def create_gw(self):
        response = dict()

        try:
            self.vdc.get_gateway(self.gateway_name)

        except EntityNotFoundException:
            create = self.vdc.create_gateway(
                name=self.gateway_name,
                external_networks=self.external_networks,
                gateway_backing_config=self.gateway_backing_config,
                desc=self.description,
                is_default_gateway=self.default_gateway,
                selected_extnw_for_default_gw=self.extnw_for_default_gw,
                default_gateway_ip=self.default_gateway_ip,
                is_default_gw_for_dns_relay_selected=self.
                default_gw_for_dns_relay,
                is_ha_enabled=self.ha_enabled,
                should_create_as_advanced=self.create_as_advanced_gw,
                is_dr_enabled=self.dr_enabled,
                is_ip_settings_configured=self.configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=self.
                ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=self.sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=self.
                ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=self.ext_net_to_rate_limit,
                is_flips_mode_enabled=self.flips_mode)

            self.execute_task(create.Tasks.Task[0])

            response['msg'] = 'Edge Gateway {0} created'.format(
                self.gateway_name)
            response['changed'] = True

        else:
            response[
                'warnings'] = 'Edge Gateway {0} is already present.'.format(
                    self.gateway_name)

        return response

    def delete_gw(self):
        response = dict()

        try:
            self.vdc.get_gateway(self.gateway_name)

        except EntityNotFoundException:
            response['warnings'] = 'Edge Gateway {0} is not present.'.format(
                self.gateway_name)

        else:
            delete = self.vdc.delete_gateway(self.gateway_name)
            self.execute_task(delete)
            response['changed'] = True

        return response
class VdcGW(VcdAnsibleModule):
    def __init__(self, **kwargs):
        super(VdcGW, self).__init__(**kwargs)
        self.vdc_name = self.params.get('vdc_name')
        self.org_name = self.params.get('org_name')
        org_resource = self.client.get_org_by_name(self.org_name)
        self.org = Org(self.client, resource=org_resource)
        vdc_resource = self.org.get_vdc(self.vdc_name)
        self.vdc = VDC(self.client, name=self.vdc_name, resource=vdc_resource)

    def manage_states(self):
        state = self.params.get('state')
        if state == "present":
            return self.create_gw()

        if state == "update":
            return self.update_gw()

        if state == "absent":
            return self.delete_gw()

    def manage_operations(self):
        operation = self.params.get('operation')
        if operation == "update_ip_pool":
            return self.update_sub_allocated_ip_pools()

        if operation == "add_network":
            return self.add_network()

        if operation == "remove_network":
            return self.remove_network()

    def get_gateway(self, gateway_name):
        gateway = self.vdc.get_gateway(gateway_name)
        if gateway is not None:
            for key, value in gateway.items():
                if key == "href":
                    return Gateway(self.client, name=gateway_name, href=value)

        msg = "Edge gateway {0} is not present"
        raise EntityNotFoundException(msg.format(gateway_name))

    def create_gw(self):
        api_version = self.client.get_api_version()
        if api_version == "30.0":
            return self.create_gateway_api_version_30()

        if api_version == "31.0":
            return self.create_gateway_api_version_31()

        if api_version == "32.0":
            return self.create_gateway_api_version_32()

    def create_gateway_api_version_30(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_30(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def create_gateway_api_version_31(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        flips_mode = self.params.get('flips_mode')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_31(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit,
                is_flips_mode_enabled=flips_mode)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def create_gateway_api_version_32(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        description = self.params.get('description')
        external_networks = self.params.get('external_networks')
        gateway_backing_config = self.params.get('gateway_backing_config')
        default_gateway = self.params.get('default_gateway')
        extnw_for_default_gw = self.params.get('extnw_for_default_gw')
        default_gateway_ip = self.params.get('default_gateway_ip')
        default_gw_for_dns_relay = self.params.get('default_gw_for_dns_relay')
        ha_enabled = self.params.get('ha_enabled')
        create_as_advanced_gw = self.params.get('create_as_advanced_gw')
        dr_enabled = self.params.get('dr_enabled')
        configure_ip_settings = self.params.get('configure_ip_settings')
        sub_allocate_ip_pools = self.params.get('sub_allocate_ip_pools')
        ext_net_to_rate_limit = self.params.get('ext_net_to_rate_limit')
        edge_gateway_type = self.params.get('edge_gateway_type')
        flips_mode = self.params.get('flips_mode')
        ext_net_to_subnet_with_ip_range = self.params.get(
            'ext_net_to_subnet_with_ip_range')
        ext_net_to_participated_subnet_with_ip_settings = self.params.get(
            'ext_net_to_participated_subnet_with_ip_settings')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException:
            create_task = self.vdc.create_gateway_api_version_32(
                name=gateway_name,
                external_networks=external_networks,
                gateway_backing_config=gateway_backing_config,
                desc=description,
                is_default_gateway=default_gateway,
                selected_extnw_for_default_gw=extnw_for_default_gw,
                default_gateway_ip=default_gateway_ip,
                is_default_gw_for_dns_relay_selected=default_gw_for_dns_relay,
                is_ha_enabled=ha_enabled,
                should_create_as_advanced=create_as_advanced_gw,
                is_dr_enabled=dr_enabled,
                is_ip_settings_configured=configure_ip_settings,
                ext_net_to_participated_subnet_with_ip_settings=ext_net_to_participated_subnet_with_ip_settings,
                is_sub_allocate_ip_pools_enabled=sub_allocate_ip_pools,
                ext_net_to_subnet_with_ip_range=ext_net_to_subnet_with_ip_range,
                ext_net_to_rate_limit=ext_net_to_rate_limit,
                is_flips_mode_enabled=flips_mode,
                edgeGatewayType=edge_gateway_type)

            self.execute_task(create_task.Tasks.Task[0])
            msg = "Edge Gateway {0} has been created"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True
        else:
            msg = "Edge Gateway {0} is already present"
            response['warnings'] = msg.format(gateway_name)

        return response

    def update_gw(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')
        new_gateway_name = self.params.get('new_gateway_name')
        description = self.params.get('description')
        ha_enabled = self.params.get('ha_enabled')

        try:
            gateway = self.get_gateway(gateway_name)
        except EntityNotFoundException as ex:
            response['warnings'] = ex
        else:
            update_task = gateway.edit_gateway(
                newname=new_gateway_name, desc=description, ha=ha_enabled)
            self.execute_task(update_task)
            msg = "Edge Gateway {0} has been updated with {1}"
            response['msg'] = msg.format(gateway_name, new_gateway_name)
            response['changed'] = True

        return response

    def delete_gw(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')

        try:
            self.get_gateway(gateway_name)
        except EntityNotFoundException as ex:
            response['warnings'] = ex
        else:
            delete_task = self.vdc.delete_gateway(gateway_name)
            self.execute_task(delete_task)
            msg = "Edge Gateway {0} has been deleted"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True

        return response

    def _get_subnet_participation(self, gw_resource, network):
        for gateway_inf in \
                gw_resource.Configuration.GatewayInterfaces.GatewayInterface:
            if gateway_inf.Name == network:
                return gateway_inf.SubnetParticipation

        return None

    def update_sub_allocated_ip_pools(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')

        try:
            gateway = self.get_gateway(gateway_name)
        except EntityNotFoundException as ex:
            response['warnings'] = ex
        else:
            ip_pool = self.params.get('ext_net_subnet_allocated_ip_pool')
            for network, new_ip_range in ip_pool.items():
                subnet_participation = self._get_subnet_participation(gateway.get_resource(), network)
                if subnet_participation is None:
                    msg = "No subnet ip pools are attached with network {0}"
                    raise Exception(msg.format(network))

                ip_ranges = gateway.get_sub_allocate_ip_ranges_element(subnet_participation)
                old_ip_range = "{0}-{1}".format(ip_ranges.IpRange.StartAddress, ip_ranges.IpRange.EndAddress)
                update_task = gateway.edit_sub_allocated_ip_pools(network, old_ip_range, new_ip_range)
                self.execute_task(update_task)
            msg = "Ip Pools have been updated on edge gatway {0}"
            response['msg'] = msg.format(gateway_name)
            response['changed'] = True

        return response

    def add_network(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')

        try:
            gateway = self.get_gateway(gateway_name)
        except EntityNotFoundException as ex:
            response['warnings'] = ex
        else:
            network_settings = self.params.get('ext_net_to_participated_subnet_with_ip_settings')
            networks_to_attach = network_settings.keys()
            attached_networks = gateway.list_external_network_ip_allocations().keys()
            networks = list()
            for network in networks_to_attach:
                if network not in attached_networks:
                    networks.append(network)
                    for ip_settings in network_settings.values():
                        for subnet, ip in ip_settings.items():
                            add_network_task = gateway.add_external_network(network, [(subnet, ip)])
                            self.execute_task(add_network_task)
            if len(networks) == 0:
                networks = list(networks_to_attach)
                msg = "Networks {0} are already attached to edge gatway {1}"
            else:
                msg = "Networks {0} are added to edge gatway {1}"
            response['msg'] = msg.format(networks, gateway_name)
            response['changed'] = True

        return response

    def remove_network(self):
        response = dict()
        response['changed'] = False
        gateway_name = self.params.get('gateway_name')

        try:
            gateway = self.get_gateway(gateway_name)
        except EntityNotFoundException as ex:
            response['warnings'] = ex
        else:
            external_networks = self.params.get('external_networks')
            for network in external_networks:
                remove_network_task = gateway.remove_external_network(network)
                self.execute_task(remove_network_task)
            msg = "Networks {0} have been removed from edge gatway {1}"
            response['msg'] = msg.format(external_networks, gateway_name)
            response['changed'] = True

        return response
예제 #8
0
        else:
            print("The network {0} doesn't exist".format(
                cfg.org.org_routed_nw.name))
            i = 61

except Exception:
    print("The routed network {0} does not exist".format(
        cfg.org.org_routed_nw.name))

# Ensure the Edge gateway doesn't exist and delete it. --------------------------------------------
print("\nFetching Edges...")
try:
    network_resource = vdc.get_gateway(cfg.org.edge_gateway.name)
    print("Edge gateway exists: {0}, deleting".format(
        cfg.org.edge_gateway.name))
    delete_edge = vdc.delete_gateway(cfg.org.edge_gateway.name)
    # Test whether it's been deleted
    i = 0
    while i < 60:
        obj = client.get_resource(delete_edge.attrib['href'])
        if obj.attrib['status'] != 'success':
            print(obj.attrib['status'])
            i += 1
            time.sleep(1)
        else:
            print("The edge {0} doesn't exist".format(
                cfg.org.edge_gateway.name))
            i = 61

except Exception:
    print("The Edge gateway {0} does not exist".format(