예제 #1
0
def get_desired_state(internal, use_jump_host, thread_pool_size):
    gqlapi = gql.get_api()
    all_namespaces = gqlapi.query(QUERY)['namespaces']

    namespaces = []
    for namespace in all_namespaces:
        shard_key = f'{namespace["cluster"]["name"]}/{namespace["name"]}'
        if is_in_shard(shard_key):
            namespaces.append(namespace)

    ri = ResourceInventory()
    settings = queries.get_app_interface_settings()
    oc_map = OC_Map(namespaces=namespaces,
                    integration=QONTRACT_INTEGRATION,
                    settings=settings,
                    internal=internal,
                    use_jump_host=use_jump_host,
                    thread_pool_size=thread_pool_size,
                    init_projects=True)
    ob.init_specs_to_fetch(ri,
                           oc_map,
                           namespaces=namespaces,
                           override_managed_types=['Namespace'])

    desired_state = []
    for cluster, namespace, _, _ in ri:
        if cluster not in oc_map.clusters():
            continue
        desired_state.append({"cluster": cluster, "namespace": namespace})

    return oc_map, desired_state
예제 #2
0
 def test_only_cluster_or_namespace(self) -> None:
     with self.assertRaises(KeyError):
         sut.init_specs_to_fetch(
             self.resource_inventory,
             self.oc_map,
             [{
                 "foo": "bar"
             }],
             [{
                 "name": "cluster1"
             }],
         )
예제 #3
0
    def test_namespaces_extra_override(self) -> None:
        self.namespaces[0]["managedResourceTypeOverrides"] = [{
            "resource":
            "Project",
            "override":
            "something.project",
        }]

        with self.assertRaises(KeyError):
            sut.init_specs_to_fetch(self.resource_inventory,
                                    self.oc_map,
                                    namespaces=self.namespaces)
예제 #4
0
    def test_namespaces_extra_managed_resource_name(self) -> None:
        self.namespaces[0]["managedResourceNames"].append(
            {
                "resource": "Secret",
                "resourceNames": ["s1", "s2"],
            }, )

        with self.assertRaises(KeyError):
            sut.init_specs_to_fetch(
                self.resource_inventory,
                self.oc_map,
                namespaces=self.namespaces,
            )
    def test_namespaces_extra_managed_resource_name(self) -> None:
        # mypy doesn't recognize that this is a list
        self.namespaces[0]['managedResourceNames'].append(  # type: ignore
            {
                "resource": "Secret",
                "resourceNames": ["s1", "s2"],
            }, )

        with self.assertRaises(KeyError):
            sut.init_specs_to_fetch(
                self.resource_inventory,
                self.oc_map,
                namespaces=self.namespaces,
            )
예제 #6
0
    def test_namespaces_managed(self) -> None:
        expected = [
            sut.StateSpec(
                type="current",
                oc="stuff",
                cluster="cs1",
                namespace="ns1",
                resource="Template",
                resource_names=["tp1", "tp2"],
            ),
            sut.StateSpec(
                type="desired",
                oc="stuff",
                cluster="cs1",
                namespace="ns1",
                resource={
                    "provider": "resource",
                    "path": "/some/path.yml"
                },
                parent=self.namespaces[0],
            ),
        ]

        rs = sut.init_specs_to_fetch(
            self.resource_inventory,
            self.oc_map,
            namespaces=self.namespaces,
        )
        self.assert_specs_match(rs, expected)
예제 #7
0
 def test_namespaces_no_managedresourcenames(self) -> None:
     self.namespaces[0]["managedResourceNames"] = None
     self.namespaces[0]["managedResourceTypeOverrides"] = None
     self.maxDiff = None
     expected = [
         sut.StateSpec(
             type="current",
             oc="stuff",
             cluster="cs1",
             namespace="ns1",
             parent=None,
             resource="Template",
             resource_names=None,
             resource_type_override=None,
         ),
         sut.StateSpec(
             type="desired",
             oc="stuff",
             cluster="cs1",
             namespace="ns1",
             resource={
                 "provider": "resource",
                 "path": "/some/path.yml"
             },
             parent=self.namespaces[0],
         ),
     ]
     rs = sut.init_specs_to_fetch(
         self.resource_inventory,
         self.oc_map,
         namespaces=self.namespaces,
     )
     self.assert_specs_match(rs, expected)
예제 #8
0
def fetch_current_state(dry_run, namespaces, thread_pool_size, internal,
                        use_jump_host, account_name):
    ri = ResourceInventory()
    if dry_run:
        return ri, None
    settings = queries.get_app_interface_settings()
    oc_map = OC_Map(namespaces=namespaces,
                    integration=QONTRACT_INTEGRATION,
                    settings=settings,
                    internal=internal,
                    use_jump_host=use_jump_host,
                    thread_pool_size=thread_pool_size)
    state_specs = \
        ob.init_specs_to_fetch(
            ri,
            oc_map,
            namespaces=namespaces,
            override_managed_types=['Secret']
        )
    threaded.run(populate_oc_resources,
                 state_specs,
                 thread_pool_size,
                 ri=ri,
                 account_name=account_name)

    return ri, oc_map
def fetch_data(
    namespaces,
    thread_pool_size,
    internal,
    use_jump_host,
    init_api_resources=False,
    overrides=None,
):
    ri = ResourceInventory()
    settings = queries.get_app_interface_settings()
    logging.debug(f"Overriding keys {overrides}")
    oc_map = OC_Map(
        namespaces=namespaces,
        integration=QONTRACT_INTEGRATION,
        settings=settings,
        internal=internal,
        use_jump_host=use_jump_host,
        thread_pool_size=thread_pool_size,
        init_api_resources=init_api_resources,
    )
    state_specs = ob.init_specs_to_fetch(ri,
                                         oc_map,
                                         namespaces=namespaces,
                                         override_managed_types=overrides)
    threaded.run(fetch_states, state_specs, thread_pool_size, ri=ri)

    return oc_map, ri
    def test_namespaces_managed_with_overrides(self) -> None:
        self.namespaces[0]['managedResourceTypeOverrides'] = [{
            "resource":
            "Template",
            "override":
            "something.template"
        }]
        expected = [
            sut.StateSpec(
                type="current",
                oc="stuff",
                cluster="cs1",
                namespace="ns1",
                resource="Template",
                resource_names=["tp1", "tp2"],
                resource_type_override="something.template",
            ),
            sut.StateSpec(type="desired",
                          oc="stuff",
                          cluster="cs1",
                          namespace="ns1",
                          resource={
                              "provider": "resource",
                              "path": "/some/path.yml"
                          },
                          parent=self.namespaces[0])
        ]
        rs = sut.init_specs_to_fetch(
            self.resource_inventory,
            self.oc_map,
            namespaces=self.namespaces,
        )

        self.assert_specs_match(rs, expected)
예제 #11
0
    def test_namespaces_no_managedresourcetypes(self) -> None:
        self.namespaces[0]["managedResourceTypes"] = None
        rs = sut.init_specs_to_fetch(
            self.resource_inventory,
            self.oc_map,
            namespaces=self.namespaces,
        )

        self.assertEqual(rs, [])
def get_desired_state(internal, use_jump_host):
    gqlapi = gql.get_api()
    namespaces = gqlapi.query(QUERY)['namespaces']
    ri = ResourceInventory()
    settings = queries.get_app_interface_settings()
    oc_map = OC_Map(namespaces=namespaces,
                    integration=QONTRACT_INTEGRATION,
                    settings=settings,
                    internal=internal,
                    use_jump_host=use_jump_host)
    ob.init_specs_to_fetch(ri,
                           oc_map,
                           namespaces=namespaces,
                           override_managed_types=['Namespace'])
    desired_state = [{
        "cluster": cluster,
        "namespace": namespace
    } for cluster, namespace, _, _ in ri if cluster in oc_map.clusters()]

    return oc_map, desired_state
예제 #13
0
def fetch_data(namespaces, thread_pool_size, internal, use_jump_host):
    ri = ResourceInventory()
    settings = queries.get_app_interface_settings()
    oc_map = OC_Map(namespaces=namespaces,
                    integration=QONTRACT_INTEGRATION,
                    settings=settings,
                    internal=internal,
                    use_jump_host=use_jump_host)
    state_specs = ob.init_specs_to_fetch(ri, oc_map, namespaces=namespaces)
    threaded.run(fetch_states, state_specs, thread_pool_size, ri=ri)

    return oc_map, ri
예제 #14
0
    def test_namespaces_override_managed_type(self) -> None:
        self.namespaces[0]["managedResourceTypeOverrides"] = [{
            "resource":
            "Project",
            "override":
            "wonderful.project",
        }]

        expected = [
            sut.StateSpec(
                type="current",
                oc="stuff",
                cluster="cs1",
                namespace="ns1",
                parent=None,
                resource="LimitRanges",
                resource_names=None,
                resource_type_override=None,
            ),
            sut.StateSpec(
                type="desired",
                oc="stuff",
                cluster="cs1",
                namespace="ns1",
                resource={
                    "provider": "resource",
                    "path": "/some/path.yml"
                },
                parent=self.namespaces[0],
            ),
        ]

        self.maxDiff = None
        self.mock_callable(
            self.resource_inventory, "initialize_resource_type").for_call(
                "cs1", "ns1",
                "LimitRanges").to_return_value(None).and_assert_called_once()
        rs = sut.init_specs_to_fetch(
            self.resource_inventory,
            oc_map=self.oc_map,
            namespaces=self.namespaces,
            override_managed_types=["LimitRanges"],
        )
        self.assert_specs_match(rs, expected)
예제 #15
0
 def test_no_cluster_or_namespace(self) -> None:
     with self.assertRaises(KeyError):
         sut.init_specs_to_fetch(self.resource_inventory, self.oc_map)