def post(self, request): """Create a network :param admin_state_up (optional): The administrative state of the network, which is up (true) or down (false). :param name (optional): The network name. A request body is optional: If you include it, it can specify this optional attribute. :param net_profile_id (optional): network profile id :param shared (optional): Indicates whether this network is shared across all tenants. By default, only administrative users can change this value. :param tenant_id (optional): Admin-only. The UUID of the tenant that will own the network. This tenant can be different from the tenant that makes the create network request. However, only administrative users can specify a tenant ID other than their own. You cannot change this value through authorization policies. :return: JSON representation of a Network """ if not api.neutron.is_port_profiles_supported(): request.DATA.pop("net_profile_id", None) new_network = api.neutron.network_create(request, **request.DATA) return rest_utils.CreatedResponse( '/api/neutron/networks/%s' % new_network.id, new_network.to_dict() )
def post(self, request): """Create a Subnet for a given Network :param name (optional): The subnet name. :param network_id: The ID of the attached network. :param tenant_id (optional): The ID of the tenant who owns the network. Only administrative users can specify a tenant ID other than their own. :param allocation_pools (optional): The start and end addresses for the allocation pools. :param gateway_ip (optional): The gateway IP address. :param ip_version: The IP version, which is 4 or 6. :param cidr: The CIDR. :param id (optional): The ID of the subnet. :param enable_dhcp (optional): Set to true if DHCP is enabled and false if DHCP is disabled. :return: JSON representation of a Subnet """ new_subnet = api.neutron.subnet_create(request, **request.DATA) return rest_utils.CreatedResponse( '/api/neutron/subnets/%s' % new_subnet.id, new_subnet.to_dict() )
def post(self, request): flavor_access = request.DATA.get('flavor_access', []) flavor_id = request.DATA['id'] is_public = not flavor_access flavor = api.nova.flavor_create(request, name=request.DATA['name'], memory=request.DATA['ram'], vcpu=request.DATA['vcpus'], disk=request.DATA['disk'], ephemeral=request .DATA['OS-FLV-EXT-DATA:ephemeral'], swap=request.DATA['swap'], flavorid=flavor_id, is_public=is_public ) for project in flavor_access: api.nova.add_tenant_to_flavor( request, flavor.id, project.get('id')) return rest_utils.CreatedResponse( '/api/nova/flavors/%s' % flavor.id, flavor.to_dict() )
def post(self, request): """Create a role. Create a role using the "name" (string) parameter supplied in the POST application/json object. This method returns the new role object on success. """ new_role = api.keystone.role_create(request, request.DATA['name']) return rest_utils.CreatedResponse( '/api/keystone/roles/%s' % new_role.id, new_role.to_dict())
def post(self, request, container, object_name): dest_container = request.DATA['dest_container'] dest_name = request.DATA['dest_name'] try: result = api.swift.swift_copy_object(request, container, object_name, dest_container, dest_name) except exceptions.AlreadyExists as e: return rest_utils.JSONResponse(str(e), 409) return rest_utils.CreatedResponse( u'/api/swift/containers/%s/object/%s' % (dest_container, result.name))
def post(self, request): volume = api.cinder.volume_create( request, size=request.DATA['size'], name=request.DATA['name'], description=request.DATA['description'], volume_type=request.DATA['volume_type'], snapshot_id=request.DATA['snapshot_id'], metadata=request.DATA['metadata'], image_id=request.DATA['image_id'], availability_zone=request.DATA['availability_zone'], source_volid=request.DATA['source_volid']) return rest_utils.CreatedResponse('/api/cinder/volumes/%s' % volume.id, volume.to_dict())
def post(self, request): """Create a server. Create a server using the parameters supplied in the POST application/json object. The required parameters as specified by the underlying novaclient are: :param name: The new server name. :param source_id: The ID of the image to use. :param flavor_id: The ID of the flavor to use. :param key_name: (optional extension) name of previously created keypair to inject into the instance. :param user_data: user data to pass to be exposed by the metadata server this can be a file type object as well or a string. :param security_groups: An array of one or more objects with a "name" attribute. Other parameters are accepted as per the underlying novaclient: "block_device_mapping", "block_device_mapping_v2", "nics", "meta", "availability_zone", "instance_count", "admin_pass", "disk_config", "config_drive" This returns the new server object on success. """ try: args = ( request, request.DATA['name'], request.DATA['source_id'], request.DATA['flavor_id'], request.DATA['key_name'], request.DATA['user_data'], request.DATA['security_groups'], ) except KeyError as e: raise rest_utils.AjaxError(400, 'missing required parameter ' "'%s'" % e.args[0]) kw = {} for name in self._optional_create: if name in request.DATA: kw[name] = request.DATA[name] new = api.nova.server_create(*args, **kw) return rest_utils.CreatedResponse( '/api/nova/servers/%s' % utils_http.urlquote(new.id), new.to_dict() )
def post(self, request, container): metadata = {} if 'is_public' in request.DATA: metadata['is_public'] = request.DATA['is_public'] # This will raise an exception if the container already exists try: api.swift.swift_create_container(request, container, metadata=metadata) except exceptions.AlreadyExists as e: # 409 Conflict return rest_utils.JSONResponse(str(e), 409) return rest_utils.CreatedResponse( u'/api/swift/containers/%s' % container, )
def post(self, request): """Perform some action on the collection of domains. This action creates a domain using parameters supplied in the POST application/json object. The "name" (string) parameter is required, others are optional: "description" (string) and "enabled" (boolean, defaults to true). This method returns the new domain object on success. """ new_domain = api.keystone.domain_create( request, request.DATA['name'], description=request.DATA.get('description'), enabled=request.DATA.get('enabled', True), ) return rest_utils.CreatedResponse( '/api/keystone/domains/%s' % new_domain.id, new_domain.to_dict())
def post(self, request): """Create a project (tenant). Create a project using parameters supplied in the POST application/json object. The "name" (string) parameter is required, others are optional: "description" (string), "domain_id" (string) and "enabled" (boolean, defaults to true). Additional, undefined parameters may also be provided, but you'll have to look deep into keystone to figure out what they might be. This method returns the new project object on success. """ kwargs = _tenant_kwargs_from_DATA(request.DATA) if not kwargs['name']: raise rest_utils.AjaxError(400, '"name" is required') new_project = api.keystone.tenant_create(request, kwargs.pop('name'), **kwargs) return rest_utils.CreatedResponse( '/api/keystone/projects/%s' % new_project.id, new_project.to_dict())
def post(self, request): """Create a keypair. Create a keypair using the parameters supplied in the POST application/json object. The parameters are: :param name: the name to give the keypair :param public_key: (optional) a key to import This returns the new keypair object on success. """ if 'public_key' in request.DATA: new = api.nova.keypair_import(request, request.DATA['name'], request.DATA['public_key']) else: new = api.nova.keypair_create(request, request.DATA['name']) return rest_utils.CreatedResponse( '/api/nova/keypairs/%s' % utils_http.urlquote(new.name), new.to_dict() )
def post(self, request): """Create an Image. Create an Image using the parameters supplied in the POST application/json object. The parameters are: :param name: the name to give the image :param description: (optional) description of the image :param source_type: (required) source type. current only 'url' is supported :param image_url: (required) URL to get the image :param disk_format: (required) format of the image :param kernel: (optional) kernel to use for the image :param ramdisk: (optional) Ramdisk to use for the image :param architecture: (optional) the Architecture of the image :param min_disk: (optional) the minimum disk size for the image to boot with :param min_ram: (optional) the minimum ram for the image to boot with :param visibility: (required) takes 'public', 'private', and 'shared' :param protected: (required) true if the image is protected :param import_data: (optional) true to copy the image data to the image service or use it from the current location Any parameters not listed above will be assigned as custom properties for the image. This returns the new image object on success. """ meta = create_image_metadata(request.DATA) if request.DATA.get('import_data'): meta['copy_from'] = request.DATA.get('image_url') else: meta['location'] = request.DATA.get('image_url') image = api.glance.image_create(request, **meta) return rest_utils.CreatedResponse('/api/glance/images/%s' % image.name, image.to_dict())
def post(self, request): """Create a user. Create a user using the parameters supplied in the POST application/json object. The base parameters are name (string), email (string, optional), password (string, optional), project_id (string, optional), enabled (boolean, defaults to true). The user will be created in the default domain. This action returns the new user object on success. """ domain = api.keystone.get_default_domain(request) new_user = api.keystone.user_create( request, name=request.DATA['name'], email=request.DATA.get('email') or None, password=request.DATA.get('password'), project=request.DATA.get('project_id') or None, enabled=True, domain=domain.id) return rest_utils.CreatedResponse( '/api/keystone/users/%s' % new_user.id, new_user.to_dict())
def post(self, request, container, object_name): """Create a new object or pseudo-folder :param request: :param container: :param object_name: If the object_name (ie. POST path) ends in a '/' then a folder is created, rather than an object. Any file content passed along with the request will be ignored in that case. POST parameter: :param file: the file data for the upload. :return: """ form = UploadObjectForm(request.POST, request.FILES) if not form.is_valid(): raise rest_utils.AjaxError(500, 'Invalid request') data = form.clean() try: if object_name[-1] == '/': result = api.swift.swift_create_pseudo_folder( request, container, object_name) else: result = api.swift.swift_upload_object(request, container, object_name, data['file']) except exceptions.AlreadyExists as e: # 409 Conflict return rest_utils.JSONResponse(str(e), 409) return rest_utils.CreatedResponse( u'/api/swift/containers/%s/object/%s' % (container, result.name))