@@ -21,12 +21,14 @@ def _config_interactive_set(default_values, namespace=None, is_secret=False, suf
2121import os
2222import binascii
2323import yaml
24+ import json
2425
2526from ckan_cloud_operator import kubectl
27+ from ckan_cloud_operator import logs
2628from ckan_cloud_operator .routers import manager as routers_manager
2729
2830
29- def initialize (interactive = False , storage_suffix = None , use_existing_disk_name = None ):
31+ def initialize (interactive = False , storage_suffix = None , use_existing_disk_name = None , dry_run = False ):
3032 _config_interactive_set ({
3133 'disk-size-gb' : None ,
3234 ** ({} if storage_suffix else {'router-name' : routers_manager .get_default_infra_router_name ()})
@@ -37,11 +39,12 @@ def initialize(interactive=False, storage_suffix=None, use_existing_disk_name=No
3739 storage_suffix = storage_suffix ,
3840 use_existing_disk_name = use_existing_disk_name
3941 ),
40- storage_suffix = storage_suffix
42+ storage_suffix = storage_suffix ,
43+ dry_run = dry_run
4144 )
42- _apply_service (storage_suffix = storage_suffix )
45+ _apply_service (storage_suffix = storage_suffix , dry_run = dry_run )
4346 if not storage_suffix :
44- _update_route (storage_suffix = storage_suffix )
47+ _update_route (storage_suffix = storage_suffix , dry_run = dry_run )
4548 _set_provider ()
4649
4750
@@ -76,12 +79,13 @@ def _apply_secret(storage_suffix=None):
7679 _config_set (values = {'MINIO_ACCESS_KEY' : access_key , 'MINIO_SECRET_KEY' : secret_key }, is_secret = True , suffix = storage_suffix )
7780
7881
79- def _apply_deployment (volume_spec , storage_suffix = None ):
82+ def _apply_deployment (volume_spec , storage_suffix = None , dry_run = False ):
8083 node_selector = volume_spec .pop ('nodeSelector' , None )
8184 if node_selector :
8285 pod_scheduling = {'nodeSelector' : node_selector }
8386 else :
8487 pod_scheduling = {}
88+ container_spec_overrides = _config_get ('container-spec-overrides' , required = False , default = None , suffix = storage_suffix )
8589 kubectl .apply (kubectl .get_deployment (
8690 _get_resource_name (suffix = storage_suffix ),
8791 _get_resource_labels (for_deployment = True , suffix = storage_suffix ),
@@ -109,6 +113,7 @@ def _apply_deployment(volume_spec, storage_suffix=None):
109113 'mountPath' : '/export' ,
110114 }
111115 ],
116+ ** (json .loads (container_spec_overrides ) if container_spec_overrides else {})
112117 }
113118 ],
114119 'volumes' : [
@@ -117,10 +122,10 @@ def _apply_deployment(volume_spec, storage_suffix=None):
117122 }
118123 }
119124 }
120- ))
125+ ), dry_run = dry_run )
121126
122127
123- def _apply_service (storage_suffix = None ):
128+ def _apply_service (storage_suffix = None , dry_run = False ):
124129 kubectl .apply (kubectl .get_resource (
125130 'v1' , 'Service' ,
126131 _get_resource_name (suffix = storage_suffix ),
@@ -133,7 +138,7 @@ def _apply_service(storage_suffix=None):
133138 'app' : _get_resource_labels (for_deployment = True , suffix = storage_suffix )['app' ]
134139 }
135140 }
136- ))
141+ ), dry_run = dry_run )
137142
138143
139144def _get_or_create_volume (storage_suffix = None , use_existing_disk_name = None ):
@@ -152,21 +157,23 @@ def _get_or_create_volume(storage_suffix=None, use_existing_disk_name=None):
152157 return volume_spec
153158
154159
155- def _update_route (storage_suffix = None ):
160+ def _update_route (storage_suffix = None , dry_run = False ):
156161 backend_url_target_id = _get_backend_url_target_id (storage_suffix = storage_suffix )
157162 router_name = _config_get ('router-name' , required = True , suffix = storage_suffix )
158163 if not routers_manager .get_backend_url_routes (backend_url_target_id ):
159164 deployment_name = _get_resource_name (suffix = storage_suffix )
160165 namespace = _get_namespace ()
161- routers_manager .create_subdomain_route (
162- router_name ,
163- {
164- 'target-type' : 'backend-url' ,
165- 'target-resource-id' : backend_url_target_id ,
166- 'backend-url' : f'http://{ deployment_name } .{ namespace } :9000' ,
167- }
168- )
169- routers_manager .update (router_name , wait_ready = True )
166+ subdomain_route = {
167+ 'target-type' : 'backend-url' ,
168+ 'target-resource-id' : backend_url_target_id ,
169+ 'backend-url' : f'http://{ deployment_name } .{ namespace } :9000' ,
170+ }
171+ if dry_run :
172+ logs .info ('create_subdomain_route' , router_name , subdomain_route )
173+ else :
174+ routers_manager .create_subdomain_route (router_name , subdomain_route )
175+ if not dry_run :
176+ routers_manager .update (router_name , wait_ready = True )
170177
171178
172179def _get_namespace ():
0 commit comments