Esempio n. 1
0
 def __init__(self, policy_file, env=None):
     self.env = env
     self.policy = policy_parser.parse(policy_file)
     self.builderutil = BuilderUtil(env)
     self.enabled_build_policy = self._get_enabled_build_policy()
     self.enabled_sec_image_policies = self._get_enabled_sec_image_policies(self.enabled_build_policy)
     self.enabled_install_policies = self._get_enabled_install_policy(self.enabled_build_policy)
 def __init__(self, policy_file, env=None):
     self.env = env
     self.policy = policy_parser.parse(policy_file)
     self.builderutil = BuilderUtil(env)
     self.enabled_build_policy = self._get_enabled_build_policy()
     self.enabled_sec_image_policies = self._get_enabled_sec_image_policies(self.enabled_build_policy)
     self.enabled_install_policies = self._get_enabled_install_policy(self.enabled_build_policy)
Esempio n. 3
0
class BuildPolicy(object):
    MSG_ERROR_MULTIPLE_POLICIES_ENABLED = "Only one build policy is allowed but multiple are enabled: {0}"

    def __init__(self, policy_file, env=None):
        self.env = env
        self.policy = policy_parser.parse(policy_file)
        self.builderutil = BuilderUtil(env)
        self.enabled_build_policy = self._get_enabled_build_policy()
        self.enabled_sec_image_policies = self._get_enabled_sec_image_policies(self.enabled_build_policy)
        self.enabled_install_policies = self._get_enabled_install_policy(self.enabled_build_policy)

    def isFeatureEnabled(self, feature_list):
        isEnabled = False

        for sec_image_policy in self.enabled_sec_image_policies:
            isEnabled = isEnabled or sec_image_policy.isFeatureEnabled(feature_list)

        for install_policy in self.enabled_install_policies:
            isEnabled = isEnabled or install_policy.isFeatureEnabled(feature_list)

        return isEnabled

    def _get_enabled_install_policy(self, enabled_build_policy):
        assert self.policy.install_policy

        if enabled_build_policy and enabled_build_policy.install_policy:
            enabled_install_policy = enabled_build_policy.install_policy
        else:
            enabled_install_policy = []

        enabled_policies = self._get_enabled_policies(
                                    self.policy.install_policy.policy,
                                    enabled_install_policy)

        install_policies = []
        for xml_policy in enabled_policies:
            install_policies.append(InstallPolicy(xml_policy))

        return install_policies

    def _get_enabled_sec_image_policies(self, enabled_build_policy):
        assert self.policy.sec_image_policy

        if enabled_build_policy and enabled_build_policy.sec_image_policy:
            enabled_sec_image_policies = enabled_build_policy.sec_image_policy
        else:
            enabled_sec_image_policies = []

        enabled_policies = self._get_enabled_policies(
                                    self.policy.sec_image_policy.policy,
                                    enabled_sec_image_policies)

        sec_image_policies = []
        for xml_policy in enabled_policies:
            sec_image_policies.append(SecImagePolicy(xml_policy))

        return sec_image_policies

    def _get_enabled_build_policy(self):
        if not self.policy.build_policy:
            return None

        enabled_policies = self._get_enabled_policies(
                                            self.policy.build_policy.policy_enable)


        return self._enforce_single_policy(enabled_policies)

    def _get_enabled_policies(self, policy_list, enabled_id_list = []):
        enabled_policies = []
        for i, policy in enumerate(policy_list):
            if policy.feature_flag and self.builderutil.isKeyEnable(policy.feature_flag) or \
                policy.id in enabled_id_list:
                enabled_policies.append(policy)

        return enabled_policies

    def _enforce_single_policy(self, enabled_policies):
        if len(enabled_policies) > 1:
            enabled_flags = []
            for i, policy in enumerate(enabled_policies):
                enabled_flags.append(policy.feature_flag)
            self.builderutil.returnError(self.MSG_ERROR_MULTIPLE_POLICIES_ENABLED.format(enabled_flags))
        elif len(enabled_policies) == 1:
            return_policy = enabled_policies[0]
        else:
            return_policy = None

        return return_policy
class BuildPolicy(object):
    MSG_ERROR_MULTIPLE_POLICIES_ENABLED = "Only one build policy is allowed but multiple are enabled: {0}"

    def __init__(self, policy_file, env=None):
        self.env = env
        self.policy = policy_parser.parse(policy_file)
        self.builderutil = BuilderUtil(env)
        self.enabled_build_policy = self._get_enabled_build_policy()
        self.enabled_sec_image_policies = self._get_enabled_sec_image_policies(self.enabled_build_policy)
        self.enabled_install_policies = self._get_enabled_install_policy(self.enabled_build_policy)

    def isFeatureEnabled(self, feature_list):
        isEnabled = False

        for sec_image_policy in self.enabled_sec_image_policies:
            isEnabled = isEnabled or sec_image_policy.isFeatureEnabled(feature_list)

        for install_policy in self.enabled_install_policies:
            isEnabled = isEnabled or install_policy.isFeatureEnabled(feature_list)

        return isEnabled

    def _get_enabled_install_policy(self, enabled_build_policy):
        assert self.policy.install_policy

        if enabled_build_policy and enabled_build_policy.install_policy:
            enabled_install_policy = enabled_build_policy.install_policy
        else:
            enabled_install_policy = []

        enabled_policies = self._get_enabled_policies(
                                    self.policy.install_policy.policy,
                                    enabled_install_policy)

        install_policies = []
        for xml_policy in enabled_policies:
            install_policies.append(InstallPolicy(xml_policy))

        return install_policies

    def _get_enabled_sec_image_policies(self, enabled_build_policy):
        assert self.policy.sec_image_policy

        if enabled_build_policy and enabled_build_policy.sec_image_policy:
            enabled_sec_image_policies = enabled_build_policy.sec_image_policy
        else:
            enabled_sec_image_policies = []

        enabled_policies = self._get_enabled_policies(
                                    self.policy.sec_image_policy.policy,
                                    enabled_sec_image_policies)

        sec_image_policies = []
        for xml_policy in enabled_policies:
            sec_image_policies.append(SecImagePolicy(xml_policy))

        return sec_image_policies

    def _get_enabled_build_policy(self):
        if not self.policy.build_policy:
            return None

        enabled_policies = self._get_enabled_policies(
                                            self.policy.build_policy.policy_enable)


        return self._enforce_single_policy(enabled_policies)

    def _get_enabled_policies(self, policy_list, enabled_id_list = []):
        enabled_policies = []
        for i, policy in enumerate(policy_list):
            if policy.feature_flag and self.builderutil.isKeyEnable(policy.feature_flag) or \
                policy.id in enabled_id_list:
                enabled_policies.append(policy)

        return enabled_policies

    def _enforce_single_policy(self, enabled_policies):
        if len(enabled_policies) > 1:
            enabled_flags = []
            for i, policy in enumerate(enabled_policies):
                enabled_flags.append(policy.feature_flag)
            self.builderutil.returnError(self.MSG_ERROR_MULTIPLE_POLICIES_ENABLED.format(enabled_flags))
        elif len(enabled_policies) == 1:
            return_policy = enabled_policies[0]
        else:
            return_policy = None

        return return_policy