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
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
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
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
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
def list_groups_cloud(cls, cloud): provider = CloudProvider(cloud).provider groups = provider.list_secgroup(cloud) return groups
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
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")) ''' '''
def list_groups_cloud(cls, cloud): provider = CloudProvider(cloud).provider groups = provider.list_secgroup(cloud) return groups
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")) ''' '''