Esempio n. 1
0
    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)
Esempio n. 2
0
    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
Esempio n. 3
0
    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)
Esempio n. 4
0
    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]
Esempio n. 5
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