def checkTopolgoyUniqueness(topology): db = DatabaseManager() # check names logger.debug("Check uniqueness of name of the toplogy \"%s\"." % topology.name) for top in db.get_all(Topology): if topology.ext_name == top.ext_name and topology.id != top.id: raise NotUniqueException("Topology name \"%s\" is already used." % topology.name)
def checkSecurityGroupUniqueness(security_group): db = DatabaseManager() existing_security_groups = db.get_all(SecurityGroup) logger.debug("Check uniqueness of name of the security group \"%s\"." % security_group.name) for existing_security_group in existing_security_groups: if security_group.name == existing_security_group.name and security_group != existing_security_group: raise NotUniqueException("SecurityGroup:\"%s\" is already existing." % security_group.name) logger.debug("Check rules of security group \"%s\"." % security_group.name)
def checkKey(key): db = DatabaseManager() existing_keys = db.get_all(Key) if key.name in [existing_key.name for existing_key in existing_keys]: logger.debug("key \"%s\" is available." % key) else: raise NotFoundException( "key:\"%s\" is not available. Available keys: %s" % ( key, [existing_key.name for existing_key in existing_keys]))
def checkFlavor(flavor): db = DatabaseManager() existing_flavors = db.get_all(Flavor) if flavor.name in [existing_flavor.name for existing_flavor in existing_flavors]: logger.debug("flavor \"%s\" is available." % flavor) else: raise NotFoundException( "flavor:\"%s\" is not available. Available flavors: %s" % ( flavor, [existing_flavor.name for existing_flavor in existing_flavors]))
def checkImage(image): db = DatabaseManager() existing_images = db.get_all(Image) if image.name in [existing_image.name for existing_image in existing_images]: logger.debug("image \"%s\" is available." % image) else: raise NotFoundException( "image:\"%s\" is not available. Available images: %s" % ( image, [existing_image.name for existing_image in existing_images]))
def checkTopolgoyUniqueness(topology): db = DatabaseManager() # check names LOG.debug("Check uniqueness of name of the toplogy \"%s\"." % topology.name) for top in db.get_all(Topology): if topology.ext_name == top.ext_name and topology.id != top.id: raise NotUniqueException("Topology name \"%s\" is already used." % topology.name)
def checkKey(key): db = DatabaseManager() existing_keys = db.get_all(Key) if key.name in [existing_key.name for existing_key in existing_keys]: LOG.debug("key \"%s\" is available." % key) else: raise NotFoundException( "key:\"%s\" is not available. Available keys: %s" % (key, [existing_key.name for existing_key in existing_keys]))
def checkNetwork(network): try: db = DatabaseManager() existing_networks = db.get_all(Network) found_private_net = False found_subnet = False found_public_net = False for existing_network in existing_networks: if network.private_net == existing_network.ext_id and not found_private_net: if existing_network.public == False: logger.debug("private_network \"%s\" is available." % network.private_net) found_private_net = True else: raise InvalidInputException( "private_network:\"%s\" is available but it is marked as public and not as private as defined." % network.private_net) for subnet in existing_network.subnets: if network.private_subnet == subnet.ext_id and not found_subnet: found_subnet = True if found_subnet: logger.debug("private_subnet \"%s\" is available." % network.private_subnet) else: raise InvalidInputException("private_subnet:\"%s\" is not available." % network.private_subnet) if network.public_net == existing_network.ext_id and not found_public_net: if existing_network.public == True: logger.debug("public_network \"%s\" is available." % network.public_net) found_public_net = True else: raise InvalidInputException( "network:\"%s\" is available but it is marked as private and not as public as defined." % network.public_net) if not network.private_net and not network.private_subnet and not network.public_net: logger.debug("Networks were not defined.") elif network.private_net and network.private_subnet and network.public_net: if found_private_net and found_subnet and found_public_net: logger.debug("All defined networks are available for network: %s" % network) if not found_private_net: raise NotFoundException("Not found private network: %s" % network) if not found_subnet: raise NotFoundException("Not found private subnet network: %s" % network) if not found_public_net: raise NotFoundException("Not found public network: %s" % network) elif network.private_net and network.private_subnet and not network.public_net: if found_private_net and found_subnet and not found_public_net: logger.debug("All defined networks are available for network: %s" % network) if not found_private_net: raise NotFoundException("Not found private network: %s" % network) if not found_subnet: raise NotFoundException("Not found private subnet network: %s" % network) elif not network.private_net and network.public_net: raise InvalidInputException("Private net is not defined but the public.") else: raise InvalidInputException("Error while checking networks.") except Exception, exc: exc.message = 'Network:\"%s\"->%s' % (network.name, exc.message) raise exc
def checkSecurityGroupUniqueness(security_group): db = DatabaseManager() existing_security_groups = db.get_all(SecurityGroup) LOG.debug("Check uniqueness of name of the security group \"%s\"." % security_group.name) for existing_security_group in existing_security_groups: if security_group.name == existing_security_group.name and security_group != existing_security_group: raise NotUniqueException( "SecurityGroup:\"%s\" is already existing." % security_group.name) LOG.debug("Check rules of security group \"%s\"." % security_group.name)
def checkServiceUniqueness(service): db = DatabaseManager() # check uniqueness of service logger.debug("Check uniqueness of name of the service %s." % service.service_type) if service.service_type: for existing_service in db.get_all(Service): if service.service_type == existing_service.service_type and service != existing_service: raise NotUniqueException( "Service:\"%s\" is already existing." % service.service_type) else: raise NotDefinedException("service_type is not defined.")
def checkImage(image): db = DatabaseManager() existing_images = db.get_all(Image) if image.name in [ existing_image.name for existing_image in existing_images ]: LOG.debug("image \"%s\" is available." % image) else: raise NotFoundException( "image:\"%s\" is not available. Available images: %s" % (image, [existing_image.name for existing_image in existing_images]))
def checkFlavor(flavor): db = DatabaseManager() existing_flavors = db.get_all(Flavor) if flavor.name in [ existing_flavor.name for existing_flavor in existing_flavors ]: LOG.debug("flavor \"%s\" is available." % flavor) else: raise NotFoundException( "flavor:\"%s\" is not available. Available flavors: %s" % (flavor, [existing_flavor.name for existing_flavor in existing_flavors]))
def checkServiceType(service_type): db = DatabaseManager() services = db.get_all(Service) found = False for service in services: if service.service_type == service_type: found = True LOG.debug("service_type \"%s\" is available." % service_type) if not found: raise NotFoundException( "service_type:\"%s\" is not available. Available service_types:%s" % (service_type, [service.service_type for service in services]))
def checkServiceType(service_type): db = DatabaseManager() services = db.get_all(Service) found = False for service in services: if service.service_type == service_type: found = True logger.debug("service_type \"%s\" is available." % service_type) if not found: raise NotFoundException( "service_type:\"%s\" is not available. Available service_types:%s" % ( service_type, [service.service_type for service in services]))
def checkServiceUniqueness(service): db = DatabaseManager() # check uniqueness of service LOG.debug("Check uniqueness of name of the service %s." % service.service_type) if service.service_type: for existing_service in db.get_all(Service): if service.service_type == existing_service.service_type and service != existing_service: raise NotUniqueException( "Service:\"%s\" is already existing." % service.service_type) else: raise NotDefinedException("service_type is not defined.")
def test_create_service(self): db = DatabaseManager() if len(db.get_all(Service)) > 0: self.fail('The Database must be empty: ' + str()) connection = httplib.HTTPConnection('%s:8090' % HOST) headers = {'Content-type': 'application/json'} sent_service = {"service_type": "controller", 'image': "nubomedia-broker", 'flavor': "m1.medium", 'size': {'def': 1, 'max': 1, 'min': 1}, 'config': {'hostname': 'ControlServer'}} sent_service_json = json.dumps(sent_service) connection.request('POST', '/services', sent_service_json, headers) resp = connection.getresponse() self.assertEqual(resp.status, 200) service = db.get_by_service_type(Service, sent_service["service_type"])[0] self.assertIsNotNone(service) self.assertEqual(service.service_type, sent_service["service_type"]) self.assertEqual(service.image, sent_service["image"]) self.assertEqual(service.flavor, sent_service["flavor"]) self.assertEqual(service.size, sent_service['size']) self.assertEqual(service.config, sent_service['config']) sent_service['flavor'] = "m1.small" sent_service_json = json.dumps(sent_service) connection.request('PUT', '/services/' + str(service.id), sent_service_json, headers) resp = connection.getresponse() self.assertEqual(resp.status, 200) service = db.get_by_service_type(Service, sent_service["service_type"])[0] self.assertIsNotNone(service) self.assertEqual(service.service_type, sent_service["service_type"]) self.assertEqual(service.image, sent_service["image"]) self.assertEqual(service.flavor, sent_service["flavor"]) self.assertEqual(service.size, sent_service['size']) self.assertEqual(service.config, sent_service['config']) connection.request('DELETE', '/services/' + str(service.id), sent_service_json, headers) time.sleep(2) self.assertEqual(len(db.get_by_service_type(Service, sent_service["service_type"])), 0)
def get_all_networks(cls): db = DatabaseManager() networks = db.get_all(Network) return networks
def checkNetwork(network): try: db = DatabaseManager() existing_networks = db.get_all(Network) found_private_net = False found_subnet = False found_public_net = False for existing_network in existing_networks: if network.private_net == existing_network.ext_id and not found_private_net: if existing_network.public == False: LOG.debug("private_network \"%s\" is available." % network.private_net) found_private_net = True else: raise InvalidInputException( "private_network:\"%s\" is available but it is marked as public and not as private as defined." % network.private_net) for subnet in existing_network.subnets: if network.private_subnet == subnet.ext_id and not found_subnet: found_subnet = True if found_subnet: LOG.debug("private_subnet \"%s\" is available." % network.private_subnet) else: raise InvalidInputException( "private_subnet:\"%s\" is not available." % network.private_subnet) if network.public_net == existing_network.ext_id and not found_public_net: if existing_network.public == True: LOG.debug("public_network \"%s\" is available." % network.public_net) found_public_net = True else: raise InvalidInputException( "network:\"%s\" is available but it is marked as private and not as public as defined." % network.public_net) if not network.private_net and not network.private_subnet and not network.public_net: LOG.debug("Networks were not defined.") elif network.private_net and network.private_subnet and network.public_net: if found_private_net and found_subnet and found_public_net: LOG.debug( "All defined networks are available for network: %s" % network) if not found_private_net: raise NotFoundException("Not found private network: %s" % network) if not found_subnet: raise NotFoundException( "Not found private subnet network: %s" % network) if not found_public_net: raise NotFoundException("Not found public network: %s" % network) elif network.private_net and network.private_subnet and not network.public_net: if found_private_net and found_subnet and not found_public_net: LOG.debug( "All defined networks are available for network: %s" % network) if not found_private_net: raise NotFoundException("Not found private network: %s" % network) if not found_subnet: raise NotFoundException( "Not found private subnet network: %s" % network) elif not network.private_net and network.public_net: raise InvalidInputException( "Private net is not defined but the public.") else: raise InvalidInputException("Error while checking networks.") except Exception, exc: exc.message = 'Network:\"%s\"->%s' % (network.name, exc.message) raise exc
def get_all_keys(cls): db = DatabaseManager() keys = db.get_all(Key) return keys
def get_all_subnets(cls): db = DatabaseManager() networks = db.get_all(Subnet) return networks
def get_all(cls): db = DatabaseManager() return db.get_all(SecurityGroup)
def dump_to_dict(self): db = DatabaseManager() resource = {} server_config = {} server_config["type"] = self.type properties = {} properties["name"] = self.name properties["image"] = self.image properties["flavor"] = self.flavor if self.key_name is not None: properties["key_name"] = self.key_name if self.availability_zone is not None: properties["availability_zone"] = self.availability_zone if self.network_ports is not None: networks = [] logger.debug(self.network_ports) for network_port in self.network_ports: networks.append({"port": {"get_resource": network_port.name}}) properties["networks"] = networks if self.user_data: properties["user_data_format"] = "RAW" properties["user_data"] = {} properties["user_data"]["str_replace"] = {} properties["user_data"]["str_replace"]["template"] = "" _user_data = "" _user_data_list = [] for command in self.user_data: _user_data += "%s\n" % command.command properties["user_data"]["str_replace"]["template"] = SysUtil.literal_unicode((_user_data)) properties["user_data"]["str_replace"]["params"] = {"": ""} if self.requirements: params = {} for requirement in self.requirements: try: source_service_instances = db.get_by_name(ServiceInstance, requirement.source) except: logger.debug("ERROR: Entry %s was not found in Table ServiceInstance" % requirement.source) raise source_units = [] if source_service_instances: source_service_instance = source_service_instances[0] source_units = source_service_instance.units logger.debug(source_units) if source_units: if requirement.parameter == "private_ip" or requirement.parameter == "public_ip": # Get requested network specified in the requirement _networks = [ network for network in source_service_instance.networks if network.name == requirement.obj_name ] _network = None if _networks: _network_id = _networks[0].private_net else: logger.debug( "ERROR: obj_name %s was not found in networks of ServiceInstance %s" % (requirement.obj_name, source_service_instance) ) raise # Get network name of the specified network id _network_names = [ network.name for network in db.get_all(Network) if network.ext_id == _network_id ] _network_name = None if _network_names: _network_name = _network_names[0] else: logger.debug("ERROR: Cannot find network with id %s in Table Network" % _network_id) if requirement.parameter == "private_ip": ip_number = 0 elif requirement.parameter == "public_ip": ip_number = 1 # Create the variable _params = {} _first_unit = source_units[0] _template = "$%s" % _first_unit.hostname _params["$%s" % _first_unit.hostname] = { "get_attr": [_first_unit.hostname, "networks", _network_name, ip_number] } for source_unit in source_units[1:]: _template += ";$%s" % source_unit.hostname _params["$%s" % source_unit.hostname] = { "get_attr": [source_unit.hostname, "networks", _network_name, ip_number] } param = {} param[requirement.name] = {} param[requirement.name]["str_replace"] = {} param[requirement.name]["str_replace"]["template"] = _template param[requirement.name]["str_replace"]["params"] = _params params.update(param) else: logger.debug("ERROR: Units for ServiceInstance %s were not found." % requirement.source) raise Exception else: logger.debug("ERROR: ServiceInstance %s was not found" % requirement.source) raise Exception properties["user_data"]["str_replace"]["params"] = params server_config["properties"] = properties resource[self.name] = server_config return resource
resp = (response.read()) logger.debug(resp) logger.debug('\n###################CREATE SECURITY GROUPS###################') connection.request('GET', '/secgroups') response = connection.getresponse() resp = (response.read()) logger.debug(resp) logger.debug('\n###################CREATE SERVICE###########################') db = DatabaseManager() lst = [db.get_all(SecurityGroup)] _json = create_service(lst) connection.request('POST', '/services', _json, headers) response = connection.getresponse() resp = (response.read()) logger.debug(resp) logger.debug('\n####################GET SERVICES############################') connection.request('GET', '/services') response = connection.getresponse() resp = (response.read())
def get_template(topology): #name = topology.name template = {} template['heat_template_version'] = '2013-05-23' resources = {} outputs = {} #print "create Template for Topology: %s" % name for service_instance in topology.service_instances: for unit in service_instance.units: #Create Ports and floating IPs for this unit ports = [] floating_ips = [] if service_instance.networks: i = 1 for network in service_instance.networks: ###Creating Port for this service instance new_port = None #prepare port args for this service instance port_args = {} port_args['name'] = '%s-port-%s' % (unit.hostname, i) port_args['private_net_id'] = network.private_net port_args['private_subnet_id'] = network.private_subnet # if "hss-1" in unit.hostname: # port_args['fixed_ip'] = "192.168.9.48" # elif "hss-2" in unit.hostname: # port_args['fixed_ip'] = "192.168.9.55" # else: port_args['fixed_ip'] = network.fixed_ip if network.security_groups: port_args[ 'security_groups'] = network.security_groups new_port = Port(**port_args) ports.append(new_port) if network.public_net: new_floating_ip_args = {} new_floating_ip_args[ 'name'] = '%s-floating_ip-%s' % (unit.hostname, i) new_floating_ip_args[ 'floating_network_id'] = network.public_net new_floating_ip_args['port'] = new_port.name new_floating_ip = FloatingIP( **new_floating_ip_args) floating_ips.append(new_floating_ip) ###Adding Security Groups for _security_group in network.security_groups: _new_name = _security_group.name _new_rules = [] _rules = _security_group.rules for _rule in _rules: _name = _rule.name _remote_ip_prefix = _rule.remote_ip_prefix _protocol = _rule.protocol _port_range_max = int( _rule.port_range_max ) if _rule.port_range_max else None _port_range_min = int( _rule.port_range_min ) if _rule.port_range_min else None _new_rule = Rule(_name, _remote_ip_prefix, _protocol, _port_range_max, _port_range_min) _new_rules.append(_new_rule) _new_security_group = SecurityGroup( name=_new_name, rules=_new_rules) resources.update( _new_security_group.dump_to_dict()) i += 1 ###Create Server for this service instance new_server = None #prepare server args server_args = {} server_args['name'] = "%s" % unit.hostname server_args['hostname'] = "%s" % unit.hostname server_args['availability_zone'] = unit.availability_zone server_args['flavor'] = service_instance.flavor.name # if "hss-1" in unit.hostname: # server_args['image'] = "hss-1" # elif "hss-2" in unit.hostname: # server_args['image'] = "hss-2" # else: server_args['image'] = service_instance.image.name server_args['key_name'] = service_instance.key.name server_args['network_ports'] = ports server_args['user_data'] = service_instance.user_data server_args['requirements'] = service_instance.requirements new_server = Server(**server_args) resources.update(new_server.dump_to_dict()) if ports: for port in ports: resources.update(port.dump_to_dict()) if floating_ips: for floating_ip in floating_ips: resources.update(floating_ip.dump_to_dict()) template['resources'] = resources ###Output section### db = DatabaseManager() for service_instance in topology.service_instances: for network_instance in service_instance.networks: if network_instance.public_net: _public_network_names = [ _network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.public_net ] _public_network_name = None if _public_network_names: _public_network_name = _public_network_names[0] else: LOG.debug( 'ERROR: Cannot find network with id %s in Table Network' % network_instance.public_net) if network_instance.private_net: _private_network_names = [ _network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.private_net ] _private_network_name = None if _private_network_names: _private_network_name = _private_network_names[0] else: LOG.debug( 'ERROR: Cannot find network with id %s in Table Network' % network_instance.net) for unit in service_instance.units: if network_instance.public_net and _public_network_name: output = {} floating_name = '%s-floating_ip-1' % unit.hostname output['value'] = { 'get_attr': [floating_name, 'floating_ip_address'] } output[ 'description'] = 'Public IP of %s.' % unit.hostname outputs['mcn.endpoint.%s' % unit.hostname] = output elif network_instance.private_net and _private_network_name: output = {} port_name = '%s-port-1' % unit.hostname output['value'] = { 'get_attr': [port_name, 'fixed_ips', 0, 'ip_address'] } output[ 'description'] = 'Private IP of %s.' % unit.hostname outputs['mcn.endpoint.%s' % unit.hostname] = output if network_instance.public_net and _public_network_name: network_type = "public" output = {} floating_name = '%s-floating_ip-1' % unit.hostname output['value'] = { 'get_attr': [floating_name, 'floating_ip_address'] } output['description'] = '%s ip of %s in %s.' % ( network_type.capitalize(), unit.hostname, network_instance.name) outputs['mcn.endpoint.%s.%s.%s' % (unit.hostname, network_instance.name, network_type)] = output if network_instance.private_net and _private_network_name: network_type = "private" output = {} port_name = '%s-port-1' % unit.hostname output['value'] = { 'get_attr': [port_name, 'fixed_ips', 0, 'ip_address'] } output['description'] = '%s ip of %s in %s.' % ( network_type.capitalize(), unit.hostname, network_instance.name) outputs['mcn.endpoint.%s.%s.%s' % (unit.hostname, network_instance.name, network_type)] = output template['outputs'] = outputs yaml.add_representer( unicode, lambda dumper, value: dumper.represent_scalar( u'tag:yaml.org,2002:str', value)) yaml.add_representer(SysUtil.literal_unicode, SysUtil.literal_unicode_representer) LOG.debug((template)) #LOG.debug(yaml.dumps(template)) #f = open('/net/u/mpa/tempalte_file.yaml', 'w') #f.write(yaml.dump(template, indent=2)) return yaml.dump(template)
def get_template(topology): #name = topology.name _template = {} _template['heat_template_version'] = '2013-05-23' _resources = {} _outputs = {} LOG.debug("create Template for Topology: %s" % topology.name) db = DatabaseManager() for service_instance in topology.service_instances: _software_config = None #Create SoftwareConfig for user_data if service_instance.user_data: _inputs = [] if service_instance.requirements: for requirement in service_instance.requirements: _inputs.append(requirement.name) _software_config = SoftwareConfig( name='%s-SoftwareConfig' % service_instance.name, config=service_instance.user_data, group=service_instance.name, inputs=_inputs) for unit in service_instance.units: #Create input values for user_data for SoftwareDeployment if service_instance.requirements or service_instance.user_data: _input_values = {} for requirement in service_instance.requirements: try: source_service_instances = db.get_by_name( ServiceInstance, requirement.source) except: LOG.debug( 'ERROR: Entry %s was not found in Table ServiceInstance' % requirement.source) raise source_units = [] if source_service_instances: source_service_instance = source_service_instances[ 0] source_units = source_service_instance.units LOG.debug(source_units) if source_units: if requirement.parameter == 'private_ip' or requirement.parameter == 'public_ip': #Get requested network specified in the requirement _networks = [ network for network in source_service_instance.networks if network.name == requirement.obj_name ] _network = None if _networks: _network_id = _networks[0].private_net else: LOG.debug( 'ERROR: obj_name %s was not found in networks of ServiceInstance %s' % (requirement.obj_name, source_service_instance)) raise #Get network name of the specified network id _network_names = [ network.name for network in db.get_all(Network) if network.ext_id == _network_id ] _network_name = None if _network_names: _network_name = _network_names[0] else: LOG.debug( 'ERROR: Cannot find network with id %s in Table Network' % _network_id) if requirement.parameter == "private_ip": ip_number = 0 elif requirement.parameter == "public_ip": ip_number = 1 #Create the variable _param_params = {} _first_unit = source_units[0] _param_template = '$%s' % _first_unit.hostname _param_params['$%s' % _first_unit.hostname] = { 'get_attr': [ _first_unit.hostname, 'networks', _network_name, ip_number ] } for source_unit in source_units[1:]: _param_template += ';$%s' % source_unit.hostname _param_params[ '$%s' % source_unit.hostname] = { 'get_attr': [ source_unit.hostname, 'networks', _network_name, ip_number ] } param = {} param[requirement.name] = {} param[requirement.name]['str_replace'] = {} param[requirement.name]['str_replace'][ 'template'] = _param_template param[requirement.name]['str_replace'][ 'params'] = _param_params _input_values.update(param) else: LOG.debug( 'ERROR: Units for ServiceInstance %s were not found.' % requirement.source) raise Exception else: LOG.debug( 'ERROR: ServiceInstance %s was not found' % requirement.source) raise Exception _software_deployment = SoftwareDeployment( name='%s-SoftwareDeployment' % unit.hostname, config=_software_config, server=unit, input_values=_input_values) _resources.update(_software_deployment.dump_to_dict()) #Create Ports and floating IPs for this unit _ports = [] _floating_ips = [] if service_instance.networks: i = 1 for network in service_instance.networks: ###Creating Port for this service instance _new_port = None #prepare port args for this service instance _port_args = {} _port_args['name'] = '%s-port-%s' % (unit.hostname, i) _port_args['private_net_id'] = network.private_net _port_args[ 'private_subnet_id'] = network.private_subnet _port_args['fixed_ip'] = network.fixed_ip if network.security_groups: _port_args[ 'security_groups'] = network.security_groups _new_port = Port(**_port_args) _ports.append(_new_port) if network.public_net: _new_floating_ip_args = {} _new_floating_ip_args[ 'name'] = '%s-floating_ip-%s' % (unit.hostname, i) _new_floating_ip_args[ 'floating_network_id'] = network.public_net _new_floating_ip_args['port'] = _new_port.name _new_floating_ip = FloatingIP( **_new_floating_ip_args) _floating_ips.append(_new_floating_ip) ###Adding Security Groups for _security_group in network.security_groups: _new_name = _security_group.name _new_rules = [] _rules = _security_group.rules for _rule in _rules: _name = _rule.name _remote_ip_prefix = _rule.remote_ip_prefix _protocol = _rule.protocol _port_range_max = int( _rule.port_range_max ) if _rule.port_range_max else None _port_range_min = int( _rule.port_range_min ) if _rule.port_range_min else None _new_rule = Rule(_name, _remote_ip_prefix, _protocol, _port_range_max, _port_range_min) _new_rules.append(_new_rule) _new_security_group = SecurityGroup( name=_new_name, rules=_new_rules) _resources.update( _new_security_group.dump_to_dict()) i += 1 ###Create Server for this service instance _new_server = None #prepare server args _server_args = {} _server_args['name'] = "%s" % unit.hostname _server_args['hostname'] = "%s" % unit.hostname _server_args['flavor'] = service_instance.flavor.name _server_args['image'] = service_instance.image.name _server_args['key_name'] = service_instance.key.name _server_args['network_ports'] = _ports _server_args['user_data'] = service_instance.user_data _server_args['requirements'] = service_instance.requirements _new_server = Server(**_server_args) _resources.update(_new_server.dump_to_dict()) if _software_config: _resources.update(_software_config.dump_to_dict()) if _ports: for _port in _ports: _resources.update(_port.dump_to_dict()) if _floating_ips: for _floating_ip in _floating_ips: _resources.update(_floating_ip.dump_to_dict()) print _resources _template['resources'] = _resources ###Output section### db = DatabaseManager() for service_instance in topology.service_instances: for network_instance in service_instance.networks: if network_instance.public_net: _public_network_names = [ _network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.public_net ] _public_network_name = None if _public_network_names: _public_network_name = _public_network_names[0] else: LOG.debug( 'ERROR: Cannot find network with id %s in Table Network' % network_instance.public_net) if network_instance.private_net: _private_network_names = [ _network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.private_net ] _private_network_name = None if _private_network_names: _private_network_name = _private_network_names[0] else: LOG.debug( 'ERROR: Cannot find network with id %s in Table Network' % network_instance.net) for unit in service_instance.units: if network_instance.public_net and _public_network_name: output = {} output['value'] = { 'get_attr': [ unit.hostname, 'networks', _private_network_name, 1 ] } output[ 'description'] = 'Public IP of %s.' % unit.hostname _outputs['mcn.endpoint.%s' % unit.hostname] = output elif network_instance.private_net and _private_network_name: output = {} output['value'] = { 'get_attr': [ unit.hostname, 'networks', _private_network_name, 0 ] } output[ 'description'] = 'Private IP of %s.' % unit.hostname _outputs['mcn.endpoint.%s' % unit.hostname] = output _template['outputs'] = _outputs yaml.add_representer( unicode, lambda dumper, value: dumper.represent_scalar( u'tag:yaml.org,2002:str', value)) yaml.add_representer(SysUtil.literal_unicode, SysUtil.literal_unicode_representer) LOG.debug((_template)) #LOG.debug(yaml.dumps(template)) #f = open('/net/u/mpa/tempalte_file.yaml', 'w') #f.write(yaml.dump(template, indent=2)) return yaml.dump(_template)
def dump_to_dict(self): db = DatabaseManager() resource = {} server_config = {} server_config['type'] = self.type properties = {} properties['name'] = self.name properties['image'] = self.image properties['flavor'] = self.flavor if self.key_name is not None: properties['key_name'] = self.key_name if self.availability_zone is not None: properties['availability_zone'] = self.availability_zone if self.network_ports is not None: networks = [] LOG.debug(self.network_ports) for network_port in self.network_ports: networks.append({'port': {'get_resource': network_port.name}}) properties['networks'] = networks if self.user_data: properties['user_data_format'] = 'RAW' properties['user_data'] = {} properties['user_data']['str_replace'] = {} properties['user_data']['str_replace']['template'] = '' _user_data = '' _user_data_list = [] for command in self.user_data: _user_data += "%s\n" % command.command properties['user_data']['str_replace'][ 'template'] = SysUtil.literal_unicode((_user_data)) properties['user_data']['str_replace']['params'] = {'': ''} if self.requirements: params = {} for requirement in self.requirements: try: source_service_instances = db.get_by_name( ServiceInstance, requirement.source) except: LOG.debug( 'ERROR: Entry %s was not found in Table ServiceInstance' % requirement.source) raise source_units = [] if source_service_instances: source_service_instance = source_service_instances[0] source_units = source_service_instance.units LOG.debug(source_units) if source_units: if requirement.parameter == 'private_ip' or requirement.parameter == 'public_ip': #Get requested network specified in the requirement _networks = [ network for network in source_service_instance.networks if network.name == requirement.obj_name ] _network = None if _networks: _network_id = _networks[0].private_net else: LOG.debug( 'ERROR: obj_name %s was not found in networks of ServiceInstance %s' % (requirement.obj_name, source_service_instance)) raise #Get network name of the specified network id _network_names = [ network.name for network in db.get_all(Network) if network.ext_id == _network_id ] _network_name = None if _network_names: _network_name = _network_names[0] else: LOG.debug( 'ERROR: Cannot find network with id %s in Table Network' % _network_id) if requirement.parameter == "private_ip": ip_number = 0 elif requirement.parameter == "public_ip": ip_number = 1 #Create the variable _params = {} _first_unit = source_units[0] _template = '$%s' % _first_unit.hostname _params['$%s' % _first_unit.hostname] = { 'get_attr': [ _first_unit.hostname, 'networks', _network_name, ip_number ] } for source_unit in source_units[1:]: _template += ';$%s' % source_unit.hostname _params['$%s' % source_unit.hostname] = { 'get_attr': [ source_unit.hostname, 'networks', _network_name, ip_number ] } param = {} param[requirement.name] = {} param[requirement.name]['str_replace'] = {} param[requirement. name]['str_replace']['template'] = _template param[requirement. name]['str_replace']['params'] = _params params.update(param) else: LOG.debug( 'ERROR: Units for ServiceInstance %s were not found.' % requirement.source) raise Exception else: LOG.debug('ERROR: ServiceInstance %s was not found' % requirement.source) raise Exception properties['user_data']['str_replace']['params'] = params server_config['properties'] = properties resource[self.name] = server_config return resource
def get_template(topology): #name = topology.name _template = {} _template['heat_template_version'] = '2013-05-23' _resources = {} _outputs = {} LOG.debug("create Template for Topology: %s" % topology.name) db = DatabaseManager() for service_instance in topology.service_instances: _software_config = None #Create SoftwareConfig for user_data if service_instance.user_data: _inputs = [] if service_instance.requirements: for requirement in service_instance.requirements: _inputs.append(requirement.name) _software_config = SoftwareConfig(name='%s-SoftwareConfig' % service_instance.name, config=service_instance.user_data, group=service_instance.name, inputs=_inputs) for unit in service_instance.units: #Create input values for user_data for SoftwareDeployment if service_instance.requirements or service_instance.user_data: _input_values = {} for requirement in service_instance.requirements: try: source_service_instances = db.get_by_name(ServiceInstance,requirement.source) except: LOG.debug('ERROR: Entry %s was not found in Table ServiceInstance' % requirement.source) raise source_units = [] if source_service_instances: source_service_instance = source_service_instances[0] source_units = source_service_instance.units LOG.debug(source_units) if source_units: if requirement.parameter == 'private_ip' or requirement.parameter == 'public_ip': #Get requested network specified in the requirement _networks = [network for network in source_service_instance.networks if network.name == requirement.obj_name ] _network = None if _networks: _network_id = _networks[0].private_net else: LOG.debug('ERROR: obj_name %s was not found in networks of ServiceInstance %s' % (requirement.obj_name,source_service_instance)) raise #Get network name of the specified network id _network_names = [network.name for network in db.get_all(Network) if network.ext_id == _network_id] _network_name = None if _network_names: _network_name = _network_names[0] else: LOG.debug('ERROR: Cannot find network with id %s in Table Network' % _network_id) if requirement.parameter == "private_ip": ip_number = 0 elif requirement.parameter == "public_ip": ip_number = 1 #Create the variable _param_params = {} _first_unit = source_units[0] _param_template = '$%s' % _first_unit.hostname _param_params['$%s' % _first_unit.hostname] = {'get_attr': [_first_unit.hostname, 'networks', _network_name, ip_number]} for source_unit in source_units[1:]: _param_template += ';$%s' % source_unit.hostname _param_params['$%s' % source_unit.hostname] = {'get_attr': [source_unit.hostname, 'networks', _network_name, ip_number]} param = {} param[requirement.name] = {} param[requirement.name]['str_replace'] = {} param[requirement.name]['str_replace']['template'] = _param_template param[requirement.name]['str_replace']['params'] = _param_params _input_values.update(param) else: LOG.debug('ERROR: Units for ServiceInstance %s were not found.' % requirement.source) raise Exception else: LOG.debug('ERROR: ServiceInstance %s was not found' % requirement.source) raise Exception _software_deployment = SoftwareDeployment(name='%s-SoftwareDeployment' % unit.hostname, config=_software_config, server=unit, input_values=_input_values) _resources.update(_software_deployment.dump_to_dict()) #Create Ports and floating IPs for this unit _ports = [] _floating_ips = [] if service_instance.networks: i=1 for network in service_instance.networks: ###Creating Port for this service instance _new_port = None #prepare port args for this service instance _port_args = {} _port_args['name'] = '%s-port-%s' % (unit.hostname, i) _port_args['private_net_id'] = network.private_net _port_args['private_subnet_id'] = network.private_subnet _port_args['fixed_ip'] = network.fixed_ip if network.security_groups: _port_args['security_groups'] = network.security_groups _new_port = Port(**_port_args) _ports.append(_new_port) if network.public_net: _new_floating_ip_args = {} _new_floating_ip_args['name'] = '%s-floating_ip-%s' % (unit.hostname, i) _new_floating_ip_args['floating_network_id'] = network.public_net _new_floating_ip_args['port'] = _new_port.name _new_floating_ip = FloatingIP(**_new_floating_ip_args) _floating_ips.append(_new_floating_ip) ###Adding Security Groups for _security_group in network.security_groups: _new_name=_security_group.name _new_rules=[] _rules=_security_group.rules for _rule in _rules: _name = _rule.name _remote_ip_prefix = _rule.remote_ip_prefix _protocol = _rule.protocol _port_range_max = int(_rule.port_range_max) if _rule.port_range_max else None _port_range_min = int(_rule.port_range_min) if _rule.port_range_min else None _new_rule = Rule(_name, _remote_ip_prefix, _protocol, _port_range_max, _port_range_min) _new_rules.append(_new_rule) _new_security_group = SecurityGroup(name=_new_name, rules=_new_rules) _resources.update(_new_security_group.dump_to_dict()) i += 1 ###Create Server for this service instance _new_server = None #prepare server args _server_args = {} _server_args['name'] = "%s" % unit.hostname _server_args['hostname'] = "%s" % unit.hostname _server_args['flavor'] = service_instance.flavor.name _server_args['image'] = service_instance.image.name _server_args['key_name'] = service_instance.key.name _server_args['network_ports'] = _ports _server_args['user_data'] = service_instance.user_data _server_args['requirements'] = service_instance.requirements _new_server = Server(**_server_args) _resources.update(_new_server.dump_to_dict()) if _software_config: _resources.update(_software_config.dump_to_dict()) if _ports: for _port in _ports: _resources.update(_port.dump_to_dict()) if _floating_ips: for _floating_ip in _floating_ips: _resources.update(_floating_ip.dump_to_dict()) print _resources _template['resources'] = _resources ###Output section### db = DatabaseManager() for service_instance in topology.service_instances: for network_instance in service_instance.networks: if network_instance.public_net: _public_network_names = [_network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.public_net] _public_network_name = None if _public_network_names: _public_network_name = _public_network_names[0] else: LOG.debug('ERROR: Cannot find network with id %s in Table Network' % network_instance.public_net) if network_instance.private_net: _private_network_names = [_network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.private_net] _private_network_name = None if _private_network_names: _private_network_name = _private_network_names[0] else: LOG.debug('ERROR: Cannot find network with id %s in Table Network' % network_instance.net) for unit in service_instance.units: if network_instance.public_net and _public_network_name: output = {} output['value'] = {'get_attr': [unit.hostname, 'networks', _private_network_name, 1]} output['description'] = 'Public IP of %s.' % unit.hostname _outputs['mcn.endpoint.%s' % unit.hostname] = output elif network_instance.private_net and _private_network_name: output = {} output['value'] = {'get_attr': [unit.hostname, 'networks', _private_network_name, 0]} output['description'] = 'Private IP of %s.' % unit.hostname _outputs['mcn.endpoint.%s' % unit.hostname] = output _template['outputs'] = _outputs yaml.add_representer(unicode, lambda dumper, value: dumper.represent_scalar(u'tag:yaml.org,2002:str', value)) yaml.add_representer(SysUtil.literal_unicode, SysUtil.literal_unicode_representer) LOG.debug((_template)) #LOG.debug(yaml.dumps(template)) #f = open('/net/u/mpa/tempalte_file.yaml', 'w') #f.write(yaml.dump(template, indent=2)) return yaml.dump(_template)
def get_all_flavors(cls): db = DatabaseManager() flavors = db.get_all(Flavor) return flavors
def dump_to_dict(self): db = DatabaseManager() resource = {} server_config = {} server_config['type'] = self.type properties = {} properties['name'] = self.name properties['image'] = self.image properties['flavor'] = self.flavor if self.key_name is not None: properties['key_name'] = self.key_name if self.availability_zone is not None: properties['availability_zone'] = self.availability_zone if self.network_ports is not None: networks = [] LOG.debug(self.network_ports) for network_port in self.network_ports: networks.append({'port': { 'get_resource' : network_port.name}}) properties['networks'] = networks if self.user_data: properties['user_data_format'] = 'RAW' properties['user_data'] = {} properties['user_data']['str_replace'] = {} properties['user_data']['str_replace']['template'] = '' _user_data = '' _user_data_list = [] for command in self.user_data: _user_data += "%s\n" % command.command properties['user_data']['str_replace']['template'] = SysUtil.literal_unicode((_user_data)) properties['user_data']['str_replace']['params'] = {'':''} if self.requirements: params = {} for requirement in self.requirements: try: source_service_instances = db.get_by_name(ServiceInstance,requirement.source) except: LOG.debug('ERROR: Entry %s was not found in Table ServiceInstance' % requirement.source) raise source_units = [] if source_service_instances: source_service_instance = source_service_instances[0] source_units = source_service_instance.units LOG.debug(source_units) if source_units: if requirement.parameter == 'private_ip' or requirement.parameter == 'public_ip': #Get requested network specified in the requirement _networks = [network for network in source_service_instance.networks if network.name == requirement.obj_name ] _network = None if _networks: _network_id = _networks[0].private_net else: LOG.debug('ERROR: obj_name %s was not found in networks of ServiceInstance %s' % (requirement.obj_name,source_service_instance)) raise #Get network name of the specified network id _network_names = [network.name for network in db.get_all(Network) if network.ext_id == _network_id] _network_name = None if _network_names: _network_name = _network_names[0] else: LOG.debug('ERROR: Cannot find network with id %s in Table Network' % _network_id) if requirement.parameter == "private_ip": ip_number = 0 elif requirement.parameter == "public_ip": ip_number = 1 #Create the variable _params = {} _first_unit = source_units[0] _template = '$%s' % _first_unit.hostname _params['$%s' % _first_unit.hostname] = {'get_attr': [_first_unit.hostname, 'networks', _network_name, ip_number]} for source_unit in source_units[1:]: _template += ';$%s' % source_unit.hostname _params['$%s' % source_unit.hostname] = {'get_attr': [source_unit.hostname, 'networks', _network_name, ip_number]} param = {} param[requirement.name] = {} param[requirement.name]['str_replace'] = {} param[requirement.name]['str_replace']['template'] = _template param[requirement.name]['str_replace']['params'] = _params params.update(param) else: LOG.debug('ERROR: Units for ServiceInstance %s were not found.' % requirement.source) raise Exception else: LOG.debug('ERROR: ServiceInstance %s was not found' % requirement.source) raise Exception properties['user_data']['str_replace']['params'] = params server_config['properties'] = properties resource[self.name] = server_config return resource
logger.debug(resp) logger.debug( '\n###################CREATE SECURITY GROUPS###################') connection.request('GET', '/secgroups') response = connection.getresponse() resp = (response.read()) logger.debug(resp) logger.debug( '\n###################CREATE SERVICE###########################') db = DatabaseManager() lst = [db.get_all(SecurityGroup)] _json = create_service(lst) connection.request('POST', '/services', _json, headers) response = connection.getresponse() resp = (response.read()) logger.debug(resp) logger.debug( '\n####################GET SERVICES############################') connection.request('GET', '/services') response = connection.getresponse() resp = (response.read())
def get_template(topology): #name = topology.name template = {} template['heat_template_version'] = '2013-05-23' resources = {} outputs = {} #print "create Template for Topology: %s" % name for service_instance in topology.service_instances: for unit in service_instance.units: #Create Ports and floating IPs for this unit ports = [] floating_ips = [] if service_instance.networks: i=1 for network in service_instance.networks: ###Creating Port for this service instance new_port = None #prepare port args for this service instance port_args = {} port_args['name'] = '%s-port-%s' % (unit.hostname, i) port_args['private_net_id'] = network.private_net port_args['private_subnet_id'] = network.private_subnet # if "hss-1" in unit.hostname: # port_args['fixed_ip'] = "192.168.9.48" # elif "hss-2" in unit.hostname: # port_args['fixed_ip'] = "192.168.9.55" # else: port_args['fixed_ip'] = network.fixed_ip if network.security_groups: port_args['security_groups'] = network.security_groups new_port = Port(**port_args) ports.append(new_port) if network.public_net: new_floating_ip_args = {} new_floating_ip_args['name'] = '%s-floating_ip-%s' % (unit.hostname, i) new_floating_ip_args['floating_network_id'] = network.public_net new_floating_ip_args['port'] = new_port.name new_floating_ip = FloatingIP(**new_floating_ip_args) floating_ips.append(new_floating_ip) ###Adding Security Groups for _security_group in network.security_groups: _new_name=_security_group.name _new_rules=[] _rules=_security_group.rules for _rule in _rules: _name = _rule.name _remote_ip_prefix = _rule.remote_ip_prefix _protocol = _rule.protocol _port_range_max = int(_rule.port_range_max) if _rule.port_range_max else None _port_range_min = int(_rule.port_range_min) if _rule.port_range_min else None _new_rule = Rule(_name, _remote_ip_prefix, _protocol, _port_range_max, _port_range_min) _new_rules.append(_new_rule) _new_security_group = SecurityGroup(name=_new_name, rules=_new_rules) resources.update(_new_security_group.dump_to_dict()) i += 1 ###Create Server for this service instance new_server = None #prepare server args server_args = {} server_args['name'] = "%s" % unit.hostname server_args['hostname'] = "%s" % unit.hostname server_args['availability_zone'] = unit.availability_zone server_args['flavor'] = service_instance.flavor.name # if "hss-1" in unit.hostname: # server_args['image'] = "hss-1" # elif "hss-2" in unit.hostname: # server_args['image'] = "hss-2" # else: server_args['image'] = service_instance.image.name server_args['key_name'] = service_instance.key.name server_args['network_ports'] = ports server_args['user_data'] = service_instance.user_data server_args['requirements'] = service_instance.requirements new_server = Server(**server_args) resources.update(new_server.dump_to_dict()) if ports: for port in ports: resources.update(port.dump_to_dict()) if floating_ips: for floating_ip in floating_ips: resources.update(floating_ip.dump_to_dict()) template['resources'] = resources ###Output section### db = DatabaseManager() for service_instance in topology.service_instances: for network_instance in service_instance.networks: if network_instance.public_net: _public_network_names = [_network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.public_net] _public_network_name = None if _public_network_names: _public_network_name = _public_network_names[0] else: LOG.debug('ERROR: Cannot find network with id %s in Table Network' % network_instance.public_net) if network_instance.private_net: _private_network_names = [_network.name for _network in db.get_all(Network) if _network.ext_id == network_instance.private_net] _private_network_name = None if _private_network_names: _private_network_name = _private_network_names[0] else: LOG.debug('ERROR: Cannot find network with id %s in Table Network' % network_instance.net) for unit in service_instance.units: if network_instance.public_net and _public_network_name: output = {} floating_name = '%s-floating_ip-1' % unit.hostname output['value'] = {'get_attr': [floating_name, 'floating_ip_address']} output['description'] = 'Public IP of %s.' % unit.hostname outputs['mcn.endpoint.%s' % unit.hostname] = output elif network_instance.private_net and _private_network_name: output = {} port_name = '%s-port-1' % unit.hostname output['value'] = {'get_attr': [port_name, 'fixed_ips', 0, 'ip_address']} output['description'] = 'Private IP of %s.' % unit.hostname outputs['mcn.endpoint.%s' % unit.hostname] = output if network_instance.public_net and _public_network_name: network_type = "public" output = {} floating_name = '%s-floating_ip-1' % unit.hostname output['value'] = {'get_attr': [floating_name, 'floating_ip_address']} output['description'] = '%s ip of %s in %s.' % ( network_type.capitalize(), unit.hostname, network_instance.name) outputs['mcn.endpoint.%s.%s.%s' % (unit.hostname, network_instance.name, network_type)] = output if network_instance.private_net and _private_network_name: network_type = "private" output = {} port_name = '%s-port-1' % unit.hostname output['value'] = {'get_attr': [port_name, 'fixed_ips', 0, 'ip_address']} output['description'] = '%s ip of %s in %s.' % ( network_type.capitalize(), unit.hostname, network_instance.name) outputs['mcn.endpoint.%s.%s.%s' % (unit.hostname, network_instance.name, network_type)] = output template['outputs'] = outputs yaml.add_representer(unicode, lambda dumper, value: dumper.represent_scalar(u'tag:yaml.org,2002:str', value)) yaml.add_representer(SysUtil.literal_unicode, SysUtil.literal_unicode_representer) LOG.debug((template)) #LOG.debug(yaml.dumps(template)) #f = open('/net/u/mpa/tempalte_file.yaml', 'w') #f.write(yaml.dump(template, indent=2)) return yaml.dump(template)
def get_all_images(cls): db = DatabaseManager() images = db.get_all(Image) return images