89 lines
3.3 KiB
Python
89 lines
3.3 KiB
Python
# Copyright (c) 2016 EMC Corporation
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
|
|
from cinder.i18n import _
|
|
from cinder.volume.drivers.coprhd.helpers import commoncoprhdapi as common
|
|
from cinder.volume.drivers.coprhd.helpers import tenant
|
|
|
|
|
|
class Project(common.CoprHDResource):
|
|
|
|
# Commonly used URIs for the 'Project' module
|
|
URI_PROJECT_LIST = '/tenants/{0}/projects'
|
|
URI_PROJECT = '/projects/{0}'
|
|
|
|
def project_query(self, name):
|
|
"""Retrieves UUID of project based on its name.
|
|
|
|
:param name: name of project
|
|
:returns: UUID of project
|
|
:raises CoprHdError: - when project name is not found
|
|
"""
|
|
if common.is_uri(name):
|
|
return name
|
|
(tenant_name, project_name) = common.get_parent_child_from_xpath(name)
|
|
|
|
tenant_obj = tenant.Tenant(self.ipaddr, self.port)
|
|
|
|
tenant_uri = tenant_obj.tenant_query(tenant_name)
|
|
projects = self.project_list(tenant_uri)
|
|
if projects:
|
|
for project in projects:
|
|
if project:
|
|
project_detail = self.project_show_by_uri(
|
|
project['id'])
|
|
if(project_detail and
|
|
project_detail['name'] == project_name):
|
|
return project_detail['id']
|
|
raise common.CoprHdError(common.CoprHdError.NOT_FOUND_ERR, (_(
|
|
"Project: %s not found") % project_name))
|
|
|
|
def project_list(self, tenant_name):
|
|
"""Makes REST API call and retrieves projects based on tenant UUID.
|
|
|
|
:param tenant_name: Name of the tenant
|
|
:returns: List of project UUIDs in JSON response payload
|
|
"""
|
|
tenant_obj = tenant.Tenant(self.ipaddr, self.port)
|
|
tenant_uri = tenant_obj.tenant_query(tenant_name)
|
|
(s, h) = common.service_json_request(self.ipaddr, self.port, "GET",
|
|
Project.URI_PROJECT_LIST.format(
|
|
tenant_uri),
|
|
None)
|
|
o = common.json_decode(s)
|
|
|
|
if "project" in o:
|
|
return common.get_list(o, 'project')
|
|
return []
|
|
|
|
def project_show_by_uri(self, uri):
|
|
"""Makes REST API call and retrieves project derails based on UUID.
|
|
|
|
:param uri: UUID of project
|
|
:returns: Project details in JSON response payload
|
|
"""
|
|
|
|
(s, h) = common.service_json_request(self.ipaddr, self.port,
|
|
"GET",
|
|
Project.URI_PROJECT.format(uri),
|
|
None)
|
|
o = common.json_decode(s)
|
|
inactive = common.get_node_value(o, 'inactive')
|
|
if inactive:
|
|
return None
|
|
|
|
return o
|