def test_basic(self): """ Sets up and tests dashboard, dns, storage, registry, ingress. """ print("Enabling DNS") microk8s_enable("dns") wait_for_pod_state("", "kube-system", "running", label="k8s-app=kube-dns") print("Enabling ingress") microk8s_enable("ingress") print("Validating ingress") validate_ingress() print("Disabling ingress") microk8s_disable("ingress") print("Enabling dashboard") microk8s_enable("dashboard") print("Validating dashboard") validate_dns_dashboard() print("Enabling storage") microk8s_enable("storage") print("Validating storage") validate_storage() microk8s_enable("registry") print("Validating registry") validate_registry() print("Validating Port Forward") validate_forward() print("Disabling registry") microk8s_disable("registry") print("Disabling dashboard") microk8s_disable("dashboard") print("Disabling storage") microk8s_disable("storage:destroy-storage") '''
def test_basic_s390x(self): """ Sets up and tests dashboard, dns, storage, registry, ingress, metrics server. """ ip_ranges = "8.8.8.8,1.1.1.1" print("Enabling DNS") microk8s_enable("{}:{}".format("dns", ip_ranges), timeout_insec=500) wait_for_pod_state("", "kube-system", "running", label="k8s-app=kube-dns") print("Validating DNS config") validate_coredns_config(ip_ranges) print("Enabling metrics-server") microk8s_enable("metrics-server") print("Enabling dashboard") microk8s_enable("dashboard") print("Validating dashboard") validate_dns_dashboard() print("Validating Port Forward") validate_forward() print("Validating the Metrics Server") validate_metrics_server() print("Disabling metrics-server") microk8s_disable("metrics-server") print("Disabling dashboard") microk8s_disable("dashboard")
def test_dns_dashboard(self): """ Validates dns and dashboards work. """ wait_for_pod_state("", "kube-system", "running", label="k8s-app=kube-dns") validate_dns_dashboard()
def test_basic(self): """ Sets up and tests dashboard, dns, storage, registry, ingress. """ print("Enabling DNS") microk8s_enable("dns") wait_for_pod_state("", "kube-system", "running", label="k8s-app=kube-dns") print("Enabling ingress") microk8s_enable("ingress") print("Validating ingress") validate_ingress() print("Disabling ingress") microk8s_disable("ingress") print("Enabling dashboard") microk8s_enable("dashboard") print("Validating dashboard") validate_dns_dashboard() print("Enabling storage") microk8s_enable("storage") print("Validating storage") validate_storage() microk8s_enable("registry") print("Validating registry") validate_registry() print("Validating Port Forward") validate_forward() print("Disabling registry") microk8s_disable("registry") print("Disabling dashboard") microk8s_disable("dashboard") print("Disabling storage") p = Popen("/snap/bin/microk8s.disable storage".split(), stdout=PIPE, stdin=PIPE, stderr=STDOUT) p.communicate(input=b'Y\n')[0] '''
def test_basic(self): """ Sets up and tests dashboard, dns in a two node cluster. """ if not microk8s_clustering_capable(): return validate_cluster() print("Enabling DNS") microk8s_enable("dns") wait_for_pod_state("", "kube-system", "running", label="k8s-app=kube-dns") print("Enabling dashboard") microk8s_enable("dashboard") print("Validating dashboard") validate_dns_dashboard() print("Disabling dashboard") microk8s_disable("dashboard") '''
def test_upgrade(self): """ Deploy, probe, upgrade, validate nothing broke. """ print("Testing upgrade from {} to {}".format(upgrade_from, upgrade_to)) cmd = "sudo snap install microk8s --classic --channel={}".format(upgrade_from) run_until_success(cmd) wait_for_installation() if is_container(): # In some setups (eg LXC on GCE) the hashsize nf_conntrack file under # sys is marked as rw but any update on it is failing causing kube-proxy # to fail. here = os.path.dirname(os.path.abspath(__file__)) apply_patch = os.path.join(here, "patch-kube-proxy.sh") check_call("sudo {}".format(apply_patch).split()) # Run through the validators and # select those that were valid for the original snap test_matrix = {} try: enable = microk8s_enable("dns") wait_for_pod_state("", "kube-system", "running", label="k8s-app=kube-dns") assert "Nothing to do for" not in enable enable = microk8s_enable("dashboard") assert "Nothing to do for" not in enable validate_dns_dashboard() test_matrix['dns_dashboard'] = validate_dns_dashboard except: print('Will not test dns-dashboard') try: enable = microk8s_enable("storage") assert "Nothing to do for" not in enable validate_storage() test_matrix['storage'] = validate_storage except: print('Will not test storage') try: enable = microk8s_enable("ingress") assert "Nothing to do for" not in enable validate_ingress() test_matrix['ingress'] = validate_ingress except: print('Will not test ingress') try: enable = microk8s_enable("gpu") assert "Nothing to do for" not in enable validate_gpu() test_matrix['gpu'] = validate_gpu except: print('Will not test gpu') try: enable = microk8s_enable("registry") assert "Nothing to do for" not in enable validate_registry() test_matrix['registry'] = validate_registry except: print('Will not test registry') try: validate_forward() test_matrix['forward'] = validate_forward except: print('Will not test port forward') try: enable = microk8s_enable("metrics-server") assert "Nothing to do for" not in enable validate_metrics_server() test_matrix['metrics_server'] = validate_metrics_server except: print('Will not test the metrics server') # AMD64 only tests if platform.machine() == 'x86_64' and under_time_pressure == 'False': ''' Prometheus operator on our lxc is chashlooping disabling the test for now. try: enable = microk8s_enable("prometheus", timeout_insec=30) assert "Nothing to do for" not in enable validate_prometheus() test_matrix['prometheus'] = validate_prometheus except: print('Will not test the prometheus') ''' try: enable = microk8s_enable("fluentd", timeout_insec=30) assert "Nothing to do for" not in enable validate_fluentd() test_matrix['fluentd'] = validate_fluentd except: print('Will not test the fluentd') try: enable = microk8s_enable("jaeger", timeout_insec=30) assert "Nothing to do for" not in enable validate_jaeger() test_matrix['jaeger'] = validate_jaeger except: print('Will not test the jaeger addon') # Refresh the snap to the target if upgrade_to.endswith('.snap'): cmd = "sudo snap install {} --classic --dangerous".format(upgrade_to) else: cmd = "sudo snap refresh microk8s --channel={}".format(upgrade_to) run_until_success(cmd) # Allow for the refresh to be processed time.sleep(10) wait_for_installation() # Test any validations that were valid for the original snap for test, validation in test_matrix.items(): print("Testing {}".format(test)) validation() if not is_container(): # On lxc umount docker overlay is not permitted. check_call("sudo snap remove microk8s".split())
def test_upgrade(self): """ Deploy, probe, upgrade, validate nothing broke. """ print("Testing upgrade from {} to {}".format(upgrade_from, upgrade_to)) cmd = "sudo snap install microk8s --classic --channel={}".format(upgrade_from) run_until_success(cmd) wait_for_installation() if is_container(): # In some setups (eg LXC on GCE) the hashsize nf_conntrack file under # sys is marked as rw but any update on it is failing causing kube-proxy # to fail. here = os.path.dirname(os.path.abspath(__file__)) apply_patch = os.path.join(here, "patch-kube-proxy.sh") check_call("sudo {}".format(apply_patch).split()) # Run through the validators and # select those that were valid for the original snap test_matrix = {} try: enable = microk8s_enable("dns") wait_for_pod_state("", "kube-system", "running", label="k8s-app=kube-dns") assert "Nothing to do for" not in enable enable = microk8s_enable("dashboard") assert "Nothing to do for" not in enable validate_dns_dashboard() test_matrix['dns_dashboard'] = validate_dns_dashboard except CalledProcessError: print('Will not test dns-dashboard') try: enable = microk8s_enable("storage") assert "Nothing to do for" not in enable validate_storage() test_matrix['storage'] = validate_storage except CalledProcessError: print('Will not test storage') try: enable = microk8s_enable("ingress") assert "Nothing to do for" not in enable validate_ingress() test_matrix['ingress'] = validate_ingress except CalledProcessError: print('Will not test ingress') try: enable = microk8s_enable("gpu") assert "Nothing to do for" not in enable validate_gpu() test_matrix['gpu'] = validate_gpu except CalledProcessError: print('Will not test gpu') try: enable = microk8s_enable("registry") assert "Nothing to do for" not in enable validate_registry() test_matrix['registry'] = validate_registry except CalledProcessError: print('Will not test registry') try: validate_forward() test_matrix['forward'] = validate_forward except CalledProcessError: print('Will not test port forward') try: enable = microk8s_enable("metrics-server") assert "Nothing to do for" not in enable validate_metrics_server() test_matrix['metrics_server'] = validate_metrics_server except CalledProcessError: print('Will not test the metrics server') # AMD64 only tests if platform.machine() == 'x86_64' and under_time_pressure == 'False': """ # Prometheus operator on our lxc is chashlooping disabling the test for now. try: enable = microk8s_enable("prometheus", timeout_insec=30) assert "Nothing to do for" not in enable validate_prometheus() test_matrix['prometheus'] = validate_prometheus except: print('Will not test the prometheus') # The kubeflow deployment is huge. It will not fit comfortably # with the rest of the addons on the same machine during an upgrade # we will need to find another way to test it. try: enable = microk8s_enable("kubeflow", timeout_insec=30) assert "Nothing to do for" not in enable validate_kubeflow() test_matrix['kubeflow'] = validate_kubeflow except: print('Will not test kubeflow') """ try: enable = microk8s_enable("fluentd", timeout_insec=30) assert "Nothing to do for" not in enable validate_fluentd() test_matrix['fluentd'] = validate_fluentd except CalledProcessError: print('Will not test the fluentd') try: enable = microk8s_enable("jaeger", timeout_insec=30) assert "Nothing to do for" not in enable validate_jaeger() test_matrix['jaeger'] = validate_jaeger except CalledProcessError: print('Will not test the jaeger addon') # We are not testing cilium because we want to test the upgrade of the default CNI """ try: enable = microk8s_enable("cilium", timeout_insec=300) assert "Nothing to do for" not in enable validate_cilium() test_matrix['cilium'] = validate_cilium except CalledProcessError: print('Will not test the cilium addon') """ try: ip_ranges = ( "192.168.0.105-192.168.0.105,192.168.0.110-192.168.0.111,192.168.1.240/28" ) enable = microk8s_enable("{}:{}".format("metallb", ip_ranges), timeout_insec=500) assert "MetalLB is enabled" in enable and "Nothing to do for" not in enable validate_metallb_config(ip_ranges) test_matrix['metallb'] = validate_metallb_config except CalledProcessError: print("Will not test the metallb addon") # We will not be testing multus because it takes too long for cilium and multus # to settle after the update and the multus test needs to be refactored so we do # delete and recreate the networks configured. """ try: enable = microk8s_enable("multus", timeout_insec=150) assert "Nothing to do for" not in enable validate_multus() test_matrix['multus'] = validate_multus except CalledProcessError: print('Will not test the multus addon') """ # Refresh the snap to the target if upgrade_to.endswith('.snap'): cmd = "sudo snap install {} --classic --dangerous".format(upgrade_to) else: cmd = "sudo snap refresh microk8s --channel={}".format(upgrade_to) run_until_success(cmd) # Allow for the refresh to be processed time.sleep(10) wait_for_installation() # Test any validations that were valid for the original snap for test, validation in test_matrix.items(): print("Testing {}".format(test)) validation() if not is_container(): # On lxc umount docker overlay is not permitted. check_call("sudo snap remove microk8s".split())