예제 #1
0
def get_resource(list_resources: Callable[[], Any], log: BoundLogger,
                 resource_type: str, resource_name: str) -> Optional[Any]:
    log.msg('Checking for existing {}'.format(resource_type),
            name=resource_name)
    resource_list = list_resources()
    matching_resources = [
        d for d in resource_list.items if d.metadata.name == resource_name
    ]
    if len(matching_resources) > 2:
        raise ValueError('Found {} {}s matching `{}`'.format(
            len(matching_resources), resource_type, resource_name))
    if not matching_resources:
        return None
    return matching_resources[0]
예제 #2
0
def upsert_resource(existing_resource: Optional[Any], target_resource: Any,
                    log: BoundLogger, resource_type: str,
                    create: Callable[[], Any], patch: Callable[[],
                                                               Any]) -> Any:
    if existing_resource is not None:
        if comparisons.specs_are_the_same(existing_resource, target_resource):
            log.msg('Existing {} does not need to be updated'.format(
                resource_type),
                    name=existing_resource.metadata.name)
            new_resource = existing_resource
        else:
            log.msg('Updating existing {}'.format(resource_type))
            new_resource = patch()
            log.msg('Updated {}'.format(resource_type),
                    name=new_resource.metadata.name)
    else:
        log.msg('Creating new {}'.format(resource_type))
        new_resource = create()
        log.msg('Created {}'.format(resource_type),
                name=new_resource.metadata.name)
    return new_resource
예제 #3
0
파일: systems.py 프로젝트: interuss/dss
def delete_resources(existing_resources: List[Any], namespace: V1Namespace,
                     clients: Clients, log: BoundLogger):
    for existing_resource in existing_resources:
        if existing_resource is None:
            pass
        elif existing_resource.__class__ == V1Deployment:
            log.msg('Deleting deployment')
            status = clients.apps.delete_namespaced_deployment(
                name=existing_resource.metadata.name,
                namespace=namespace.metadata.name)
            log.msg('Deployment deleted', message=status.message)
        elif existing_resource.__class__ == V1Ingress:
            log.msg('Deleting ingress')
            status = clients.networking.delete_namespaced_ingress(
                name=existing_resource.metadata.name,
                namespace=namespace.metadata.name)
            log.msg('Ingress deleted', message=status.message)
        elif existing_resource.__class__ == V1Namespace:
            log.msg('Deleting namespace')
            status = clients.core.delete_namespace(
                name=namespace.metadata.name)
            log.msg('Namespace deleted', name=status.message)
        elif existing_resource.__class__ == V1Service:
            log.msg('Deleting service')
            svc = clients.core.delete_namespaced_service(
                name=existing_resource.metadata.name,
                namespace=namespace.metadata.name)
            log.msg('Service deleted', message=svc.metadata.name)
        else:
            raise NotImplementedError(
                'Deleting {} is not yet supported'.format(
                    existing_resource.__class__))