def get_or_create_multi_user_volume_claim(label_suffixes): assert len(label_suffixes) > 0, 'must provide some labels to identify the volume' claim_labels = labels_manager.get_resource_labels(label_suffixes=dict( label_suffixes, **_get_cluster_volume_label_suffixes() )) pvcs = kubectl.get_items_by_labels('PersistentVolumeClaim', claim_labels, required=False) if len(pvcs) > 0: assert len(pvcs) == 1 claim_name = pvcs[0]['metadata']['name'] else: storage_class_name = get_multi_user_storage_class_name() claim_name = 'cc' + _generate_password(12) logs.info(f'Creating persistent volume claim: {claim_name}') logs.info(f'labels: {claim_labels}') kubectl.apply(kubectl.get_persistent_volume_claim( claim_name, claim_labels, { 'storageClassName': storage_class_name, 'accessModes': ['ReadWriteMany'], 'resources': { 'requests': { 'storage': '1Mi' } } } )) return {'persistentVolumeClaim': {'claimName': claim_name}}
def get_app_instance_routes(app_instance_id, edit=False): labels = {'ckan-cloud/route-app-instance-id': app_instance_id} if edit: kubectl.edit_items_by_labels('CkanCloudRoute', labels) else: return kubectl.get_items_by_labels('CkanCloudRoute', labels, required=False)
def get_backend_url_routes(target_resorce_id, edit=False): labels = {'ckan-cloud/route-target-resource-id': target_resorce_id} if edit: kubectl.edit_items_by_labels('CkanCloudRoute', labels) else: return kubectl.get_items_by_labels('CkanCloudRoute', labels, required=False)
def get_datapusher_routes(datapusher_name, edit=False): labels = {'ckan-cloud/route-datapusher-name': datapusher_name} if edit: kubectl.edit_items_by_labels('CkanCloudRoute', labels) else: return kubectl.get_items_by_labels('CkanCloudRoute', labels, required=False)
def delete(router_name): print(f'Deleting traefik router {router_name}') if all([ kubectl.call(f'delete --ignore-not-found -l ckan-cloud/router-name={router_name} deployment') == 0, kubectl.call(f'delete --ignore-not-found -l ckan-cloud/router-name={router_name} service') == 0, kubectl.call(f'delete --ignore-not-found -l ckan-cloud/router-name={router_name} secret') == 0, kubectl.call(f'delete --ignore-not-found -l ckan-cloud/router-name={router_name} configmap') == 0, kubectl.call(f'delete --ignore-not-found -l ckan-cloud/router-name={router_name} PersistentVolumeClaim') == 0, kubectl.call(f'delete --ignore-not-found -l ckan-cloud/router-name={router_name} CkanCloudRoute') == 0, kubectl.call(f'delete --ignore-not-found CkanCloudRouter {router_name}') == 0, ]): print('Removing finalizers') success = True routes = kubectl.get_items_by_labels('CkanCloudRoute', {'ckan-cloud/router-name': router_name}, required=False) if not routes: routes = [] for route in routes: route_name = route['metadata']['name'] if kubectl.call( f'patch CkanCloudRoute {route_name} -p \'{{"metadata":{{"finalizers":[]}}}}\' --type=merge', ) != 0: success = False if kubectl.get(f'CkanCloudRouter {router_name}', required=False): if kubectl.call( f'patch CkanCloudRouter {router_name} -p \'{{"metadata":{{"finalizers":[]}}}}\' --type=merge', ) != 0: success = False assert success else: raise Exception('Deletion failed')
def get_domain_routes(root_domain=None, sub_domain=None): if not root_domain or root_domain == get_default_root_domain(): root_domain = 'default' assert sub_domain or root_domain != 'default', 'cannot delete all routes from default root domain' labels = {'ckan-cloud/route-root-domain': root_domain} if sub_domain: labels['ckan-cloud/route-sub-domain']: sub_domain return kubectl.get_items_by_labels('CkanCloudRoute', labels, required=False)
def list(router_labels): routes = kubectl.get_items_by_labels('CkanCloudRoute', router_labels, required=False) logs.debug_verbose(router_labels=router_labels, routes=routes) _routes = [] if routes: for route in routes: route = get_module(route).get_route(route) logs.debug_verbose(route=route) _routes.append(route) return _routes