def project_query(self, name):
     '''
     Retrieves UUID of project based on its name
     Parameters:
         name: name of project
     Returns: UUID of project
     Throws:
         SOSError - when project name is not found 
     '''
     if (common.is_uri(name)):
         return name
     (tenant_name, project_name) = common.get_parent_child_from_xpath(name)
     
     from tenant import Tenant
     tenant_obj = Tenant(self.__ipAddr, self.__port)
     
     try:
         tenant_uri = tenant_obj.tenant_query(tenant_name)
         projects = self.project_list(tenant_uri)
         if(projects and len(projects) > 0):
             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 SOSError(SOSError.NOT_FOUND_ERR, 'Project: ' + project_name + ' not found')
     except SOSError as e:
         raise e
Example #2
0
    def key_delete(self, key, keypool, tenant, apitype, version, uid, secret):
        '''
        Makes a REST API call to delete a key by its name
        Parameters:           
            key:  label of the key
            keypool:  label of the keypool
            project:  project name
            tenant:  tenant  name
	    apitype:    api to be used
	    uid:	user id
	    secret:	secret
        Returns:
                JSON payload of key list
        '''
        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        if (apitype == 's3'):
            s3_key_delete(namespace, keypool, key, version, uid, secret)
        elif (apitype == 'swift'):
            swift_object_delete(namespace, keypool, key, version, uid, secret)
        elif (apitype == 'atmos'):
            atmos_object_delete(namespace, keypool, key, uid, secret)
        else:
            raise SOSError(SOSError.VALUE_ERR,
                           "Wrong API type " + apitype + " specified")
Example #3
0
    def varray_allow_tenant(self, varray, tenant):
        '''
        Makes a REST API call to retrieve details of a varray
        based on its UUID
        '''
        uri = self.varray_query(varray)

        from tenant import Tenant
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        tenanturi = tenant_obj.tenant_query(tenant)

        parms = {
            'add': [{
                'privilege': ['USE'],
                'tenant': tenanturi,
            }]
        }

        body = json.dumps(parms)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port, "PUT",
            self.URI_VIRTUALARRAY_ACLS.format(uri), body)

        return s
Example #4
0
    def __init__(self, bs):
        # self.name = ""
        # self.bs = BeautifulSoup("", "xml")
        # self.evaluation = {"":0}
        # self.tenants_placed = [Tenant(bs)]
        # self.names_rejected = set("")
        # self.tenants_try = [Tenant(bs)]

        self.bs = bs
        self.name = bs.find("dcxml")["name"]

        self.evaluation = None

        self.tenants_placed = []

        self.names_rejected = set()

        self.tenants_try = []

        for tenant_bs in bs.find_all("tenant"):
            assigned = all([(x.get("assignedTo", None) is not None)
                            for x in (list(tenant_bs.find_all("vm")) +
                                      list(tenant_bs.find_all("st")))])
            if assigned:
                tenant = Tenant(tenant_bs)
                self.tenants_placed.append(tenant)
                tenant.mark = self.name

        bs.find("tenants").extract()
        bs.find("dcxml").append(bs.new_tag('tenants'))
Example #5
0
    def keypool_update(self, keypool, tenant, versioning, apitype, uid,
                       secret):
        '''
        update keypool versioning
        parameters:
            keypool:  	label of the keypool
            project:  	project name
            tenant:  	tenant  name
            uid:	user id
            secret:	secret key
        Returns:
            JSON payload response
        '''

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        try:
            if (apitype == 's3'):
                return s3_bucket_update(namespace, keypool, versioning, uid,
                                        secretkey)
            else:
                raise SOSError(SOSError.VALUE_ERR,
                               "Wrong API type " + apitype + " specified")

        except SOSError as e:
            raise e
Example #6
0
    def add_or_remove_vcenter_acls(self, vcenter_name, tenants, operation):
        vcenter_uri = self.vcenter_query(vcenter_name, VCenter.VCENTERS_FROM_ALL_TENANTS)

        tenants_array = []
        tenants_array = tenants.split(',')

        from tenant import Tenant
        obj = Tenant(self.__ipAddr, self.__port)

        acl_entries = []
        for tenant in tenants_array:
            acl_entry = dict()
            acl_entry['privilege'] = ['USE']
            acl_entry['tenant'] = str(obj.tenant_query(tenant))
            acl_entries.append(acl_entry)

        request = {operation: acl_entries}

        body = json.dumps(request)

        (s, h) = common.service_json_request(self.__ipAddr, self.__port, "PUT",
                        VCenter.URI_VCENTER_ACL.format(vcenter_uri), body)

        o = common.json_decode(s)

        return o
Example #7
0
    def keypool_create(self, keypool, projectname, tenant, vpoolname, apitype,
                       uid, secret):
        '''
        creates a keypool
        parameters:
            keypool:  	label of the keypool
            project:  	project name
            tenant:  	tenant  name
            vpool:  	vpool  name
            apitype:    api type(s3, swift or atmos)
            uid:	user id
            secret:	secret key
        Returns:
            JSON payload response
        '''
        errorcontext = 0

        if ((projectname) and (not common.is_uri(projectname))):
            from project import Project
            obj = Project(self.__ipAddr, self.__port)
            projectlst = obj.project_list(tenant)

            project_uri = None

            for projiter in projectlst:
                if (projiter['name'] == projectname):
                    project_uri = projiter['id']

            if (not project_uri):
                raise SOSError(SOSError.VALUE_ERR,
                               "Porject " + projectname + ": not found")

        if ((vpoolname) and (not common.is_uri(vpoolname))):
            from virtualpool import VirtualPool
            obj = VirtualPool(self.__ipAddr, self.__port)
            vpool = obj.vpool_show(vpoolname, 'object')
            vpool_uri = vpool['id']

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        try:
            if (apitype == 's3'):
                return s3_bucket_create(namespace, keypool, project_uri,
                                        vpool_uri, uid, secretkey)
            elif (apitype == 'swift'):
                return swift_container_create(namespace, keypool, project_uri,
                                              vpool_uri, uid, secretkey)
            elif (apitype == 'atmos'):
                return atmos_subtenant_create(namespace, tenant, keypool,
                                              project_uri, vpool_uri, uid,
                                              secretkey)
            else:
                raise SOSError(SOSError.VALUE_ERR,
                               "Wrong API type " + apitype + " specified")

        except SOSError as e:
            raise e
Example #8
0
    def keypool_show(self, keypool, tenant, uid, secret):
        '''
        show keypool
        parameters:
            keypool:  	label of the keypool
            tenant:  	tenant name
            uid:	user id
            secret:	secret key
        Returns:
            JSON payload response
        '''
        #uri = self.keypool_query(label)

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        try:
            if (apitype == 's3'):
                return s3_bucket_show(namespace, keypool, uid, secretkey)
            elif (apitype == 'swift'):
                return swift_container_show(namespace, keypool, uid, secretkey)
            elif (apitype == 'atmos'):
                return atmos_subtenant_show(namespace, keypool, uid, secretkey)
            else:
                raise SOSError(SOSError.VALUE_ERR,
                               "Wrong API type " + apitype + " specified")
        except SOSError as e:
            raise e
Example #9
0
    def keypool_delete(self, keypool, tenant, uid, secret):
        '''Makes a REST API call to delete a keypool by its name,
        project and tenant
        '''

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        try:
            if(apitype == 's3'):
                return s3_bucket_delete(namespace, keypool, uid, secretkey)
            elif(apitype == 'swift'):
                return swift_container_delete(namespace,
                                              keypool,
                                              uid,
                                              secretkey)
            elif(apitype == 'atmos'):
                return atmos_subtenant_delete(namespace,
                                              keypool,
                                              uid,
                                              secretkey)
            else:
                raise SOSError(SOSError.VALUE_ERR,
                               "Wrong API type " + apitype + " specified")
        except SOSError as e:
            raise e
Example #10
0
    def key_list_versions(self, keypool, key, tenant, apitype,  uid, secret):
        '''
        Returns versions of the key`
        Parameters:           
            key:  label of the key
            keypool:  label of the keypool
            project:  project name
            tenant:  tenant  name
	    apitype:    api to be used
	    uid:	user id
	    secret:	secret
        Returns:
                JSON payload of key list
        '''

	if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace =  tenant_obj.namespace_get(tenant)

	if(apitype == 's3'):
            s3_key_list_versions(namespace, keypool, key, uid, secret )
	elif ( (apitype =='swift') or (apitype=='atmos')) :
            raise SOSError(SOSError.NOT_FOUND_ERR,
                  "Versioning not available with  API type " + apitype)
        else:
            raise SOSError(SOSError.VALUE_ERR,
                  "Wroing API type " + apitype + " specified")
Example #11
0
    def cluster_create(self, label, tenant, datacenter, vcenter):
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        vdatacenterobj = VcenterDatacenter(self.__ipAddr, self.__port)

        if(tenant is None):
            tenant_uri = tenant_obj.tenant_getid()
        else:
            tenant_uri = tenant_obj.tenant_query(tenant)

        parms = {'name': label}

        # datacenter
        if(datacenter):
            # on failure, query raise exception
            parms['vcenter_data_center'] = \
                vdatacenterobj.vcenterdatacenter_query(
                    datacenter, vcenter, tenant)

        body = json.dumps(parms)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port,
            "POST",
            Cluster.URI_TENANTS_CLUSTERS.format(tenant_uri),
            body)
        o = common.json_decode(s)
Example #12
0
    def project_query(self, name):
        '''
        Retrieves UUID of project based on its name
        Parameters:
            name: name of project
        Returns: UUID of project
        Throws:
            SOSError - when project name is not found
        '''
        if (common.is_uri(name)):
            return name
        (tenant_name, project_name) = common.get_parent_child_from_xpath(name)

        from tenant import Tenant
        tenant_obj = Tenant(self.__ipAddr, self.__port)

        try:
            tenant_uri = tenant_obj.tenant_query(tenant_name)
            projects = self.project_list(tenant_uri)
            if(projects and len(projects) > 0):
                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 SOSError(SOSError.NOT_FOUND_ERR,
                            'Project: ' + project_name + ' not found')
        except SOSError as e:
            raise e
Example #13
0
    def keypool_show(self, keypool, tenant, uid, secret):
        '''
        show keypool
        parameters:
            keypool:  	label of the keypool
            tenant:  	tenant name
            uid:	user id
            secret:	secret key
        Returns:
            JSON payload response
        '''
        #uri = self.keypool_query(label)

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        try:
            if(apitype == 's3'):
                return s3_bucket_show(namespace, keypool, uid, secretkey)
            elif(apitype == 'swift'):
                return swift_container_show(namespace, keypool, uid, secretkey)
            elif(apitype == 'atmos'):
                return atmos_subtenant_show(namespace, keypool, uid, secretkey)
            else:
                raise SOSError(SOSError.VALUE_ERR,
                               "Wrong API type " + apitype + " specified")
        except SOSError as e:
            raise e
Example #14
0
    def keypool_update(
            self, keypool, tenant, versioning, apitype, uid, secret):
        '''
        update keypool versioning
        parameters:
            keypool:  	label of the keypool
            project:  	project name
            tenant:  	tenant  name
            uid:	user id
            secret:	secret key
        Returns:
            JSON payload response
        '''

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        try:
            if(apitype == 's3'):
                return s3_bucket_update(
                    namespace, keypool, versioning, uid, secretkey)
            else:
                raise SOSError(SOSError.VALUE_ERR,
                               "Wrong API type " + apitype + " specified")

        except SOSError as e:
            raise e
Example #15
0
    def key_write(self, key, filepath , keypool, tenant, apitype,  uid, secret, type):
        '''
        write a key
        parameters:    
            key:  	key
            keypool:  	keypool
            tenant:   	tenant  name
            value:   	value
	    apitype:    api to be used
	    uid:	user id
	    secret:	secret
        Returns:
            JSON payload response
        '''

	if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace =  tenant_obj.namespace_get(tenant)

	if(apitype == 's3'):
            s3_key_write(namespace, keypool, key, filepath, uid, secret )
        elif(apitype == 'swift'):
            swift_object_write(namespace, keypool, key, filepath, uid, secret )
        elif(apitype == 'atmos'):
            atmos_object_write(namespace, keypool, key, filepath, uid, secret, type )
        else:
            raise SOSError(SOSError.VALUE_ERR,
                  "Wrong API type " + apitype + " specified")
    def varray_disallow_tenant(self, varray, tenant):
        '''
        Makes a REST API call to retrieve details of a varray
        based on its UUID
        '''
        uri = self.varray_query(varray)

        from tenant import Tenant
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        tenanturi = tenant_obj.tenant_query(tenant)

        parms = {
            'remove': [{
                'privilege': ['USE'],
                'tenant': tenanturi,
            }]
        }

        body = json.dumps(parms)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port, "PUT",
            self.URI_VIRTUALARRAY_ACLS.format(uri),
            body)
        return s
Example #17
0
    def key_delete(self, key, keypool, tenant, apitype, version, uid, secret):
        '''
        Makes a REST API call to delete a key by its name
        Parameters:           
            key:  label of the key
            keypool:  label of the keypool
            project:  project name
            tenant:  tenant  name
	    apitype:    api to be used
	    uid:	user id
	    secret:	secret
        Returns:
                JSON payload of key list
        '''
	if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace =  tenant_obj.namespace_get(tenant)

	if(apitype == 's3'):
            s3_key_delete(namespace, keypool, key, version, uid, secret )
        elif(apitype == 'swift'):
            swift_object_delete(namespace, keypool, key, version, uid, secret )
        elif(apitype == 'atmos'):
            atmos_object_delete(namespace, keypool, key, uid, secret )
        else:
            raise SOSError(SOSError.VALUE_ERR,
                  "Wrong API type " + apitype + " specified")
Example #18
0
    def varray_list(self, vdcname=None, tenant=None):
        '''
        Returns all the varrays in a vdc
        Parameters:
        Returns:
                JSON payload of varray list
        '''
        vdcuri = None
        vdcrestapi = None

        if(tenant != None):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            tenanturi = tenant_obj.tenant_query(tenant)
            if(vdcname != None):
                vdcrestapi = VirtualArray.URI_VIRTUALARRAY_BY_VDC_ID_AND_TENANT_ID.format(vdcname, tenanturi)
            else:
                vdcrestapi = VirtualArray.URI_VIRTUALARRAY_BY_TENANT_ID.format(tenanturi)
        else:
            if(vdcname != None):
                vdcrestapi = VirtualArray.URI_VIRTUALARRAY_BY_VDC_ID.format(vdcname)
            else:
                vdcrestapi = VirtualArray.URI_VIRTUALARRAY

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port, "GET",
            vdcrestapi, None)

        o = common.json_decode(s)

        returnlst = []
        for item in o['varray']:
            returnlst.append(item['id'])

        return returnlst
Example #19
0
    def cluster_create(self, label, tenant, datacenter, vcenter):
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        vdatacenterobj = VcenterDatacenter(self.__ipAddr, self.__port)

        if(tenant is None):
            tenant_uri = tenant_obj.tenant_getid()
        else:
            tenant_uri = tenant_obj.tenant_query(tenant)

        parms = {'name': label}

        # datacenter
        if(datacenter):
            # on failure, query raise exception
            parms['vcenter_data_center'] = \
                vdatacenterobj.vcenterdatacenter_query(
                    datacenter, vcenter, tenant)

        body = json.dumps(parms)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port,
            "POST",
            Cluster.URI_TENANTS_CLUSTERS.format(tenant_uri),
            body)
        o = common.json_decode(s)
Example #20
0
    def key_write(self, key, filepath, keypool, tenant, apitype, uid, secret,
                  type):
        '''
        write a key
        parameters:    
            key:  	key
            keypool:  	keypool
            tenant:   	tenant  name
            value:   	value
	    apitype:    api to be used
	    uid:	user id
	    secret:	secret
        Returns:
            JSON payload response
        '''

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        if (apitype == 's3'):
            s3_key_write(namespace, keypool, key, filepath, uid, secret)
        elif (apitype == 'swift'):
            swift_object_write(namespace, keypool, key, filepath, uid, secret)
        elif (apitype == 'atmos'):
            atmos_object_write(namespace, keypool, key, filepath, uid, secret,
                               type)
        else:
            raise SOSError(SOSError.VALUE_ERR,
                           "Wrong API type " + apitype + " specified")
    def cluster_create(self, label, tenant, project, datacenter, vcenter):
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        vdatacenterobj = VcenterDatacenter(self.__ipAddr, self.__port)
        projectobj = Project(self.__ipAddr, self.__port)

        if(tenant == None):
            tenant_uri = tenant_obj.tenant_getid()
        else:
            tenant_uri = tenant_obj.tenant_query(tenant)
                
        parms = { 'name'            : label
                   }
        #project
        if(project):
            if(tenant):
                projectname = tenant + "/" + project
            else:
                projectname = "" + "/" + project
            #on failure, query raise exception
            parms['project'] = projectobj.project_query(projectname)
            
        #datacenter
        if(datacenter):
            #on failure, query raise exception
            parms['vcenter_data_center'] = vdatacenterobj.vcenterdatacenter_query(datacenter, vcenter)

        body = json.dumps(parms)

        (s, h) = common.service_json_request(self.__ipAddr, self.__port,
                                             "POST",
                                             Cluster.URI_TENANTS_CLUSTERS.format(tenant_uri),
                                             body)
        o = common.json_decode(s)
Example #22
0
    def key_list_versions(self, keypool, key, tenant, apitype, uid, secret):
        '''
        Returns versions of the key`
        Parameters:           
            key:  label of the key
            keypool:  label of the keypool
            project:  project name
            tenant:  tenant  name
	    apitype:    api to be used
	    uid:	user id
	    secret:	secret
        Returns:
                JSON payload of key list
        '''

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        if (apitype == 's3'):
            s3_key_list_versions(namespace, keypool, key, uid, secret)
        elif ((apitype == 'swift') or (apitype == 'atmos')):
            raise SOSError(
                SOSError.NOT_FOUND_ERR,
                "Versioning not available with  API type " + apitype)
        else:
            raise SOSError(SOSError.VALUE_ERR,
                           "Wroing API type " + apitype + " specified")
    def get_tenant_id(self, tenantName):
        """
         Fetch the tenant id
        """
        tenantObj = Tenant(self.__ipAddr, self.__port)
        tenantId = tenantObj.get_tenant_by_name(tenantName)

        return tenantId
Example #24
0
    def test0_volumes(self):
        tenant1 = Tenant("client1")
        tenant2 = Tenant("client2")
        user_tenant = UserTenant("rauburtin")
        user_tenant.add_tenant(tenant1)
        user_tenant.add_tenant(tenant2)

        print user_tenant.volumes, user_tenant.volumes_binds
Example #25
0
    def test0_volumes(self):
        return
        tenant1=Tenant("client1")
        tenant2=Tenant("client2")
        container_user_tenant=ContainerUserTenant("rauburtin")
        container_user_tenant.add_tenant(tenant1)
        container_user_tenant.add_tenant(tenant2)

        print container_user_tenant.volumes,container_user_tenant.volumes_binds
        container_user_tenant.start()
        print container_user_tenant.logs
        container_user_tenant.remove()
Example #26
0
    def get_tenant_uri_from_name(self, tenantname):
        if (tenantname is None or
            tenantname == "" or
            tenantname.lower() == VCenter.VCENTERS_FROM_ALL_TENANTS.lower() or
            tenantname.lower() == VCenter.VCENTERS_WITH_NO_TENANTS.lower()):
            tenanturi = tenantname
        else:
            from tenant import Tenant
            obj = Tenant(self.__ipAddr, self.__port)

            tenanturi = obj.tenant_query(tenantname)

        return tenanturi
    def policy_list(self, tenantname):
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        tenant_uri = tenant_obj.tenant_query(tenantname)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port,
            "GET",
            Schedulepolicy.URI_SNAPSHOT_SCHEDULE_POLICY_CREATE.format(
                tenant_uri),
            None)
        
        res = common.json_decode(s)
        return res['schedule_policy']
    def create(
        self,
        tenant,
        policyname,
        policytype,
        schedulefrequency,
        schedulerepeat,
        scheduletime,
        scheddom,
        scheddow,
        expiretype,
        expirevalue,
    ):

        tenant_obj = Tenant(self.__ipAddr, self.__port)
        tenant_uri = tenant_obj.tenant_query(tenant)

        schedule = dict()
        schedule = {
            "schedule_frequency": schedulefrequency,
            "schedule_repeat": schedulerepeat,
            "schedule_time": scheduletime,
        }

        if schedulefrequency == "weeks":
            schedule["schedule_day_of_week"] = scheddow
        elif schedulefrequency == "months":
            schedule["schedule_day_of_month"] = scheddom

        parms = {"policy_type": policytype, "policy_name": policyname}

        body = None
        parms["schedule"] = schedule

        snapshot_expire = dict()
        if expiretype or expirevalue:
            snapshot_expire = {"expire_type": expiretype, "expire_value": expirevalue}
            parms["snapshot_expire"] = snapshot_expire

        body = json.dumps(parms)

        (s, h) = common.service_json_request(
            self.__ipAddr,
            self.__port,
            "POST",
            Schedulepolicy.URI_SNAPSHOT_SCHEDULE_POLICY_CREATE.format(tenant_uri),
            body,
        )

        return
    def policy_list(self, tenantname):
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        tenant_uri = tenant_obj.tenant_query(tenantname)

        (s, h) = common.service_json_request(
            self.__ipAddr,
            self.__port,
            "GET",
            Schedulepolicy.URI_SNAPSHOT_SCHEDULE_POLICY_CREATE.format(tenant_uri),
            None,
        )

        res = common.json_decode(s)
        return res["schedule_policy"]
Example #30
0
    def get_vcenter_uri_with_tenant_param(self, tenant):
        uri = ""
        if (tenant is None or
            tenant == "" or
            tenant.lower() == VCenter.VCENTERS_FROM_ALL_TENANTS.lower()):
            uri = VCenter.URI_VCENTERS_WITH_TENANT_PARAM.format(VCenter.VCENTERS_FROM_ALL_TENANTS)
        elif tenant.lower() == VCenter.VCENTERS_WITH_NO_TENANTS.lower():
            uri = VCenter.URI_VCENTERS_WITH_TENANT_PARAM.format(tenant)
        else:
            from tenant import Tenant
            obj = Tenant(self.__ipAddr, self.__port)

            tenant_uri = obj.tenant_query(tenant)
            uri = VCenter.URI_VCENTERS_WITH_TENANT_PARAM.format(tenant_uri)
        return uri
Example #31
0
    def vcenterdatacenter_update(self, label, vcenter, tenantname,
                                 newtenantname):
        '''
        updates a vcenterdatacenter
        parameters:
            label:  label of the vcenterdatacenter
        Returns:
            JSON payload response
        '''
        try:
            check = self.vcenterdatacenter_show(label, vcenter, tenantname)
            if check:
                raise SOSError(SOSError.ENTRY_ALREADY_EXISTS_ERR,
                               "vcenterdatacenter " + label + ": found")

        except SOSError as e:
            if e.err_code == SOSError.ENTRY_ALREADY_EXISTS_ERR:

                uri = self.vcenterdatacenter_query(
                    label, vcenter,
                    VcenterDatacenter.DATACENTERS_FROM_ALL_TENANTS)

                params = dict()
                params['name'] = label

                if newtenantname is not None and newtenantname != 'null':
                    from tenant import Tenant
                    obj = Tenant(self.__ipAddr, self.__port)
                    params['tenant'] = obj.tenant_query(newtenantname)
                elif newtenantname is not None:
                    params['tenant'] = newtenantname

                body = json.dumps(params)

                (s, h) = common.service_json_request(
                    self.__ipAddr, self.__port, "PUT",
                    VcenterDatacenter.URI_DATACENTER.format(uri), body)

                o = common.json_decode(s)

                return o
            else:
                raise e

        if not check:
            raise SOSError(
                SOSError.NOT_FOUND_ERR,
                "vcenterdatacenter with name " + label + " dost not exist")
Example #32
0
    def keypool_list(self, projectname, tenant, apitype, uid, secret):
        '''
        Returns all the keypools in a vdc
        Parameters:
            keypool:  label of the keypool
            project:  project name
            tenant:  tenant  name
            apitype:    api type(s3, swift or atmos)
            uid:	user id
            secret:	secret key
        Returns:
                JSON payload of keypool list
        '''

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        kplst = []

        try:
            if((not apitype) or (apitype == 's3')):
                kplst.append(
                    s3_bucket_list(
                        namespace,
                        projectname,
                        uid,
                        secretkey))
            if((not apitype) or (apitype == 'swift')):
                kplst.append(
                    swift_container_list(
                        namespace,
                        projectname,
                        uid,
                        secretkey))
            if((not apitype) or (apitype == 'atmos')):
                kplst.append(
                    atmos_subtenant_list(
                        namespace,
                        projectname,
                        uid,
                        secretkey))

            # need to convert to table format
            return kplst
        except SOSError as e:
            raise e
    def create(
        self,
        name,
        tenantname,
        type,
        hourOfDay,
        length,
        lengthType,
        dayOfWeek,
        dayOfMonth,
        minuteOfHour,
        lastDayOfMonth=False,
    ):

        new_request = {
            "tenant": tenantname,
            "hour_of_day_in_utc": hourOfDay,
            "minute_of_hour_in_utc": minuteOfHour,
            "execution_window_length": length,
            "execution_window_length_type": lengthType,
            "execution_window_type": type,
            "day_of_week": dayOfWeek,
            "day_of_month": dayOfMonth,
            "last_day_of_month": lastDayOfMonth,
            "name": name,
        }

        if minuteOfHour is not None:
            new_request["minute_of_hour_in_utc"] = minuteOfHour

        if tenantname is not None:
            from tenant import Tenant

            tenant_obj = Tenant(self.__ipAddr, self.__port)
            try:
                tenant_uri = tenant_obj.tenant_query(None)
            except SOSError as e:
                raise e

            new_request["tenant"] = tenant_uri

        body = json.dumps(new_request)

        command = singletonURIHelperInstance.getUri(self.COMPONENT_TYPE, "create")

        (s, h) = common.service_json_request(self.__ipAddr, self.__port, "POST", command, body)
        o = common.json_decode(s)
        return o
Example #34
0
    def vcenter_create(self, label, tenant, ipaddress, devport, username,
                       password, osversion, usessl):
        '''
        creates a vcenter
        parameters:
            label:  label of the vcenter
        Returns:
            JSON payload response
        '''
        try:
            check = self.vcenter_show(label, tenant)
            if (not check):
                raise SOSError(SOSError.NOT_FOUND_ERR,
                               "vcenter " + label + ": not found")

        except SOSError as e:
            if (e.err_code == SOSError.NOT_FOUND_ERR):
                from tenant import Tenant
                obj = Tenant(self.__ipAddr, self.__port)

                uri = obj.tenant_query(tenant)

                var = dict()
                params = dict()
                params = {
                    'name': label,
                    'ip_address': ipaddress,
                    'os_version': osversion,
                    'port_number': devport,
                    'user_name': username,
                    'password': password,
                    'use_ssl': usessl
                }

                body = json.dumps(params)
                (s, h) = common.service_json_request(
                    self.__ipAddr, self.__port, "POST",
                    VCenter.URI_TENANTS_VCENTERS.format(uri), body)
                o = common.json_decode(s)
                return o

            else:
                raise e

        if (check):
            raise SOSError(SOSError.ENTRY_ALREADY_EXISTS_ERR,
                           "vcenter with name " + label + " already exists")
Example #35
0
    def create(self,
               name,
               tenantname,
               type,
               hourOfDay,
               length,
               lengthType,
               dayOfWeek,
               dayOfMonth,
               minuteOfHour,
               lastDayOfMonth=False):

        new_request = {
            "tenant": tenantname,
            "hour_of_day_in_utc": hourOfDay,
            "minute_of_hour_in_utc": minuteOfHour,
            "execution_window_length": length,
            "execution_window_length_type": lengthType,
            "execution_window_type": type,
            "day_of_week": dayOfWeek,
            "day_of_month": dayOfMonth,
            "last_day_of_month": lastDayOfMonth,
            "name": name
        }

        if (minuteOfHour is not None):
            new_request["minute_of_hour_in_utc"] = minuteOfHour

        if (tenantname is not None):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            try:
                tenant_uri = tenant_obj.tenant_query(None)
            except SOSError as e:
                raise e

            new_request["tenant"] = tenant_uri

        body = json.dumps(new_request)

        command = singletonURIHelperInstance.getUri(self.COMPONENT_TYPE,
                                                    "create")

        (s, h) = common.service_json_request(self.__ipAddr, self.__port,
                                             "POST", command, body)
        o = common.json_decode(s)
        return o
Example #36
0
    def event_list(self, tenant):
        uri = Tenant(self.__ipAddr, self.__port).tenant_query(tenant)

        (s, h) = common.service_json_request(self.__ipAddr, self.__port, "GET",
                                             Event.URI_EVENTS.format(uri),
                                             None)
        o = common.json_decode(s)
        return o['event']
Example #37
0
    def vcenter_create(self, label, tenant, ipaddress, devport,
                       username, password, osversion, usessl):
        '''
        creates a vcenter
        parameters:
            label:  label of the vcenter
        Returns:
            JSON payload response
        '''
        try:
            check = self.vcenter_show(label, tenant)
            if(not check):
                raise SOSError(SOSError.NOT_FOUND_ERR,
                               "vcenter " + label + ": not found")

        except SOSError as e:
            if(e.err_code == SOSError.NOT_FOUND_ERR):
                from tenant import Tenant
                obj = Tenant(self.__ipAddr, self.__port)

                uri = obj.tenant_query(tenant)

                var = dict()
                params = dict()
                params = {'name': label,
                          'ip_address': ipaddress,
                          'os_version': osversion,
                          'port_number': devport,
                          'user_name': username,
                          'password': password,
                          'use_ssl': usessl
                          }

                body = json.dumps(params)
                (s, h) = common.service_json_request(
                    self.__ipAddr, self.__port, "POST",
                    VCenter.URI_TENANTS_VCENTERS.format(uri), body)
                o = common.json_decode(s)
                return o

            else:
                raise e

        if(check):
            raise SOSError(SOSError.ENTRY_ALREADY_EXISTS_ERR,
                           "vcenter with name " + label + " already exists")
Example #38
0
    def test0_sshcont(self):
        #return
        tenant1=Tenant("client1")
        tenant2=Tenant("client2")
        #tenant3=Tenant("client3")
        sshd_container_user_tenant=SshdContainerUserTenant("rauburtin")
        sshd_container_user_tenant.add_tenant(tenant1)
        sshd_container_user_tenant.add_tenant(tenant2)
        #sshd_container_user_tenant.add_tenant(tenant3)

        print sshd_container_user_tenant.volumes,sshd_container_user_tenant.volumes_binds
        sshd_container_user_tenant.start()
        sshd_container_user_tenant.wait()

        print 'logs',sshd_container_user_tenant.logs
        print sshd_container_user_tenant.ports
        print sshd_container_user_tenant.exposed_port
    def vcenterdatacenter_update(self, label, vcenter, tenantname, newtenantname):
        '''
        updates a vcenterdatacenter
        parameters:
            label:  label of the vcenterdatacenter
        Returns:
            JSON payload response
        '''
        try:
            check = self.vcenterdatacenter_show(label, vcenter, tenantname)
            if check:
                raise SOSError(SOSError.NOT_FOUND_ERR,
                               "vcenterdatacenter " + label + ": found")

        except SOSError as e:
            if e.err_code == SOSError.NOT_FOUND_ERR:

                uri = self.vcenterdatacenter_query(label, vcenter, VcenterDatacenter.DATACENTERS_FROM_ALL_TENANTS)

                params = dict()
                params['name'] = label
                
                if newtenantname is not None and newtenantname != 'null':
                    from tenant import Tenant
                    obj = Tenant(self.__ipAddr, self.__port)
                    params['tenant'] = obj.tenant_query(newtenantname)
                elif newtenantname is not None:
                     params['tenant'] = newtenantname

                body = json.dumps(params)

                (s, h) = common.service_json_request(
                    self.__ipAddr, self.__port, "PUT",
                    VcenterDatacenter.URI_DATACENTER.format(uri), body)

                o = common.json_decode(s)

                return o
            else:
                raise e

        if not check:
            raise SOSError(SOSError.ENTRY_ALREADY_EXISTS_ERR,
                           "vcenterdatacenter with name " + label +
                           " dost not exist")
def varray_get_acl(args):
    obj = VirtualArray(args.ip, args.port)
    try:
        res = obj.varray_get_acl(args.name)
        output = res['acl']
        from tenant import Tenant
        tenant_obj = Tenant(args.ip, args.port)

        for item in output:
            tenantval = tenant_obj.tenant_show(item['tenant'])
            item['tenantname'] = tenantval['name']

        from common import TableGenerator
        TableGenerator(output, ['tenantname', 'privilege']).printTable()

    except SOSError as e:
        common.format_err_msg_and_raise("get_acl", "varray",
                                        e.err_text, e.err_code)
Example #41
0
 def add_user_tenant(self, username, tenantname):
     tenant = Tenant(tenantname)
     if not username in self.user_tenants_dict:
         user_tenant = UserTenant(username)
         user_tenant.add_tenant(tenant)
         self.user_tenants_dict[username] = user_tenant
     else:
         user_tenant = self.user_tenants_dict[username]
         user_tenant.add_tenant(tenant)
Example #42
0
    def cluster_list(self, tenant):
        uri = Tenant(self.__ipAddr, self.__port).tenant_query(tenant)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port, "GET",
            Cluster.URI_TENANTS_CLUSTERS.format(uri), None)
        o = common.json_decode(s)
        return o['cluster']
        '''
Example #43
0
def varray_get_acl(args):
    obj = VirtualArray(args.ip, args.port)
    try:
        res = obj.varray_get_acl(args.name)
        output = res['acl']
        from tenant import Tenant
        tenant_obj = Tenant(args.ip, args.port)

        for item in output:
            tenantval = tenant_obj.tenant_show(item['tenant'])
            item['tenantname'] = tenantval['name']

        from common import TableGenerator
        TableGenerator(output, ['tenantname', 'privilege']).printTable()

    except SOSError as e:
        common.format_err_msg_and_raise("get_acl", "varray", e.err_text,
                                        e.err_code)
 def create(self, tenant, policyname, policytype, schedulefrequency, 
                                      schedulerepeat,scheduletime, scheddom, scheddow, expiretype,
                                      expirevalue):
     
     tenant_obj = Tenant(self.__ipAddr, self.__port)
     tenant_uri = tenant_obj.tenant_query(tenant)
     
     schedule = dict()
     schedule = {
                 'schedule_frequency' : schedulefrequency,
                 'schedule_repeat' : schedulerepeat,
                 'schedule_time' : scheduletime
                 }
     
     if schedulefrequency == 'weeks':
         schedule['schedule_day_of_week'] = scheddow
     elif schedulefrequency == 'months':
         schedule['schedule_day_of_month'] = scheddom
         
     parms = {
              'policy_type' : policytype,
              'policy_name' : policyname}
     
     body = None
     parms['schedule'] = schedule
     
     snapshot_expire = dict()
     if expiretype or expirevalue :
         snapshot_expire = {
                        'expire_type' : expiretype,
                        'expire_value' : expirevalue}
         parms['snapshot_expire'] = snapshot_expire
     
     
     body = json.dumps(parms)
     
     (s, h) = common.service_json_request(
         self.__ipAddr, self.__port,
         "POST",
         Schedulepolicy.URI_SNAPSHOT_SCHEDULE_POLICY_CREATE.format(
             tenant_uri),
         body)
     
     return
Example #45
0
def read_tenants_from_file(filename):
    tenants = []
    content = None
    with open(filename, "r") as f:
        content = f.read()
    bs = BeautifulSoup(content, 'xml')
    for tenant_bs in bs.find_all("tenant"):
        tenants.append(Tenant(tenant_bs))

    return tenants
Example #46
0
    def vcenter_query(self, name, tenantname):
        '''
        Returns the UID of the vcenter specified by the name
        '''
        if (common.is_uri(name)):
            return name

        from tenant import Tenant
        obj = Tenant(self.__ipAddr, self.__port)

        tenanturi = obj.tenant_query(tenantname)

        vcenters = self.vcenter_list(tenanturi)
        for vcenter in vcenters:
            if (vcenter['name'] == name):
                return vcenter['id']

        raise SOSError(SOSError.NOT_FOUND_ERR,
                       "vcenter " + name + ": not found")
Example #47
0
    def key_read(self, key, keypool, tenant, apitype, version, filepath , uid, secret, type ):
        '''
        Makes a REST API call to retrieve details of a key  based on its key, keypool, apitype,uid, secret
        '''

	if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace =  tenant_obj.namespace_get(tenant)

	if(apitype == 's3'):
            return s3_key_read(namespace, keypool, key, version, filepath, uid, secret )
        elif(apitype == 'swift'):
            return swift_object_read(namespace, keypool, key, version, filepath, uid, secret )
        elif(apitype == 'atmos'):
            return atmos_object_read(namespace, keypool, key, version, filepath, uid, secret, type )
        else:
            raise SOSError(SOSError.VALUE_ERR,
                  "Wrong API type " + apitype + " specified")
Example #48
0
    def vcenter_query(self, name, tenantname):
        '''
        Returns the UID of the vcenter specified by the name
        '''
        if (common.is_uri(name)):
            return name

        from tenant import Tenant
        obj = Tenant(self.__ipAddr, self.__port)

        tenanturi = obj.tenant_query(tenantname)

        vcenters = self.vcenter_list(tenanturi)
        for vcenter in vcenters:
            if (vcenter['name'] == name):
                return vcenter['id']

        raise SOSError(SOSError.NOT_FOUND_ERR,
                       "vcenter " + name + ": not found")
Example #49
0
    def vcenter_list(self, tenant):
        '''
        Returns all the vcenters associated with a tenant
        Parameters:
        Returns:
                JSON payload of vcenter list
        '''
        from tenant import Tenant
        obj = Tenant(self.__ipAddr, self.__port)

        uri = obj.tenant_query(tenant)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port, "GET",
            VCenter.URI_TENANTS_VCENTERS.format(uri), None)

        o = common.json_decode(s)

        return o['vcenter']
Example #50
0
    def vcenter_list(self, tenant):
        '''
        Returns all the vcenters associated with a tenant
        Parameters:
        Returns:
                JSON payload of vcenter list
        '''
        from tenant import Tenant
        obj = Tenant(self.__ipAddr, self.__port)

        uri = obj.tenant_query(tenant)

        (s, h) = common.service_json_request(
            self.__ipAddr, self.__port, "GET",
            VCenter.URI_TENANTS_VCENTERS.format(uri), None)

        o = common.json_decode(s)

        return o['vcenter']
 def project_list(self, tenant_name):
     '''
     Makes REST API call and retrieves projects based on tenant UUID
     Parameters: None
     Returns:
         List of project UUIDs in JSON response payload 
     '''
     from tenant import Tenant
     tenant_obj = Tenant(self.__ipAddr, self.__port)
     try:
         tenant_uri = tenant_obj.tenant_query(tenant_name)
     except SOSError as e:
         raise e
     (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 []
Example #52
0
    def project_list(self, tenant_name):
        '''
        Makes REST API call and retrieves projects based on tenant UUID
        Parameters: None
        Returns:
            List of project UUIDs in JSON response payload
        '''
        from tenant import Tenant
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        try:
            tenant_uri = tenant_obj.tenant_query(tenant_name)
        except SOSError as e:
            raise e
        (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 []
Example #53
0
    def project_create(self, name, tenant_name):
        '''
        Makes REST API call to create project under a tenant
        Parameters:
            name: name of project
            tenant_name: name of the tenant under which project
                         is to be created
        Returns:
            Created project details in JSON response payload
        '''
        from tenant import Tenant
        tenant_obj = Tenant(self.__ipAddr, self.__port)
        try:
            tenant_uri = tenant_obj.tenant_query(tenant_name)
        except SOSError as e:
            raise e

        project_already_exists = True

        try:
            if(not tenant_name):
                tenant_name = ""
            self.project_query(tenant_name + "/" + name)
        except SOSError as e:
            if(e.err_code == SOSError.NOT_FOUND_ERR):
                project_already_exists = False
            else:
                raise e

        if(project_already_exists):
            raise SOSError(SOSError.ENTRY_ALREADY_EXISTS_ERR,
                           "Project with name: " + name +
                           " already exists")

        body = common.json_encode('name', name)

        (s, h) = common.service_json_request(self.__ipAddr, self.__port,
                     "POST",
                    Project.URI_PROJECT_LIST.format(tenant_uri), body)
        o = common.json_decode(s)
        return o
def varray_get_acl(args):
    obj = VirtualArray(args.ip, args.port)
    try:
        res = obj.varray_get_acl(args.name)

	output = res['acl']
	from tenant import Tenant
	tenant_obj = Tenant(args.ip, args.port)

	for iter in output:
            tenantval =  tenant_obj.tenant_show(iter['tenant'])
	    iter['tenantname'] = tenantval['name']


	from common import TableGenerator
        TableGenerator(output, [ 'tenantname', 'privilege']).printTable()

    except SOSError as e:
        if(e.err_code == SOSError.NOT_FOUND_ERR):
            raise SOSError(SOSError.NOT_FOUND_ERR, 
                           "varray Get ACL failed: " + e.err_text)
        else:
            raise e
    def list_from_all_tenants(self):
        hostList = []
        from tenant import Tenant

        obj = Tenant(self.__ipAddr, self.__port)

        tenants = obj.tenant_list()
        uris = []

        for tenant in tenants:
            uris.append(tenant["id"])

        defaultTenantId = obj.tenant_getid()
        uris.append(defaultTenantId)

        for uri in uris:
            if hostList.__len__() == 0:
                hostList = self.list_by_tenant(uri)
            else:
                tempList = self.list_by_tenant(uri)
                for tempHost in tempList:
                    hostList.append(tempHost)

        return hostList
Example #56
0
    def keypool_create(self,
                       keypool,
                       projectname,
                       tenant,
                       vpoolname,
                       apitype,
                       uid,
                       secret):
        '''
        creates a keypool
        parameters:
            keypool:  	label of the keypool
            project:  	project name
            tenant:  	tenant  name
            vpool:  	vpool  name
            apitype:    api type(s3, swift or atmos)
            uid:	user id
            secret:	secret key
        Returns:
            JSON payload response
        '''
        errorcontext = 0

        if ((projectname) and (not common.is_uri(projectname))):
            from project import Project
            obj = Project(self.__ipAddr, self.__port)
            projectlst = obj.project_list(tenant)

            project_uri = None

            for projiter in projectlst:
                if(projiter['name'] == projectname):
                    project_uri = projiter['id']

            if(not project_uri):
                raise SOSError(SOSError.VALUE_ERR,
                               "Porject " + projectname + ": not found")

        if ((vpoolname) and (not common.is_uri(vpoolname))):
            from virtualpool import VirtualPool
            obj = VirtualPool(self.__ipAddr, self.__port)
            vpool = obj.vpool_show(vpoolname, 'object')
            vpool_uri = vpool['id']

        if (not common.is_uri(tenant)):
            from tenant import Tenant
            tenant_obj = Tenant(self.__ipAddr, self.__port)
            namespace = tenant_obj.namespace_get(tenant)

        try:
            if(apitype == 's3'):
                return s3_bucket_create(namespace,
                                        keypool,
                                        project_uri,
                                        vpool_uri,
                                        uid,
                                        secretkey)
            elif(apitype == 'swift'):
                return swift_container_create(namespace,
                                              keypool,
                                              project_uri,
                                              vpool_uri,
                                              uid,
                                              secretkey)
            elif(apitype == 'atmos'):
                return atmos_subtenant_create(namespace,
                                              tenant,
                                              keypool,
                                              project_uri,
                                              vpool_uri,
                                              uid,
                                              secretkey)
            else:
                raise SOSError(SOSError.VALUE_ERR,
                               "Wrong API type " + apitype + " specified")

        except SOSError as e:
            raise e