qontract-reconcile 0.10.1rc884__py3-none-any.whl → 0.10.1rc885__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {qontract_reconcile-0.10.1rc884.dist-info → qontract_reconcile-0.10.1rc885.dist-info}/METADATA +1 -1
- {qontract_reconcile-0.10.1rc884.dist-info → qontract_reconcile-0.10.1rc885.dist-info}/RECORD +276 -276
- reconcile/acs_rbac.py +1 -2
- reconcile/aus/advanced_upgrade_service.py +14 -14
- reconcile/aus/aus_label_source.py +1 -2
- reconcile/aus/base.py +23 -26
- reconcile/aus/cluster_version_data.py +4 -4
- reconcile/aus/models.py +2 -3
- reconcile/aus/version_gate_approver.py +2 -6
- reconcile/aus/version_gates/__init__.py +1 -3
- reconcile/aus/version_gates/sts_version_gate_handler.py +2 -3
- reconcile/aws_account_manager/integration.py +2 -2
- reconcile/aws_ami_cleanup/integration.py +3 -4
- reconcile/aws_iam_password_reset.py +2 -5
- reconcile/aws_version_sync/integration.py +2 -2
- reconcile/blackbox_exporter_endpoint_monitoring.py +2 -5
- reconcile/change_owners/approver.py +4 -5
- reconcile/change_owners/bundle.py +20 -22
- reconcile/change_owners/change_types.py +23 -24
- reconcile/change_owners/changes.py +13 -16
- reconcile/change_owners/decision.py +2 -5
- reconcile/change_owners/diff.py +11 -15
- reconcile/change_owners/self_service_roles.py +1 -2
- reconcile/change_owners/tester.py +7 -10
- reconcile/checkpoint.py +2 -5
- reconcile/cli.py +9 -12
- reconcile/closedbox_endpoint_monitoring_base.py +8 -11
- reconcile/cluster_deployment_mapper.py +2 -5
- reconcile/cna/assets/asset.py +4 -7
- reconcile/cna/assets/null.py +2 -5
- reconcile/cna/integration.py +2 -3
- reconcile/cna/state.py +2 -5
- reconcile/dashdotdb_base.py +8 -11
- reconcile/dashdotdb_cso.py +3 -6
- reconcile/dashdotdb_dora.py +10 -14
- reconcile/dashdotdb_dvo.py +10 -13
- reconcile/dashdotdb_slo.py +5 -8
- reconcile/database_access_manager.py +5 -6
- reconcile/dynatrace_token_provider/integration.py +2 -5
- reconcile/external_resources/integration.py +1 -1
- reconcile/external_resources/manager.py +4 -4
- reconcile/external_resources/model.py +3 -3
- reconcile/external_resources/secrets_sync.py +5 -5
- reconcile/external_resources/state.py +5 -5
- reconcile/gabi_authorized_users.py +3 -6
- reconcile/gcr_mirror.py +1 -1
- reconcile/github_org.py +1 -3
- reconcile/github_repo_invites.py +2 -5
- reconcile/gitlab_housekeeping.py +7 -11
- reconcile/gitlab_labeler.py +1 -2
- reconcile/gitlab_members.py +2 -5
- reconcile/gitlab_permissions.py +1 -3
- reconcile/glitchtip/integration.py +2 -5
- reconcile/glitchtip_project_alerts/integration.py +3 -6
- reconcile/glitchtip_project_dsn/integration.py +4 -7
- reconcile/integrations_manager.py +5 -8
- reconcile/jenkins/types.py +5 -6
- reconcile/jenkins_job_builder.py +9 -12
- reconcile/jenkins_roles.py +1 -1
- reconcile/jira_watcher.py +2 -2
- reconcile/ldap_groups/integration.py +2 -5
- reconcile/ocm/types.py +21 -26
- reconcile/ocm_addons_upgrade_tests_trigger.py +3 -6
- reconcile/ocm_clusters.py +8 -8
- reconcile/ocm_internal_notifications/integration.py +1 -2
- reconcile/ocm_labels/integration.py +2 -5
- reconcile/ocm_machine_pools.py +11 -15
- reconcile/ocm_upgrade_scheduler_org_updater.py +2 -5
- reconcile/openshift_base.py +27 -29
- reconcile/openshift_groups.py +15 -20
- reconcile/openshift_namespace_labels.py +8 -14
- reconcile/openshift_namespaces.py +5 -8
- reconcile/openshift_network_policies.py +2 -4
- reconcile/openshift_resources_base.py +19 -29
- reconcile/openshift_saas_deploy.py +9 -10
- reconcile/openshift_saas_deploy_change_tester.py +7 -10
- reconcile/openshift_saas_deploy_trigger_base.py +4 -7
- reconcile/openshift_saas_deploy_trigger_cleaner.py +5 -8
- reconcile/openshift_saas_deploy_trigger_configs.py +1 -2
- reconcile/openshift_saas_deploy_trigger_images.py +1 -2
- reconcile/openshift_saas_deploy_trigger_moving_commits.py +1 -2
- reconcile/openshift_saas_deploy_trigger_upstream_jobs.py +1 -2
- reconcile/openshift_tekton_resources.py +7 -11
- reconcile/openshift_upgrade_watcher.py +10 -13
- reconcile/openshift_users.py +8 -11
- reconcile/oum/base.py +3 -4
- reconcile/oum/labelset.py +1 -2
- reconcile/oum/metrics.py +2 -2
- reconcile/oum/models.py +1 -2
- reconcile/oum/standalone.py +2 -3
- reconcile/prometheus_rules_tester/integration.py +6 -9
- reconcile/quay_membership.py +1 -2
- reconcile/quay_mirror.py +12 -13
- reconcile/quay_mirror_org.py +10 -10
- reconcile/queries.py +4 -7
- reconcile/resource_scraper.py +3 -4
- reconcile/rhidp/common.py +2 -2
- reconcile/saas_auto_promotions_manager/integration.py +5 -6
- reconcile/saas_auto_promotions_manager/merge_request_manager/batcher.py +1 -2
- reconcile/saas_auto_promotions_manager/publisher.py +5 -6
- reconcile/saas_auto_promotions_manager/subscriber.py +3 -4
- reconcile/saas_file_validator.py +2 -5
- reconcile/signalfx_endpoint_monitoring.py +2 -5
- reconcile/skupper_network/integration.py +3 -6
- reconcile/skupper_network/models.py +3 -5
- reconcile/slack_base.py +4 -7
- reconcile/slack_usergroups.py +15 -17
- reconcile/sql_query.py +5 -9
- reconcile/status_board.py +4 -5
- reconcile/statuspage/atlassian.py +14 -15
- reconcile/statuspage/integrations/maintenances.py +3 -3
- reconcile/statuspage/page.py +8 -8
- reconcile/statuspage/state.py +4 -5
- reconcile/statuspage/status.py +7 -8
- reconcile/templating/lib/rendering.py +8 -8
- reconcile/templating/renderer.py +10 -11
- reconcile/templating/validator.py +4 -4
- reconcile/terraform_aws_route53.py +3 -6
- reconcile/terraform_cloudflare_dns.py +9 -12
- reconcile/terraform_cloudflare_resources.py +9 -11
- reconcile/terraform_cloudflare_users.py +8 -11
- reconcile/terraform_init/integration.py +2 -2
- reconcile/terraform_repo.py +11 -14
- reconcile/terraform_resources.py +20 -21
- reconcile/terraform_tgw_attachments.py +32 -36
- reconcile/terraform_users.py +6 -7
- reconcile/terraform_vpc_resources/integration.py +5 -5
- reconcile/test/conftest.py +7 -10
- reconcile/test/fixtures.py +1 -1
- reconcile/test/saas_auto_promotions_manager/conftest.py +2 -2
- reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/conftest.py +2 -2
- reconcile/test/test_database_access_manager.py +3 -6
- reconcile/test/test_gitlab_labeler.py +2 -5
- reconcile/test/test_jump_host.py +5 -8
- reconcile/test/test_ocm_machine_pools.py +1 -4
- reconcile/test/test_openshift_base.py +3 -6
- reconcile/test/test_openshift_cluster_bots.py +5 -5
- reconcile/test/test_openshift_namespace_labels.py +2 -3
- reconcile/test/test_openshift_saas_deploy_trigger_cleaner.py +2 -2
- reconcile/test/test_saasherder.py +9 -12
- reconcile/test/test_slack_base.py +4 -6
- reconcile/test/test_status_board.py +4 -7
- reconcile/test/test_terraform_tgw_attachments.py +14 -20
- reconcile/typed_queries/alerting_services_settings.py +1 -2
- reconcile/typed_queries/app_interface_custom_messages.py +2 -3
- reconcile/typed_queries/app_interface_deadmanssnitch_settings.py +1 -3
- reconcile/typed_queries/app_interface_repo_url.py +1 -2
- reconcile/typed_queries/app_interface_state_settings.py +1 -3
- reconcile/typed_queries/app_interface_vault_settings.py +1 -2
- reconcile/typed_queries/aws_vpc_requests.py +1 -3
- reconcile/typed_queries/aws_vpcs.py +1 -3
- reconcile/typed_queries/clusters.py +2 -4
- reconcile/typed_queries/clusters_minimal.py +1 -3
- reconcile/typed_queries/clusters_with_dms.py +1 -3
- reconcile/typed_queries/external_resources.py +3 -4
- reconcile/typed_queries/pagerduty_instances.py +1 -2
- reconcile/typed_queries/repos.py +2 -3
- reconcile/typed_queries/reserved_networks.py +1 -3
- reconcile/typed_queries/saas_files.py +49 -59
- reconcile/typed_queries/slo_documents.py +1 -3
- reconcile/typed_queries/status_board.py +3 -7
- reconcile/typed_queries/tekton_pipeline_providers.py +1 -2
- reconcile/typed_queries/terraform_namespaces.py +1 -2
- reconcile/typed_queries/terraform_tgw_attachments/aws_accounts.py +1 -3
- reconcile/utils/acs/base.py +2 -3
- reconcile/utils/acs/notifiers.py +3 -3
- reconcile/utils/acs/policies.py +3 -3
- reconcile/utils/aggregated_list.py +1 -1
- reconcile/utils/amtool.py +1 -2
- reconcile/utils/aws_api.py +28 -31
- reconcile/utils/binary.py +1 -3
- reconcile/utils/clusterhealth/providerbase.py +1 -2
- reconcile/utils/clusterhealth/telemeter.py +2 -2
- reconcile/utils/deadmanssnitch_api.py +1 -2
- reconcile/utils/disabled_integrations.py +4 -6
- reconcile/utils/environ.py +1 -1
- reconcile/utils/expiration.py +3 -7
- reconcile/utils/external_resource_spec.py +3 -4
- reconcile/utils/external_resources.py +4 -7
- reconcile/utils/filtering.py +1 -2
- reconcile/utils/git.py +3 -9
- reconcile/utils/git_secrets.py +5 -5
- reconcile/utils/github_api.py +5 -9
- reconcile/utils/gitlab_api.py +2 -3
- reconcile/utils/glitchtip/client.py +2 -4
- reconcile/utils/glitchtip/models.py +8 -11
- reconcile/utils/gql.py +26 -35
- reconcile/utils/grouping.py +1 -3
- reconcile/utils/imap_client.py +2 -5
- reconcile/utils/internal_groups/client.py +1 -2
- reconcile/utils/internal_groups/models.py +8 -9
- reconcile/utils/jenkins_api.py +4 -4
- reconcile/utils/jinja2/extensions.py +1 -1
- reconcile/utils/jinja2/filters.py +4 -4
- reconcile/utils/jinja2/utils.py +16 -16
- reconcile/utils/jira_client.py +10 -11
- reconcile/utils/jjb_client.py +14 -17
- reconcile/utils/jobcontroller/controller.py +5 -5
- reconcile/utils/jobcontroller/models.py +2 -2
- reconcile/utils/jsonpath.py +4 -5
- reconcile/utils/jump_host.py +7 -8
- reconcile/utils/keycloak.py +3 -7
- reconcile/utils/ldap_client.py +2 -3
- reconcile/utils/lean_terraform_client.py +13 -17
- reconcile/utils/membershipsources/app_interface_resolver.py +1 -1
- reconcile/utils/membershipsources/models.py +19 -22
- reconcile/utils/metrics.py +13 -15
- reconcile/utils/mr/base.py +7 -11
- reconcile/utils/mr/glitchtip_access_reporter.py +2 -2
- reconcile/utils/mr/notificator.py +1 -2
- reconcile/utils/oc.py +32 -38
- reconcile/utils/oc_connection_parameters.py +24 -25
- reconcile/utils/oc_filters.py +2 -3
- reconcile/utils/oc_map.py +9 -15
- reconcile/utils/ocm/addons.py +7 -10
- reconcile/utils/ocm/base.py +38 -39
- reconcile/utils/ocm/clusters.py +6 -9
- reconcile/utils/ocm/label_sources.py +1 -2
- reconcile/utils/ocm/labels.py +3 -6
- reconcile/utils/ocm/ocm.py +11 -14
- reconcile/utils/ocm/products.py +1 -3
- reconcile/utils/ocm/search_filters.py +16 -17
- reconcile/utils/ocm/service_log.py +2 -3
- reconcile/utils/ocm/sre_capability_labels.py +4 -8
- reconcile/utils/ocm/subscriptions.py +1 -3
- reconcile/utils/ocm/syncsets.py +2 -4
- reconcile/utils/ocm/upgrades.py +5 -9
- reconcile/utils/ocm_base_client.py +13 -16
- reconcile/utils/openshift_resource.py +5 -11
- reconcile/utils/output.py +2 -3
- reconcile/utils/pagerduty_api.py +4 -5
- reconcile/utils/prometheus.py +2 -2
- reconcile/utils/promotion_state.py +4 -5
- reconcile/utils/promtool.py +2 -8
- reconcile/utils/quay_api.py +12 -22
- reconcile/utils/raw_github_api.py +3 -5
- reconcile/utils/rosa/rosa_cli.py +6 -6
- reconcile/utils/rosa/session.py +6 -7
- reconcile/utils/runtime/desired_state_diff.py +3 -8
- reconcile/utils/runtime/environment.py +4 -7
- reconcile/utils/runtime/integration.py +4 -4
- reconcile/utils/runtime/meta.py +1 -2
- reconcile/utils/runtime/runner.py +7 -10
- reconcile/utils/runtime/sharding.py +22 -27
- reconcile/utils/saasherder/interfaces.py +63 -69
- reconcile/utils/saasherder/models.py +30 -35
- reconcile/utils/saasherder/saasherder.py +37 -53
- reconcile/utils/secret_reader.py +17 -19
- reconcile/utils/slack_api.py +15 -17
- reconcile/utils/smtp_client.py +1 -2
- reconcile/utils/sqs_gateway.py +1 -3
- reconcile/utils/state.py +1 -2
- reconcile/utils/terraform/config_client.py +4 -5
- reconcile/utils/terraform_client.py +3 -8
- reconcile/utils/terrascript/cloudflare_client.py +4 -10
- reconcile/utils/terrascript/cloudflare_resources.py +10 -13
- reconcile/utils/terrascript/models.py +2 -3
- reconcile/utils/terrascript/resources.py +1 -2
- reconcile/utils/terrascript_aws_client.py +30 -38
- reconcile/utils/unleash/client.py +4 -7
- reconcile/utils/unleash/server.py +2 -2
- reconcile/utils/vault.py +8 -11
- reconcile/utils/vaultsecretref.py +2 -3
- reconcile/utils/vcs.py +7 -8
- reconcile/vault_replication.py +4 -8
- reconcile/vpc_peerings_validator.py +4 -9
- release/version.py +6 -7
- tools/app_interface_reporter.py +2 -2
- tools/cli_commands/gpg_encrypt.py +3 -6
- tools/cli_commands/systems_and_tools.py +4 -7
- tools/qontract_cli.py +12 -17
- tools/template_validation.py +1 -1
- tools/test/conftest.py +3 -6
- {qontract_reconcile-0.10.1rc884.dist-info → qontract_reconcile-0.10.1rc885.dist-info}/WHEEL +0 -0
- {qontract_reconcile-0.10.1rc884.dist-info → qontract_reconcile-0.10.1rc885.dist-info}/entry_points.txt +0 -0
- {qontract_reconcile-0.10.1rc884.dist-info → qontract_reconcile-0.10.1rc885.dist-info}/top_level.txt +0 -0
@@ -4,10 +4,7 @@ from collections.abc import (
|
|
4
4
|
Callable,
|
5
5
|
Iterable,
|
6
6
|
)
|
7
|
-
from typing import
|
8
|
-
Any,
|
9
|
-
Optional,
|
10
|
-
)
|
7
|
+
from typing import Any
|
11
8
|
from urllib.parse import urlencode
|
12
9
|
|
13
10
|
from reconcile import jira_permissions_validator
|
@@ -46,7 +43,7 @@ ProjectStates = dict[str, Project]
|
|
46
43
|
|
47
44
|
|
48
45
|
class GlitchtipProjectAlertsIntegrationParams(PydanticRunParams):
|
49
|
-
instance:
|
46
|
+
instance: str | None = None
|
50
47
|
|
51
48
|
|
52
49
|
def webhook_urls_are_unique(alerts: Iterable[ProjectAlert]) -> bool:
|
@@ -70,7 +67,7 @@ class GlitchtipProjectAlertsIntegration(
|
|
70
67
|
def name(self) -> str:
|
71
68
|
return QONTRACT_INTEGRATION
|
72
69
|
|
73
|
-
def get_early_exit_desired_state(self) ->
|
70
|
+
def get_early_exit_desired_state(self) -> dict[str, Any] | None:
|
74
71
|
return {"projects": [c.dict() for c in self.get_projects(gql.get_api().query)]}
|
75
72
|
|
76
73
|
def get_projects(self, query_func: Callable) -> list[GlitchtipProjectV1]:
|
@@ -3,10 +3,7 @@ from collections.abc import (
|
|
3
3
|
Callable,
|
4
4
|
Iterable,
|
5
5
|
)
|
6
|
-
from typing import
|
7
|
-
Any,
|
8
|
-
Optional,
|
9
|
-
)
|
6
|
+
from typing import Any
|
10
7
|
|
11
8
|
from sretoolbox.utils import threaded
|
12
9
|
|
@@ -169,10 +166,10 @@ def projects_query(query_func: Callable) -> list[GlitchtipProjectV1]:
|
|
169
166
|
def run(
|
170
167
|
dry_run: bool,
|
171
168
|
thread_pool_size: int = 10,
|
172
|
-
internal:
|
169
|
+
internal: bool | None = None,
|
173
170
|
use_jump_host: bool = True,
|
174
|
-
instance:
|
175
|
-
defer:
|
171
|
+
instance: str | None = None,
|
172
|
+
defer: Callable | None = None,
|
176
173
|
) -> None:
|
177
174
|
# settings
|
178
175
|
vault_settings = get_app_interface_vault_settings()
|
@@ -6,10 +6,7 @@ from collections.abc import (
|
|
6
6
|
Mapping,
|
7
7
|
Sequence,
|
8
8
|
)
|
9
|
-
from typing import
|
10
|
-
Any,
|
11
|
-
Optional,
|
12
|
-
)
|
9
|
+
from typing import Any
|
13
10
|
|
14
11
|
from github import Github
|
15
12
|
from pydantic import BaseModel
|
@@ -76,7 +73,7 @@ def collect_parameters(
|
|
76
73
|
environment: EnvironmentV1,
|
77
74
|
upstream: str,
|
78
75
|
image: str,
|
79
|
-
image_tag_from_ref:
|
76
|
+
image_tag_from_ref: Mapping[str, str] | None,
|
80
77
|
) -> dict[str, Any]:
|
81
78
|
parameters: dict[str, Any] = {}
|
82
79
|
if environment.parameters:
|
@@ -180,7 +177,7 @@ def construct_oc_resources(
|
|
180
177
|
integrations_environment: IntegrationsEnvironment,
|
181
178
|
upstream: str,
|
182
179
|
image: str,
|
183
|
-
image_tag_from_ref:
|
180
|
+
image_tag_from_ref: Mapping[str, str] | None,
|
184
181
|
) -> list[OpenshiftResource]:
|
185
182
|
# Generate the openshift template with the helm chart. The resulting template
|
186
183
|
# contains all the integrations in the environment
|
@@ -213,7 +210,7 @@ def fetch_desired_state(
|
|
213
210
|
ri: ResourceInventory,
|
214
211
|
upstream: str,
|
215
212
|
image: str,
|
216
|
-
image_tag_from_ref:
|
213
|
+
image_tag_from_ref: Mapping[str, str] | None,
|
217
214
|
):
|
218
215
|
for ie in integrations_environments:
|
219
216
|
oc_resources = construct_oc_resources(ie, upstream, image, image_tag_from_ref)
|
@@ -224,7 +221,7 @@ def fetch_desired_state(
|
|
224
221
|
|
225
222
|
|
226
223
|
def filter_integrations(
|
227
|
-
integrations: Iterable[IntegrationV1], upstream:
|
224
|
+
integrations: Iterable[IntegrationV1], upstream: str | None = None
|
228
225
|
) -> list[IntegrationV1]:
|
229
226
|
if upstream is None:
|
230
227
|
return list(integrations)
|
reconcile/jenkins/types.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
from enum import Enum
|
4
|
-
from typing import Optional
|
5
4
|
|
6
5
|
from pydantic import (
|
7
6
|
BaseModel,
|
@@ -22,11 +21,11 @@ class SSHHostKeyVerificationStrategy(Enum):
|
|
22
21
|
|
23
22
|
class SSHConnector(BaseModel):
|
24
23
|
credentials_id: str = Field(..., alias="credentialsId")
|
25
|
-
launch_timeout_seconds:
|
26
|
-
max_num_retries:
|
27
|
-
retry_wait_time:
|
28
|
-
port:
|
29
|
-
jvm_options:
|
24
|
+
launch_timeout_seconds: int | None = Field(None, alias="launchTimeoutSeconds")
|
25
|
+
max_num_retries: int | None = Field(None, alias="maxNumRetries")
|
26
|
+
retry_wait_time: int | None = Field(None, alias="retryWaitTime")
|
27
|
+
port: int | None = 22
|
28
|
+
jvm_options: str | None = Field(None, alias="jvmOptions")
|
30
29
|
ssh_host_key_verification_strategy: SSHHostKeyVerificationStrategy = Field(
|
31
30
|
SSHHostKeyVerificationStrategy.NON_VERIFYING_KEY_VERIFICATION_STRATEGY,
|
32
31
|
alias="sshHostKeyVerificationStrategy",
|
reconcile/jenkins_job_builder.py
CHANGED
@@ -1,10 +1,7 @@
|
|
1
1
|
import logging
|
2
2
|
import sys
|
3
3
|
from collections.abc import Callable
|
4
|
-
from typing import
|
5
|
-
Any,
|
6
|
-
Optional,
|
7
|
-
)
|
4
|
+
from typing import Any
|
8
5
|
|
9
6
|
from reconcile import queries
|
10
7
|
from reconcile.utils.defer import defer
|
@@ -20,7 +17,7 @@ GENERATE_TYPE = ["jobs", "views"]
|
|
20
17
|
|
21
18
|
|
22
19
|
def collect_configs(
|
23
|
-
instance_name:
|
20
|
+
instance_name: str | None, config_name: str | None
|
24
21
|
) -> list[dict[str, Any]]:
|
25
22
|
configs = queries.get_jenkins_configs()
|
26
23
|
if instance_name is not None:
|
@@ -41,8 +38,8 @@ def collect_configs(
|
|
41
38
|
|
42
39
|
def init_jjb(
|
43
40
|
secret_reader: SecretReaderBase,
|
44
|
-
instance_name:
|
45
|
-
config_name:
|
41
|
+
instance_name: str | None = None,
|
42
|
+
config_name: str | None = None,
|
46
43
|
print_only: bool = False,
|
47
44
|
) -> JJB:
|
48
45
|
configs = collect_configs(instance_name, config_name)
|
@@ -66,7 +63,7 @@ def validate_repos_and_admins(jjb: JJB):
|
|
66
63
|
)
|
67
64
|
unknown_admins = [a for a in jjb_admins if a not in github_usernames]
|
68
65
|
for a in unknown_admins:
|
69
|
-
logging.warning("admin is missing from users: {}"
|
66
|
+
logging.warning(f"admin is missing from users: {a}")
|
70
67
|
if missing_repos:
|
71
68
|
sys.exit(1)
|
72
69
|
|
@@ -76,10 +73,10 @@ def run(
|
|
76
73
|
dry_run: bool,
|
77
74
|
io_dir: str = "throughput/",
|
78
75
|
print_only: bool = False,
|
79
|
-
config_name:
|
80
|
-
job_name:
|
81
|
-
instance_name:
|
82
|
-
defer:
|
76
|
+
config_name: str | None = None,
|
77
|
+
job_name: str | None = None,
|
78
|
+
instance_name: str | None = None,
|
79
|
+
defer: Callable | None = None,
|
83
80
|
) -> None:
|
84
81
|
if not print_only and config_name is not None:
|
85
82
|
raise Exception("--config-name must works with --print-only mode")
|
reconcile/jenkins_roles.py
CHANGED
@@ -170,7 +170,7 @@ def act(diff, jenkins_map):
|
|
170
170
|
elif action == "unassign_role_from_user":
|
171
171
|
jenkins_map[instance].unassign_role_from_user(role, user)
|
172
172
|
else:
|
173
|
-
raise Exception("invalid action: {}"
|
173
|
+
raise Exception(f"invalid action: {action}")
|
174
174
|
|
175
175
|
|
176
176
|
def run(dry_run):
|
reconcile/jira_watcher.py
CHANGED
@@ -34,8 +34,8 @@ def format_message(server, key, data, event, previous_state=None, current_state=
|
|
34
34
|
if previous_state and current_state
|
35
35
|
else ""
|
36
36
|
)
|
37
|
-
url = "{}/browse/{}"
|
38
|
-
return "{} ({}) {}{}"
|
37
|
+
url = f"{server}/browse/{key}"
|
38
|
+
return f"{url} ({summary}) {event}{info}"
|
39
39
|
|
40
40
|
|
41
41
|
def calculate_diff(server, current_state, previous_state):
|
@@ -3,10 +3,7 @@ from collections.abc import (
|
|
3
3
|
Callable,
|
4
4
|
Iterable,
|
5
5
|
)
|
6
|
-
from typing import
|
7
|
-
Any,
|
8
|
-
Optional,
|
9
|
-
)
|
6
|
+
from typing import Any
|
10
7
|
|
11
8
|
from reconcile.gql_definitions.ldap_groups.roles import RoleV1
|
12
9
|
from reconcile.gql_definitions.ldap_groups.roles import query as roles_query
|
@@ -62,7 +59,7 @@ class LdapGroupsIntegration(QontractReconcileIntegration[LdapGroupsIntegrationPa
|
|
62
59
|
return {"roles": [c.dict() for c in self.get_roles(query_func)]}
|
63
60
|
|
64
61
|
@defer
|
65
|
-
def run(self, dry_run: bool, defer:
|
62
|
+
def run(self, dry_run: bool, defer: Callable | None = None) -> None:
|
66
63
|
"""Run the integration."""
|
67
64
|
gql_api = gql.get_api()
|
68
65
|
roles = self.get_roles(gql_api.query)
|
reconcile/ocm/types.py
CHANGED
@@ -1,10 +1,5 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
|
-
from typing import (
|
4
|
-
Optional,
|
5
|
-
Union,
|
6
|
-
)
|
7
|
-
|
8
3
|
from pydantic import (
|
9
4
|
BaseModel,
|
10
5
|
Extra,
|
@@ -18,29 +13,29 @@ class OCMClusterAutoscale(BaseModel):
|
|
18
13
|
|
19
14
|
|
20
15
|
class OCMClusterNetwork(BaseModel):
|
21
|
-
type:
|
16
|
+
type: str | None
|
22
17
|
vpc: str
|
23
18
|
service: str
|
24
19
|
pod: str
|
25
20
|
|
26
21
|
|
27
22
|
class OCMClusterSpec(BaseModel):
|
28
|
-
autoscale:
|
23
|
+
autoscale: OCMClusterAutoscale | None
|
29
24
|
channel: str
|
30
|
-
disable_user_workload_monitoring:
|
31
|
-
external_id:
|
32
|
-
id:
|
33
|
-
instance_type:
|
34
|
-
multi_az:
|
35
|
-
nodes:
|
25
|
+
disable_user_workload_monitoring: bool | None
|
26
|
+
external_id: str | None
|
27
|
+
id: str | None
|
28
|
+
instance_type: str | None
|
29
|
+
multi_az: bool | None
|
30
|
+
nodes: int | None
|
36
31
|
private: bool
|
37
32
|
product: str
|
38
33
|
provider: str
|
39
|
-
provision_shard_id:
|
34
|
+
provision_shard_id: str | None
|
40
35
|
region: str
|
41
|
-
initial_version:
|
36
|
+
initial_version: str | None
|
42
37
|
version: str
|
43
|
-
hypershift:
|
38
|
+
hypershift: bool | None
|
44
39
|
|
45
40
|
class Config:
|
46
41
|
extra = Extra.forbid
|
@@ -57,7 +52,7 @@ class OSDClusterSpec(OCMClusterSpec):
|
|
57
52
|
class ROSAOcmAwsStsAttrs(BaseModel):
|
58
53
|
installer_role_arn: str
|
59
54
|
support_role_arn: str
|
60
|
-
controlplane_role_arn:
|
55
|
+
controlplane_role_arn: str | None
|
61
56
|
worker_role_arn: str
|
62
57
|
|
63
58
|
class Config:
|
@@ -66,7 +61,7 @@ class ROSAOcmAwsStsAttrs(BaseModel):
|
|
66
61
|
|
67
62
|
class ROSAOcmAwsAttrs(BaseModel):
|
68
63
|
creator_role_arn: str
|
69
|
-
sts:
|
64
|
+
sts: ROSAOcmAwsStsAttrs | None
|
70
65
|
|
71
66
|
class Config:
|
72
67
|
extra = Extra.forbid
|
@@ -82,9 +77,9 @@ class ROSAClusterAWSAccount(BaseModel):
|
|
82
77
|
|
83
78
|
class ROSAClusterSpec(OCMClusterSpec):
|
84
79
|
account: ROSAClusterAWSAccount
|
85
|
-
subnet_ids:
|
86
|
-
availability_zones:
|
87
|
-
oidc_endpoint_url:
|
80
|
+
subnet_ids: list[str] | None
|
81
|
+
availability_zones: list[str] | None
|
82
|
+
oidc_endpoint_url: str | None
|
88
83
|
|
89
84
|
class Config:
|
90
85
|
extra = Extra.forbid
|
@@ -93,18 +88,18 @@ class ROSAClusterSpec(OCMClusterSpec):
|
|
93
88
|
class ClusterMachinePool(BaseModel):
|
94
89
|
id: str
|
95
90
|
instance_type: str
|
96
|
-
replicas:
|
97
|
-
autoscale:
|
91
|
+
replicas: int | None
|
92
|
+
autoscale: OCMClusterAutoscale | None
|
98
93
|
|
99
94
|
|
100
95
|
class OCMSpec(BaseModel):
|
101
|
-
path:
|
102
|
-
spec:
|
96
|
+
path: str | None
|
97
|
+
spec: OSDClusterSpec | ROSAClusterSpec | OCMClusterSpec
|
103
98
|
machine_pools: list[ClusterMachinePool] = Field(
|
104
99
|
default_factory=list, alias="machinePools"
|
105
100
|
)
|
106
101
|
network: OCMClusterNetwork
|
107
|
-
domain:
|
102
|
+
domain: str | None
|
108
103
|
server_url: str = Field("", alias="serverUrl")
|
109
104
|
console_url: str = Field("", alias="consoleUrl")
|
110
105
|
elb_fqdn: str = Field("", alias="elbFQDN")
|
@@ -1,8 +1,5 @@
|
|
1
1
|
import logging
|
2
|
-
from
|
3
|
-
Callable,
|
4
|
-
Optional,
|
5
|
-
)
|
2
|
+
from collections.abc import Callable
|
6
3
|
|
7
4
|
from reconcile import queries
|
8
5
|
from reconcile.typed_queries.app_interface_vault_settings import (
|
@@ -18,7 +15,7 @@ QONTRACT_INTEGRATION = "ocm-addons-upgrade-tests-trigger"
|
|
18
15
|
|
19
16
|
|
20
17
|
@defer
|
21
|
-
def run(dry_run: bool, defer:
|
18
|
+
def run(dry_run: bool, defer: Callable | None = None) -> None:
|
22
19
|
settings = queries.get_app_interface_settings()
|
23
20
|
vault_settings = get_app_interface_vault_settings()
|
24
21
|
secret_reader = create_secret_reader(use_vault=vault_settings.vault)
|
@@ -40,7 +37,7 @@ def run(dry_run: bool, defer: Optional[Callable] = None) -> None:
|
|
40
37
|
)
|
41
38
|
|
42
39
|
ocm = ocm_map[ocm_name]
|
43
|
-
state_updates: dict[str,
|
40
|
+
state_updates: dict[str, str | None] = {}
|
44
41
|
for aut in addon_upgrade_tests:
|
45
42
|
addon_name = aut["addon"]["name"]
|
46
43
|
addon_org_version = None
|
reconcile/ocm_clusters.py
CHANGED
@@ -4,7 +4,7 @@ from collections.abc import (
|
|
4
4
|
Iterable,
|
5
5
|
Mapping,
|
6
6
|
)
|
7
|
-
from typing import Any
|
7
|
+
from typing import Any
|
8
8
|
|
9
9
|
import reconcile.utils.mr.clusters_updates as cu
|
10
10
|
import reconcile.utils.ocm as ocmmod
|
@@ -283,7 +283,7 @@ def get_cluster_ocm_update_spec(
|
|
283
283
|
|
284
284
|
|
285
285
|
def _app_interface_updates_mr(
|
286
|
-
clusters_updates: Mapping[str, Any], gitlab_project_id:
|
286
|
+
clusters_updates: Mapping[str, Any], gitlab_project_id: str | None, dry_run: bool
|
287
287
|
):
|
288
288
|
"""Creates an MR to app-interface with the necessary cluster manifest updates
|
289
289
|
|
@@ -318,15 +318,15 @@ def _cluster_is_compatible(cluster: Mapping[str, Any]) -> bool:
|
|
318
318
|
|
319
319
|
|
320
320
|
class OcmClustersParams(PydanticRunParams):
|
321
|
-
gitlab_project_id:
|
321
|
+
gitlab_project_id: str | None = None
|
322
322
|
thread_pool_size: int = 10
|
323
323
|
|
324
324
|
# rosa job controller params
|
325
|
-
job_controller_cluster:
|
326
|
-
job_controller_namespace:
|
327
|
-
rosa_job_service_account:
|
328
|
-
rosa_role:
|
329
|
-
rosa_job_image:
|
325
|
+
job_controller_cluster: str | None = None
|
326
|
+
job_controller_namespace: str | None = None
|
327
|
+
rosa_job_service_account: str | None = None
|
328
|
+
rosa_role: str | None = None
|
329
|
+
rosa_job_image: str | None = None
|
330
330
|
|
331
331
|
|
332
332
|
class OcmClusters(QontractReconcileIntegration[OcmClustersParams]):
|
@@ -5,7 +5,6 @@ from collections.abc import (
|
|
5
5
|
Callable,
|
6
6
|
)
|
7
7
|
from functools import lru_cache
|
8
|
-
from typing import Optional
|
9
8
|
|
10
9
|
from reconcile.gql_definitions.common.ocm_environments import (
|
11
10
|
query as ocm_environment_query,
|
@@ -48,7 +47,7 @@ class OcmInternalNotifications(QontractReconcileIntegration[NoParams]):
|
|
48
47
|
@lru_cache
|
49
48
|
def slack_get_user_id_by_name(
|
50
49
|
self, user_name: str, mail_address: str
|
51
|
-
) ->
|
50
|
+
) -> str | None:
|
52
51
|
try:
|
53
52
|
return self.slack.get_user_id_by_name(
|
54
53
|
user_name=user_name, mail_address=mail_address
|
@@ -5,10 +5,7 @@ from collections.abc import (
|
|
5
5
|
Callable,
|
6
6
|
Iterable,
|
7
7
|
)
|
8
|
-
from typing import
|
9
|
-
Any,
|
10
|
-
Optional,
|
11
|
-
)
|
8
|
+
from typing import Any
|
12
9
|
|
13
10
|
from deepdiff import DeepHash
|
14
11
|
from pydantic import validator
|
@@ -124,7 +121,7 @@ class OcmLabelsIntegration(QontractReconcileIntegration[OcmLabelsIntegrationPara
|
|
124
121
|
init_aus_cluster_label_source(query_func),
|
125
122
|
]
|
126
123
|
|
127
|
-
def get_early_exit_desired_state(self) ->
|
124
|
+
def get_early_exit_desired_state(self) -> dict[str, Any] | None:
|
128
125
|
gqlapi = gql.get_api()
|
129
126
|
desired = {
|
130
127
|
"org_labels": self.fetch_desired_state(
|
reconcile/ocm_machine_pools.py
CHANGED
@@ -3,12 +3,8 @@ from abc import (
|
|
3
3
|
ABC,
|
4
4
|
abstractmethod,
|
5
5
|
)
|
6
|
-
from collections.abc import Mapping
|
6
|
+
from collections.abc import Iterable, Mapping
|
7
7
|
from enum import Enum
|
8
|
-
from typing import (
|
9
|
-
Iterable,
|
10
|
-
Optional,
|
11
|
-
)
|
12
8
|
|
13
9
|
from pydantic import (
|
14
10
|
BaseModel,
|
@@ -100,12 +96,12 @@ class AbstractPool(ABC, BaseModel):
|
|
100
96
|
# Abstract class for machine pools, to be implemented by OSD/HyperShift classes
|
101
97
|
|
102
98
|
id: str
|
103
|
-
replicas:
|
104
|
-
taints:
|
105
|
-
labels:
|
99
|
+
replicas: int | None
|
100
|
+
taints: list[Mapping[str, str]] | None
|
101
|
+
labels: Mapping[str, str] | None
|
106
102
|
cluster: str
|
107
103
|
cluster_type: ClusterType = Field(..., exclude=True)
|
108
|
-
autoscaling:
|
104
|
+
autoscaling: AbstractAutoscaling | None
|
109
105
|
|
110
106
|
@root_validator()
|
111
107
|
@classmethod
|
@@ -131,7 +127,7 @@ class AbstractPool(ABC, BaseModel):
|
|
131
127
|
pass
|
132
128
|
|
133
129
|
@abstractmethod
|
134
|
-
def invalid_diff(self, pool: ClusterMachinePoolV1) ->
|
130
|
+
def invalid_diff(self, pool: ClusterMachinePoolV1) -> str | None:
|
135
131
|
pass
|
136
132
|
|
137
133
|
@abstractmethod
|
@@ -184,7 +180,7 @@ class MachinePool(AbstractPool):
|
|
184
180
|
or self._has_diff_autoscale(pool)
|
185
181
|
)
|
186
182
|
|
187
|
-
def invalid_diff(self, pool: ClusterMachinePoolV1) ->
|
183
|
+
def invalid_diff(self, pool: ClusterMachinePoolV1) -> str | None:
|
188
184
|
if self.instance_type != pool.instance_type:
|
189
185
|
return "instance_type"
|
190
186
|
return None
|
@@ -203,7 +199,7 @@ class MachinePool(AbstractPool):
|
|
203
199
|
cluster: str,
|
204
200
|
cluster_type: ClusterType,
|
205
201
|
):
|
206
|
-
autoscaling:
|
202
|
+
autoscaling: MachinePoolAutoscaling | None = None
|
207
203
|
if pool.autoscale:
|
208
204
|
autoscaling = MachinePoolAutoscaling(
|
209
205
|
min_replicas=pool.autoscale.min_replicas,
|
@@ -229,7 +225,7 @@ class NodePool(AbstractPool):
|
|
229
225
|
# Node pool, used for HyperShift clusters
|
230
226
|
|
231
227
|
aws_node_pool: AWSNodePool
|
232
|
-
subnet:
|
228
|
+
subnet: str | None
|
233
229
|
|
234
230
|
def delete(self, ocm: OCM) -> None:
|
235
231
|
ocm.delete_node_pool(self.cluster, self.dict(by_alias=True))
|
@@ -266,7 +262,7 @@ class NodePool(AbstractPool):
|
|
266
262
|
or self._has_diff_autoscale(pool)
|
267
263
|
)
|
268
264
|
|
269
|
-
def invalid_diff(self, pool: ClusterMachinePoolV1) ->
|
265
|
+
def invalid_diff(self, pool: ClusterMachinePoolV1) -> str | None:
|
270
266
|
if self.aws_node_pool.instance_type != pool.instance_type:
|
271
267
|
return "instance_type"
|
272
268
|
if self.subnet != pool.subnet:
|
@@ -283,7 +279,7 @@ class NodePool(AbstractPool):
|
|
283
279
|
cluster: str,
|
284
280
|
cluster_type: ClusterType,
|
285
281
|
):
|
286
|
-
autoscaling:
|
282
|
+
autoscaling: NodePoolAutoscaling | None = None
|
287
283
|
if pool.autoscale:
|
288
284
|
autoscaling = NodePoolAutoscaling(
|
289
285
|
min_replica=pool.autoscale.min_replicas,
|
@@ -1,9 +1,6 @@
|
|
1
1
|
import json
|
2
2
|
import logging
|
3
|
-
from typing import
|
4
|
-
Any,
|
5
|
-
Optional,
|
6
|
-
)
|
3
|
+
from typing import Any
|
7
4
|
|
8
5
|
import yaml
|
9
6
|
|
@@ -25,7 +22,7 @@ def render_policy(
|
|
25
22
|
template: dict[str, Any],
|
26
23
|
cluster_spec: OCMSpec,
|
27
24
|
labels: dict[str, str],
|
28
|
-
settings:
|
25
|
+
settings: dict[str, Any] | None = None,
|
29
26
|
) -> dict[str, Any]:
|
30
27
|
body = template["path"]["content"]
|
31
28
|
type = template.get("type") or "jinja2"
|