def test_upgrade_apply_user_lock(setup, platform, kubectl, skuba): """ Starting from an outdated cluster, check what node upgrade apply reports. """ setup_kubernetes_version(platform, skuba, kubectl, PREVIOUS_VERSION) # lock kured kubectl_cmd = ( "-n kube-system annotate ds kured weave.works/kured-node-lock=" "'{\"nodeID\":\"manual\"}'") kubectl.run_kubectl(kubectl_cmd) for role in ("master", "worker"): num_nodes = platform.get_num_nodes(role) for n in range(0, num_nodes): # disable skuba-update.timer platform.ssh_run( role, n, "sudo systemctl disable --now skuba-update.timer") assert node_is_ready(platform, kubectl, role, n) result = skuba.node_upgrade("apply", role, n) assert result.find("successfully upgraded") != -1 assert node_is_upgraded(kubectl, platform, role, n) ssh_cmd = "sudo systemctl is-enabled skuba-update.timer || :" assert platform.ssh_run(role, n, ssh_cmd).find("disabled") != -1 kubectl_cmd = (r"-n kube-system get ds/kured -o jsonpath=" r"'{.metadata.annotations.weave\.works/kured-node-lock}'") result = wait(kubectl.run_kubectl, kubectl_cmd, wait_backoff=30, wait_retries=3, wait_allow=(RuntimeError)) assert result.find("manual") != -1
def test_upgrade_plan_all_fine(setup, skuba, kubectl, platform): """ Starting from a up-to-date cluster, check what cluster/node plan report. """ setup_kubernetes_version(platform, skuba, kubectl) out = skuba.cluster_upgrade_plan() assert out.find("All nodes match the current cluster version") != -1
def test_upgrade_plan_all_fine(setup, skuba, kubectl, platform): """ Starting from a up-to-date cluster, check what cluster/node plan report. """ setup_kubernetes_version(platform, skuba, kubectl) out = skuba.cluster_upgrade_plan() assert out.find( "Congratulations! You are already at the latest version available" ) != -1
def test_upgrade_apply_from_previous(provision, platform, skuba, kubectl): """ Starting from an outdated cluster, check what node upgrade apply reports. """ setup_kubernetes_version(skuba, kubectl, PREVIOUS_VERSION) for role in ("master", "worker"): num_nodes = platform.get_num_nodes(role) for n in range(0, num_nodes): assert node_is_ready(platform, kubectl, role, n) result = skuba.node_upgrade("apply", role, n) assert result.find("successfully upgraded") != -1 assert node_is_upgraded(kubectl, platform, role, n)
def test_upgrade_plan_from_previous(setup, skuba, kubectl, platform): """ Starting from an outdated cluster, check what cluster/node plan report. """ setup_kubernetes_version(platform, skuba, kubectl, PREVIOUS_VERSION) # cluster upgrade plan out = skuba.cluster_upgrade_plan() assert out.find("Current Kubernetes cluster version: {pv}".format( pv=PREVIOUS_VERSION)) != -1 assert out.find( "Latest Kubernetes version: {cv}".format(cv=CURRENT_VERSION)) != -1 assert out.find( "Upgrade path to update from {pv} to {cv}:\n - {pv} -> {cv}".format( pv=PREVIOUS_VERSION, cv=CURRENT_VERSION)) != -1 # node upgrade plan masters = platform.get_num_nodes("master") for n in range(0, masters): master = skuba.node_upgrade("plan", "master", n) assert master.find("Current Kubernetes cluster version: {pv}".format( pv=PREVIOUS_VERSION)) assert master.find( "Latest Kubernetes version: {cv}".format(cv=CURRENT_VERSION)) != -1 assert master.find(" - apiserver: {pv} -> {cv}".format( pv=PREVIOUS_VERSION, cv=CURRENT_VERSION)) != -1 assert master.find(" - kubelet: {pv} -> {cv}".format( pv=PREVIOUS_VERSION, cv=CURRENT_VERSION)) != -1 workers = platform.get_num_nodes("worker") worker_names = platform.get_nodes_names("worker") for n in range(0, workers): worker = skuba.node_upgrade("plan", "worker", n, ignore_errors=True) # If the control plane nodes are not upgraded yet, skuba disallows upgrading a worker assert worker.find( "Unable to plan node upgrade: {} is not upgradeable until all control plane nodes are upgraded" .format(worker_names[n]))
def test_upgrade_apply_all_fine(setup, platform, skuba, kubectl): """ Starting from a up-to-date cluster, check what node upgrade apply reports. """ setup_kubernetes_version(platform, skuba, kubectl) # node upgrade apply masters = platform.get_num_nodes("master") master_names = platform.get_nodes_names("master") for n in range(0, masters): master = skuba.node_upgrade("plan", "master", n) assert master.find( f'Node {master_names[n]} is up to date' ) != -1 workers = platform.get_num_nodes("worker") workers_names = platform.get_nodes_names("worker") for n in range(0, workers): worker = skuba.node_upgrade("plan", "worker", n) assert worker.find( f'Node {workers_names[n]} is up to date' ) != -1
def test_upgrade_plan_from_previous_with_upgraded_control_plane( provision, skuba, kubectl, platform): """ Starting from an updated control plane, check what cluster/node plan report. """ setup_kubernetes_version(skuba, kubectl, PREVIOUS_VERSION) masters = platform.get_num_nodes("master") for n in range(0, masters): assert node_is_ready(platform, kubectl, "master", n) master = skuba.node_upgrade("apply", "master", n) assert master.find("successfully upgraded") != -1 assert node_is_upgraded(kubectl, platform, "master", n) workers = platform.get_num_nodes("worker") for n in range(0, workers): worker = skuba.node_upgrade("plan", "worker", n) assert worker.find("Current Kubernetes cluster version: {pv}".format( pv=PREVIOUS_VERSION)) assert worker.find( "Latest Kubernetes version: {cv}".format(cv=CURRENT_VERSION)) != -1 assert worker.find(" - kubelet: {pv} -> {cv}".format( pv=PREVIOUS_VERSION, cv=CURRENT_VERSION)) != -1