def test_extract_pod_annotation(self): vif_obj = objects.vif.VIFBase() ps = vif.PodState(default_vif=vif_obj) d = ps.obj_to_primitive() result = utils.extract_pod_annotation(d) self.assertEqual(vif.PodState.obj_name(), result.obj_name()) self.assertEqual(vif_obj, result.default_vif)
def get_pod_state(pod): try: annotations = pod['metadata']['annotations'] state_annotation = annotations[constants.K8S_ANNOTATION_VIF] except KeyError: return None state_annotation = jsonutils.loads(state_annotation) state = utils.extract_pod_annotation(state_annotation) return state
def _get_pod_state(self, pod): # TODO(ivc): same as '_set_vif' try: annotations = pod['metadata']['annotations'] state_annotation = annotations[constants.K8S_ANNOTATION_VIF] except KeyError: return None state_annotation = jsonutils.loads(state_annotation) state = utils.extract_pod_annotation(state_annotation) LOG.debug("Got VIFs from annotation: %r", state) return state
def _get_vifs(self, pod): # TODO(ivc): same as VIFHandler._get_vif try: annotations = pod['metadata']['annotations'] state_annotation = annotations[k_const.K8S_ANNOTATION_VIF] except KeyError: return {} state_annotation = jsonutils.loads(state_annotation) state = utils.extract_pod_annotation(state_annotation) vifs_dict = state.vifs LOG.debug("Got VIFs from annotation: %r", vifs_dict) return vifs_dict
def _get_in_use_ports(self): kubernetes = clients.get_kubernetes_client() in_use_ports = [] running_pods = kubernetes.get(constants.K8S_API_BASE + '/pods') for pod in running_pods['items']: try: annotations = jsonutils.loads(pod['metadata']['annotations'][ constants.K8S_ANNOTATION_VIF]) pod_state = utils.extract_pod_annotation(annotations) except KeyError: LOG.debug("Skipping pod without kuryr VIF annotation: %s", pod) else: for vif in pod_state.vifs.values(): in_use_ports.append(vif.id) return in_use_ports
def _get_pod_details(self, selflink): k8s = clients.get_kubernetes_client() pod = k8s.get(selflink) annotations = pod['metadata']['annotations'] resource_version = pod['metadata']['resourceVersion'] labels = pod['metadata'].get('labels') try: annotations = annotations[constants.K8S_ANNOTATION_VIF] state_annotation = jsonutils.loads(annotations) state = utils.extract_pod_annotation(state_annotation) except KeyError: LOG.exception("No annotations %s", constants.K8S_ANNOTATION_VIF) raise except ValueError: LOG.exception("Unable encode annotations") raise LOG.info("Got VIFs from annotation: %s", state.vifs) return state, labels, resource_version