fluent-plugin-kubernetes_metadata_filter 3.7.0 → 3.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/Rakefile +3 -4
- data/lib/fluent/plugin/filter_kubernetes_metadata.rb +307 -279
- data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +15 -11
- data/lib/fluent/plugin/kubernetes_metadata_common.rb +38 -40
- data/lib/fluent/plugin/kubernetes_metadata_stats.rb +4 -6
- data/lib/fluent/plugin/kubernetes_metadata_test_api_adapter.rb +39 -36
- data/lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb +15 -12
- data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +18 -17
- metadata +2 -172
- data/.circleci/config.yml +0 -48
- data/.gitignore +0 -18
- data/.rubocop.yml +0 -57
- data/Gemfile +0 -9
- data/Gemfile.lock +0 -172
- data/fluent-plugin-kubernetes_metadata_filter.gemspec +0 -34
- data/lib/fluent/plugin/kubernetes_metadata_util.rb +0 -33
- data/test/cassettes/invalid_api_server_config.yml +0 -53
- data/test/cassettes/kubernetes_docker_metadata_annotations.yml +0 -205
- data/test/cassettes/kubernetes_docker_metadata_dotted_slashed_labels.yml +0 -197
- data/test/cassettes/kubernetes_get_api_v1.yml +0 -193
- data/test/cassettes/kubernetes_get_api_v1_using_token.yml +0 -195
- data/test/cassettes/kubernetes_get_namespace_default.yml +0 -72
- data/test/cassettes/kubernetes_get_namespace_default_using_token.yml +0 -71
- data/test/cassettes/kubernetes_get_pod.yml +0 -146
- data/test/cassettes/kubernetes_get_pod_container_init.yml +0 -145
- data/test/cassettes/kubernetes_get_pod_using_token.yml +0 -148
- data/test/cassettes/kubernetes_get_pod_with_ownerrefs.yml +0 -156
- data/test/cassettes/metadata_from_tag_and_journald_fields.yml +0 -153
- data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +0 -285
- data/test/cassettes/valid_kubernetes_api_server.yml +0 -55
- data/test/cassettes/valid_kubernetes_api_server_using_token.yml +0 -57
- data/test/helper.rb +0 -82
- data/test/plugin/test.token +0 -1
- data/test/plugin/test_cache_stats.rb +0 -33
- data/test/plugin/test_cache_strategy.rb +0 -194
- data/test/plugin/test_filter_kubernetes_metadata.rb +0 -851
- data/test/plugin/test_watch_namespaces.rb +0 -245
- data/test/plugin/test_watch_pods.rb +0 -344
- data/test/plugin/watch_test.rb +0 -76
@@ -1,194 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
#
|
4
|
-
# Fluentd Kubernetes Metadata Filter Plugin - Enrich Fluentd events with
|
5
|
-
# Kubernetes metadata
|
6
|
-
#
|
7
|
-
# Copyright 2015 Red Hat, Inc.
|
8
|
-
#
|
9
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
10
|
-
# you may not use this file except in compliance with the License.
|
11
|
-
# You may obtain a copy of the License at
|
12
|
-
#
|
13
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
14
|
-
#
|
15
|
-
# Unless required by applicable law or agreed to in writing, software
|
16
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
17
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
18
|
-
# See the License for the specific language governing permissions and
|
19
|
-
# limitations under the License.
|
20
|
-
#
|
21
|
-
require_relative '../helper'
|
22
|
-
|
23
|
-
class TestCacheStrategy
|
24
|
-
include KubernetesMetadata::CacheStrategy
|
25
|
-
|
26
|
-
def initialize
|
27
|
-
@stats = KubernetesMetadata::Stats.new
|
28
|
-
@cache = LruRedux::TTL::ThreadSafeCache.new(100, 3600, true)
|
29
|
-
@id_cache = LruRedux::TTL::ThreadSafeCache.new(100, 3600, true)
|
30
|
-
@namespace_cache = LruRedux::TTL::ThreadSafeCache.new(100, 3600, true)
|
31
|
-
@orphaned_namespace_name = '.orphaned'
|
32
|
-
@orphaned_namespace_id = 'orphaned'
|
33
|
-
end
|
34
|
-
|
35
|
-
attr_accessor :stats, :cache, :id_cache, :namespace_cache, :allow_orphans
|
36
|
-
|
37
|
-
def fetch_pod_metadata(_namespace_name, _pod_name)
|
38
|
-
{}
|
39
|
-
end
|
40
|
-
|
41
|
-
def fetch_namespace_metadata(_namespace_name)
|
42
|
-
{}
|
43
|
-
end
|
44
|
-
|
45
|
-
def log
|
46
|
-
logger = {}
|
47
|
-
def logger.on_trace
|
48
|
-
true
|
49
|
-
end
|
50
|
-
|
51
|
-
def logger.trace(message)
|
52
|
-
end
|
53
|
-
logger
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
class KubernetesMetadataCacheStrategyTest < Test::Unit::TestCase
|
58
|
-
def setup
|
59
|
-
@strategy = TestCacheStrategy.new
|
60
|
-
@cache_key = 'some_long_container_id'
|
61
|
-
@namespace_name = 'some_namespace_name'
|
62
|
-
@namespace_uuid = 'some_namespace_uuid'
|
63
|
-
@pod_name = 'some_pod_name'
|
64
|
-
@pod_uuid = 'some_pod_uuid'
|
65
|
-
@time = Time.now
|
66
|
-
@pod_meta = { 'pod_id' => @pod_uuid, 'labels' => { 'meta' => 'pod' } }
|
67
|
-
@namespace_meta = { 'namespace_id' => @namespace_uuid, 'creation_timestamp' => @time.to_s }
|
68
|
-
end
|
69
|
-
|
70
|
-
test 'when cached metadata is found' do
|
71
|
-
exp = @pod_meta.merge(@namespace_meta)
|
72
|
-
exp.delete('creation_timestamp')
|
73
|
-
@strategy.id_cache[@cache_key] = {
|
74
|
-
pod_id: @pod_uuid,
|
75
|
-
namespace_id: @namespace_uuid
|
76
|
-
}
|
77
|
-
@strategy.cache[@pod_uuid] = @pod_meta
|
78
|
-
@strategy.namespace_cache[@namespace_uuid] = @namespace_meta
|
79
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, {}))
|
80
|
-
end
|
81
|
-
|
82
|
-
test 'when previously processed record for pod but metadata is not cached and can not be fetched' do
|
83
|
-
exp = {
|
84
|
-
'pod_id' => @pod_uuid,
|
85
|
-
'namespace_id' => @namespace_uuid
|
86
|
-
}
|
87
|
-
@strategy.id_cache[@cache_key] = {
|
88
|
-
pod_id: @pod_uuid,
|
89
|
-
namespace_id: @namespace_uuid
|
90
|
-
}
|
91
|
-
@strategy.stub :fetch_pod_metadata, {} do
|
92
|
-
@strategy.stub :fetch_namespace_metadata, nil do
|
93
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, {}))
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
test 'when metadata is not cached and is fetched' do
|
99
|
-
exp = @pod_meta.merge(@namespace_meta)
|
100
|
-
exp.delete('creation_timestamp')
|
101
|
-
@strategy.stub :fetch_pod_metadata, @pod_meta do
|
102
|
-
@strategy.stub :fetch_namespace_metadata, @namespace_meta do
|
103
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, {}))
|
104
|
-
assert_true(@strategy.id_cache.key?(@cache_key))
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
test 'when metadata is not cached and pod is deleted and namespace metadata is fetched' do
|
110
|
-
# this is the case for a record from a deleted pod where no other
|
111
|
-
# records were read. using the container hash since that is all
|
112
|
-
# we ever will have and should allow us to process all the deleted
|
113
|
-
# pod records
|
114
|
-
exp = {
|
115
|
-
'pod_id' => @cache_key,
|
116
|
-
'namespace_id' => @namespace_uuid
|
117
|
-
}
|
118
|
-
@strategy.stub :fetch_pod_metadata, {} do
|
119
|
-
@strategy.stub :fetch_namespace_metadata, @namespace_meta do
|
120
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, {}))
|
121
|
-
assert_true(@strategy.id_cache.key?(@cache_key))
|
122
|
-
end
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
test 'when metadata is not cached and pod is deleted and namespace is for a different namespace with the same name' do
|
127
|
-
# this is the case for a record from a deleted pod from a deleted namespace
|
128
|
-
# where new namespace was created with the same name
|
129
|
-
exp = {
|
130
|
-
'namespace_id' => @namespace_uuid
|
131
|
-
}
|
132
|
-
@strategy.stub :fetch_pod_metadata, {} do
|
133
|
-
@strategy.stub :fetch_namespace_metadata, @namespace_meta do
|
134
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time - 1 * 86_400, {}))
|
135
|
-
assert_true(@strategy.id_cache.key?(@cache_key))
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
test 'when metadata is not cached and no metadata can be fetched and not allowing orphans' do
|
141
|
-
# we should never see this since pod meta should not be retrievable
|
142
|
-
# unless the namespace exists
|
143
|
-
@strategy.stub :fetch_pod_metadata, @pod_meta do
|
144
|
-
@strategy.stub :fetch_namespace_metadata, {} do
|
145
|
-
assert_equal({}, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time - 1 * 86_400, {}))
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
test 'when metadata is not cached and no metadata can be fetched and allowing orphans' do
|
151
|
-
# we should never see this since pod meta should not be retrievable
|
152
|
-
# unless the namespace exists
|
153
|
-
@strategy.allow_orphans = true
|
154
|
-
exp = {
|
155
|
-
'orphaned_namespace' => 'namespace',
|
156
|
-
'namespace_name' => '.orphaned',
|
157
|
-
'namespace_id' => 'orphaned'
|
158
|
-
}
|
159
|
-
@strategy.stub :fetch_pod_metadata, @pod_meta do
|
160
|
-
@strategy.stub :fetch_namespace_metadata, {} do
|
161
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time - 1 * 86_400, {}))
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
test 'when metadata is not cached and no metadata can be fetched and not allowing orphans for multiple records' do
|
167
|
-
# processing a batch of records with no meta. ideally we only hit the api server once
|
168
|
-
batch_miss_cache = {}
|
169
|
-
@strategy.stub :fetch_pod_metadata, {} do
|
170
|
-
@strategy.stub :fetch_namespace_metadata, {} do
|
171
|
-
assert_equal({}, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, batch_miss_cache))
|
172
|
-
end
|
173
|
-
end
|
174
|
-
assert_equal({}, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, batch_miss_cache))
|
175
|
-
end
|
176
|
-
|
177
|
-
test 'when metadata is not cached and no metadata can be fetched and allowing orphans for multiple records' do
|
178
|
-
# we should never see this since pod meta should not be retrievable
|
179
|
-
# unless the namespace exists
|
180
|
-
@strategy.allow_orphans = true
|
181
|
-
exp = {
|
182
|
-
'orphaned_namespace' => 'namespace',
|
183
|
-
'namespace_name' => '.orphaned',
|
184
|
-
'namespace_id' => 'orphaned'
|
185
|
-
}
|
186
|
-
batch_miss_cache = {}
|
187
|
-
@strategy.stub :fetch_pod_metadata, {} do
|
188
|
-
@strategy.stub :fetch_namespace_metadata, {} do
|
189
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, batch_miss_cache))
|
190
|
-
end
|
191
|
-
end
|
192
|
-
assert_equal(exp, @strategy.get_pod_metadata(@cache_key, 'namespace', 'pod', @time, batch_miss_cache))
|
193
|
-
end
|
194
|
-
end
|