Пример #1
0
 def list_rules_cloud(cls, cloud, groupname):
     provider = CloudProvider(cloud).provider
     groups = provider.list_secgroup(cloud)
     for id in groups:
         group = groups[id]
         if groupname == group["name"]:
             return group["rules"]
     return None
Пример #2
0
 def list_rules_cloud(cls, cloud, groupname):
     provider = CloudProvider(cloud).provider
     groups = provider.list_secgroup(cloud)
     for id in groups:
         group = groups[id]
         if groupname == group["name"]:
             return group["rules"]
     return None
Пример #3
0
 def get_group_cloud(cls, cloud, groupname):
     provider = CloudProvider(cloud).provider
     groups = provider.list_secgroup(cloud)
     ret = None
     for groupkey in groups:
         group = groups[groupkey]
         if group["name"] == groupname:
             ret = group
             break
     return ret
Пример #4
0
 def get_group_cloud(cls, cloud, groupname):
     provider = CloudProvider(cloud).provider
     groups = provider.list_secgroup(cloud)
     ret = None
     for groupkey in groups:
         group = groups[groupkey]
         if group["name"] == groupname:
             ret = group
             break
     return ret
Пример #5
0
    def refresh(self, kind, name, **kwargs):
        """
        This method refreshes the local database
        with the live cloud details
        :param kind:
        :param name:
        :param kwargs:
        :return:
        """
        try:
            # print(cloudname)
            # get the user
            # TODO: Confirm user
            user = self.user

            if kind in ["flavor", "image", "vm", "secgroup"]:

                # get provider for specific cloud
                provider = CloudProvider(name).provider

                # clear local db records for kind
                self.clear(kind, name)

                # for secgroup, clear rules as well
                if kind == "secgroup":
                    self.clear("secgrouprule", name)

                if kind == "flavor":
                    flavors = provider.list_flavor(name)
                    for flavor in list(flavors.values()):
                        flavor["uuid"] = flavor['id']
                        flavor['type'] = 'string'
                        flavor["category"] = name
                        flavor["user"] = user

                        db_obj = {0: {kind: flavor}}
                        self.add_obj(db_obj)
                        self.save()
                    return True

                elif kind == "image":
                    images = provider.list_image(name)

                    for image in list(images.values()):
                        image['uuid'] = image['id']
                        image['type'] = 'string'
                        image['category'] = name
                        image['user'] = user
                        db_obj = {0: {kind: image}}

                        self.add_obj(db_obj)
                        self.save()
                    return True

                elif kind == "vm":
                    vms = provider.list_vm(name)
                    for vm in list(vms.values()):
                        vm['uuid'] = vm['id']
                        vm['type'] = 'string'
                        vm['category'] = name
                        vm['user'] = user
                        db_obj = {0: {kind: vm}}

                        self.add_obj(db_obj)
                        self.save()
                    return True

                elif kind == "secgroup":
                    secgroups = provider.list_secgroup(name)
                    # pprint(secgroups)
                    for secgroup in list(secgroups.values()):
                        secgroup_db_obj = self.db_obj_dict("secgroup",
                                                           name=secgroup['name'],
                                                           uuid=secgroup['id'],
                                                           category=name,
                                                           project=secgroup['tenant_id'],
                                                           user=user
                                                           )

                        for rule in secgroup['rules']:
                            rule_db_obj = self.db_obj_dict("secgrouprule",
                                                           uuid=rule['id'],
                                                           name=secgroup['name'],
                                                           groupid=rule['parent_group_id'],
                                                           category=name,
                                                           user=user,
                                                           project=secgroup['tenant_id'],
                                                           fromPort=rule['from_port'],
                                                           toPort=rule['to_port'],
                                                           protocol=rule['ip_protocol'])

                            if bool(rule['ip_range']) is not False:
                                rule_db_obj[0]['secgrouprule']['cidr'] = rule['ip_range']['cidr']

                            self.add_obj(rule_db_obj)
                            self.save()
                        # rule-for-loop ends

                        self.add_obj(secgroup_db_obj)
                        self.save()
                    return True

            elif kind in ["batchjob"]:

                # provider = BatchProvider(name).provider
                # provider = BatchProvider(name)

                from cloudmesh_client.cloud.hpc.BatchProvider import BatchProvider
                provider = BatchProvider(name)

                vms = provider.list_job(name)
                for vm in list(vms.values()):
                    vm['uuid'] = vm['id']
                    vm['type'] = 'string'
                    vm['category'] = name
                    vm['user'] = user
                    db_obj = {0: {kind: vm}}

                    self.add_obj(db_obj)
                    self.save()
                return True

            else:
                Console.error("refresh not supported for this kind: {}".format(kind))

        except Exception as ex:
            Console.error(ex.message)
            return False
Пример #6
0
 def list_groups_cloud(cls, cloud):
     provider = CloudProvider(cloud).provider
     groups = provider.list_secgroup(cloud)
     return groups
Пример #7
0
    def refresh(self, kind, name, **kwargs):
        """
        This method refreshes the local database
        with the live cloud details
        :param kind:
        :param name:
        :param kwargs:
        :return:
        """
        try:
            # print(cloudname)
            # get the user
            # TODO: Confirm user
            user = self.user

            if kind in ["flavor", "image", "vm", "secgroup"]:

                # get provider for specific cloud
                provider = CloudProvider(name).provider

                # clear local db records for kind
                self.clear(kind, name)

                # for secgroup, clear rules as well
                if kind == "secgroup":
                    self.clear("secgrouprule", name)

                if kind == "flavor":
                    flavors = provider.list_flavor(name)
                    for flavor in list(flavors.values()):
                        flavor["uuid"] = flavor['id']
                        flavor['type'] = 'string'
                        flavor["category"] = name
                        flavor["user"] = user

                        db_obj = {0: {kind: flavor}}
                        self.add_obj(db_obj)
                        self.save()
                    return True

                elif kind == "image":
                    images = provider.list_image(name)

                    for image in list(images.values()):
                        image['uuid'] = image['id']
                        image['type'] = 'string'
                        image['category'] = name
                        image['user'] = user
                        db_obj = {0: {kind: image}}

                        self.add_obj(db_obj)
                        self.save()
                    return True

                elif kind == "vm":
                    vms = provider.list_vm(name)
                    for vm in list(vms.values()):
                        vm['uuid'] = vm['id']
                        vm['type'] = 'string'
                        vm['category'] = name
                        vm['user'] = user
                        db_obj = {0: {kind: vm}}

                        self.add_obj(db_obj)
                        self.save()
                    return True

                elif kind == "secgroup":
                    secgroups = provider.list_secgroup(name)
                    # pprint(secgroups)
                    for secgroup in list(secgroups.values()):
                        secgroup_db_obj = self.db_obj_dict(
                            "secgroup",
                            name=secgroup['name'],
                            uuid=secgroup['id'],
                            category=name,
                            project=secgroup['tenant_id'],
                            user=user)

                        for rule in secgroup['rules']:
                            rule_db_obj = self.db_obj_dict(
                                "secgrouprule",
                                uuid=rule['id'],
                                name=secgroup['name'],
                                groupid=rule['parent_group_id'],
                                category=name,
                                user=user,
                                project=secgroup['tenant_id'],
                                fromPort=rule['from_port'],
                                toPort=rule['to_port'],
                                protocol=rule['ip_protocol'])

                            if bool(rule['ip_range']) is not False:
                                rule_db_obj[0]['secgrouprule']['cidr'] = rule[
                                    'ip_range']['cidr']

                            self.add_obj(rule_db_obj)
                            self.save()
                        # rule-for-loop ends

                        self.add_obj(secgroup_db_obj)
                        self.save()
                    return True

            elif kind in ["batchjob"]:

                # provider = BatchProvider(name).provider
                # provider = BatchProvider(name)

                from cloudmesh_client.cloud.hpc.BatchProvider import BatchProvider
                provider = BatchProvider(name)

                vms = provider.list_job(name)
                for vm in list(vms.values()):
                    vm['uuid'] = vm['id']
                    vm['type'] = 'string'
                    vm['category'] = name
                    vm['user'] = user
                    db_obj = {0: {kind: vm}}

                    self.add_obj(db_obj)
                    self.save()
                return True

            else:
                Console.error(
                    "refresh not supported for this kind: {}".format(kind))

        except Exception as ex:
            Console.error(ex.message)
            return False
Пример #8
0
    def test_003(self):

        HEADING("secgroup api")

        data = dotdict({'cloud': "cm", 'groupname': 'gvonlasz-default'})
        provider = CloudProvider(data.cloud).provider

        groups = None
        rules = provider.list_secgroup(data.cloud)
        """
        # passed
        def add_group(cloud, groupname):
            provider = CloudProvider(cloud).provider
            return provider.create_secgroup(groupname)

        # passed
        def delete_group(cloud, groupname):
            provider = CloudProvider(data.cloud).provider
            return provider.delete_secgroup(groupname)

        # passed
        def add_rule(cloud, groupname, rulename):
            ret = None
            provider = CloudProvider(data.cloud).provider
            # fetch rule from db
            cm = CloudmeshDatabase()
            db_rule = cm.find(kind="secgrouprule", category="general", name=rulename, scope='first', output='dict')
            kwargs = {}
            kwargs["protocol"] = db_rule["protocol"]
            kwargs["cidr"] = db_rule["cidr"]
            kwargs["from_port"] = db_rule["fromPort"]
            kwargs["to_port"] = db_rule["toPort"]
            group = get_group(cloud, groupname)
            if group:
                groupid = group["id"]
                kwargs["uuid"] = groupid
                print (kwargs)
                ret = provider.add_secgroup_rule(**kwargs)
            return ret

        # passed
        def delete_rule(cloud, groupname, rulename):
            ret = None
            provider = CloudProvider(data.cloud).provider
            ruleid = get_rule(cloud, groupname, rulename)
            if ruleid:
                ret = provider.delete_secgroup_rule(ruleid)
            else:
                Console.error("Rule does not exist - Rule:{}, Group:{}".format(rulename, groupname))
            return ret

        # passed
        def list_groups(cloud):
            provider = CloudProvider(cloud).provider
            groups = provider.list_secgroup(cloud)
            return groups

        # passed
        def get_group(cloud, groupname):
            provider = CloudProvider(cloud).provider
            groups = provider.list_secgroup(cloud)
            ret = None
            for groupkey in groups:
                group = groups[groupkey]
                if group["name"] == groupname:
                    ret = group
                    break
            return ret

        # passed
        def list_rules(cloud, groupname):
            provider = CloudProvider(cloud).provider
            groups = provider.list_secgroup(cloud)
            for id in groups:
                group = groups[id]
                if groupname == group["name"]:
                    return group["rules"]
            return None

        # passed
        def get_rule(cloud, groupname, rulename):
            rules = list_rules(cloud, groupname)
            # find properties for db rule

            cm = CloudmeshDatabase()
            db_rule = cm.find(kind="secgrouprule", category="general", name=rulename, scope='first', output='dict')

            #db_rule = {u'from_port': 80,
            #          u'ip_protocol': u'tcp',
            #          u'ip_range': {u'cidr': u'0.0.0.0/0'},
            #          u'to_port': 80},
            ruleid = None
            for rule in rules:

                if 'cidr' in rule['ip_range']:
                    if (db_rule["fromPort"] == str(rule['from_port']) and
                        db_rule["toPort"] == str(rule['to_port']) and
                        db_rule["protocol"] == rule['ip_protocol'] and
                        db_rule["cidr"] == rule['ip_range']['cidr']
                        ):
                        ruleid = rule['id'] #uuid for the rule
            return ruleid
        """

        # testing each individual method defined in this test
        #
        # list/get of groups/rules
        # all passed
        # pprint (list_groups(data.cloud))
        # print("dgroup", self.data.dgroup)
        # dgroup = self.data.dgroup
        # pprint (get_group(data.cloud, "default"))
        # pprint (list_rules(data.cloud, "default"))
        # pprint (get_rule(data.cloud, "default", "ssh"))

        # print ("...should be None")
        # pprint(get_group(data.cloud, dgroup))
        '''
        # testing adding and deleting groups
        # all passed
        print ("...should be None")
        pprint(get_group(data.cloud, "fwtest"))
        print ("...should return the newly created object")
        pprint(add_group(data.cloud, "fwtest"))
        print ("...should be NOT None")
        pprint(get_group(data.cloud, "fwtest"))
        print ("...deleting")
        pprint(delete_group(data.cloud, "fwtest"))
        print ("...should be None")
        pprint(get_group(data.cloud, "fwtest"))
        '''
        '''
Пример #9
0
 def list_groups_cloud(cls, cloud):
     provider = CloudProvider(cloud).provider
     groups = provider.list_secgroup(cloud)
     return groups
Пример #10
0
    def test_003(self):

        HEADING("secgroup api")

        data = dotdict({
            'cloud': "cm",
            'groupname': 'gvonlasz-default'
        })
        provider = CloudProvider(data.cloud).provider

        groups = None
        rules = provider.list_secgroup(data.cloud)

        """
        # passed
        def add_group(cloud, groupname):
            provider = CloudProvider(cloud).provider
            return provider.create_secgroup(groupname)

        # passed
        def delete_group(cloud, groupname):
            provider = CloudProvider(data.cloud).provider
            return provider.delete_secgroup(groupname)

        # passed
        def add_rule(cloud, groupname, rulename):
            ret = None
            provider = CloudProvider(data.cloud).provider
            # fetch rule from db
            cm = CloudmeshDatabase()
            db_rule = cm.find(kind="secgrouprule", category="general", name=rulename, scope='first', output='dict')
            kwargs = {}
            kwargs["protocol"] = db_rule["protocol"]
            kwargs["cidr"] = db_rule["cidr"]
            kwargs["from_port"] = db_rule["fromPort"]
            kwargs["to_port"] = db_rule["toPort"]
            group = get_group(cloud, groupname)
            if group:
                groupid = group["id"]
                kwargs["uuid"] = groupid
                print (kwargs)
                ret = provider.add_secgroup_rule(**kwargs)
            return ret

        # passed
        def delete_rule(cloud, groupname, rulename):
            ret = None
            provider = CloudProvider(data.cloud).provider
            ruleid = get_rule(cloud, groupname, rulename)
            if ruleid:
                ret = provider.delete_secgroup_rule(ruleid)
            else:
                Console.error("Rule does not exist - Rule:{}, Group:{}".format(rulename, groupname))
            return ret

        # passed
        def list_groups(cloud):
            provider = CloudProvider(cloud).provider
            groups = provider.list_secgroup(cloud)
            return groups

        # passed
        def get_group(cloud, groupname):
            provider = CloudProvider(cloud).provider
            groups = provider.list_secgroup(cloud)
            ret = None
            for groupkey in groups:
                group = groups[groupkey]
                if group["name"] == groupname:
                    ret = group
                    break
            return ret

        # passed
        def list_rules(cloud, groupname):
            provider = CloudProvider(cloud).provider
            groups = provider.list_secgroup(cloud)
            for id in groups:
                group = groups[id]
                if groupname == group["name"]:
                    return group["rules"]
            return None

        # passed
        def get_rule(cloud, groupname, rulename):
            rules = list_rules(cloud, groupname)
            # find properties for db rule

            cm = CloudmeshDatabase()
            db_rule = cm.find(kind="secgrouprule", category="general", name=rulename, scope='first', output='dict')

            #db_rule = {u'from_port': 80,
            #          u'ip_protocol': u'tcp',
            #          u'ip_range': {u'cidr': u'0.0.0.0/0'},
            #          u'to_port': 80},
            ruleid = None
            for rule in rules:

                if 'cidr' in rule['ip_range']:
                    if (db_rule["fromPort"] == str(rule['from_port']) and
                        db_rule["toPort"] == str(rule['to_port']) and
                        db_rule["protocol"] == rule['ip_protocol'] and
                        db_rule["cidr"] == rule['ip_range']['cidr']
                        ):
                        ruleid = rule['id'] #uuid for the rule
            return ruleid
        """

        # testing each individual method defined in this test
        #
        # list/get of groups/rules
        # all passed
        # pprint (list_groups(data.cloud))
        # print("dgroup", self.data.dgroup)
        # dgroup = self.data.dgroup
        # pprint (get_group(data.cloud, "default"))
        # pprint (list_rules(data.cloud, "default"))
        # pprint (get_rule(data.cloud, "default", "ssh"))

        # print ("...should be None")
        # pprint(get_group(data.cloud, dgroup))

        '''
        # testing adding and deleting groups
        # all passed
        print ("...should be None")
        pprint(get_group(data.cloud, "fwtest"))
        print ("...should return the newly created object")
        pprint(add_group(data.cloud, "fwtest"))
        print ("...should be NOT None")
        pprint(get_group(data.cloud, "fwtest"))
        print ("...deleting")
        pprint(delete_group(data.cloud, "fwtest"))
        print ("...should be None")
        pprint(get_group(data.cloud, "fwtest"))
        '''

        '''