def __init__(self, ptype, custom_def=None): super(PolicyType, self).__init__(ptype, self.POLICY_PREFIX, custom_def) self.type = ptype self._validate_keys() self.meta_data = None if self.METADATA in self.defs: self.meta_data = self.defs[self.METADATA] self._validate_metadata(self.meta_data) self.properties = None if self.PROPERTIES in self.defs: self.properties = self.defs[self.PROPERTIES] self.parent_policies = self._get_parent_policies() self.policy_version = None if self.VERSION in self.defs: self.policy_version = TOSCAVersionProperty( self.defs[self.VERSION]).get_version() self.policy_description = self.defs[self.DESCRIPTION] \ if self.DESCRIPTION in self.defs else None self.targets_list = None if self.TARGETS in self.defs: self.targets_list = self.defs[self.TARGETS] self._validate_targets(self.targets_list, custom_def)
def _translate_inputs(self): hot_inputs = [] log.info(_('Translating TOSCA input type to HOT input type.')) for input in self.inputs: hot_default = None hot_input_type = TOSCA_TO_HOT_INPUT_TYPES[input.type] if input.name in self.parsed_params: hot_default = DataEntity.validate_datatype( input.type, self.parsed_params[input.name]) elif input.default is not None: hot_default = DataEntity.validate_datatype( input.type, input.default) else: if self.deploy: msg = _("Need to specify a value " "for input {0}.").format(input.name) log.error(msg) raise Exception(msg) if input.type == "scalar-unit.size": # Assumption here is to use this scalar-unit.size for size of # cinder volume in heat templates and will be in GB. # should add logic to support other types if needed. input_value = hot_default hot_default = (ScalarUnit_Size( hot_default).get_num_from_scalar_unit('GiB')) if hot_default == 0: msg = _('Unit value should be > 0.') log.error(msg) raise Exception(msg) elif int(hot_default) < hot_default: hot_default = int(hot_default) + 1 log.warning( _("Cinder unit value should be in multiples" " of GBs. So corrected %(input_value)s " "to %(hot_default)s GB.") % { 'input_value': input_value, 'hot_default': hot_default }) if input.type == 'version': hot_default = TOSCAVersionProperty(hot_default).get_version() hot_constraints = [] if input.constraints: for constraint in input.constraints: if hot_default: constraint.validate(hot_default) hc, hvalue = self._translate_constraints( constraint.constraint_key, constraint.constraint_value) hot_constraints.append({hc: hvalue}) hot_inputs.append( HotParameter(name=input.name, type=hot_input_type, description=input.description, default=hot_default, constraints=hot_constraints)) return hot_inputs
def test_tosca_version_property(self): version = '18.0.3.beta-1' expected_output = '18.0.3.beta-1' output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = 18 expected_output = '18.0' output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = 18.0 expected_output = '18.0' output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = '18.0.3' expected_output = '18.0.3' output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = 0 expected_output = None output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = 00 expected_output = None output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = 0.0 expected_output = None output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = 00.00 expected_output = None output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output) version = '0.0.0' expected_output = None output = TOSCAVersionProperty(version).get_version() self.assertEqual(output, expected_output)
def _best_image(self, properties): match_all = IMAGES.keys() architecture = properties.get('architecture') match_arch = self._match_images(match_all, IMAGES, 'architecture', architecture) type = properties.get('type') match_type = self._match_images(match_arch, IMAGES, 'type', type) distribution = properties.get('distribution') match_distribution = self._match_images(match_type, IMAGES, 'distribution', distribution) version = properties.get('version') version = TOSCAVersionProperty(version).get_version() match_version = self._match_images(match_distribution, IMAGES, 'version', version) if len(match_version): return list(match_version)[0]
def _translate_inputs(self): mano_inputs = [] if 'key_name' in self.parsed_params and 'key_name' not in self.inputs: name = 'key_name' type = 'string' default = self.parsed_params[name] schema_dict = {'type': type, 'default': default} input = Input(name, schema_dict) self.inputs.append(input) self.log.info(_('Translating TOSCA input type to MANO input type.')) for input in self.inputs: mano_default = None mano_input_type = TOSCA_TO_MANO_INPUT_TYPES[input.type] if input.name in self.parsed_params: mano_default = DataEntity.validate_datatype( input.type, self.parsed_params[input.name]) elif input.default is not None: mano_default = DataEntity.validate_datatype( input.type, input.default) else: if self.deploy: msg = _("Need to specify a value " "for input {0}.").format(input.name) self.log.error(msg) raise Exception(msg) if input.type == "scalar-unit.size": # Assumption here is to use this scalar-unit.size for size of # cinder volume in heat templates and will be in GB. # should add logic to support other types if needed. input_value = mano_default mano_default = (ScalarUnit_Size( mano_default).get_num_from_scalar_unit('GiB')) if mano_default == 0: msg = _('Unit value should be > 0.') self.log.error(msg) raise Exception(msg) elif int(mano_default) < mano_default: mano_default = int(mano_default) + 1 self.log.warning( _("Cinder unit value should be in" " multiples of GBs. So corrected" " %(input_value)s to %(mano_default)s" " GB.") % { 'input_value': input_value, 'mano_default': mano_default }) if input.type == 'version': mano_default = TOSCAVersionProperty(mano_default).get_version() mano_constraints = [] if input.constraints: for constraint in input.constraints: if mano_default: constraint.validate(mano_default) hc, hvalue = self._translate_constraints( constraint.constraint_key, constraint.constraint_value) mano_constraints.append({hc: hvalue}) mano_inputs.append( ManoParameter(self.log, name=input.name, type=mano_input_type, description=input.description, default=mano_default, constraints=mano_constraints)) return mano_inputs