def test_clusterinit_update_pod_with_init_container(): pod_passed = k8sclient.V1Pod( metadata=k8sclient.V1ObjectMeta(annotations={}), spec=k8sclient.V1PodSpec( containers=[k8sclient.V1Container(name="cmk")]), status=k8sclient.V1PodStatus()).to_dict() cmd = "cmd" cmk_img = "cmk_img" cmk_img_pol = "policy" args = "argument" clusterinit.update_pod_with_init_container(pod_passed, cmd, cmk_img, cmk_img_pol, args) pods = json.loads(pod_passed["metadata"]["annotations"] ["pod.beta.kubernetes.io/init-containers"]) assert len(pods) == 1 assert pods[0]["name"] == cmd assert pods[0]["image"] == cmk_img assert pods[0]["imagePullPolicy"] == cmk_img_pol assert args in pods[0]["args"] second_cmd = "cmd2" second_img = cmk_img second_img_pol = "Always" second_args = ["arg1", "arg2"] clusterinit.update_pod_with_init_container(pod_passed, second_cmd, second_img, second_img_pol, second_args) pods = json.loads(pod_passed["metadata"]["annotations"] ["pod.beta.kubernetes.io/init-containers"]) assert len(pods) == 2
def test_pod_containers_pod_without_node(self) -> None: pod = client.V1Pod( status=client.V1PodStatus(container_statuses=None, )) container_info_api_list = pod_containers(pod) self.assertEqual(container_info_api_list, {})
def create_pod_object(name: str = "default", imagename: str = None, labels: {} = None, state: str = "running", namespace: str = "default", node_name='node1') -> k8sClient.V1Pod: container_state = k8sClient.V1ContainerState(running=MagicMock()) if state == "terminated": container_state = k8sClient.V1ContainerState(terminated=MagicMock()) image = k8sClient.V1ContainerImage(names=[imagename]) container_status = k8sClient.V1ContainerStatus(state=container_state, image=image, image_id="fakeimage", name="fakename", ready="True", restart_count=0) condition = k8sClient.V1PodCondition(type="Ready", status=[container_status]) status = k8sClient.V1PodStatus(conditions=[condition], container_statuses=[container_status]) container = k8sClient.V1Container(image=image, name="fakename1") spec = k8sClient.V1PodSpec(containers=[container], node_name=node_name) metadata = k8sClient.V1ObjectMeta(name=name, labels=labels, namespace=namespace) node = k8sClient.V1Pod(status=status, spec=spec, metadata=metadata) return node
def test_pod_status_evicted_pod() -> None: client_pod_status = client.V1PodStatus( conditions=None, container_statuses=None, ephemeral_container_statuses=None, host_ip=None, init_container_statuses=None, message="The node was low on resource: ephemeral-storage. Container " "grafana-sc-dashboard was using 4864Ki, which exceeds its request " "of 0. Container grafana was using 2112Ki, which exceeds its " "request of 0. Container grafana-sc-datasources was using 1280Ki, " "which exceeds its request of 0. ", nominated_node_name=None, phase="Failed", pod_i_ps=None, pod_ip=None, qos_class=None, reason="Evicted", start_time=datetime.datetime(2022, 5, 23, 5, 43, 57, tzinfo=tzutc()), ) client_pod = client.V1Pod(status=client_pod_status) assert pod_status(client_pod) == api.PodStatus( conditions=None, phase=api.Phase.FAILED, start_time=api.Timestamp(1653284637.0), host_ip=None, pod_ip=None, qos_class=None, )
def test_filterIpedWorkers(self): status = client.V1PodStatus(host_ip="1.2.3.4", pod_ip='6.7.8.9') metadata = client.V1ObjectMeta(name='notipedworker-myname') spec = client.V1PodSpec(node_name='sardcloudXX', containers=[]) pods = [client.V1Pod(status=status, metadata=metadata, spec=spec)] podList = client.V1PodList(items=pods) workers: List[IPEDWorker] = _listWorkers(podList) self.assertEqual(len(workers), 0)
def _generate_pod(name, labels, phase=PodPhases.succeeded): terminated_container_state = client.V1ContainerStateTerminated( finished_at=datetime.now(timezone.utc), exit_code=0 ) container_state = client.V1ContainerState(terminated=terminated_container_state) container_status = client.V1ContainerStatus( state=container_state, image="must/provide:image", image_id="must-provide-image-id", name="must-provide-name", ready=True, restart_count=0, ) status = client.V1PodStatus(phase=phase, container_statuses=[container_status]) metadata = client.V1ObjectMeta( name=name, labels=labels, namespace=get_k8s().resolve_namespace() ) pod = client.V1Pod(metadata=metadata, status=status) return pod
def test_parse_pod_info_pod_without_node(self) -> None: pod = client.V1Pod( spec=client.V1PodSpec( host_network=None, node_name=None, containers=[ client.V1Container(name="non_scheduled_container", ), ], ), status=client.V1PodStatus( host_ip=None, pod_ip=None, qos_class="BestEffort", ), ) pod_spec_api = parse_pod_info(pod) assert pod_spec_api.pod_ip is None assert pod_spec_api.node is None
def _generate_pod(namespace, pod): terminated_container_state = client.V1ContainerStateTerminated( finished_at=datetime.now(timezone.utc), exit_code=0) container_state = client.V1ContainerState( terminated=terminated_container_state) container_status = client.V1ContainerStatus( state=container_state, image=self.image_name, image_id="must-provide-image-id", name=self.name, ready=True, restart_count=0, ) status = client.V1PodStatus(phase=PodPhases.succeeded, container_statuses=[container_status]) response_pod = deepcopy(pod) response_pod.status = status response_pod.metadata.name = "test-pod" response_pod.metadata.namespace = namespace return response_pod
def test_list1IpedWorker(self): state = client.V1ContainerState(running=None) containerStatus = client.V1ContainerStatus(image='image', image_id='1', name='2', ready=True, restart_count=0, state=state) status = client.V1PodStatus(host_ip="1.2.3.4", pod_ip='6.7.8.9', container_statuses=[containerStatus]) metadata = client.V1ObjectMeta(name='ipedworker-myname') spec = client.V1PodSpec(node_name='sardcloudXX', containers=[]) pods = [client.V1Pod(status=status, metadata=metadata, spec=spec)] podList = client.V1PodList(items=pods) workers: List[IPEDWorker] = _listWorkers(podList) self.assertEqual(len(workers), 1) w0: IPEDWorker = workers[0] self.assertEqual(w0.name, "ipedworker-myname") self.assertEqual(w0.host_ip, "1.2.3.4") self.assertEqual(w0.pod_ip, "6.7.8.9") self.assertEqual(w0.node_name, "sardcloudXX") self.assertEqual(w0.ready, True) self.assertEqual(w0.image, 'image')
def test_pod_containers_start_up(self) -> None: """ In this specific instance all of the fields expect for the scheduled field are missing. """ pod = client.V1Pod(status=client.V1PodStatus(container_statuses=[ client.V1ContainerStatus( name="unready_container", ready=False, restart_count=0, container_id=None, image="gcr.io/kuar-demo/kuard-amd64:blue", image_id="", state=client.V1ContainerState( running=None, terminated=None, waiting=client.V1ContainerStateWaiting( message=None, reason="ContainerCreating"), ), ) ], ), ) self.assertEqual( pod_containers(pod), { "unready_container": api.ContainerInfo( id=None, name="unready_container", image="gcr.io/kuar-demo/kuard-amd64:blue", ready=False, state=api.ContainerWaitingState(type="waiting", reason="ContainerCreating", detail=None), restart_count=0, ) }, )
def _mock_executor_pod(self, phase): return client.V1Pod(status=client.V1PodStatus(phase=phase))
assert hasattr(service.spec, 'ports') assert isinstance(service.spec.ports, list) assert len(service.spec.ports) == 2 assert isinstance(service.spec.ports[0], client.V1ServicePort) assert service.spec.ports[0].name == 'memcached' assert service.spec.ports[0].port == 11211 assert service.spec.ports[0].protocol == 'TCP' assert isinstance(service.spec.ports[1], client.V1ServicePort) assert service.spec.ports[1].name == 'metrics' assert service.spec.ports[1].port == 9150 assert service.spec.ports[1].protocol == 'TCP' TEST_POD_1 = client.V1Pod(status=client.V1PodStatus(pod_ip='1.1.1.1')) TEST_POD_2 = client.V1Pod(status=client.V1PodStatus(pod_ip='2.2.2.2')) TEST_SERVER_LIST = [TEST_POD_1, TEST_POD_2] class TestGetMemcachedDeploymentObject(): def setUp(self): self.name = 'testname123' self.namespace = 'testnamespace456' self.cluster_object = {'metadata': {'name': self.name, 'namespace': self.namespace}} def test_returns_v1beta1_deployment(self): deployment = get_memcached_deployment_object(self.cluster_object) assert isinstance(deployment, client.AppsV1beta1Deployment)
def fake_pod_error(): return client.V1Pod(api_version='v1', kind='Pod', metadata=client.V1ObjectMeta(name='curry-test001', namespace='curryns'), status=client.V1PodStatus(phase='Terminated', ))