qontract-reconcile 0.10.1rc1202__py3-none-any.whl → 0.10.2.dev2__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.
Files changed (138) hide show
  1. qontract_reconcile-0.10.2.dev2.dist-info/METADATA +500 -0
  2. {qontract_reconcile-0.10.1rc1202.dist-info → qontract_reconcile-0.10.2.dev2.dist-info}/RECORD +12 -130
  3. {qontract_reconcile-0.10.1rc1202.dist-info → qontract_reconcile-0.10.2.dev2.dist-info}/WHEEL +1 -2
  4. {qontract_reconcile-0.10.1rc1202.dist-info → qontract_reconcile-0.10.2.dev2.dist-info}/entry_points.txt +1 -0
  5. reconcile/aws_account_manager/README.md +5 -0
  6. reconcile/change_owners/README.md +34 -0
  7. reconcile/glitchtip/README.md +150 -0
  8. reconcile/gql_definitions/introspection.json +51176 -0
  9. reconcile/run_integration.py +293 -0
  10. reconcile/utils/binary.py +2 -2
  11. reconcile/utils/mr/README.md +198 -0
  12. reconcile/utils/oc_map.py +2 -2
  13. tools/qontract_cli.py +0 -0
  14. qontract_reconcile-0.10.1rc1202.dist-info/METADATA +0 -64
  15. qontract_reconcile-0.10.1rc1202.dist-info/top_level.txt +0 -3
  16. reconcile/test/__init__.py +0 -0
  17. reconcile/test/conftest.py +0 -157
  18. reconcile/test/fixtures.py +0 -24
  19. reconcile/test/saas_auto_promotions_manager/__init__.py +0 -0
  20. reconcile/test/saas_auto_promotions_manager/conftest.py +0 -170
  21. reconcile/test/saas_auto_promotions_manager/merge_request_manager/__init__.py +0 -0
  22. reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/__init__.py +0 -0
  23. reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/conftest.py +0 -115
  24. reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/data_keys.py +0 -19
  25. reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_desired_state.py +0 -66
  26. reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_merge_request_manager.py +0 -86
  27. reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_mr_parser.py +0 -352
  28. reconcile/test/saas_auto_promotions_manager/merge_request_manager/merge_request_manager/test_reconciler.py +0 -494
  29. reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/__init__.py +0 -0
  30. reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/conftest.py +0 -25
  31. reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_multiple_namespaces.py +0 -37
  32. reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_single_namespace.py +0 -81
  33. reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_content_single_target.py +0 -61
  34. reconcile/test/saas_auto_promotions_manager/merge_request_manager/renderer/test_json_path_selector.py +0 -74
  35. reconcile/test/saas_auto_promotions_manager/test_integration_test.py +0 -52
  36. reconcile/test/saas_auto_promotions_manager/utils/__init__.py +0 -0
  37. reconcile/test/test_acs_notifiers.py +0 -393
  38. reconcile/test/test_acs_policies.py +0 -497
  39. reconcile/test/test_acs_rbac.py +0 -865
  40. reconcile/test/test_aggregated_list.py +0 -237
  41. reconcile/test/test_amtool.py +0 -37
  42. reconcile/test/test_aws_ami_cleanup.py +0 -230
  43. reconcile/test/test_aws_ami_share.py +0 -68
  44. reconcile/test/test_aws_cloudwatch_log_retention.py +0 -434
  45. reconcile/test/test_aws_iam_keys.py +0 -70
  46. reconcile/test/test_aws_iam_password_reset.py +0 -35
  47. reconcile/test/test_aws_support_cases_sos.py +0 -23
  48. reconcile/test/test_checkpoint.py +0 -178
  49. reconcile/test/test_cli.py +0 -41
  50. reconcile/test/test_closedbox_endpoint_monitoring.py +0 -207
  51. reconcile/test/test_dashdotdb_dora.py +0 -245
  52. reconcile/test/test_database_access_manager.py +0 -660
  53. reconcile/test/test_deadmanssnitch.py +0 -290
  54. reconcile/test/test_gabi_authorized_users.py +0 -72
  55. reconcile/test/test_gcr_mirror.py +0 -14
  56. reconcile/test/test_github_org.py +0 -156
  57. reconcile/test/test_github_repo_invites.py +0 -119
  58. reconcile/test/test_gitlab_housekeeping.py +0 -333
  59. reconcile/test/test_gitlab_labeler.py +0 -126
  60. reconcile/test/test_gitlab_members.py +0 -219
  61. reconcile/test/test_gitlab_permissions.py +0 -164
  62. reconcile/test/test_instrumented_wrappers.py +0 -18
  63. reconcile/test/test_integrations_manager.py +0 -1252
  64. reconcile/test/test_jenkins_worker_fleets.py +0 -57
  65. reconcile/test/test_jira_permissions_validator.py +0 -519
  66. reconcile/test/test_jump_host.py +0 -114
  67. reconcile/test/test_ldap_users.py +0 -125
  68. reconcile/test/test_make.py +0 -28
  69. reconcile/test/test_ocm_additional_routers.py +0 -133
  70. reconcile/test/test_ocm_clusters.py +0 -798
  71. reconcile/test/test_ocm_clusters_manifest_updates.py +0 -87
  72. reconcile/test/test_ocm_machine_pools.py +0 -1103
  73. reconcile/test/test_ocm_update_recommended_version.py +0 -145
  74. reconcile/test/test_ocm_upgrade_scheduler_org_updater.py +0 -125
  75. reconcile/test/test_openshift_base.py +0 -1269
  76. reconcile/test/test_openshift_cluster_bots.py +0 -240
  77. reconcile/test/test_openshift_namespace_labels.py +0 -344
  78. reconcile/test/test_openshift_namespaces.py +0 -256
  79. reconcile/test/test_openshift_resource.py +0 -443
  80. reconcile/test/test_openshift_resources_base.py +0 -478
  81. reconcile/test/test_openshift_saas_deploy.py +0 -188
  82. reconcile/test/test_openshift_saas_deploy_change_tester.py +0 -308
  83. reconcile/test/test_openshift_saas_deploy_trigger_cleaner.py +0 -65
  84. reconcile/test/test_openshift_serviceaccount_tokens.py +0 -282
  85. reconcile/test/test_openshift_tekton_resources.py +0 -265
  86. reconcile/test/test_openshift_upgrade_watcher.py +0 -223
  87. reconcile/test/test_prometheus_rules_tester.py +0 -151
  88. reconcile/test/test_quay_membership.py +0 -86
  89. reconcile/test/test_quay_mirror.py +0 -172
  90. reconcile/test/test_quay_mirror_org.py +0 -82
  91. reconcile/test/test_quay_repos.py +0 -59
  92. reconcile/test/test_queries.py +0 -53
  93. reconcile/test/test_repo_owners.py +0 -47
  94. reconcile/test/test_requests_sender.py +0 -139
  95. reconcile/test/test_saasherder.py +0 -1611
  96. reconcile/test/test_saasherder_allowed_secret_paths.py +0 -125
  97. reconcile/test/test_secret_reader.py +0 -153
  98. reconcile/test/test_slack_base.py +0 -183
  99. reconcile/test/test_slack_usergroups.py +0 -785
  100. reconcile/test/test_sql_query.py +0 -316
  101. reconcile/test/test_status_board.py +0 -258
  102. reconcile/test/test_terraform_aws_route53.py +0 -29
  103. reconcile/test/test_terraform_cloudflare_dns.py +0 -117
  104. reconcile/test/test_terraform_cloudflare_resources.py +0 -408
  105. reconcile/test/test_terraform_cloudflare_users.py +0 -747
  106. reconcile/test/test_terraform_repo.py +0 -440
  107. reconcile/test/test_terraform_resources.py +0 -519
  108. reconcile/test/test_terraform_tgw_attachments.py +0 -1295
  109. reconcile/test/test_terraform_users.py +0 -152
  110. reconcile/test/test_terraform_vpc_peerings.py +0 -576
  111. reconcile/test/test_terraform_vpc_peerings_build_desired_state.py +0 -1434
  112. reconcile/test/test_three_way_diff_strategy.py +0 -131
  113. reconcile/test/test_utils_jinja2.py +0 -130
  114. reconcile/test/test_vault_replication.py +0 -534
  115. reconcile/test/test_vault_utils.py +0 -47
  116. reconcile/test/test_version_bump.py +0 -18
  117. reconcile/test/test_vpc_peerings_validator.py +0 -194
  118. reconcile/test/test_wrong_region.py +0 -78
  119. release/__init__.py +0 -0
  120. release/test_version.py +0 -50
  121. release/version.py +0 -104
  122. tools/cli_commands/test/__init__.py +0 -0
  123. tools/cli_commands/test/conftest.py +0 -332
  124. tools/cli_commands/test/test_aws_cost_report.py +0 -258
  125. tools/cli_commands/test/test_cost_management_api.py +0 -326
  126. tools/cli_commands/test/test_gpg_encrypt.py +0 -235
  127. tools/cli_commands/test/test_openshift_cost_optimization_report.py +0 -255
  128. tools/cli_commands/test/test_openshift_cost_report.py +0 -295
  129. tools/cli_commands/test/test_util.py +0 -70
  130. tools/test/__init__.py +0 -0
  131. tools/test/conftest.py +0 -77
  132. tools/test/test_app_interface_metrics_exporter.py +0 -48
  133. tools/test/test_erv2.py +0 -80
  134. tools/test/test_get_container_images.py +0 -230
  135. tools/test/test_qontract_cli.py +0 -197
  136. tools/test/test_saas_promotion_state.py +0 -187
  137. tools/test/test_sd_app_sre_alert_report.py +0 -74
  138. tools/test/test_sre_checkpoints.py +0 -79
@@ -1,237 +0,0 @@
1
- import pytest
2
-
3
- from reconcile.utils.aggregated_list import (
4
- AggregatedDiffRunner,
5
- AggregatedList,
6
- )
7
-
8
-
9
- class TestAggregatedList:
10
- @staticmethod
11
- def test_add_item():
12
- alist = AggregatedList()
13
-
14
- params = {"a": 1, "b": 2}
15
- items = ["qwerty"]
16
-
17
- alist.add(params, items)
18
-
19
- assert len(alist.dump()) == 1
20
- assert alist.dump()[0]["items"] == items
21
- assert alist.dump()[0]["params"] == params
22
-
23
- @staticmethod
24
- def test_add_repeated_item():
25
- alist = AggregatedList()
26
-
27
- params = {"a": 1, "b": 2}
28
- item = "qwerty"
29
- items = [item, item]
30
-
31
- alist.add(params, items)
32
-
33
- assert len(alist.dump()) == 1
34
- assert alist.dump()[0]["items"] == [item]
35
- assert alist.dump()[0]["params"] == params
36
-
37
- @staticmethod
38
- def test_add_different_params():
39
- alist = AggregatedList()
40
-
41
- params1 = {"b": 1, "a": 2}
42
- items1 = ["qwerty1"]
43
-
44
- params2 = {"a": 1, "b": 3}
45
- items2 = ["qwerty2"]
46
-
47
- alist.add(params1, items1)
48
- alist.add(params2, items2)
49
-
50
- assert len(alist.dump()) == 2
51
-
52
- hp1 = AggregatedList.hash_params(params1)
53
- hp2 = AggregatedList.hash_params(params2)
54
-
55
- assert alist.get_by_params_hash(hp1)["items"] == items1
56
- assert alist.get_by_params_hash(hp2)["items"] == items2
57
-
58
- @staticmethod
59
- def test_get_py_params_hash():
60
- alist = AggregatedList()
61
-
62
- params1 = {"a": 1, "b": 2, "c": 3}
63
- params2 = {"b": 2, "c": 3, "a": 1}
64
- params3 = {"c": 3, "a": 1, "b": 2}
65
- params4 = {"a": 1, "c": 3, "b": 2}
66
- params5 = {"a": 1}
67
-
68
- items1 = ["qwerty1"]
69
- items2 = ["qwerty2"]
70
-
71
- alist.add(params1, items1)
72
- alist.add(params2, items1)
73
- alist.add(params3, items1)
74
- alist.add(params4, items1)
75
- alist.add(params5, items2)
76
-
77
- hp1 = AggregatedList.hash_params(params1)
78
- hp2 = AggregatedList.hash_params(params2)
79
- hp3 = AggregatedList.hash_params(params3)
80
- hp4 = AggregatedList.hash_params(params4)
81
- hp5 = AggregatedList.hash_params(params5)
82
-
83
- assert hp1 == hp2
84
- assert hp1 == hp2
85
- assert hp1 == hp3
86
- assert hp1 == hp4
87
- assert hp1 != hp5
88
-
89
- assert alist.get_by_params_hash(hp1)["items"] == items1
90
- assert alist.get_by_params_hash(hp5)["items"] == items2
91
-
92
- @staticmethod
93
- def test_diff_insert():
94
- left = AggregatedList()
95
- right = AggregatedList()
96
-
97
- right.add({"a": 1}, ["qwerty"])
98
-
99
- diff = left.diff(right)
100
-
101
- assert not diff["delete"]
102
- assert not diff["update-insert"]
103
- assert not diff["update-delete"]
104
-
105
- assert diff["insert"] == [{"params": {"a": 1}, "items": ["qwerty"]}]
106
-
107
- @staticmethod
108
- def test_diff_delete():
109
- left = AggregatedList()
110
- right = AggregatedList()
111
-
112
- left.add({"a": 1}, ["qwerty"])
113
-
114
- diff = left.diff(right)
115
-
116
- assert not diff["insert"]
117
- assert not diff["update-insert"]
118
- assert not diff["update-delete"]
119
-
120
- assert diff["delete"] == [{"params": {"a": 1}, "items": ["qwerty"]}]
121
-
122
- @staticmethod
123
- def test_diff_update_insert():
124
- left = AggregatedList()
125
- right = AggregatedList()
126
-
127
- left.add({"a": 1}, ["qwerty1"])
128
- right.add({"a": 1}, ["qwerty1", "qwerty2"])
129
-
130
- diff = left.diff(right)
131
-
132
- assert not diff["insert"]
133
- assert not diff["delete"]
134
- assert not diff["update-delete"]
135
-
136
- assert diff["update-insert"] == [{"items": ["qwerty2"], "params": {"a": 1}}]
137
-
138
- @staticmethod
139
- def test_diff_update_delete():
140
- left = AggregatedList()
141
- right = AggregatedList()
142
-
143
- left.add({"a": 1}, ["qwerty1", "qwerty2"])
144
- right.add({"a": 1}, ["qwerty1"])
145
-
146
- diff = left.diff(right)
147
-
148
- assert diff["insert"] == []
149
- assert diff["delete"] == []
150
- assert not diff["update-insert"]
151
-
152
- assert diff["update-delete"] == [{"items": ["qwerty2"], "params": {"a": 1}}]
153
-
154
-
155
- class TestAggregatedDiffRunner:
156
- @staticmethod
157
- def test_run():
158
- left = AggregatedList()
159
- right = AggregatedList()
160
-
161
- # test insert
162
- right.add({"on": "insert"}, ["i"])
163
-
164
- # test delete
165
- left.add({"on": "delete"}, ["d"])
166
-
167
- # test update-insert
168
- left.add({"on": "update-insert"}, ["ui1"])
169
- right.add({"on": "update-insert"}, ["ui1", "ui2"])
170
-
171
- # test update-delete
172
- left.add({"on": "update-delete"}, ["ud1", "ud2"])
173
- right.add({"on": "update-delete"}, ["ud1"])
174
-
175
- on_insert = []
176
- on_delete = []
177
- on_update_insert = []
178
- on_update_delete = []
179
-
180
- def recorder(ls):
181
- return lambda p, i: ls.append([p, i])
182
-
183
- runner = AggregatedDiffRunner(left.diff(right))
184
-
185
- runner.register("insert", recorder(on_insert))
186
- runner.register("delete", recorder(on_delete))
187
- runner.register("update-insert", recorder(on_update_insert))
188
- runner.register("update-delete", recorder(on_update_delete))
189
-
190
- runner.run()
191
-
192
- assert on_insert == [[{"on": "insert"}, ["i"]]]
193
- assert on_delete == [[{"on": "delete"}, ["d"]]]
194
- assert on_update_insert == [[{"on": "update-insert"}, ["ui2"]]]
195
- assert on_update_delete == [[{"on": "update-delete"}, ["ud2"]]]
196
-
197
- @staticmethod
198
- def test_run_cond_true():
199
- left = AggregatedList()
200
- right = AggregatedList()
201
-
202
- right.add({"on": "insert"}, ["qwerty"])
203
-
204
- runner = AggregatedDiffRunner(left.diff(right))
205
-
206
- recorder = []
207
- runner.register("insert", lambda p, i: recorder.append("True"), lambda p: True)
208
-
209
- runner.run()
210
-
211
- assert recorder == ["True"]
212
-
213
- @staticmethod
214
- def test_run_cond_false():
215
- left = AggregatedList()
216
- right = AggregatedList()
217
-
218
- right.add({"on": "insert"}, ["qwerty"])
219
-
220
- runner = AggregatedDiffRunner(left.diff(right))
221
-
222
- recorder = []
223
- runner.register("insert", lambda p, i: recorder.append("True"), lambda p: False)
224
-
225
- runner.run()
226
-
227
- assert not recorder
228
-
229
- @staticmethod
230
- def test_unknown_diff_on():
231
- left = AggregatedList()
232
- right = AggregatedList()
233
-
234
- runner = AggregatedDiffRunner(left.diff(right))
235
-
236
- with pytest.raises(Exception):
237
- runner.register("qwerty", lambda p, i: True, lambda p: True)
@@ -1,37 +0,0 @@
1
- import pytest
2
- import semver
3
-
4
- from reconcile.test.fixtures import Fixtures
5
- from reconcile.utils import amtool
6
-
7
-
8
- def test_minimal_version() -> None:
9
- if result := amtool.version():
10
- assert semver.VersionInfo.parse(str(result)).compare("0.24.0") >= 0
11
- else:
12
- pytest.fail(f"Error getting amtool version {result}")
13
-
14
-
15
- def test_check_good_config() -> None:
16
- am_config = Fixtures("amtool").get("alertmanager.yaml")
17
- result = amtool.check_config(am_config)
18
- assert result
19
-
20
-
21
- def test_check_bad_config() -> None:
22
- am_config = "bad: config"
23
- result = amtool.check_config(am_config)
24
- assert not result
25
-
26
-
27
- def test_config_routes_test() -> None:
28
- am_config = Fixtures("amtool").get("alertmanager.yaml")
29
- labels = {"service": "foo1"}
30
- result = amtool.config_routes_test(am_config, labels)
31
- assert result
32
- assert str(result) == "team-X-mails"
33
-
34
- labels["severity"] = "critical"
35
- result = amtool.config_routes_test(am_config, labels)
36
- assert result
37
- assert str(result) == "team-X-pager"
@@ -1,230 +0,0 @@
1
- # pylint does not consider frozen BaseModels as hashable and then complains that they cannot
2
- # be members of a set.
3
- # pylint: disable=unhashable-member
4
-
5
- from collections.abc import Generator
6
- from datetime import (
7
- datetime,
8
- timedelta,
9
- )
10
- from typing import (
11
- TYPE_CHECKING,
12
- Any,
13
- )
14
-
15
- import boto3
16
- import pytest
17
- from moto import mock_ec2
18
-
19
- from reconcile.aws_ami_cleanup.integration import (
20
- get_aws_amis,
21
- get_aws_amis_from_launch_templates,
22
- )
23
-
24
- if TYPE_CHECKING:
25
- from mypy_boto3_ec2 import EC2Client
26
- from mypy_boto3_ec2.type_defs import (
27
- CreateImageResultTypeDef,
28
- LaunchTemplateVersionTypeDef,
29
- )
30
- else:
31
- EC2Client = object
32
- CreateImageResultTypeDef = dict
33
- LaunchTemplateVersionTypeDef = dict
34
-
35
- MOTO_DEFAULT_ACCOUNT = "123456789012"
36
-
37
-
38
- @pytest.fixture
39
- def accounts() -> list[dict[str, Any]]:
40
- return [
41
- {
42
- "name": "some-account",
43
- "automationToken": {
44
- "path": "path",
45
- },
46
- "resourcesDefaultRegion": "default-region",
47
- }
48
- ]
49
-
50
-
51
- @pytest.fixture
52
- def ec2_client() -> Generator[EC2Client, None, None]:
53
- with mock_ec2():
54
- yield boto3.client("ec2", region_name="us-east-1")
55
-
56
-
57
- @pytest.fixture
58
- def rhel_image(ec2_client: EC2Client) -> CreateImageResultTypeDef:
59
- # RHEL7 ami from moto/ec2/resources/amis.json
60
- reservation = ec2_client.run_instances(
61
- ImageId="ami-bb9a6bc2", MinCount=1, MaxCount=1
62
- )
63
- instance_id = reservation["Instances"][0]["InstanceId"]
64
-
65
- return ec2_client.create_image(
66
- InstanceId=instance_id,
67
- Name="ci-int-jenkins-worker-rhel7-sha-123456",
68
- TagSpecifications=[
69
- {
70
- "ResourceType": "image",
71
- "Tags": [
72
- {"Key": "infra_commit", "Value": "sha-123456"},
73
- {"Key": "type", "Value": "ci-int-jenkins-worker-rhel7"},
74
- ],
75
- },
76
- ],
77
- )
78
-
79
-
80
- @pytest.fixture
81
- def suse_image(ec2_client: EC2Client) -> CreateImageResultTypeDef:
82
- # SUSE AMI from moto/ec2/resources/amis.json
83
- reservation = ec2_client.run_instances(
84
- ImageId="ami-35e92e4c", MinCount=1, MaxCount=1
85
- )
86
- instance_id = reservation["Instances"][0]["InstanceId"]
87
-
88
- return ec2_client.create_image(
89
- InstanceId=instance_id,
90
- Name="ci-int-jenkins-worker-suse12-sha-789012",
91
- TagSpecifications=[
92
- {
93
- "ResourceType": "image",
94
- "Tags": [
95
- {"Key": "infra_commit", "Value": "sha-789012"},
96
- {"Key": "arch", "Value": "ci-int-jenkins-worker-suse12"},
97
- ],
98
- },
99
- ],
100
- )
101
-
102
-
103
- @pytest.fixture
104
- def ubuntu_launch_template(ec2_client: EC2Client) -> LaunchTemplateVersionTypeDef:
105
- # Ubuntu AMI from moto/ec2/resources/amis.json
106
- response = ec2_client.create_launch_template(
107
- LaunchTemplateName="Ubuntu",
108
- LaunchTemplateData={
109
- "ImageId": "ami-1e749f67", # Canonical, Ubuntu, 14.04 LTS
110
- "InstanceType": "t3.micro",
111
- "SecurityGroupIds": ["sg-12345678"],
112
- },
113
- )
114
-
115
- return ec2_client.describe_launch_template_versions(
116
- LaunchTemplateId=response["LaunchTemplate"]["LaunchTemplateId"],
117
- Versions=["1"],
118
- )["LaunchTemplateVersions"][0]
119
-
120
-
121
- @pytest.fixture
122
- def suse_launch_template(ec2_client: EC2Client) -> LaunchTemplateVersionTypeDef:
123
- # SUSE AMI from moto/ec2/resources/amis.json
124
- response = ec2_client.create_launch_template(
125
- LaunchTemplateName="SUSE",
126
- LaunchTemplateData={
127
- "ImageId": "ami-35e92e4c", # SUSE Linux Enterprise Server 12 SP3
128
- "InstanceType": "t3.micro",
129
- "SecurityGroupIds": ["sg-12345678"],
130
- },
131
- )
132
-
133
- return ec2_client.describe_launch_template_versions(
134
- LaunchTemplateId=response["LaunchTemplate"]["LaunchTemplateId"],
135
- Versions=["1"],
136
- )["LaunchTemplateVersions"][0]
137
-
138
-
139
- def test_get_aws_amis_success(
140
- ec2_client: EC2Client,
141
- rhel_image: CreateImageResultTypeDef,
142
- suse_image: CreateImageResultTypeDef,
143
- ) -> None:
144
- utc_now = datetime.utcnow() + timedelta(seconds=60)
145
- amis = get_aws_amis(
146
- ec2_client=ec2_client,
147
- owner=MOTO_DEFAULT_ACCOUNT,
148
- regex="ci-int-jenkins-worker-rhel7.*",
149
- age_in_seconds=30,
150
- utc_now=utc_now,
151
- )
152
-
153
- assert len(amis) == 1
154
- assert amis[0].image_id == rhel_image["ImageId"]
155
-
156
-
157
- def test_get_aws_amis_unmatched_regex(
158
- ec2_client: EC2Client,
159
- rhel_image: CreateImageResultTypeDef,
160
- suse_image: CreateImageResultTypeDef,
161
- ) -> None:
162
- utc_now = datetime.utcnow() + timedelta(seconds=60)
163
- amis = get_aws_amis(
164
- ec2_client=ec2_client,
165
- owner=MOTO_DEFAULT_ACCOUNT,
166
- regex="ci-int-jenkins-worker-centos7.*",
167
- age_in_seconds=30,
168
- utc_now=utc_now,
169
- )
170
-
171
- assert len(amis) == 0
172
-
173
-
174
- def test_get_aws_amis_different_account(
175
- ec2_client: EC2Client,
176
- rhel_image: CreateImageResultTypeDef,
177
- suse_image: CreateImageResultTypeDef,
178
- ) -> None:
179
- utc_now = datetime.utcnow() + timedelta(seconds=60)
180
- amis = get_aws_amis(
181
- ec2_client=ec2_client,
182
- owner="789123456789",
183
- regex="ci-int-jenkins-worker-rhel7.*",
184
- age_in_seconds=30,
185
- utc_now=utc_now,
186
- )
187
-
188
- assert len(amis) == 0
189
-
190
-
191
- def test_get_aws_amis_too_young(
192
- ec2_client: EC2Client,
193
- rhel_image: CreateImageResultTypeDef,
194
- suse_image: CreateImageResultTypeDef,
195
- ) -> None:
196
- utc_now = datetime.utcnow() + timedelta(seconds=60)
197
- amis = get_aws_amis(
198
- ec2_client=ec2_client,
199
- owner=MOTO_DEFAULT_ACCOUNT,
200
- regex="ci-int-jenkins-worker-rhel7.*",
201
- age_in_seconds=90,
202
- utc_now=utc_now,
203
- )
204
-
205
- assert len(amis) == 0
206
-
207
-
208
- def test_get_aws_amis_from_launch_templates(
209
- ec2_client: EC2Client,
210
- ubuntu_launch_template: LaunchTemplateVersionTypeDef,
211
- suse_launch_template: LaunchTemplateVersionTypeDef,
212
- ) -> None:
213
- amis = get_aws_amis_from_launch_templates(ec2_client)
214
- assert amis == {
215
- ubuntu_launch_template["LaunchTemplateData"]["ImageId"],
216
- suse_launch_template["LaunchTemplateData"]["ImageId"],
217
- }
218
-
219
- # create a new ubuntu version
220
- new_ami_id = "ami-785db401" # "Canonical, Ubuntu, 16.04 LTS
221
- ec2_client.create_launch_template_version(
222
- LaunchTemplateId=ubuntu_launch_template["LaunchTemplateId"],
223
- LaunchTemplateData={"ImageId": new_ami_id},
224
- )
225
-
226
- amis = get_aws_amis_from_launch_templates(ec2_client)
227
- assert amis == {
228
- new_ami_id,
229
- suse_launch_template["LaunchTemplateData"]["ImageId"],
230
- }
@@ -1,68 +0,0 @@
1
- import pytest
2
-
3
- import reconcile.aws_ami_share as integ
4
-
5
-
6
- @pytest.fixture
7
- def accounts():
8
- return [
9
- {
10
- "name": "some-account",
11
- "automationToken": {
12
- "path": "path",
13
- },
14
- "resourcesDefaultRegion": "default-region",
15
- "sharing": [
16
- {
17
- "provider": "ami",
18
- "account": {
19
- "name": "shared-account",
20
- "uid": 123,
21
- },
22
- }
23
- ],
24
- },
25
- {
26
- "name": "some-account-too",
27
- "automationToken": {
28
- "path": "path",
29
- },
30
- "resourcesDefaultRegion": "default-region",
31
- },
32
- {
33
- "name": "shared-account",
34
- "automationToken": {
35
- "path": "path",
36
- },
37
- "resourcesDefaultRegion": "default-region",
38
- },
39
- ]
40
-
41
-
42
- def test_filter_accounts(accounts):
43
- filtered = [a["name"] for a in integ.filter_accounts(accounts)]
44
- assert filtered == ["some-account", "shared-account"]
45
-
46
-
47
- def test_get_region_share_valid():
48
- share = {"region": "valid"}
49
- src_account = {"resourcesDefaultRegion": "doesnt-matter"}
50
- dst_account = {"supportedDeploymentRegions": ["valid"]}
51
- result = integ.get_region(share, src_account, dst_account)
52
- assert result == "valid"
53
-
54
-
55
- def test_get_region_default_no_share():
56
- share = {"region": None}
57
- src_account = {"resourcesDefaultRegion": "valid"}
58
- dst_account = {"supportedDeploymentRegions": ["valid"]}
59
- result = integ.get_region(share, src_account, dst_account)
60
- assert result == "valid"
61
-
62
-
63
- def test_get_region_share_invalid():
64
- share = {"region": "invalid"}
65
- src_account = {"resourcesDefaultRegion": "doesnt-matter"}
66
- dst_account = {"name": "really", "supportedDeploymentRegions": ["valid"]}
67
- with pytest.raises(ValueError):
68
- integ.get_region(share, src_account, dst_account)