fluent-plugin-google-cloud 0.6.2 → 0.6.3

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 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