From 0128230a7cc2efd487bd064be949e35b8857048d Mon Sep 17 00:00:00 2001 From: Bryan Moyles Date: Wed, 3 Jan 2018 13:40:10 -0500 Subject: [PATCH 1/2] Deal with exception if labels are not present in pod metadata. --- src/kubernetes.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/kubernetes.cc b/src/kubernetes.cc index a7b0c9cb..eca10cb2 100644 --- a/src/kubernetes.cc +++ b/src/kubernetes.cc @@ -263,7 +263,12 @@ MetadataUpdater::ResourceMetadata KubernetesReader::GetContainerMetadata( const std::string created_str = metadata->Get("creationTimestamp"); Timestamp created_at = rfc3339::FromString(created_str); - const json::Object* labels = metadata->Get("labels"); + const json::Object* labels; + try { + labels = metadata->Get("labels"); + } catch (const json::Exception& e) { + labels = new json::Object({}); + } const json::Object* spec = pod->Get("spec"); const std::string node_name = spec->Get("nodeName"); From 4c7b4b88e7a5f06399af4fae6a7440ca7e6840c2 Mon Sep 17 00:00:00 2001 From: Igor Peshansky Date: Wed, 3 Jan 2018 14:45:53 -0500 Subject: [PATCH 2/2] Only add the "labels" key to the container metadata blob if the pod has labels. Use a Has test instead of catching the exception. --- src/kubernetes.cc | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/src/kubernetes.cc b/src/kubernetes.cc index eca10cb2..35801212 100644 --- a/src/kubernetes.cc +++ b/src/kubernetes.cc @@ -196,7 +196,6 @@ MetadataUpdater::ResourceMetadata KubernetesReader::GetPodMetadata( const std::string created_str = metadata->Get("creationTimestamp"); Timestamp created_at = rfc3339::FromString(created_str); - const json::Object* labels = metadata->Get("labels"); const json::Object* status = pod->Get("status"); const std::string started_str = status->Get("startTime"); @@ -264,10 +263,10 @@ MetadataUpdater::ResourceMetadata KubernetesReader::GetContainerMetadata( metadata->Get("creationTimestamp"); Timestamp created_at = rfc3339::FromString(created_str); const json::Object* labels; - try { + if (!metadata->Has("labels")) { + labels = nullptr; + } else { labels = metadata->Get("labels"); - } catch (const json::Exception& e) { - labels = new json::Object({}); } const json::Object* spec = pod->Get("spec"); @@ -298,22 +297,28 @@ MetadataUpdater::ResourceMetadata KubernetesReader::GetContainerMetadata( {"location", zone}, }); - json::value container_raw_metadata = json::object({ - {"blobs", json::object({ - {"association", std::move(associations)}, - {"spec", json::object({ - {"version", json::string(kKubernetesApiVersion)}, - {"raw", container_spec->Clone()}, - })}, - {"status", json::object({ - {"version", json::string(kKubernetesApiVersion)}, - {"raw", container_status->Clone()}, - })}, - {"labels", json::object({ + std::unique_ptr blobs(new json::Object({ + {"association", std::move(associations)}, + {"spec", json::object({ + {"version", json::string(kKubernetesApiVersion)}, + {"raw", container_spec->Clone()}, + })}, + {"status", json::object({ + {"version", json::string(kKubernetesApiVersion)}, + {"raw", container_status->Clone()}, + })}, + })); + if (labels) { + blobs->emplace(std::make_pair( + "labels", + json::object({ {"version", json::string(kKubernetesApiVersion)}, {"raw", labels->Clone()}, - })}, - })}, + }) + )); + } + json::value container_raw_metadata = json::object({ + {"blobs", json::value(std::move(blobs))}, }); if (config_.VerboseLogging()) { LOG(INFO) << "Raw container metadata: " << *container_raw_metadata;