From 9e0830538ba0fc5663e4ae506932508594670f2c Mon Sep 17 00:00:00 2001 From: Bryan Moyles Date: Wed, 14 Mar 2018 11:39:43 -0400 Subject: [PATCH 1/3] Guard access to containerStatuses by checking if the key exists. --- src/kubernetes.cc | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/kubernetes.cc b/src/kubernetes.cc index eabb2c5c..7450aad1 100644 --- a/src/kubernetes.cc +++ b/src/kubernetes.cc @@ -401,15 +401,18 @@ KubernetesReader::GetPodAndContainerMetadata( const json::Object* status = pod->Get("status"); const json::Array* container_specs = spec->Get("containers"); - const json::Array* container_statuses = - status->Get("containerStatuses"); // Move the container statuses into a map from name to status. std::map container_status_by_name; - for (const json::value& c_status : *container_statuses) { - const json::Object* container_status = c_status->As(); - const std::string name = container_status->Get("name"); - container_status_by_name.emplace(name, container_status); + if (status->Has("containerStatuses")) { + const json::Array* container_statuses = + status->Get("containerStatuses"); + + for (const json::value& c_status : *container_statuses) { + const json::Object* container_status = c_status->As(); + const std::string name = container_status->Get("name"); + container_status_by_name.emplace(name, container_status); + } } for (const json::value& c_spec : *container_specs) { @@ -507,13 +510,18 @@ std::vector const json::Object* status = pod->Get("status"); const json::Array* container_specs = spec->Get("containers"); - const json::Array* container_statuses = - status->Get("containerStatuses"); - if (container_specs->size() != container_statuses->size()) { - LOG(ERROR) << "Container specs and statuses arrays " - << "have different sizes: " - << container_specs->size() << " vs " - << container_statuses->size() << " for pod " + if (spec->Has("containerStatuses")) { + const json::Array* container_statuses = + status->Get("containerStatuses"); + if (container_specs->size() != container_statuses->size()) { + LOG(ERROR) << "Container specs and statuses arrays " + << "have different sizes: " + << container_specs->size() << " vs " + << container_statuses->size() << " for pod " + << pod_id << "(" << pod_name << ")"; + } + } else { + LOG(ERROR) << "Container statuses do not exist in spec for pod " << pod_id << "(" << pod_name << ")"; } From 5a8deb501e3ea7b501181d3d03972d01fbe8e0a4 Mon Sep 17 00:00:00 2001 From: Bryan Moyles Date: Wed, 14 Mar 2018 11:43:13 -0400 Subject: [PATCH 2/3] Fix typo. --- src/kubernetes.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/kubernetes.cc b/src/kubernetes.cc index 7450aad1..d669013a 100644 --- a/src/kubernetes.cc +++ b/src/kubernetes.cc @@ -510,7 +510,7 @@ std::vector const json::Object* status = pod->Get("status"); const json::Array* container_specs = spec->Get("containers"); - if (spec->Has("containerStatuses")) { + if (status->Has("containerStatuses")) { const json::Array* container_statuses = status->Get("containerStatuses"); if (container_specs->size() != container_statuses->size()) { @@ -521,7 +521,7 @@ std::vector << pod_id << "(" << pod_name << ")"; } } else { - LOG(ERROR) << "Container statuses do not exist in spec for pod " + LOG(ERROR) << "Container statuses do not exist in status for pod " << pod_id << "(" << pod_name << ")"; } From f5e590090b220f142e57e21b967ec2bf62edfda5 Mon Sep 17 00:00:00 2001 From: Bryan Moyles Date: Thu, 15 Mar 2018 11:01:30 -0400 Subject: [PATCH 3/3] Address feedback. --- src/kubernetes.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/kubernetes.cc b/src/kubernetes.cc index d669013a..adf3485c 100644 --- a/src/kubernetes.cc +++ b/src/kubernetes.cc @@ -521,8 +521,8 @@ std::vector << pod_id << "(" << pod_name << ")"; } } else { - LOG(ERROR) << "Container statuses do not exist in status for pod " - << pod_id << "(" << pod_name << ")"; + LOG(INFO) << "Container statuses do not exist in status for pod " + << pod_id << "(" << pod_name << ")"; } // TODO: find is_deleted.