В клиенте Python kubernetes команда curl возвращает вывод в str, и я ожидаю вывод в формате json - PullRequest
0 голосов
/ 15 января 2019

Я создаю программу в клиенте Python kubernetes, которая свернет URL-адрес внутри модуля и ожидает вывод в json, вместо вывода выводится в виде str. Ниже приводится моя программа:

from kubernetes import client, config, watch
from kubernetes.stream import stream
config.load_kube_config()
k8s_corev1 = client.CoreV1Api()

def run_command_inside_pod(api_instance, pod, ns, exec_command):
    api_response = stream(api_instance.connect_get_namespaced_pod_exec, pod, ns,
                          command=exec_command,
                          stderr=True, stdin=False,
                          stdout=True, tty=False)
    return api_response


def metrics_datastore_check():
    """

    :param name:
    :return:
    """
    name = "metrics-datastore-0"

    print("Waiting for pod %s to get ready." % name)
    exec_command = ['curl', '--silent', '-i', 'localhost:9200/_cluster/health?pretty']
    es_status = run_command_inside_pod(k8s_corev1,name,"default",exec_command)
    print (es_status)

    print (type(es_status))

metrics_datastore_check()

Приведенная выше программа возвращает следующий вывод:

(env) [root@ip-10-0-1-48 k8s_Client]# python2 es_pod.py 
Waiting for pod metrics-datastore-0 to get ready.
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Content-Length: 470

{
  "cluster_name" : "metrics-datastore",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

<type 'str'>

Как вы можете ясно увидеть, тип возвращаемого значения - str, и, следовательно, я не могу разобрать его должным образом с помощью инструментов json. Может ли кто-нибудь помочь мне получить этот вывод в виде dict или преобразовать этот str в dict.

1 Ответ

0 голосов
/ 15 января 2019

json.loads () -> Это анализирует строковый объект и возвращает объект json

import json
json_object = json.loads(es_status)
print(json_object['status'])
...