Exemplo n.º 1
0
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}}
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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')
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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