Ejemplo n.º 1
0
def upgrade_charm():
    # migrate to new flags
    if is_state('kubernetes-worker.restarted-for-cloud'):
        remove_state('kubernetes-worker.restarted-for-cloud')
        set_state('kubernetes-worker.cloud.ready')
    if is_state('kubernetes-worker.cloud-request-sent'):
        # minor change, just for consistency
        remove_state('kubernetes-worker.cloud-request-sent')
        set_state('kubernetes-worker.cloud.request-sent')

    # Trigger removal of PPA docker installation if it was previously set.
    set_state('config.changed.install_from_upstream')
    hookenv.atexit(remove_state, 'config.changed.install_from_upstream')

    cleanup_pre_snap_services()
    migrate_resource_checksums(checksum_prefix, snap_resources)
    if check_resources_for_upgrade_needed(checksum_prefix, snap_resources):
        set_upgrade_needed()

    # Remove the RC for nginx ingress if it exists
    if hookenv.config().get('ingress'):
        set_state('kubernetes-worker.remove-old-ingress')

    # Remove gpu.enabled state so we can reconfigure gpu-related kubelet flags,
    # since they can differ between k8s versions
    if is_state('kubernetes-worker.gpu.enabled'):
        remove_state('kubernetes-worker.gpu.enabled')
        try:
            disable_gpu()
        except ApplyNodeLabelFailed:
            # Removing node label failed. Probably the master is unavailable.
            # Proceed with the upgrade in hope GPUs will still be there.
            hookenv.log('Failed to remove GPU labels. Proceed with upgrade.')

    if hookenv.config('ingress'):
        set_state('kubernetes-worker.ingress.enabled')
    else:
        remove_state('kubernetes-worker.ingress.enabled')

    # force certs to be updated
    if is_state('certificates.available') and \
       is_state('kube-control.connected'):
        send_data()

    if is_state('kubernetes-worker.registry.configured'):
        set_state('kubernetes-master-worker-base.registry.configured')
        remove_state('kubernetes-worker.registry.configured')

    remove_state('kubernetes-worker.cni-plugins.installed')
    remove_state('kubernetes-worker.config.created')
    remove_state('kubernetes-worker.ingress.available')
    remove_state('worker.auth.bootstrapped')
    set_state('kubernetes-worker.restart-needed')
Ejemplo n.º 2
0
def upgrade_charm():
    # migrate to new flags
    if is_state("kubernetes-worker.restarted-for-cloud"):
        remove_state("kubernetes-worker.restarted-for-cloud")
        set_state("kubernetes-worker.cloud.ready")
    if is_state("kubernetes-worker.cloud-request-sent"):
        # minor change, just for consistency
        remove_state("kubernetes-worker.cloud-request-sent")
        set_state("kubernetes-worker.cloud.request-sent")
    if is_state("kubernetes-worker.snaps.installed"):
        # consistent with layer-kubernetes-node-base
        remove_state("kubernetes-worker.snaps.installed")
        set_state("kubernetes-node.snaps.installed")

    set_state("config.changed.install_from_upstream")
    hookenv.atexit(remove_state, "config.changed.install_from_upstream")

    cleanup_pre_snap_services()
    migrate_resource_checksums(checksum_prefix, snap_resources)
    if check_resources_for_upgrade_needed(checksum_prefix, snap_resources):
        set_upgrade_needed()

    # Remove the RC for nginx ingress if it exists
    if hookenv.config().get("ingress"):
        set_state("kubernetes-worker.remove-old-ingress")

    # Remove gpu.enabled state so we can reconfigure gpu-related kubelet flags,
    # since they can differ between k8s versions
    if is_state("kubernetes-worker.gpu.enabled"):
        remove_state("kubernetes-worker.gpu.enabled")
        try:
            disable_gpu()
        except LabelMaker.NodeLabelError:
            # Removing node label failed. Probably the control-plane is unavailable.
            # Proceed with the upgrade in hope GPUs will still be there.
            hookenv.log("Failed to remove GPU labels. Proceed with upgrade.")

    if hookenv.config("ingress"):
        set_state("kubernetes-worker.ingress.enabled")
    else:
        remove_state("kubernetes-worker.ingress.enabled")

    # force certs to be updated
    if all(
        is_state(flag)
        for flag in (
            "certificates.available",
            "kube-control.connected",
            "cni.available",
            "kube-control.dns.available",
        )
    ):
        send_data()

    if is_state("kubernetes-worker.registry.configured"):
        set_state("kubernetes-master-worker-base.registry.configured")
        remove_state("kubernetes-worker.registry.configured")

    # need to clear cni.available state if it's no longer accurate
    if is_state("cni.available"):
        cni = endpoint_from_flag("cni.available")
        if not cni.config_available():
            hookenv.log(
                "cni.config_available() is False, clearing" + " cni.available flag"
            )
            remove_state("cni.available")

    # need to bump the kube-control relation in case
    # kube-control.default_cni.available is not set when it should be
    if is_state("kube-control.connected"):
        kube_control = endpoint_from_flag("kube-control.connected")
        kube_control.manage_flags()

    shutil.rmtree("/root/cdk/kubelet/dynamic-config", ignore_errors=True)

    # kubernetes-worker.cni-plugins.installed flag is deprecated but we still
    # want to clean it up
    remove_state("kubernetes-worker.cni-plugins.installed")

    remove_state("kubernetes-worker.config.created")
    remove_state("kubernetes-worker.ingress.available")
    remove_state("worker.auth.bootstrapped")
    remove_state("nfs.configured")
    set_state("kubernetes-worker.restart-needed")