def create_user(self, user_name, password=None, project_id=None, email=None, domain_id='default', **kwargs): """Creates a user.""" en = kwargs.get('enabled', True) description = kwargs.get('description', None) default_project_id = kwargs.get('default_project_id') post_body = { 'project_id': project_id, 'default_project_id': default_project_id, 'description': description, 'domain_id': domain_id, 'email': email, 'enabled': en, 'name': user_name, 'password': password } post_body = json.dumps({'user': post_body}) resp, body = self.post('users', post_body) self.expected_success(201, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body['user'])
def show_floating_ip(self, floating_ip_id): """Get the details of a floating IP.""" url = "os-floating-ips/%s" % str(floating_ip_id) resp, body = self.get(url) body = json.loads(body) self.validate_response(schema.create_get_floating_ip, resp, body) return service_client.ResponseBody(resp, body['floating_ip'])
def update_image_metadata(self, image_id, meta): """Updates the metadata for an image.""" post_body = json.dumps({'metadata': meta}) resp, body = self.post('images/%s/metadata' % str(image_id), post_body) body = json.loads(body) self.validate_response(schema.image_metadata, resp, body) return service_client.ResponseBody(resp, body['metadata'])
def get_credential(self, credential_id): """To GET Details of a credential.""" resp, body = self.get('credentials/%s' % credential_id) self.expected_success(200, resp.status) body = json.loads(body) body['credential']['blob'] = json.loads(body['credential']['blob']) return service_client.ResponseBody(resp, body['credential'])
def update_user_password(self, user_id, new_pass): """Update User Password.""" put_body = {'password': new_pass, 'id': user_id} put_body = json.dumps({'user': put_body}) resp, body = self.put('users/%s/OS-KSADM/password' % user_id, put_body) self.expected_success(200, resp.status) return service_client.ResponseBody(resp, self._parse_resp(body))
def show_volume_metadata(self, volume_id): """Get metadata of the volume.""" url = "volumes/%s/metadata" % str(volume_id) resp, body = self.get(url) body = json.loads(body) self.expected_success(200, resp.status) return service_client.ResponseBody(resp, body['metadata'])
def update_volume(self, volume_id, **kwargs): """Updates the Specified Volume.""" put_body = json.dumps({'volume': kwargs}) resp, body = self.put('volumes/%s' % volume_id, put_body) body = json.loads(body) self.expected_success(200, resp.status) return service_client.ResponseBody(resp, body['volume'])
def get_policy(self, policy_id): """Lists out the given policy.""" url = 'policies/%s' % policy_id resp, body = self.get(url) self.expected_success(200, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body['policy'])
def _create_with_data(self, headers, data): resp, body_iter = self.http.raw_request('POST', '/v1/images', headers=headers, body=data) self._error_checker('POST', '/v1/images', headers, data, resp, body_iter) body = json.loads(''.join([c for c in body_iter])) return service_client.ResponseBody(resp, body['image'])
def get_trust_role(self, trust_id, role_id): """GET role delegated by a trust.""" resp, body = self.get("OS-TRUST/trusts/%s/roles/%s" % (trust_id, role_id)) self.expected_success(200, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body['role'])
def update_user(self, user_id, name, **kwargs): """Updates a user.""" body = self.get_user(user_id) email = kwargs.get('email', body['email']) en = kwargs.get('enabled', body['enabled']) project_id = kwargs.get('project_id', body['project_id']) if 'default_project_id' in body.keys(): default_project_id = kwargs.get('default_project_id', body['default_project_id']) else: default_project_id = kwargs.get('default_project_id') description = kwargs.get('description', body['description']) domain_id = kwargs.get('domain_id', body['domain_id']) post_body = { 'name': name, 'email': email, 'enabled': en, 'project_id': project_id, 'default_project_id': default_project_id, 'id': user_id, 'domain_id': domain_id, 'description': description } post_body = json.dumps({'user': post_body}) resp, body = self.patch('users/%s' % user_id, post_body) self.expected_success(200, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body['user'])
def assign_group_role_on_domain(self, domain_id, group_id, role_id): """Add roles to a user on a domain.""" resp, body = self.put( 'domains/%s/groups/%s/roles/%s' % (domain_id, group_id, role_id), None) self.expected_success(204, resp.status) return service_client.ResponseBody(resp, body)
def assign_group_role_on_project(self, project_id, group_id, role_id): """Add roles to a user on a project.""" resp, body = self.put( 'projects/%s/groups/%s/roles/%s' % (project_id, group_id, role_id), None) self.expected_success(204, resp.status) return service_client.ResponseBody(resp, body)
def get_token(self, resp_token): """Get token details.""" headers = {'X-Subject-Token': resp_token} resp, body = self.get("auth/tokens", headers=headers) self.expected_success(200, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body['token'])
def volume_roll_detaching(self, volume_id): """Volume Roll Detaching.""" # cinder/api/contrib/volume_actions.py#L170 post_body = json.dumps({'os-roll_detaching': {}}) resp, body = self.post('volumes/%s/action' % volume_id, post_body) self.expected_success(202, resp.status) return service_client.ResponseBody(resp, body)
def list_shared_images(self, tenant_id): """List shared images with the specified tenant""" url = 'v1/shared-images/%s' % tenant_id resp, body = self.get(url) self.expected_success(200, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body)
def show_volume_transfer(self, transfer_id): """Returns the details of a volume transfer.""" url = "os-volume-transfer/%s" % str(transfer_id) resp, body = self.get(url) body = json.loads(body) self.expected_success(200, resp.status) return service_client.ResponseBody(resp, body['transfer'])
def get_region(self, region_id): """Get region.""" url = 'regions/%s' % region_id resp, body = self.get(url) self.expected_success(200, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body['region'])
def show_volume(self, volume_id): """Returns the details of a single volume.""" url = "volumes/%s" % str(volume_id) resp, body = self.get(url) body = json.loads(body) self.expected_success(200, resp.status) return service_client.ResponseBody(resp, body['volume'])
def update_server(self, server_id, name=None, meta=None, accessIPv4=None, accessIPv6=None, disk_config=None): """ Updates the properties of an existing server. server_id: The id of an existing server. name: The name of the server. personality: A list of files to be injected into the server. accessIPv4: The IPv4 access address for the server. accessIPv6: The IPv6 access address for the server. """ post_body = {} if meta is not None: post_body['metadata'] = meta if name is not None: post_body['name'] = name if accessIPv4 is not None: post_body['accessIPv4'] = accessIPv4 if accessIPv6 is not None: post_body['accessIPv6'] = accessIPv6 if disk_config is not None: post_body['OS-DCF:diskConfig'] = disk_config post_body = json.dumps({'server': post_body}) resp, body = self.put("servers/%s" % str(server_id), post_body) body = json.loads(body) self.validate_response(schema.update_server, resp, body) return service_client.ResponseBody(resp, body['server'])
def list_flavor_extra_specs(self, flavor_id): """Gets extra Specs details of the mentioned flavor.""" resp, body = self.get('flavors/%s/os-extra_specs' % flavor_id) body = json.loads(body) self.validate_response(schema_extra_specs.set_get_flavor_extra_specs, resp, body) return service_client.ResponseBody(resp, body['extra_specs'])
def list_addresses_by_network(self, server_id, network_id): """Lists all addresses of a specific network type for a server.""" resp, body = self.get("servers/%s/ips/%s" % (str(server_id), network_id)) body = json.loads(body) self.validate_response(schema.list_addresses_by_network, resp, body) return service_client.ResponseBody(resp, body)
def enable_disable_user(self, user_id, enabled): """Enables or disables a user.""" put_body = {'enabled': enabled} put_body = json.dumps({'user': put_body}) resp, body = self.put('users/%s/enabled' % user_id, put_body) self.expected_success(200, resp.status) return service_client.ResponseBody(resp, self._parse_resp(body))
def get_volume_attachment(self, server_id, attach_id): """Return details about the given volume attachment.""" resp, body = self.get('servers/%s/os-volume_attachments/%s' % ( str(server_id), attach_id)) body = json.loads(body) self.validate_response(schema.get_volume_attachment, resp, body) return service_client.ResponseBody(resp, body['volumeAttachment'])
def assign_user_role(self, tenant_id, user_id, role_id): """Add roles to a user on a tenant.""" resp, body = self.put( '/tenants/%s/users/%s/roles/OS-KSADM/%s' % (tenant_id, user_id, role_id), "") self.expected_success(200, resp.status) return service_client.ResponseBody(resp, self._parse_resp(body))
def get_instance_action(self, server_id, request_id): """Returns the action details of the provided server.""" resp, body = self.get("servers/%s/os-instance-actions/%s" % (str(server_id), str(request_id))) body = json.loads(body) self.validate_response(schema.get_instance_action, resp, body) return service_client.ResponseBody(resp, body['instanceAction'])
def show_image(self, image_id): """Returns the details of a single image.""" resp, body = self.get("images/%s" % str(image_id)) self.expected_success(200, resp.status) body = json.loads(body) self.validate_response(schema.get_image, resp, body) return service_client.ResponseBody(resp, body['image'])
def update_endpoint(self, endpoint_id, service_id=None, interface=None, url=None, region=None, enabled=None, **kwargs): """Updates an endpoint with given parameters. Normally this function wouldn't allow setting values that are not allowed for 'enabled'. Use `force_enabled` to set a non-boolean. """ post_body = {} if service_id is not None: post_body['service_id'] = service_id if interface is not None: post_body['interface'] = interface if url is not None: post_body['url'] = url if region is not None: post_body['region'] = region if 'force_enabled' in kwargs: post_body['enabled'] = kwargs['force_enabled'] elif enabled is not None: post_body['enabled'] = enabled post_body = json.dumps({'endpoint': post_body}) resp, body = self.patch('endpoints/%s' % endpoint_id, post_body) self.expected_success(200, resp.status) body = json.loads(body) return service_client.ResponseBody(resp, body['endpoint'])
def create_listener(self, **kwargs): """Create a listener build.""" post_body = jsonutils.dumps({'listener': kwargs}) resp, body = self.post('v2.0/lbaas/listeners', post_body) body = jsonutils.loads(body) self.expected_success(201, resp.status) return service_client.ResponseBody(resp, body['listener'])
def update_snapshot(self, snapshot_id, **kwargs): """Updates a snapshot.""" put_body = json.dumps({'snapshot': kwargs}) resp, body = self.put('snapshots/%s' % snapshot_id, put_body) body = json.loads(body) self.expected_success(200, resp.status) return service_client.ResponseBody(resp, body['snapshot'])