module KubernetesMetadata::Common
Public Instance Methods
match_annotations(annotations)
click to toggle source
# File lib/fluent/plugin/kubernetes_metadata_common.rb, line 29 def match_annotations(annotations) result = {} @annotations_regexps.each do |regexp| annotations.each do |key, value| if ::Fluent::StringUtil.match_regexp(regexp, key.to_s) result[key] = value end end end result end
parse_namespace_metadata(namespace_object)
click to toggle source
# File lib/fluent/plugin/kubernetes_metadata_common.rb, line 41 def parse_namespace_metadata(namespace_object) labels = '' labels = syms_to_strs(namespace_object[:metadata][:labels].to_h) unless @skip_labels annotations = match_annotations(syms_to_strs(namespace_object[:metadata][:annotations].to_h)) if @de_dot de_dot!(labels) unless @skip_labels de_dot!(annotations) end if @de_slash de_slash!(labels) unless @skip_labels de_slash!(annotations) end kubernetes_metadata = { 'namespace_id' => namespace_object[:metadata][:uid], 'creation_timestamp' => namespace_object[:metadata][:creationTimestamp] } kubernetes_metadata['namespace_labels'] = labels unless labels.empty? kubernetes_metadata['namespace_annotations'] = annotations unless annotations.empty? kubernetes_metadata end
parse_pod_metadata(pod_object)
click to toggle source
# File lib/fluent/plugin/kubernetes_metadata_common.rb, line 63 def parse_pod_metadata(pod_object) labels = '' labels = syms_to_strs(pod_object[:metadata][:labels].to_h) unless @skip_labels annotations = match_annotations(syms_to_strs(pod_object[:metadata][:annotations].to_h)) if @de_dot de_dot!(labels) unless @skip_labels de_dot!(annotations) end if @de_slash de_slash!(labels) unless @skip_labels de_slash!(annotations) end # collect container information container_meta = {} begin pod_object[:status][:containerStatuses].each do |container_status| # get plain container id (eg. docker://hash -> hash) container_id = container_status[:containerID] ? container_status[:containerID].sub(%r{^[-_a-zA-Z0-9]+://}, '') : container_status[:name] container_meta[container_id] = if @skip_container_metadata { 'name' => container_status[:name] } else { 'name' => container_status[:name], 'image' => container_status[:image], 'image_id' => container_status[:imageID] } end end if pod_object[:status] && pod_object[:status][:containerStatuses] rescue StandardError=>e log.warn("parsing container meta information failed for: #{pod_object[:metadata][:namespace]}/#{pod_object[:metadata][:name]}: #{e}") end kubernetes_metadata = { 'namespace_name' => pod_object[:metadata][:namespace], 'pod_id' => pod_object[:metadata][:uid], 'pod_name' => pod_object[:metadata][:name], 'pod_ip' => pod_object[:status][:podIP], 'containers' => syms_to_strs(container_meta), 'host' => pod_object[:spec][:nodeName] } kubernetes_metadata['annotations'] = annotations unless annotations.empty? kubernetes_metadata['labels'] = labels unless labels.empty? kubernetes_metadata['master_url'] = @kubernetes_url unless @skip_master_url kubernetes_metadata end
syms_to_strs(hsh)
click to toggle source
# File lib/fluent/plugin/kubernetes_metadata_common.rb, line 113 def syms_to_strs(hsh) newhsh = {} hsh.each_pair do |kk, vv| if vv.is_a?(Hash) vv = syms_to_strs(vv) end if kk.is_a?(Symbol) newhsh[kk.to_s] = vv else newhsh[kk] = vv end end newhsh end