fluent-plugin-kubernetes_metadata_filter 3.6.0 → 3.7.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/Rakefile +3 -4
  4. data/lib/fluent/plugin/filter_kubernetes_metadata.rb +307 -278
  5. data/lib/fluent/plugin/kubernetes_metadata_cache_strategy.rb +15 -11
  6. data/lib/fluent/plugin/kubernetes_metadata_common.rb +38 -40
  7. data/lib/fluent/plugin/kubernetes_metadata_stats.rb +5 -7
  8. data/lib/fluent/plugin/kubernetes_metadata_test_api_adapter.rb +39 -36
  9. data/lib/fluent/plugin/kubernetes_metadata_watch_namespaces.rb +15 -12
  10. data/lib/fluent/plugin/kubernetes_metadata_watch_pods.rb +18 -17
  11. metadata +4 -174
  12. data/.circleci/config.yml +0 -48
  13. data/.gitignore +0 -18
  14. data/.rubocop.yml +0 -57
  15. data/Gemfile +0 -9
  16. data/Gemfile.lock +0 -170
  17. data/fluent-plugin-kubernetes_metadata_filter.gemspec +0 -34
  18. data/lib/fluent/plugin/kubernetes_metadata_util.rb +0 -33
  19. data/test/cassettes/invalid_api_server_config.yml +0 -53
  20. data/test/cassettes/kubernetes_docker_metadata_annotations.yml +0 -205
  21. data/test/cassettes/kubernetes_docker_metadata_dotted_slashed_labels.yml +0 -197
  22. data/test/cassettes/kubernetes_get_api_v1.yml +0 -193
  23. data/test/cassettes/kubernetes_get_api_v1_using_token.yml +0 -195
  24. data/test/cassettes/kubernetes_get_namespace_default.yml +0 -72
  25. data/test/cassettes/kubernetes_get_namespace_default_using_token.yml +0 -71
  26. data/test/cassettes/kubernetes_get_pod.yml +0 -146
  27. data/test/cassettes/kubernetes_get_pod_container_init.yml +0 -145
  28. data/test/cassettes/kubernetes_get_pod_using_token.yml +0 -148
  29. data/test/cassettes/kubernetes_get_pod_with_ownerrefs.yml +0 -156
  30. data/test/cassettes/metadata_from_tag_and_journald_fields.yml +0 -153
  31. data/test/cassettes/metadata_from_tag_journald_and_kubernetes_fields.yml +0 -285
  32. data/test/cassettes/valid_kubernetes_api_server.yml +0 -55
  33. data/test/cassettes/valid_kubernetes_api_server_using_token.yml +0 -57
  34. data/test/helper.rb +0 -82
  35. data/test/plugin/test.token +0 -1
  36. data/test/plugin/test_cache_stats.rb +0 -33
  37. data/test/plugin/test_cache_strategy.rb +0 -194
  38. data/test/plugin/test_filter_kubernetes_metadata.rb +0 -851
  39. data/test/plugin/test_watch_namespaces.rb +0 -245
  40. data/test/plugin/test_watch_pods.rb +0 -344
  41. 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)
29
- @id_cache = LruRedux::TTL::ThreadSafeCache.new(100, 3600)
30
- @namespace_cache = LruRedux::TTL::ThreadSafeCache.new(100, 3600)
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