Пример #1
0
    def parse_volumes(cls, volumes):
        """
        "dynamic_volumes": [{"hostPath": {"path": ""}, "name": ""}],
        "dynamic_volumeMounts": [{"readOnly": true, "mountPath": "", "name": ""}]
        """
        if not volumes:
            return constants.EMPTY_VOLUMES_MAPPING, \
                   constants.EMPTY_VOLUME_MOUNTS_MAPPING
        elif not isinstance(volumes, list):
            raise InvalidParameterException('Invalid volumes type, not list.')
        elif len(volumes) == 1 \
                and volumes[0]['hostPath'].strip() == '' \
                and volumes[0]['mountPath'].strip() == '':
            return constants.EMPTY_VOLUMES_MAPPING, \
                   constants.EMPTY_VOLUME_MOUNTS_MAPPING

        # dynamic_volumes, dynamic_volumeMounts
        dynamic_volumes = []
        dynamic_volume_mounts = []
        for _index, volume in enumerate(volumes):
            if 'hostPath' not in volume or 'mountPath' not in volume:
                raise InvalidParameterException(
                    'Invalid parameter, hostPath or mountPath required.')
            if volume['hostPath'] == '' or volume['mountPath'] == '':
                raise InvalidParameterException(
                    'Invalid parameter, hostPath or mountPath can not be empty.'
                )

            host_path = volume['hostPath']
            mount_path = volume['mountPath']

            if 'mountPathReadOnly' in volume:
                read_only = True if volume['mountPathReadOnly'] else False
            else:
                read_only = False

            volume_name = 'volume' + str(_index)
            dynamic_volumes.append({
                "hostPath": {
                    "path": host_path
                },
                "name": volume_name
            })

            dynamic_volume_mounts.append({
                "readOnly": read_only,
                "mountPath": mount_path,
                "name": volume_name
            })

        return dynamic_volumes, dynamic_volume_mounts
Пример #2
0
    def _param_env_filter(self):
        try:
            r = self.softapp.morepara.get('env')
        except:
            r = []
        if not isinstance(r, list):
            r = []

        # Append default envrionment
        r.append({"name": "ES_DEVICEID", "value": self.device.name})

        if self.is_valid_parameter(self.payload['parameters'], 'dynamic_env'):
            r0 = []
            try:
                env = self.payload['parameters'].get('dynamic_env')
                for e in env:
                    if 'name' in e and "value" in e:
                        if e["name"].strip() != "":
                            r0.append({"name": e["name"], "value": e["value"]})
                    else:
                        raise InvalidParameterException(
                            'env should use keys name and value')
            except Exception as e:
                raise Exception(str(e))

            r += r0
        if len(r) > 0:
            return r
        return False
Пример #3
0
def validate_envrionment(env):
    ret = []
    if env and isinstance(env, list):
        for e in env:
            if 'name' in e and "value" in e:
                if e["name"].strip() != "":
                    ret.append({"name": e["name"], "value": e["value"]})
            else:
                raise InvalidParameterException('env should use keys name and value')
    return ret
Пример #4
0
def validate_ports(ports):
    if not isinstance(ports, list):
        raise InvalidParameterException('Invalid port type')
    elif not ports:
        return EMPTY_PORTS_MAPPING
    elif len(ports) == 1 \
        and 'hostPort' in ports[0] and 'containerPort' in ports[0] \
        and ports[0]['hostPort'] == '' and ports[0]['containerPort'] == '':
        return EMPTY_PORTS_MAPPING
    elif len(ports) == 1 \
        and 'hostPort' in ports[0] and 'containerPort' in ports[0] \
        and (ports[0]['hostPort'] == '' or ports[0]['containerPort'] == ''):
        raise InvalidParameterException('Invalid port')
    elif len(ports):
        for port in ports:
            if 'hostPort' not in port or 'containerPort' not in port:
                raise InvalidParameterException('Invalid port format, lack of "hostPort" or "containerPort".')
            elif port['hostPort'] == '' or port['containerPort'] == '':
                raise InvalidParameterException('Invalid port format, cannot be empty')
        return ports

    raise InvalidParameterException('Invalid ports type')
Пример #5
0
def validate_resource(resource):
    limits = {}
    if not resource:
        return
    try:
        if 'cpu' in resource:
            float(resource['cpu'])
            limits['cpu'] = resource['cpu']
    except Exception:
        raise InvalidParameterException('cpu should be float')

    try:
        if 'memory' in resource:
            if 'M' in resource['memory']:
                resource['memory'] = resource['memory']\
                    .split('M')[0].split('G')[0]
            int(resource['memory'])
            # resource unit is MiByte
            limits['memory'] = resource['memory']
    except Exception:
        raise InvalidParameterException('memory should be int')

    return limits
Пример #6
0
    def param_resources_filter(cls, resource):
        limits = {}
        if not resource:
            return
        try:
            if 'cpu' in resource:
                float(resource['cpu'])
                limits['cpu'] = resource['cpu']
        except Exception:
            raise InvalidParameterException('cpu should be float')

        try:
            if 'memory' in resource:
                # backcompatible database
                if 'M' in resource['memory']:
                    resource['memory'] = resource['memory']\
                        .split('M')[0]
                int(resource['memory'])
                # resource unit is MiByte
                limits['memory'] = resource['memory'] + "Mi"
        except Exception:
            raise InvalidParameterException('memory should be int')
        return limits
Пример #7
0
def validate_cap_add(cap_add):
    if cap_add is None or cap_add == '':
        pass
    elif not isinstance(cap_add, bool):
        raise InvalidParameterException('The "cap_add" should be a boolean type.')
Пример #8
0
def validate_host_network(host_network):
    if host_network is None or host_network == '':
        pass
    elif not isinstance(host_network, bool):
        raise InvalidParameterException('The host network should be a boolean type')