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
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" }], )
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)
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, )
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)
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)
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)
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
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
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)
def test_no_cluster_or_namespace(self) -> None: with self.assertRaises(KeyError): sut.init_specs_to_fetch(self.resource_inventory, self.oc_map)