def _get_libcloud_network(self, network): kwargs = {'network_ids': [network.network_id]} networks = self.cloud.ctl.compute.connection.ex_list_networks(**kwargs) if networks: return networks[0] raise NetworkNotFoundError('Network %s with network_id %s' % (network.name, network.network_id))
def create_subnet(request): """ Tags: networks --- Create subnet in a given network on a cloud ADD permission required on subnet READ permission required on cloud READ permission required on network CREATE_SUBNETS permission required on network CREATE_RESOURCES permission required on cloud --- cloud_id: in: path required: true description: The Cloud ID type: string network_id: in: path required: true description: The ID of the Network that will contain the new subnet type: string subnet: required: true type: object """ cloud_id = request.matchdict['cloud'] network_id = request.matchdict['network'] params = params_from_request(request) auth_context = auth_context_from_request(request) # SEC auth_context.check_perm('cloud', 'read', cloud_id) auth_context.check_perm('cloud', 'create_resources', cloud_id) auth_context.check_perm('network', 'read', network_id) auth_context.check_perm('network', 'edit_subnets', network_id) try: cloud = Cloud.objects.get(id=cloud_id, owner=auth_context.owner) except Cloud.DoesNotExist: raise CloudNotFoundError() try: network = Network.objects.get(id=network_id, cloud=cloud) except Network.DoesNotExist: raise NetworkNotFoundError() # Create subnet. subnet = SUBNETS[cloud.ctl.provider].add(network=network, **params) return subnet.as_dict()
def delete_subnet(request): """ Tags: networks --- Delete a subnet READ permission required on cloud READ permission required on network READ permission required on subnet REMOVE permission required on subnet --- cloud_id: in: path required: true type: string network_id: in: path required: true type: string subnet_id: in: path required: true type: string """ cloud_id = request.matchdict['cloud'] subnet_id = request.matchdict['subnet'] network_id = request.matchdict['network'] auth_context = auth_context_from_request(request) # SEC auth_context.check_perm('cloud', 'read', cloud_id) auth_context.check_perm('network', 'read', network_id) auth_context.check_perm('network', 'edit_subnets', network_id) try: cloud = Cloud.objects.get(id=cloud_id, owner=auth_context.owner) except Cloud.DoesNotExist: raise CloudNotFoundError() try: network = Network.objects.get(id=network_id, cloud=cloud) except Network.DoesNotExist: raise NetworkNotFoundError() try: subnet = Subnet.objects.get(id=subnet_id, network=network) subnet.ctl.delete() except Subnet.DoesNotExist: raise SubnetNotFoundError() # Trigger a UI update. trigger_session_update(auth_context.owner, ['clouds']) return OK
def delete_network(request): """ Tags: networks --- Delete a network and all corresponding subnets READ permission required on cloud READ permission required on network REMOVE permission required on network --- parameters: - name: cloud_id in: path required: true schema: type: string - name: network_id in: path required: true schema: type: string """ cloud_id = request.matchdict['cloud'] network_id = request.matchdict['network'] auth_context = auth_context_from_request(request) # SEC auth_context.check_perm('cloud', 'read', cloud_id) auth_context.check_perm('network', 'read', network_id) auth_context.check_perm('network', 'remove', network_id) try: cloud = Cloud.objects.get(id=cloud_id, owner=auth_context.owner) except Cloud.DoesNotExist: raise CloudNotFoundError() try: network = Network.objects.get(id=network_id, cloud=cloud) except me.DoesNotExist: raise NetworkNotFoundError() # Delete the network network.ctl.delete() # Schedule a UI update trigger_session_update(auth_context.owner, ['clouds']) return OK
def delete_portforward(request): """ Tags: networks --- Delete the portforward of a GigG8 network READ permission required on network EDIT permission required on network --- network: in: path required: true type: string public_port: required: true type: string protocol: required: true type: string """ network_id = request.matchdict['network'] auth_context = auth_context_from_request(request) params = params_from_request(request) if not params.get('public_port'): raise RequiredParameterMissingError('public_port') if not params.get('protocol'): raise RequiredParameterMissingError('protocol') # SEC auth_context.check_perm('network', 'read', network_id) auth_context.check_perm('network', 'edit', network_id) try: network = Network.objects.get(owner=auth_context.owner, id=network_id) except Network.DoesNotExist: raise NetworkNotFoundError() try: network.cloud.ctl.network.delete_portforward(network, **params) except NotImplementedError: raise MistNotImplementedError return OK
def list_portforwards(request): """ Tags: networks --- List the portforwards of a GigG8 network READ permission required on network --- network: in: path required: true type: string """ network_id = request.matchdict['network'] auth_context = auth_context_from_request(request) # SEC auth_context.check_perm('network', 'read', network_id) try: network = Network.objects.get(owner=auth_context.owner, id=network_id) except Network.DoesNotExist: raise NetworkNotFoundError() try: portforwards = network.cloud.ctl.network.list_portforwards(network) except NotImplementedError: raise MistNotImplementedError ret = [] for pf in portforwards: portforward = { 'privateport': pf.privateport, 'publicport': pf.publicport, 'protocol': pf.protocol, 'node_id': pf.node_id, 'public_ip': pf.network.publicipaddress } ret.append(portforward) return ret
def list_subnets(request): """ Tags: networks --- List the subnets of a network READ permission required on cloud READ permission required on network READ permission required on subnets --- cloud: in: path required: true type: string network_id: in: path required: true description: The DB ID of the network whose subnets will be returned type: string """ cloud_id = request.matchdict['cloud'] network_id = request.matchdict['network'] auth_context = auth_context_from_request(request) # SEC auth_context.check_perm('cloud', 'read', cloud_id) auth_context.check_perm('network', 'read', network_id) try: cloud = Cloud.objects.get(owner=auth_context.owner, id=cloud_id) except Cloud.DoesNotExist: raise CloudNotFoundError() try: network = Network.objects.get(cloud=cloud, id=network_id) except Network.DoesNotExist: raise NetworkNotFoundError() return [subnet.as_dict() for subnet in network.ctl.list_subnets()]
def create_portforward(request): """ Tags: networks --- Create a portforward in a GigG8 network READ permission required on network EDIT permission required on network --- network: in: path required: true type: string machine_id: required: true type: string public_port: required: true type: integer private_port: required: true type: integer protocol: required: false type: string """ network_id = request.matchdict['network'] auth_context = auth_context_from_request(request) params = params_from_request(request) # SEC auth_context.check_perm('network', 'read', network_id) auth_context.check_perm('network', 'edit', network_id) if not params.get('machine_id'): raise RequiredParameterMissingError('machine_id') if not params.get('public_port'): raise RequiredParameterMissingError('public_port') if not params.get('private_port'): raise RequiredParameterMissingError('private_port') try: network = Network.objects.get(owner=auth_context.owner, id=network_id) except Network.DoesNotExist: raise NetworkNotFoundError() try: port_forward = network.cloud.ctl.network.create_portforward( network, **params) except NotImplementedError: raise MistNotImplementedError return { 'privateport': port_forward.privateport, 'publicport': port_forward.publicport, 'protocol': port_forward.protocol, 'node_id': port_forward.node_id, 'public_ip': port_forward.network.publicipaddress }