|
14 | 14 | from cwm_worker_operator.daemon import Daemon
|
15 | 15 | from cwm_worker_operator.domains_config import DomainsConfig
|
16 | 16 | from cwm_worker_operator.multiprocessor import Multiprocessor
|
| 17 | +from cwm_worker_operator.deployments_manager import DeploymentsManager |
17 | 18 |
|
18 | 19 |
|
19 | 20 | DATETIME_FORMAT = '%Y%m%dT%H%M%S%z'
|
@@ -49,14 +50,14 @@ def check_update_release(domains_config, updater_metrics, namespace_name, last_u
|
49 | 50 | domains_config.set_worker_force_delete(worker_id, allow_cancel=False)
|
50 | 51 | if updater_metrics:
|
51 | 52 | updater_metrics.force_delete(worker_id, start_time)
|
52 |
| - elif instance_update == 'update': |
53 |
| - msg = "domain force update (from cwm updates api)" |
| 53 | + elif instance_update in ('update', 'create'): |
| 54 | + msg = f"domain force {instance_update} (from cwm updates api)" |
54 | 55 | logs.debug(msg, debug_verbosity=4, worker_id=worker_id, start_time=start_time)
|
55 | 56 | domains_config.set_worker_force_update(worker_id)
|
56 | 57 | if updater_metrics:
|
57 | 58 | updater_metrics.not_deployed_force_update(worker_id, start_time)
|
58 | 59 | else:
|
59 |
| - hours_since_last_update = (common.now() - last_updated).total_seconds() / 60 / 60 |
| 60 | + hours_since_last_update = ((common.now() - last_updated).total_seconds() / 60 / 60) |
60 | 61 | volume_config = domains_config.get_cwm_api_volume_config(worker_id=worker_id)
|
61 | 62 | disable_force_delete = volume_config.disable_force_delete
|
62 | 63 | disable_force_update = volume_config.disable_force_update
|
@@ -150,12 +151,14 @@ def get_instances_updates(domains_config: DomainsConfig, cwm_api_manager: CwmApi
|
150 | 151 |
|
151 | 152 | def update(namespace_name, last_updated, status, revision,
|
152 | 153 | worker_id, instance_update, start_time,
|
153 |
| - cwm_api_manager=None, domains_config=None, updater_metrics=None): |
| 154 | + cwm_api_manager=None, domains_config=None, updater_metrics=None, deployments_manager=None): |
154 | 155 | if not domains_config:
|
155 | 156 | domains_config = DomainsConfig()
|
156 | 157 | if not cwm_api_manager:
|
157 | 158 | cwm_api_manager = CwmApiManager()
|
158 |
| - last_updated = get_datetime_object(last_updated) |
| 159 | + if not deployments_manager: |
| 160 | + deployments_manager = DeploymentsManager() |
| 161 | + last_updated = get_datetime_object(last_updated) if last_updated else None |
159 | 162 | start_time = get_datetime_object(start_time)
|
160 | 163 | check_update_release(domains_config, updater_metrics, namespace_name, last_updated, status, revision,
|
161 | 164 | instance_update, worker_id, start_time)
|
@@ -196,19 +199,27 @@ def run_single_iteration(domains_config, metrics, deployments_manager, cwm_api_m
|
196 | 199 | multiprocessor = UpdaterMultiprocessor(config.UPDATER_MAX_PARALLEL_DEPLOY_PROCESSES if is_async else 1)
|
197 | 200 | updater_metrics = metrics
|
198 | 201 | instances_updates = get_instances_updates(domains_config, cwm_api_manager)
|
199 |
| - all_releases = {release["namespace"]: release for release in deployments_manager.iterate_all_releases()} |
200 |
| - for release in all_releases.values(): |
201 |
| - namespace_name = release["namespace"] |
202 |
| - datestr, timestr, *_ = release["updated"].split(" ") |
203 |
| - last_updated = common.strptime("{}T{}".format(datestr, timestr.split(".")[0]), "%Y-%m-%dT%H:%M:%S") |
204 |
| - status = release["status"] |
205 |
| - # app_version = release["app_version"] |
206 |
| - revision = int(release["revision"]) |
207 |
| - start_time = common.now() |
208 |
| - worker_id = common.get_worker_id_from_namespace_name(namespace_name) |
209 |
| - instance_update = instances_updates.get(worker_id) |
210 |
| - multiprocessor.process(domains_config, updater_metrics, namespace_name, last_updated, status, revision, |
211 |
| - worker_id, instance_update, start_time, cwm_api_manager) |
| 202 | + updated_instances = set() |
| 203 | + # all_releases = {release["namespace"]: release for release in deployments_manager.iterate_all_releases()} |
| 204 | + # for release in all_releases.values(): |
| 205 | + # updated_instances.add(namespace_name) |
| 206 | + # namespace_name = release["namespace"] |
| 207 | + # datestr, timestr, *_ = release["updated"].split(" ") |
| 208 | + # last_updated = common.strptime("{}T{}".format(datestr, timestr.split(".")[0]), "%Y-%m-%dT%H:%M:%S") |
| 209 | + # status = release["status"] |
| 210 | + # # app_version = release["app_version"] |
| 211 | + # revision = int(release["revision"]) |
| 212 | + # start_time = common.now() |
| 213 | + # worker_id = common.get_worker_id_from_namespace_name(namespace_name) |
| 214 | + # instance_update = instances_updates.get(worker_id) |
| 215 | + # multiprocessor.process(domains_config, updater_metrics, namespace_name, last_updated, status, revision, |
| 216 | + # worker_id, instance_update, start_time, cwm_api_manager) |
| 217 | + for namespace_name, operation in instances_updates.items(): |
| 218 | + if operation == 'update' and namespace_name not in updated_instances: |
| 219 | + start_time = common.now() |
| 220 | + worker_id = common.get_worker_id_from_namespace_name(namespace_name) |
| 221 | + multiprocessor.process(domains_config, updater_metrics, namespace_name, None, None, None, |
| 222 | + worker_id, 'create', start_time, cwm_api_manager) |
212 | 223 | multiprocessor.finalize()
|
213 | 224 |
|
214 | 225 |
|
|
0 commit comments