fluent-plugin-google-cloud 0.6.2 → 0.6.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 357b0cf2cba57aafc6011c911419b746cc7103b2
4
- data.tar.gz: 91941e153f05ff927e8f83d342b651219075ebc8
3
+ metadata.gz: a0d7c7c98a69f3fa2f2c40ad70020260bf55e8be
4
+ data.tar.gz: 539deff09173b3b13fe9c226eaee60f8bd3695c7
5
5
  SHA512:
6
- metadata.gz: 10cfc826b705a84b017571b34b759ee9013f416436e6fcd79c632b8e6daa7a016e87c1630a6d5e03a23b7627abb2e46bd32709957a7fdb7589c91af8b2b4f3bc
7
- data.tar.gz: 915d378471e6b055f8eef48e73c7d27300d9fcadf420b2029efdf5a73e46eb83f674e3b631e1257986cae43e9e2603148d61707363ad53e4d3cdb81fe575f1ba
6
+ metadata.gz: 9bd48380bc63a1863ddc846beaf10d47053b3c17013e5d4044bc6474383d5958cd331ed9195092b8ffbf27e9b18c8f61e98f7e3eaff23ec2ed8b3fbfdb30ac11
7
+ data.tar.gz: 7c0e134bbfa2c2b78b33727be8739c2e548f169f7b7c76a451bedea257babc82bf062c89e0020daf9426d8b47a1cf72542670e24ef73cc94782e8d9ecec86263
@@ -1,13 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fluent-plugin-google-cloud (0.6.2)
4
+ fluent-plugin-google-cloud (0.6.3)
5
5
  fluentd (~> 0.10)
6
6
  google-api-client (~> 0.9.0)
7
7
  google-cloud-logging (~> 0.23.2)
8
8
  googleapis-common-protos (~> 1.3)
9
9
  googleauth (~> 0.4)
10
- grpc (~> 1.0)
10
+ grpc (~> 1.0, < 1.3)
11
11
  json (~> 1.8)
12
12
 
13
13
  GEM
@@ -18,13 +18,13 @@ GEM
18
18
  ast (2.3.0)
19
19
  astrolabe (1.3.1)
20
20
  parser (~> 2.2)
21
- cool.io (1.4.6)
21
+ cool.io (1.5.0)
22
22
  crack (0.4.3)
23
23
  safe_yaml (~> 1.0.0)
24
24
  faraday (0.12.1)
25
25
  multipart-post (>= 1.2, < 3)
26
- fluentd (0.14.15)
27
- cool.io (~> 1.4.5)
26
+ fluentd (0.14.17)
27
+ cool.io (>= 1.4.5, < 2.0.0)
28
28
  http_parser.rb (>= 0.5.1, < 0.7.0)
29
29
  msgpack (>= 0.7.0, < 2.0.0)
30
30
  serverengine (>= 2.0.4, < 3.0.0)
@@ -57,7 +57,7 @@ GEM
57
57
  googleauth (~> 0.5.1)
58
58
  grpc (~> 1.0)
59
59
  rly (~> 0.2.3)
60
- google-protobuf (3.3.0)
60
+ google-protobuf (3.3.0-universal-darwin)
61
61
  googleapis-common-protos (1.3.5)
62
62
  google-protobuf (~> 3.2)
63
63
  grpc (~> 1.0)
@@ -69,7 +69,7 @@ GEM
69
69
  multi_json (~> 1.11)
70
70
  os (~> 0.9)
71
71
  signet (~> 0.7)
72
- grpc (1.2.5)
72
+ grpc (1.2.5-universal-darwin)
73
73
  google-protobuf (~> 3.1)
74
74
  googleauth (~> 0.5.1)
75
75
  hashdiff (0.3.4)
@@ -125,7 +125,7 @@ GEM
125
125
  multi_json (~> 1.10)
126
126
  stackdriver-core (0.21.0)
127
127
  strptime (0.1.9)
128
- test-unit (3.2.3)
128
+ test-unit (3.2.4)
129
129
  power_assert
130
130
  thread_safe (0.3.6)
131
131
  tins (1.6.0)
@@ -152,4 +152,4 @@ DEPENDENCIES
152
152
  webmock (~> 1.17)
153
153
 
154
154
  BUNDLED WITH
155
- 1.14.6
155
+ 1.15.0
@@ -10,7 +10,7 @@ eos
10
10
  gem.homepage = \
11
11
  'https://github.com/GoogleCloudPlatform/fluent-plugin-google-cloud'
12
12
  gem.license = 'Apache-2.0'
13
- gem.version = '0.6.2'
13
+ gem.version = '0.6.3'
14
14
  gem.authors = ['Todd Derr', 'Alex Robinson']
15
15
  gem.email = ['salty@google.com']
16
16
  gem.required_ruby_version = Gem::Requirement.new('>= 2.0')
@@ -24,7 +24,7 @@ eos
24
24
  gem.add_runtime_dependency 'google-api-client', '~> 0.9.0'
25
25
  gem.add_runtime_dependency 'google-cloud-logging', '~> 0.23.2'
26
26
  gem.add_runtime_dependency 'googleauth', '~> 0.4'
27
- gem.add_runtime_dependency 'grpc', '~> 1.0'
27
+ gem.add_runtime_dependency 'grpc', '~> 1.0', '< 1.3'
28
28
  gem.add_runtime_dependency 'json', '~> 1.8'
29
29
 
30
30
  gem.add_development_dependency 'mocha', '~> 1.1'
@@ -73,7 +73,7 @@ module Fluent
73
73
  Fluent::Plugin.register_output('google_cloud', self)
74
74
 
75
75
  PLUGIN_NAME = 'Fluentd Google Cloud Logging plugin'
76
- PLUGIN_VERSION = '0.6.2'
76
+ PLUGIN_VERSION = '0.6.3'
77
77
 
78
78
  # Name of the the Google cloud logging write scope.
79
79
  LOGGING_SCOPE = 'https://www.googleapis.com/auth/logging.write'
@@ -450,8 +450,9 @@ module Fluent
450
450
  # Do this here to avoid having to repeat it for each record.
451
451
  match_data = @compiled_kubernetes_tag_regexp.match(tag)
452
452
  if match_data
453
- group_resource.labels['container_name'] =
454
- match_data['container_name']
453
+ group_resource.labels['container_name'] = match_data['container_name']
454
+ group_resource.labels['namespace_id'] = match_data['namespace_name']
455
+ group_resource.labels['pod_id'] = match_data['pod_name']
455
456
  %w(namespace_name pod_name).each do |field|
456
457
  group_common_labels["#{CONTAINER_CONSTANTS[:service]}/#{field}"] =
457
458
  match_data[field]
@@ -17,9 +17,11 @@ require 'helper'
17
17
  require 'mocha/test_unit'
18
18
  require 'webmock/test_unit'
19
19
 
20
+ require_relative 'constants'
21
+
20
22
  # Unit tests for Google Cloud Logging plugin
21
23
  module BaseTest
22
- include Fluent::GoogleCloudOutput::Constants
24
+ include Constants
23
25
 
24
26
  def setup
25
27
  Fluent::Test.setup
@@ -39,410 +41,6 @@ module BaseTest
39
41
  @logs_sent = []
40
42
  end
41
43
 
42
- # generic attributes
43
- HOSTNAME = Socket.gethostname
44
-
45
- WRITE_LOG_ENTRIES_URI = 'https://logging.googleapis.com/v2beta1/entries:write'
46
-
47
- # attributes used for the GCE metadata service
48
- PROJECT_ID = 'test-project-id'
49
- ZONE = 'us-central1-b'
50
- FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
51
- VM_ID = '9876543210'
52
-
53
- # attributes used for custom (overridden) configs
54
- CUSTOM_PROJECT_ID = 'test-custom-project-id'
55
- CUSTOM_ZONE = 'us-custom-central1-b'
56
- CUSTOM_FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
57
- CUSTOM_VM_ID = 'C9876543210'
58
- CUSTOM_HOSTNAME = 'custom.hostname.org'
59
-
60
- # attributes used for the EC2 metadata service
61
- EC2_PROJECT_ID = 'test-ec2-project-id'
62
- EC2_ZONE = 'us-west-2b'
63
- EC2_PREFIXED_ZONE = 'aws:' + EC2_ZONE
64
- EC2_VM_ID = 'i-81c16767'
65
- EC2_ACCOUNT_ID = '123456789012'
66
-
67
- # The formatting here matches the format used on the VM.
68
- EC2_IDENTITY_DOCUMENT = %({
69
- "accountId" : "#{EC2_ACCOUNT_ID}",
70
- "availabilityZone" : "#{EC2_ZONE}",
71
- "instanceId" : "#{EC2_VM_ID}"
72
- })
73
-
74
- # Managed VMs specific labels
75
- MANAGED_VM_BACKEND_NAME = 'default'
76
- MANAGED_VM_BACKEND_VERSION = 'guestbook2.0'
77
-
78
- # Container Engine / Kubernetes specific labels
79
- CONTAINER_CLUSTER_NAME = 'cluster-1'
80
- CONTAINER_NAMESPACE_ID = '898268c8-4a36-11e5-9d81-42010af0194c'
81
- CONTAINER_NAMESPACE_NAME = 'kube-system'
82
- CONTAINER_POD_ID = 'cad3c3c4-4b9c-11e5-9d81-42010af0194c'
83
- CONTAINER_POD_NAME = 'redis-master-c0l82.foo.bar'
84
- CONTAINER_CONTAINER_NAME = 'redis'
85
- CONTAINER_LABEL_KEY = 'component'
86
- CONTAINER_LABEL_VALUE = 'redis-component'
87
- CONTAINER_STREAM = 'stdout'
88
- CONTAINER_SEVERITY = 'INFO'
89
- # Timestamp for 1234567890 seconds and 987654321 nanoseconds since epoch
90
- CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'
91
- CONTAINER_SECONDS_EPOCH = 1_234_567_890
92
- CONTAINER_NANOS = 987_654_321
93
-
94
- # Cloud Functions specific labels
95
- CLOUDFUNCTIONS_FUNCTION_NAME = '$My_Function.Name-@1'
96
- CLOUDFUNCTIONS_REGION = 'us-central1'
97
- CLOUDFUNCTIONS_EXECUTION_ID = '123-0'
98
- CLOUDFUNCTIONS_CLUSTER_NAME = 'cluster-1'
99
- CLOUDFUNCTIONS_NAMESPACE_NAME = 'default'
100
- CLOUDFUNCTIONS_POD_NAME = 'd.dc.myu.uc.functionp.pc.name-a.a1.987-c0l82'
101
- CLOUDFUNCTIONS_CONTAINER_NAME = 'worker'
102
-
103
- # Dataflow specific labels
104
- DATAFLOW_REGION = 'us-central1'
105
- DATAFLOW_JOB_NAME = 'job_name_1'
106
- DATAFLOW_JOB_ID = 'job_id_1'
107
- DATAFLOW_STEP_ID = 'step_1'
108
- DATAFLOW_TAG = 'dataflow.googleapis.com/worker'
109
-
110
- # ML specific labels
111
- ML_REGION = 'us-central1'
112
- ML_JOB_ID = 'job_name_1'
113
- ML_TASK_NAME = 'task_name_1'
114
- ML_TRIAL_ID = 'trial_id_1'
115
- ML_LOG_AREA = 'log_area_1'
116
- ML_TAG = 'master-replica-0'
117
-
118
- # Parameters used for authentication
119
- AUTH_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
120
- FAKE_AUTH_TOKEN = 'abc123'
121
-
122
- # Information about test credentials files.
123
- # path: Path to the credentials file.
124
- # project_id: ID of the project, which must correspond to the file contents.
125
- IAM_CREDENTIALS = {
126
- path: 'test/plugin/data/iam-credentials.json',
127
- project_id: 'fluent-test-project'
128
- }
129
- LEGACY_CREDENTIALS = {
130
- path: 'test/plugin/data/credentials.json',
131
- project_id: '847859579879'
132
- }
133
- INVALID_CREDENTIALS = {
134
- path: 'test/plugin/data/invalid_credentials.json',
135
- project_id: ''
136
- }
137
-
138
- # Configuration files for various test scenarios
139
- APPLICATION_DEFAULT_CONFIG = %(
140
- )
141
-
142
- # rubocop:disable Metrics/LineLength
143
- PRIVATE_KEY_CONFIG = %(
144
- auth_method private_key
145
- private_key_email 271661262351-ft99kc9kjro9rrihq3k2n3s2inbplu0q@developer.gserviceaccount.com
146
- private_key_path test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
147
- )
148
- # rubocop:enable Metrics/LineLength
149
-
150
- REQUIRE_VALID_TAGS_CONFIG = %(
151
- require_valid_tags true
152
- )
153
-
154
- NO_METADATA_SERVICE_CONFIG = %(
155
- use_metadata_service false
156
- )
157
-
158
- NO_DETECT_SUBSERVICE_CONFIG = %(
159
- detect_subservice false
160
- )
161
-
162
- CUSTOM_METADATA_CONFIG = %(
163
- project_id #{CUSTOM_PROJECT_ID}
164
- zone #{CUSTOM_ZONE}
165
- vm_id #{CUSTOM_VM_ID}
166
- vm_name #{CUSTOM_HOSTNAME}
167
- )
168
-
169
- CONFIG_MISSING_METADATA_PROJECT_ID = %(
170
- zone #{CUSTOM_ZONE}
171
- vm_id #{CUSTOM_VM_ID}
172
- )
173
- CONFIG_MISSING_METADATA_ZONE = %(
174
- project_id #{CUSTOM_PROJECT_ID}
175
- vm_id #{CUSTOM_VM_ID}
176
- )
177
- CONFIG_MISSING_METADATA_VM_ID = %(
178
- project_id #{CUSTOM_PROJECT_ID}
179
- zone #{CUSTOM_ZONE}
180
- )
181
- CONFIG_MISSING_METADATA_ALL = %(
182
- )
183
-
184
- CONFIG_EC2_PROJECT_ID = %(
185
- project_id #{EC2_PROJECT_ID}
186
- )
187
-
188
- CONFIG_EC2_PROJECT_ID_AND_CUSTOM_VM_ID = %(
189
- project_id #{EC2_PROJECT_ID}
190
- vm_id #{CUSTOM_VM_ID}
191
- )
192
-
193
- CONFIG_DATAFLOW = %(
194
- subservice_name "#{DATAFLOW_CONSTANTS[:service]}"
195
- labels {
196
- "#{DATAFLOW_CONSTANTS[:service]}/region" : "#{DATAFLOW_REGION}",
197
- "#{DATAFLOW_CONSTANTS[:service]}/job_name" : "#{DATAFLOW_JOB_NAME}",
198
- "#{DATAFLOW_CONSTANTS[:service]}/job_id" : "#{DATAFLOW_JOB_ID}"
199
- }
200
- label_map { "step": "#{DATAFLOW_CONSTANTS[:service]}/step_id" }
201
- )
202
-
203
- CONFIG_ML = %(
204
- subservice_name "#{ML_CONSTANTS[:service]}"
205
- labels {
206
- "#{ML_CONSTANTS[:service]}/job_id" : "#{ML_JOB_ID}",
207
- "#{ML_CONSTANTS[:service]}/task_name" : "#{ML_TASK_NAME}",
208
- "#{ML_CONSTANTS[:service]}/trial_id" : "#{ML_TRIAL_ID}"
209
- }
210
- label_map { "name": "#{ML_CONSTANTS[:service]}/job_id/log_area" }
211
- )
212
-
213
- # Service configurations for various services
214
- COMPUTE_PARAMS = {
215
- resource: {
216
- type: COMPUTE_CONSTANTS[:resource_type],
217
- labels: {
218
- 'instance_id' => VM_ID,
219
- 'zone' => ZONE
220
- }
221
- },
222
- log_name: 'test',
223
- project_id: PROJECT_ID,
224
- labels: {
225
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
226
- }
227
- }
228
-
229
- VMENGINE_PARAMS = {
230
- resource: {
231
- type: APPENGINE_CONSTANTS[:resource_type],
232
- labels: {
233
- 'module_id' => MANAGED_VM_BACKEND_NAME,
234
- 'version_id' => MANAGED_VM_BACKEND_VERSION
235
- }
236
- },
237
- log_name: "#{APPENGINE_CONSTANTS[:service]}%2Ftest",
238
- project_id: PROJECT_ID,
239
- labels: {
240
- "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
241
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
242
- "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
243
- }
244
- }
245
-
246
- CONTAINER_TAG = "kubernetes.#{CONTAINER_POD_NAME}_" \
247
- "#{CONTAINER_NAMESPACE_NAME}_#{CONTAINER_CONTAINER_NAME}"
248
-
249
- CONTAINER_FROM_METADATA_PARAMS = {
250
- resource: {
251
- type: CONTAINER_CONSTANTS[:resource_type],
252
- labels: {
253
- 'cluster_name' => CONTAINER_CLUSTER_NAME,
254
- 'namespace_id' => CONTAINER_NAMESPACE_ID,
255
- 'instance_id' => VM_ID,
256
- 'pod_id' => CONTAINER_POD_ID,
257
- 'container_name' => CONTAINER_CONTAINER_NAME,
258
- 'zone' => ZONE
259
- }
260
- },
261
- log_name: CONTAINER_CONTAINER_NAME,
262
- project_id: PROJECT_ID,
263
- labels: {
264
- "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
265
- CONTAINER_NAMESPACE_NAME,
266
- "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
267
- "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
268
- "label/#{CONTAINER_LABEL_KEY}" => CONTAINER_LABEL_VALUE,
269
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
270
- }
271
- }
272
-
273
- # Almost the same as from metadata, but missing namespace_id and pod_id.
274
- CONTAINER_FROM_TAG_PARAMS = {
275
- resource: {
276
- type: CONTAINER_CONSTANTS[:resource_type],
277
- labels: {
278
- 'cluster_name' => CONTAINER_CLUSTER_NAME,
279
- 'instance_id' => VM_ID,
280
- 'container_name' => CONTAINER_CONTAINER_NAME,
281
- 'zone' => ZONE
282
- }
283
- },
284
- log_name: CONTAINER_CONTAINER_NAME,
285
- project_id: PROJECT_ID,
286
- labels: {
287
- "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
288
- CONTAINER_NAMESPACE_NAME,
289
- "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
290
- "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
291
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
292
- }
293
- }
294
-
295
- CLOUDFUNCTIONS_TAG = "kubernetes.#{CLOUDFUNCTIONS_POD_NAME}_" \
296
- "#{CLOUDFUNCTIONS_NAMESPACE_NAME}_" \
297
- "#{CLOUDFUNCTIONS_CONTAINER_NAME}"
298
-
299
- CLOUDFUNCTIONS_PARAMS = {
300
- resource: {
301
- type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
302
- labels: {
303
- 'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
304
- 'region' => CLOUDFUNCTIONS_REGION
305
- }
306
- },
307
- log_name: 'cloud-functions',
308
- project_id: PROJECT_ID,
309
- labels: {
310
- 'execution_id' => CLOUDFUNCTIONS_EXECUTION_ID,
311
- "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
312
- "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
313
- CLOUDFUNCTIONS_CLUSTER_NAME,
314
- "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
315
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
316
- "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
317
- }
318
- }
319
-
320
- CLOUDFUNCTIONS_TEXT_NOT_MATCHED_PARAMS = {
321
- resource: {
322
- type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
323
- labels: {
324
- 'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
325
- 'region' => CLOUDFUNCTIONS_REGION
326
- }
327
- },
328
- log_name: 'cloud-functions',
329
- project_id: PROJECT_ID,
330
- labels: {
331
- "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
332
- "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
333
- CLOUDFUNCTIONS_CLUSTER_NAME,
334
- "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
335
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
336
- "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
337
- }
338
- }
339
-
340
- DATAFLOW_PARAMS = {
341
- resource: {
342
- type: DATAFLOW_CONSTANTS[:resource_type],
343
- labels: {
344
- 'job_name' => DATAFLOW_JOB_NAME,
345
- 'job_id' => DATAFLOW_JOB_ID,
346
- 'step_id' => DATAFLOW_STEP_ID,
347
- 'region' => DATAFLOW_REGION
348
- }
349
- },
350
- log_name: DATAFLOW_TAG,
351
- project_id: PROJECT_ID,
352
- labels: {
353
- "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
354
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
355
- "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
356
- }
357
- }
358
-
359
- ML_PARAMS = {
360
- resource: {
361
- type: ML_CONSTANTS[:resource_type],
362
- labels: {
363
- 'job_id' => ML_JOB_ID,
364
- 'task_name' => ML_TASK_NAME
365
- }
366
- },
367
- log_name: ML_TAG,
368
- project_id: PROJECT_ID,
369
- labels: {
370
- "#{ML_CONSTANTS[:service]}/trial_id" => ML_TRIAL_ID,
371
- "#{ML_CONSTANTS[:service]}/job_id/log_area" => ML_LOG_AREA,
372
- "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
373
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
374
- "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
375
- }
376
- }
377
-
378
- CUSTOM_PARAMS = {
379
- resource: {
380
- type: COMPUTE_CONSTANTS[:resource_type],
381
- labels: {
382
- 'instance_id' => CUSTOM_VM_ID,
383
- 'zone' => CUSTOM_ZONE
384
- }
385
- },
386
- log_name: 'test',
387
- project_id: CUSTOM_PROJECT_ID,
388
- labels: {
389
- "#{COMPUTE_CONSTANTS[:service]}/resource_name" => CUSTOM_HOSTNAME
390
- }
391
- }
392
-
393
- EC2_PARAMS = {
394
- resource: {
395
- type: EC2_CONSTANTS[:resource_type],
396
- labels: {
397
- 'instance_id' => EC2_VM_ID,
398
- 'region' => EC2_PREFIXED_ZONE,
399
- 'aws_account' => EC2_ACCOUNT_ID
400
- }
401
- },
402
- log_name: 'test',
403
- project_id: EC2_PROJECT_ID,
404
- labels: {
405
- "#{EC2_CONSTANTS[:service]}/resource_name" => HOSTNAME
406
- }
407
- }
408
-
409
- HTTP_REQUEST_MESSAGE = {
410
- 'requestMethod' => 'POST',
411
- 'requestUrl' => 'http://example/',
412
- 'requestSize' => 210,
413
- 'status' => 200,
414
- 'responseSize' => 65,
415
- 'userAgent' => 'USER AGENT 1.0',
416
- 'remoteIp' => '55.55.55.55',
417
- 'referer' => 'http://referer/',
418
- 'cacheHit' => true,
419
- 'cacheValidatedWithOriginServer' => true
420
- }
421
-
422
- # Tags and their sanitized and encoded version.
423
- VALID_TAGS = {
424
- 'test' => 'test',
425
- 'germanß' => 'german%C3%9F',
426
- 'chinese中' => 'chinese%E4%B8%AD',
427
- 'specialCharacter/_-.' => 'specialCharacter%2F_-.',
428
- 'abc@&^$*' => 'abc%40%26%5E%24%2A',
429
- '@&^$*' => '%40%26%5E%24%2A'
430
- }
431
- INVALID_TAGS = {
432
- # Non-string tags.
433
- 123 => '123',
434
- 1.23 => '1.23',
435
- [1, 2, 3] => '%5B1%2C%202%2C%203%5D',
436
- { key: 'value' } => '%7B%22key%22%3D%3E%22value%22%7D',
437
- # Non-utf8 string tags.
438
- "nonutf8#{[0x92].pack('C*')}" => 'nonutf8%20',
439
- "abc#{[0x92].pack('C*')}" => 'abc%20',
440
- "#{[0x92].pack('C*')}" => '%20',
441
- # Empty string tag.
442
- '' => '_'
443
- }
444
- ALL_TAGS = VALID_TAGS.merge(INVALID_TAGS)
445
-
446
44
  # Shared tests.
447
45
 
448
46
  def test_configure_service_account_application_default
@@ -0,0 +1,424 @@
1
+ # Copyright 2017 Google Inc. All rights reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Constants used by unit tests for Google Cloud Logging plugin.
16
+ module Constants
17
+ include Fluent::GoogleCloudOutput::Constants
18
+
19
+ # Generic attributes.
20
+ HOSTNAME = Socket.gethostname
21
+
22
+ # TODO(qingling128) Separate constants into different submodules.
23
+ # Attributes used for the GCE metadata service.
24
+ PROJECT_ID = 'test-project-id'
25
+ ZONE = 'us-central1-b'
26
+ FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
27
+ VM_ID = '9876543210'
28
+
29
+ # Attributes used for custom (overridden) configs.
30
+ CUSTOM_PROJECT_ID = 'test-custom-project-id'
31
+ CUSTOM_ZONE = 'us-custom-central1-b'
32
+ CUSTOM_FULLY_QUALIFIED_ZONE = 'projects/' + PROJECT_ID + '/zones/' + ZONE
33
+ CUSTOM_VM_ID = 'C9876543210'
34
+ CUSTOM_HOSTNAME = 'custom.hostname.org'
35
+
36
+ # Attributes used for the EC2 metadata service.
37
+ EC2_PROJECT_ID = 'test-ec2-project-id'
38
+ EC2_ZONE = 'us-west-2b'
39
+ EC2_PREFIXED_ZONE = 'aws:' + EC2_ZONE
40
+ EC2_VM_ID = 'i-81c16767'
41
+ EC2_ACCOUNT_ID = '123456789012'
42
+
43
+ # The formatting here matches the format used on the VM.
44
+ EC2_IDENTITY_DOCUMENT = %({
45
+ "accountId" : "#{EC2_ACCOUNT_ID}",
46
+ "availabilityZone" : "#{EC2_ZONE}",
47
+ "instanceId" : "#{EC2_VM_ID}"
48
+ })
49
+
50
+ # Managed VMs specific labels.
51
+ MANAGED_VM_BACKEND_NAME = 'default'
52
+ MANAGED_VM_BACKEND_VERSION = 'guestbook2.0'
53
+
54
+ # Container Engine / Kubernetes specific labels.
55
+ CONTAINER_CLUSTER_NAME = 'cluster-1'
56
+ CONTAINER_NAMESPACE_ID = '898268c8-4a36-11e5-9d81-42010af0194c'
57
+ CONTAINER_NAMESPACE_NAME = 'kube-system'
58
+ CONTAINER_POD_ID = 'cad3c3c4-4b9c-11e5-9d81-42010af0194c'
59
+ CONTAINER_POD_NAME = 'redis-master-c0l82.foo.bar'
60
+ CONTAINER_CONTAINER_NAME = 'redis'
61
+ CONTAINER_LABEL_KEY = 'component'
62
+ CONTAINER_LABEL_VALUE = 'redis-component'
63
+ CONTAINER_STREAM = 'stdout'
64
+ CONTAINER_SEVERITY = 'INFO'
65
+ # Timestamp for 1234567890 seconds and 987654321 nanoseconds since epoch.
66
+ CONTAINER_TIMESTAMP = '2009-02-13T23:31:30.987654321Z'
67
+ CONTAINER_SECONDS_EPOCH = 1_234_567_890
68
+ CONTAINER_NANOS = 987_654_321
69
+
70
+ # Cloud Functions specific labels.
71
+ CLOUDFUNCTIONS_FUNCTION_NAME = '$My_Function.Name-@1'
72
+ CLOUDFUNCTIONS_REGION = 'us-central1'
73
+ CLOUDFUNCTIONS_EXECUTION_ID = '123-0'
74
+ CLOUDFUNCTIONS_CLUSTER_NAME = 'cluster-1'
75
+ CLOUDFUNCTIONS_NAMESPACE_NAME = 'default'
76
+ CLOUDFUNCTIONS_POD_NAME = 'd.dc.myu.uc.functionp.pc.name-a.a1.987-c0l82'
77
+ CLOUDFUNCTIONS_CONTAINER_NAME = 'worker'
78
+
79
+ # Dataflow specific labels.
80
+ DATAFLOW_REGION = 'us-central1'
81
+ DATAFLOW_JOB_NAME = 'job_name_1'
82
+ DATAFLOW_JOB_ID = 'job_id_1'
83
+ DATAFLOW_STEP_ID = 'step_1'
84
+ DATAFLOW_TAG = 'dataflow.googleapis.com/worker'
85
+
86
+ # ML specific labels.
87
+ ML_REGION = 'us-central1'
88
+ ML_JOB_ID = 'job_name_1'
89
+ ML_TASK_NAME = 'task_name_1'
90
+ ML_TRIAL_ID = 'trial_id_1'
91
+ ML_LOG_AREA = 'log_area_1'
92
+ ML_TAG = 'master-replica-0'
93
+
94
+ # Parameters used for authentication.
95
+ AUTH_GRANT_TYPE = 'urn:ietf:params:oauth:grant-type:jwt-bearer'
96
+ FAKE_AUTH_TOKEN = 'abc123'
97
+
98
+ # Information about test credentials files.
99
+ # path: Path to the credentials file.
100
+ # project_id: ID of the project, which must correspond to the file contents.
101
+ IAM_CREDENTIALS = {
102
+ path: 'test/plugin/data/iam-credentials.json',
103
+ project_id: 'fluent-test-project'
104
+ }
105
+ LEGACY_CREDENTIALS = {
106
+ path: 'test/plugin/data/credentials.json',
107
+ project_id: '847859579879'
108
+ }
109
+ INVALID_CREDENTIALS = {
110
+ path: 'test/plugin/data/invalid_credentials.json',
111
+ project_id: ''
112
+ }
113
+
114
+ # Configuration files for various test scenarios.
115
+ APPLICATION_DEFAULT_CONFIG = %(
116
+ )
117
+
118
+ # rubocop:disable Metrics/LineLength
119
+ PRIVATE_KEY_CONFIG = %(
120
+ auth_method private_key
121
+ private_key_email 271661262351-ft99kc9kjro9rrihq3k2n3s2inbplu0q@developer.gserviceaccount.com
122
+ private_key_path test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
123
+ )
124
+ # rubocop:enable Metrics/LineLength
125
+
126
+ REQUIRE_VALID_TAGS_CONFIG = %(
127
+ require_valid_tags true
128
+ )
129
+
130
+ NO_METADATA_SERVICE_CONFIG = %(
131
+ use_metadata_service false
132
+ )
133
+
134
+ NO_DETECT_SUBSERVICE_CONFIG = %(
135
+ detect_subservice false
136
+ )
137
+
138
+ CUSTOM_METADATA_CONFIG = %(
139
+ project_id #{CUSTOM_PROJECT_ID}
140
+ zone #{CUSTOM_ZONE}
141
+ vm_id #{CUSTOM_VM_ID}
142
+ vm_name #{CUSTOM_HOSTNAME}
143
+ )
144
+
145
+ CONFIG_MISSING_METADATA_PROJECT_ID = %(
146
+ zone #{CUSTOM_ZONE}
147
+ vm_id #{CUSTOM_VM_ID}
148
+ )
149
+ CONFIG_MISSING_METADATA_ZONE = %(
150
+ project_id #{CUSTOM_PROJECT_ID}
151
+ vm_id #{CUSTOM_VM_ID}
152
+ )
153
+ CONFIG_MISSING_METADATA_VM_ID = %(
154
+ project_id #{CUSTOM_PROJECT_ID}
155
+ zone #{CUSTOM_ZONE}
156
+ )
157
+ CONFIG_MISSING_METADATA_ALL = %(
158
+ )
159
+
160
+ CONFIG_EC2_PROJECT_ID = %(
161
+ project_id #{EC2_PROJECT_ID}
162
+ )
163
+
164
+ CONFIG_EC2_PROJECT_ID_AND_CUSTOM_VM_ID = %(
165
+ project_id #{EC2_PROJECT_ID}
166
+ vm_id #{CUSTOM_VM_ID}
167
+ )
168
+
169
+ CONFIG_DATAFLOW = %(
170
+ subservice_name "#{DATAFLOW_CONSTANTS[:service]}"
171
+ labels {
172
+ "#{DATAFLOW_CONSTANTS[:service]}/region" : "#{DATAFLOW_REGION}",
173
+ "#{DATAFLOW_CONSTANTS[:service]}/job_name" : "#{DATAFLOW_JOB_NAME}",
174
+ "#{DATAFLOW_CONSTANTS[:service]}/job_id" : "#{DATAFLOW_JOB_ID}"
175
+ }
176
+ label_map { "step": "#{DATAFLOW_CONSTANTS[:service]}/step_id" }
177
+ )
178
+
179
+ CONFIG_ML = %(
180
+ subservice_name "#{ML_CONSTANTS[:service]}"
181
+ labels {
182
+ "#{ML_CONSTANTS[:service]}/job_id" : "#{ML_JOB_ID}",
183
+ "#{ML_CONSTANTS[:service]}/task_name" : "#{ML_TASK_NAME}",
184
+ "#{ML_CONSTANTS[:service]}/trial_id" : "#{ML_TRIAL_ID}"
185
+ }
186
+ label_map { "name": "#{ML_CONSTANTS[:service]}/job_id/log_area" }
187
+ )
188
+
189
+ # Service configurations for various services.
190
+ COMPUTE_PARAMS = {
191
+ resource: {
192
+ type: COMPUTE_CONSTANTS[:resource_type],
193
+ labels: {
194
+ 'instance_id' => VM_ID,
195
+ 'zone' => ZONE
196
+ }
197
+ },
198
+ log_name: 'test',
199
+ project_id: PROJECT_ID,
200
+ labels: {
201
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
202
+ }
203
+ }
204
+
205
+ VMENGINE_PARAMS = {
206
+ resource: {
207
+ type: APPENGINE_CONSTANTS[:resource_type],
208
+ labels: {
209
+ 'module_id' => MANAGED_VM_BACKEND_NAME,
210
+ 'version_id' => MANAGED_VM_BACKEND_VERSION
211
+ }
212
+ },
213
+ log_name: "#{APPENGINE_CONSTANTS[:service]}%2Ftest",
214
+ project_id: PROJECT_ID,
215
+ labels: {
216
+ "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
217
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
218
+ "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
219
+ }
220
+ }
221
+
222
+ CONTAINER_TAG = "kubernetes.#{CONTAINER_POD_NAME}_" \
223
+ "#{CONTAINER_NAMESPACE_NAME}_#{CONTAINER_CONTAINER_NAME}"
224
+
225
+ CONTAINER_FROM_METADATA_PARAMS = {
226
+ resource: {
227
+ type: CONTAINER_CONSTANTS[:resource_type],
228
+ labels: {
229
+ 'cluster_name' => CONTAINER_CLUSTER_NAME,
230
+ 'namespace_id' => CONTAINER_NAMESPACE_ID,
231
+ 'instance_id' => VM_ID,
232
+ 'pod_id' => CONTAINER_POD_ID,
233
+ 'container_name' => CONTAINER_CONTAINER_NAME,
234
+ 'zone' => ZONE
235
+ }
236
+ },
237
+ log_name: CONTAINER_CONTAINER_NAME,
238
+ project_id: PROJECT_ID,
239
+ labels: {
240
+ "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
241
+ CONTAINER_NAMESPACE_NAME,
242
+ "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
243
+ "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
244
+ "label/#{CONTAINER_LABEL_KEY}" => CONTAINER_LABEL_VALUE,
245
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
246
+ }
247
+ }
248
+
249
+ # Almost the same as from metadata, but namespace_id and pod_id come from
250
+ # namespace and pod names.
251
+ CONTAINER_FROM_TAG_PARAMS = {
252
+ resource: {
253
+ type: CONTAINER_CONSTANTS[:resource_type],
254
+ labels: {
255
+ 'cluster_name' => CONTAINER_CLUSTER_NAME,
256
+ 'namespace_id' => CONTAINER_NAMESPACE_NAME,
257
+ 'instance_id' => VM_ID,
258
+ 'pod_id' => CONTAINER_POD_NAME,
259
+ 'container_name' => CONTAINER_CONTAINER_NAME,
260
+ 'zone' => ZONE
261
+ }
262
+ },
263
+ log_name: CONTAINER_CONTAINER_NAME,
264
+ project_id: PROJECT_ID,
265
+ labels: {
266
+ "#{CONTAINER_CONSTANTS[:service]}/namespace_name" =>
267
+ CONTAINER_NAMESPACE_NAME,
268
+ "#{CONTAINER_CONSTANTS[:service]}/pod_name" => CONTAINER_POD_NAME,
269
+ "#{CONTAINER_CONSTANTS[:service]}/stream" => CONTAINER_STREAM,
270
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME
271
+ }
272
+ }
273
+
274
+ CLOUDFUNCTIONS_TAG = "kubernetes.#{CLOUDFUNCTIONS_POD_NAME}_" \
275
+ "#{CLOUDFUNCTIONS_NAMESPACE_NAME}_" \
276
+ "#{CLOUDFUNCTIONS_CONTAINER_NAME}"
277
+
278
+ CLOUDFUNCTIONS_PARAMS = {
279
+ resource: {
280
+ type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
281
+ labels: {
282
+ 'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
283
+ 'region' => CLOUDFUNCTIONS_REGION
284
+ }
285
+ },
286
+ log_name: 'cloud-functions',
287
+ project_id: PROJECT_ID,
288
+ labels: {
289
+ 'execution_id' => CLOUDFUNCTIONS_EXECUTION_ID,
290
+ "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
291
+ "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
292
+ CLOUDFUNCTIONS_CLUSTER_NAME,
293
+ "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
294
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
295
+ "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
296
+ }
297
+ }
298
+
299
+ CLOUDFUNCTIONS_TEXT_NOT_MATCHED_PARAMS = {
300
+ resource: {
301
+ type: CLOUDFUNCTIONS_CONSTANTS[:resource_type],
302
+ labels: {
303
+ 'function_name' => CLOUDFUNCTIONS_FUNCTION_NAME,
304
+ 'region' => CLOUDFUNCTIONS_REGION
305
+ }
306
+ },
307
+ log_name: 'cloud-functions',
308
+ project_id: PROJECT_ID,
309
+ labels: {
310
+ "#{CONTAINER_CONSTANTS[:service]}/instance_id" => VM_ID,
311
+ "#{CONTAINER_CONSTANTS[:service]}/cluster_name" =>
312
+ CLOUDFUNCTIONS_CLUSTER_NAME,
313
+ "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
314
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
315
+ "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
316
+ }
317
+ }
318
+
319
+ DATAFLOW_PARAMS = {
320
+ resource: {
321
+ type: DATAFLOW_CONSTANTS[:resource_type],
322
+ labels: {
323
+ 'job_name' => DATAFLOW_JOB_NAME,
324
+ 'job_id' => DATAFLOW_JOB_ID,
325
+ 'step_id' => DATAFLOW_STEP_ID,
326
+ 'region' => DATAFLOW_REGION
327
+ }
328
+ },
329
+ log_name: DATAFLOW_TAG,
330
+ project_id: PROJECT_ID,
331
+ labels: {
332
+ "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
333
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
334
+ "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
335
+ }
336
+ }
337
+
338
+ ML_PARAMS = {
339
+ resource: {
340
+ type: ML_CONSTANTS[:resource_type],
341
+ labels: {
342
+ 'job_id' => ML_JOB_ID,
343
+ 'task_name' => ML_TASK_NAME
344
+ }
345
+ },
346
+ log_name: ML_TAG,
347
+ project_id: PROJECT_ID,
348
+ labels: {
349
+ "#{ML_CONSTANTS[:service]}/trial_id" => ML_TRIAL_ID,
350
+ "#{ML_CONSTANTS[:service]}/job_id/log_area" => ML_LOG_AREA,
351
+ "#{COMPUTE_CONSTANTS[:service]}/resource_id" => VM_ID,
352
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => HOSTNAME,
353
+ "#{COMPUTE_CONSTANTS[:service]}/zone" => ZONE
354
+ }
355
+ }
356
+
357
+ CUSTOM_PARAMS = {
358
+ resource: {
359
+ type: COMPUTE_CONSTANTS[:resource_type],
360
+ labels: {
361
+ 'instance_id' => CUSTOM_VM_ID,
362
+ 'zone' => CUSTOM_ZONE
363
+ }
364
+ },
365
+ log_name: 'test',
366
+ project_id: CUSTOM_PROJECT_ID,
367
+ labels: {
368
+ "#{COMPUTE_CONSTANTS[:service]}/resource_name" => CUSTOM_HOSTNAME
369
+ }
370
+ }
371
+
372
+ EC2_PARAMS = {
373
+ resource: {
374
+ type: EC2_CONSTANTS[:resource_type],
375
+ labels: {
376
+ 'instance_id' => EC2_VM_ID,
377
+ 'region' => EC2_PREFIXED_ZONE,
378
+ 'aws_account' => EC2_ACCOUNT_ID
379
+ }
380
+ },
381
+ log_name: 'test',
382
+ project_id: EC2_PROJECT_ID,
383
+ labels: {
384
+ "#{EC2_CONSTANTS[:service]}/resource_name" => HOSTNAME
385
+ }
386
+ }
387
+
388
+ HTTP_REQUEST_MESSAGE = {
389
+ 'requestMethod' => 'POST',
390
+ 'requestUrl' => 'http://example/',
391
+ 'requestSize' => 210,
392
+ 'status' => 200,
393
+ 'responseSize' => 65,
394
+ 'userAgent' => 'USER AGENT 1.0',
395
+ 'remoteIp' => '55.55.55.55',
396
+ 'referer' => 'http://referer/',
397
+ 'cacheHit' => true,
398
+ 'cacheValidatedWithOriginServer' => true
399
+ }
400
+
401
+ # Tags and their sanitized and encoded version.
402
+ VALID_TAGS = {
403
+ 'test' => 'test',
404
+ 'germanß' => 'german%C3%9F',
405
+ 'chinese中' => 'chinese%E4%B8%AD',
406
+ 'specialCharacter/_-.' => 'specialCharacter%2F_-.',
407
+ 'abc@&^$*' => 'abc%40%26%5E%24%2A',
408
+ '@&^$*' => '%40%26%5E%24%2A'
409
+ }
410
+ INVALID_TAGS = {
411
+ # Non-string tags.
412
+ 123 => '123',
413
+ 1.23 => '1.23',
414
+ [1, 2, 3] => '%5B1%2C%202%2C%203%5D',
415
+ { key: 'value' } => '%7B%22key%22%3D%3E%22value%22%7D',
416
+ # Non-utf8 string tags.
417
+ "nonutf8#{[0x92].pack('C*')}" => 'nonutf8%20',
418
+ "abc#{[0x92].pack('C*')}" => 'abc%20',
419
+ "#{[0x92].pack('C*')}" => '%20',
420
+ # Empty string tag.
421
+ '' => '_'
422
+ }
423
+ ALL_TAGS = VALID_TAGS.merge(INVALID_TAGS)
424
+ end
@@ -197,6 +197,8 @@ class GoogleCloudOutputTest < Test::Unit::TestCase
197
197
 
198
198
  private
199
199
 
200
+ WRITE_LOG_ENTRIES_URI = 'https://logging.googleapis.com/v2beta1/entries:write'
201
+
200
202
  def rename_key(hash, old_key, new_key)
201
203
  hash.merge(new_key => hash[old_key]).reject { |k, _| k == old_key }
202
204
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-google-cloud
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 0.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todd Derr
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-05-09 00:00:00.000000000 Z
12
+ date: 2017-05-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fluentd
@@ -88,6 +88,9 @@ dependencies:
88
88
  - - "~>"
89
89
  - !ruby/object:Gem::Version
90
90
  version: '1.0'
91
+ - - "<"
92
+ - !ruby/object:Gem::Version
93
+ version: '1.3'
91
94
  type: :runtime
92
95
  prerelease: false
93
96
  version_requirements: !ruby/object:Gem::Requirement
@@ -95,6 +98,9 @@ dependencies:
95
98
  - - "~>"
96
99
  - !ruby/object:Gem::Version
97
100
  version: '1.0'
101
+ - - "<"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.3'
98
104
  - !ruby/object:Gem::Dependency
99
105
  name: json
100
106
  requirement: !ruby/object:Gem::Requirement
@@ -196,10 +202,12 @@ files:
196
202
  - LICENSE
197
203
  - README.rdoc
198
204
  - Rakefile
205
+ - fluent-plugin-google-cloud-0.6.2.gem
199
206
  - fluent-plugin-google-cloud.gemspec
200
207
  - lib/fluent/plugin/out_google_cloud.rb
201
208
  - test/helper.rb
202
209
  - test/plugin/base_test.rb
210
+ - test/plugin/constants.rb
203
211
  - test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
204
212
  - test/plugin/data/credentials.json
205
213
  - test/plugin/data/iam-credentials.json
@@ -226,13 +234,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
226
234
  version: '0'
227
235
  requirements: []
228
236
  rubyforge_project:
229
- rubygems_version: 2.4.8
237
+ rubygems_version: 2.6.12
230
238
  signing_key:
231
239
  specification_version: 4
232
240
  summary: fluentd output plugin for the Stackdriver Logging API
233
241
  test_files:
234
242
  - test/helper.rb
235
243
  - test/plugin/base_test.rb
244
+ - test/plugin/constants.rb
236
245
  - test/plugin/data/c31e573fd7f62ed495c9ca3821a5a85cb036dee1-privatekey.p12
237
246
  - test/plugin/data/credentials.json
238
247
  - test/plugin/data/iam-credentials.json