diff --git a/src/kubernetes.cc b/src/kubernetes.cc index e7816fc9..b3d1dd51 100644 --- a/src/kubernetes.cc +++ b/src/kubernetes.cc @@ -88,10 +88,21 @@ bool ReadServiceAccountSecret( KubernetesReader::KubernetesReader(const MetadataAgentConfiguration& config) : config_(config), environment_(config) {} +json::value KubernetesReader::InstanceResource() const { + const std::string resource_type = "gce_instance"; // TODO: detect other resources. + const std::string instance_id = environment_.InstanceId(); + const std::string zone = environment_.InstanceZone(); + return json::object({ + {"type", json::string(resource_type)}, + {"labels", json::object({ + {"instance_id", json::string(instance_id)}, + {"zone", json::string(zone)}, + })}, + }); +} + MetadataUpdater::ResourceMetadata KubernetesReader::GetNodeMetadata( json::value raw_node, Timestamp collected_at) const throw(json::Exception) { - const std::string platform = "gce"; // TODO: detect other platforms. - const std::string instance_id = environment_.InstanceId(); const std::string zone = environment_.InstanceZone(); const std::string cluster_name = environment_.KubernetesClusterName(); @@ -113,8 +124,7 @@ MetadataUpdater::ResourceMetadata KubernetesReader::GetNodeMetadata( {"association", json::object({ {"version", json::string(kRawContentVersion)}, {"raw", json::object({ - {"providerPlatform", json::string(platform)}, - {"instanceId", json::string(instance_id)}, + {"infrastructureResource", std::move(InstanceResource())}, })}, })}, {"api", json::object({ @@ -145,8 +155,6 @@ MetadataUpdater::ResourceMetadata KubernetesReader::GetNodeMetadata( json::value KubernetesReader::ComputePodAssociations(const json::Object* pod) const throw(json::Exception) { - const std::string platform = "gce"; // TODO: detect other platforms. - const json::Object* metadata = pod->Get("metadata"); const std::string namespace_name = metadata->Get("namespace"); const std::string pod_id = metadata->Get("uid"); @@ -175,7 +183,7 @@ json::value KubernetesReader::ComputePodAssociations(const json::Object* pod) return json::object({ {"version", json::string(kRawContentVersion)}, {"raw", json::object({ - {"providerPlatform", json::string(platform)}, + {"infrastructureResource", std::move(InstanceResource())}, {"controllers", json::object({ {"topLevelControllerType", json::string(top_level_kind)}, {"topLevelControllerName", json::string(top_level_name)}, diff --git a/src/kubernetes.h b/src/kubernetes.h index 601c6e7d..b01ac965 100644 --- a/src/kubernetes.h +++ b/src/kubernetes.h @@ -127,6 +127,9 @@ class KubernetesReader { json::value FindTopLevelOwner(const std::string& ns, json::value object) const throw(QueryException, json::Exception); + // Gets the monitored resource of the instance the agent is running on. + json::value InstanceResource() const; + // Cached data. mutable std::recursive_mutex mutex_; mutable std::string current_node_;