def test_detect_new_enforcements(self) -> None:
        new_enforcement = [Enforcement(name='git', repo='somewhere')]
        old_enforcement = [Enforcement(name='hub', repo='anywhere')]
        enforcement_change_detector = EnforcementChangeDetector(
            new_enforcements_list=new_enforcement,
            old_enforcements_list=old_enforcement)

        enforcements = enforcement_change_detector.detect_new_enforcements()
        self.assertEqual(new_enforcement, enforcements)
    def test_detect_removed_enforcements_with_no_changes(self) -> None:
        new_enforcement = [Enforcement(name='git', repo='anywhere')]
        old_enforcement = [Enforcement(name='git', repo='anywhere')]

        enforcement_change_detector = EnforcementChangeDetector(
            new_enforcements_list=new_enforcement,
            old_enforcements_list=old_enforcement)
        enforcements = enforcement_change_detector.detect_removed_enforcements(
        )
        self.assertEqual([], enforcements)
    def __call__(self, cluster: Cluster,
                 enforcement: Enforcement) -> Enforcement:
        yaml_enforcement = yaml.dump(enforcement.dict())
        yaml_enforcement = yaml_enforcement.replace("$", "", -1)

        t = Template(yaml_enforcement)
        cluster_dict = cluster.dict()
        cluster_dict.pop("additional_data")
        cluster_dict.update(cluster.additional_data)
        cluster_dict["requests"] = requests
        yaml_enforcement = t.render(**cluster_dict)
        enforcement_dict = yaml.load(yaml_enforcement)
        return Enforcement(**enforcement_dict)
Пример #4
0
    def setUp(self) -> None:
        self.dynamic_mapper = EnforcementDynamicMapper()
        self.cluster_repository = ClusterRepository()
        self.project_repository = ProjectRepository()
        self.enforcement_repository = EnforcementRepository()
        self.enforcement = Enforcement(name='test', repo='somewhere')
        self.old_enforcement = Enforcement(name='test', repo='somewhere')
        self.new_enforcement = Enforcement(name='test1', repo='anywhere')
        self.cluster = Cluster(name='test',
                               url='test',
                               token='test',
                               id='test')
        self.cluster_group = ClusterGroup(
            clusters=[self.cluster],
            cluster_repository=self.cluster_repository,
            project_repository=self.project_repository)

        self.cluster_group_builder = ClusterGroupBuilder(
            cluster_repository=self.cluster_repository,
            project_repository=self.project_repository)

        self.cluster_rule = ClusterRule(enforcements=[self.enforcement],
                                        source=EnforcementSource())

        trigger_builder = MagicMock()
        trigger_builder.build_before_install = MagicMock(
            return_value=lambda enf, cluster: None)
        trigger_builder.build_after_install = MagicMock(
            return_value=lambda enf, cluster: None)

        self.enforcement_installer_builder = EnforcementInstallerBuilder(
            enforcement_repository=self.enforcement_repository,
            enforcement_dynamic_mapper=EnforcementDynamicMapper(),
            trigger_builder=trigger_builder,
        )

        self.enforcement_installer = EnforcementInstaller(
            enforcements=[self.enforcement],
            cluster_group=self.cluster_group,
            enforcement_repository=self.enforcement_repository,
            enforcement_dynamic_mapper=self.dynamic_mapper,
            before_install_trigger=lambda a1, a2: None,
            after_install_trigger=lambda a1, a2: None,
        )

        self.enforcement_change_detector_builder = EnforcementChangeDetectorBuilder(
        )
        self.enforcement_change_detector = EnforcementChangeDetector(
            old_enforcements_list=[self.old_enforcement],
            new_enforcements_list=[self.new_enforcement])
Пример #5
0
    def test_install_update_repository(self, mock_list_installed_enforcements,
                                       mock_update_enforcement) -> None:
        enforcement = Enforcement(name='test-test', repo='somewhere')
        mock_list_installed_enforcements.return_value = [enforcement]

        enforcement_installer = EnforcementInstaller(
            enforcements=[self.enforcement],
            cluster_group=self.cluster_group,
            enforcement_repository=self.enforcement_repository)

        enforcement_installer.install()

        self.assertTrue(mock_list_installed_enforcements.called)
        self.assertEqual(
            mock_list_installed_enforcements.call_args[1]['cluster_name'],
            self.cluster.name)
        self.assertTrue(mock_update_enforcement.called)
        self.assertEqual(mock_update_enforcement.call_args[0][0],
                         self.enforcement.name)
        self.assertEqual(
            mock_update_enforcement.call_args[0][1],
            enforcement_installer._make_enforcement_name(
                self.cluster, self.enforcement))
        self.assertEqual(mock_update_enforcement.call_args[0][2],
                         self.enforcement)
Пример #6
0
    def setUp(self) -> None:
        self.source_locator = SourceLocator()
        self.source_repository = SourceRepository()
        self.cluster_repository = ClusterRepository()
        self.project_repository = ProjectRepository()
        self.enforcement_repository = EnforcementRepository()
        self.enforcement = Enforcement(name='test', repo='somewhere')

        self.cluster = Cluster(name='test',
                               url='test',
                               token='test',
                               id='test')
        self.cluster_group = ClusterGroup(
            clusters=[self.cluster],
            cluster_repository=self.cluster_repository,
            project_repository=self.project_repository)
        self.cluster_group_builder = ClusterGroupBuilder(
            cluster_repository=self.cluster_repository,
            project_repository=self.project_repository)
        self.cluster_rule = ClusterRule(enforcements=[],
                                        source=EnforcementSource())

        self.enforcement_installer_builder = EnforcementInstallerBuilder(
            enforcement_repository=self.enforcement_repository)

        self.enforcement_installer = EnforcementInstaller(
            enforcements=[self.enforcement],
            cluster_group=self.cluster_group,
            enforcement_repository=self.enforcement_repository)
Пример #7
0
    def setUp(self) -> None:
        self.dynamic_mapper = EnforcementDynamicMapper()
        self.enforcement_repository = EnforcementRepository()
        self.enforcement = Enforcement(name='test', repo='somewhere')
        self.cluster_repository = ClusterRepository()
        self.project_repository = ProjectRepository()
        self.cluster = Cluster(name='test',
                               url='test',
                               token='test',
                               id='test')
        self.cluster_group = ClusterGroup(
            clusters=[self.cluster],
            cluster_repository=self.cluster_repository,
            project_repository=self.project_repository)

        self.trigger_function = lambda enf, cluster: None

        self.enforcement_installer = EnforcementInstaller(
            enforcements=[self.enforcement],
            cluster_group=self.cluster_group,
            enforcement_repository=self.enforcement_repository,
            enforcement_dynamic_mapper=self.dynamic_mapper,
            before_install_trigger=self.trigger_function,
            after_install_trigger=self.trigger_function,
        )
Пример #8
0
 def _make_enforcement_list(cls, enforcement_map_list) -> List[Enforcement]:
     if not enforcement_map_list:
         return []
     return [
         Enforcement(**enforcement_map)
         for enforcement_map in enforcement_map_list
     ]
Пример #9
0
 def setUp(self) -> None:
     self.enforcement_repository = EnforcementRepository()
     self.enforcement = Enforcement(name='test', repo='somewhere')
     self.cluster_repository = ClusterRepository()
     self.project_repository = ProjectRepository()
     self.cluster = Cluster(name='test',
                            url='test',
                            token='test',
                            id='test')
     self.cluster_group = ClusterGroup(
         clusters=[self.cluster],
         cluster_repository=self.cluster_repository,
         project_repository=self.project_repository)
 def setUp(self) -> None:
     self.enforcement_repository = EnforcementRepository()
     self.enforcement_dynamic_mapper = EnforcementDynamicMapper()
     self.enforcement = Enforcement(name='test',
                                    repo='somewhere',
                                    labels={'cluster_name': 'test'})
     self.cluster_repository = ClusterRepository()
     self.project_repository = ProjectRepository()
     self.cluster = Cluster(name='test',
                            url='test',
                            token='test',
                            id='test')
     self.cluster_group = ClusterGroup(
         clusters=[self.cluster],
         cluster_repository=self.cluster_repository,
         project_repository=self.project_repository)
Пример #11
0
    def _make_enforcement_by_application(self, application: V1alpha1Application) -> Enforcement:

        helm_source: V1alpha1ApplicationSourceHelm = application.spec.source.helm
        helm = None

        if helm_source and helm_source.parameters:
            helm_params = {param.name: param.value for param in helm_source.parameters}
            helm = Helm(parameters=helm_params)

        return Enforcement(
            name=application.metadata.name,
            repo=application.spec.source.repo_url,
            path=application.spec.source.path,
            helm=helm,
            labels=application.metadata.labels or []
        )
Пример #12
0
    def __call__(self,
                 cluster: Cluster,
                 enforcement: Enforcement,
                 success: bool = None) -> dict:
        event = {
            "cluster": {
                "name": cluster.name,
                "id": cluster.id,
                "url": cluster.url,
            },
            "enforcement": enforcement.dict(),
        }

        if type(success) != type(None):
            event["success"] = success

        return event
Пример #13
0
    def sync(self, name: str, spec: dict, status: dict, logger, **kwargs):
        logger.debug(f"sync clusters for %s", name)

        current_status = ClusterRuleController._restore_status(status)

        if not current_status:
            return

        current_clusters = [
            Cluster(name=cluster['name'], url=cluster['url'], id='', token='')
            for cluster in current_status.clusters
        ]
        cluster_rule = ClusterRule(**spec)
        response = self._sync_rules_use_case.execute(cluster_rule, current_clusters)
        response.install_errors = [Enforcement(name=name, repo="") for name in current_status.install_errors]

        new_status = ClusterRuleController._make_status(response)

        if new_status != current_status.dict():
            return new_status
Пример #14
0
    def update(self, name, old: List[dict], new: List[dict], status: dict,
               logger, **kwargs):
        if not old:
            return

        logger.debug(f"update rules for %s", name)

        old_enforcement_list = ClusterRuleController._make_enforcement_list(
            old)
        new_enforcement_list = ClusterRuleController._make_enforcement_list(
            new)
        current_status = ClusterRuleController._restore_status(status)

        current_clusters = [
            Cluster(name=cluster['name'], url=cluster['url'], id='', token='')
            for cluster in current_status.clusters
        ]

        response = self._update_rules_use_case.execute(
            clusters=current_clusters,
            old_enforcements=old_enforcement_list,
            new_enforcements=new_enforcement_list,
        )

        enforcements_change = [
            enforcement.name for enforcement in response.removed_enforcements +
            response.changed_enforcements
        ]

        response.install_errors = response.install_errors + list(
            map(
                lambda name: Enforcement(name=name, repo=""),
                filter(
                    lambda enforcement_name: enforcement_name not in
                    enforcements_change,
                    current_status.install_errors,
                )))

        response.clusters = current_clusters

        return ClusterRuleController._make_status(response)
    def test_install_update_repository(self, mock_update_enforcement,
                                       mock_create_enforcement) -> None:
        enforcement = Enforcement(name='test-test',
                                  repo='somewhere',
                                  labels={'cluster_name': 'test'})

        repository = EnforcementRepository()
        repository.list_installed_enforcements = MagicMock(
            return_value=[enforcement])

        enforcement_installer = EnforcementInstaller(
            enforcements=[self.enforcement],
            cluster_group=self.cluster_group,
            enforcement_repository=repository,
            enforcement_dynamic_mapper=EnforcementDynamicMapper(),
            before_install_trigger=lambda cluster, enforcement: None,
            after_install_trigger=lambda cluster, enforcement: None)

        enforcements = enforcement_installer.install()

        self.assertListEqual([], enforcements)
    def test_uninstall(self, mock_list_installed_enforcements,
                       mock_remove_enforcement) -> None:
        enforcement = Enforcement(name='test-test', repo='somewhere')
        mock_list_installed_enforcements.return_value = [enforcement]

        enforcement_installer = EnforcementInstaller(
            enforcements=[self.enforcement],
            cluster_group=self.cluster_group,
            enforcement_repository=self.enforcement_repository,
            enforcement_dynamic_mapper=EnforcementDynamicMapper(),
            before_install_trigger=lambda cluster, enforcement: None,
            after_install_trigger=lambda cluster, enforcement: None)

        enforcement_installer.uninstall()

        self.assertTrue(mock_list_installed_enforcements.called)
        self.assertEqual(
            mock_list_installed_enforcements.call_args[1]['cluster_name'],
            self.cluster.name)
        self.assertTrue(mock_remove_enforcement.called)
        self.assertEqual(
            mock_remove_enforcement.call_args[0][0],
            enforcement_installer._make_enforcement_name(
                self.cluster, self.enforcement))
 def setUp(self) -> None:
     self.enforcement = Enforcement(name='test', repo='somewhere')
     self.enforcement_installer = EnforcementChangeDetector(
         new_enforcements_list=[self.enforcement],
         old_enforcements_list=[self.enforcement],
     )