td 0.15.6 → 0.15.7
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/ChangeLog +4 -0
- data/lib/td/command/workflow.rb +8 -3
- data/lib/td/config.rb +15 -0
- data/lib/td/version.rb +1 -1
- data/spec/spec_helper.rb +9 -0
- data/spec/td/command/workflow_spec.rb +80 -0
- data/spec/td/config_spec.rb +41 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7bb4903ebbe92100825f6fb8c768a4b43135e32e
|
4
|
+
data.tar.gz: 6c2fce67432e0d56d536971b5b75e164d88a8bc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39f2f0b420f772c670990e1303a037f626bf989c208a75103724fbc24359755335d68fc1623b1c8aaadbcca964280164aea34636cbde90eb653c298274bf6462
|
7
|
+
data.tar.gz: 0c4b3cc6037493a693d8d283160136bd2b7bda2f701aaab7705895322285bc388df348646245d96e214c5f338298904fbacca113bed86477945dccf9a7ae1126
|
data/ChangeLog
CHANGED
data/lib/td/command/workflow.rb
CHANGED
@@ -26,13 +26,18 @@ module TreasureData
|
|
26
26
|
env = {}
|
27
27
|
digdag_config_path = File.join(wd, 'config')
|
28
28
|
FileUtils.touch(digdag_config_path)
|
29
|
-
|
29
|
+
workflow_endpoint = Config.workflow_endpoint
|
30
|
+
|
31
|
+
# In the future passing config to digdag should use environment variables
|
32
|
+
if Config.cl_apikey || workflow_endpoint != 'https://api-workflow.treasuredata.com'
|
30
33
|
# If the user passes the apikey on the command line we cannot use the digdag td.conf plugin.
|
31
34
|
# Instead, create a digdag configuration file with the endpoint and the specified apikey.
|
32
|
-
env['TD_CONFIG_PATH'] = nil
|
33
35
|
apikey = TreasureData::Config.apikey
|
36
|
+
env['TD_CONFIG_PATH'] = nil
|
37
|
+
env['TREASURE_DATA_WORKFLOW_ENDPOINT'] = workflow_endpoint
|
38
|
+
env['TD_API_KEY'] = apikey
|
34
39
|
File.write(digdag_config_path, [
|
35
|
-
|
40
|
+
"client.http.endpoint = #{workflow_endpoint}",
|
36
41
|
"client.http.headers.authorization = TD1 #{apikey}",
|
37
42
|
"secrets.td.apikey = #{apikey}"
|
38
43
|
].join($/) + $/)
|
data/lib/td/config.rb
CHANGED
@@ -160,6 +160,21 @@ class Config
|
|
160
160
|
@@cl_endpoint = flag
|
161
161
|
end
|
162
162
|
|
163
|
+
def self.workflow_endpoint
|
164
|
+
case self.endpoint.to_s.sub(%r[https?://], '')
|
165
|
+
when '', 'api.treasuredata.com'
|
166
|
+
'https://api-workflow.treasuredata.com'
|
167
|
+
when 'api-staging.treasuredata.com'
|
168
|
+
'https://api-staging-workflow.treasuredata.com'
|
169
|
+
when 'api.treasuredata.co.jp'
|
170
|
+
'https://api-workflow.treasuredata.co.jp'
|
171
|
+
when 'api-staging.treasuredata.co.jp'
|
172
|
+
'https://api-staging-workflow.treasuredata.co.jp'
|
173
|
+
else
|
174
|
+
raise ConfigError, "Workflow is not supported for '#{self.endpoint}'"
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
163
178
|
# renders the apikey and endpoint options as a string for the helper commands
|
164
179
|
def self.cl_options_string
|
165
180
|
string = ""
|
data/lib/td/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -21,6 +21,15 @@ unless ENV['APPVEYOR']
|
|
21
21
|
Coveralls.wear!('rails')
|
22
22
|
end
|
23
23
|
|
24
|
+
RSpec.configure do |config|
|
25
|
+
# This allows you to limit a spec run to individual examples or groups
|
26
|
+
# you care about by tagging them with `:focus` metadata. When nothing
|
27
|
+
# is tagged with `:focus`, all examples get run. RSpec also provides
|
28
|
+
# aliases for `it`, `describe`, and `context` that include `:focus`
|
29
|
+
# metadata: `fit`, `fdescribe` and `fcontext`, respectively.
|
30
|
+
config.filter_run_when_matching :focus
|
31
|
+
end
|
32
|
+
|
24
33
|
require 'td/command/runner'
|
25
34
|
|
26
35
|
def execute_td(command_line)
|
@@ -325,4 +325,84 @@ EOF
|
|
325
325
|
end
|
326
326
|
end
|
327
327
|
end
|
328
|
+
|
329
|
+
describe 'verify argument with mock' do
|
330
|
+
let(:command) { Class.new { include TreasureData::Command }.new }
|
331
|
+
let(:empty_option) { List::CommandParser.new("workflow", [], [], nil, [], true) }
|
332
|
+
let(:td_config){ TreasureData::Config.new }
|
333
|
+
let(:workflow_config){ Hash.new }
|
334
|
+
let(:digdag_env){ Hash.new }
|
335
|
+
let(:config_path){ nil }
|
336
|
+
let(:apikey){ nil }
|
337
|
+
let(:endpoint){ nil }
|
338
|
+
before do
|
339
|
+
# TreasureData::Command::Runner#run
|
340
|
+
if config_path
|
341
|
+
TreasureData::Config.path = config_path
|
342
|
+
end
|
343
|
+
if apikey
|
344
|
+
TreasureData::Config.apikey = apikey
|
345
|
+
TreasureData::Config.cl_apikey = true
|
346
|
+
end
|
347
|
+
if endpoint
|
348
|
+
TreasureData::Config.endpoint = endpoint
|
349
|
+
TreasureData::Config.cl_endpoint = true
|
350
|
+
end
|
351
|
+
|
352
|
+
allow(Kernel).to receive(:system) do |env, *cmd|
|
353
|
+
digdag_env.replace env
|
354
|
+
cmd = cmd.dup
|
355
|
+
args = {nil => []}
|
356
|
+
while x = cmd.shift
|
357
|
+
case x
|
358
|
+
when /\A--\w+\z/
|
359
|
+
args[x] = cmd.shift
|
360
|
+
when /\A-[a-z]+\z/
|
361
|
+
args[x] = cmd.shift
|
362
|
+
when /\A(-[A-Z][^=]*)(?:=(.*))?\z/
|
363
|
+
args[$1] = $2
|
364
|
+
else
|
365
|
+
args[nil] << x
|
366
|
+
end
|
367
|
+
end
|
368
|
+
if args['--config']
|
369
|
+
File.foreach(args['--config']) do |line|
|
370
|
+
k, v = line.strip.split(/\s*=\s*/, 2)
|
371
|
+
workflow_config[k] = v
|
372
|
+
end
|
373
|
+
end
|
374
|
+
td_config_path =
|
375
|
+
env['TREASURE_DATA_CONFIG_PATH'] ||
|
376
|
+
env['TD_CONFIG_PATH'] ||
|
377
|
+
"#{Dir.home}/.config/.td/td.conf"
|
378
|
+
if File.exist?(td_config_path) && args['-Dio.digdag.standards.td.secrets.enabled'] != 'false'
|
379
|
+
td_config.read(td_config_path)
|
380
|
+
end
|
381
|
+
0
|
382
|
+
end
|
383
|
+
end
|
384
|
+
context 'endpoint: https://api.treasuredata.com' do
|
385
|
+
let (:endpoint){ 'https://api.treasuredata.com' }
|
386
|
+
it 'uses td.conf' do
|
387
|
+
apikey = '1/deadbeaf'
|
388
|
+
TreasureData::Config.apikey = apikey # emulate to load from config file
|
389
|
+
op = List::CommandParser.new("workflow", [], [], nil, ['version'], true)
|
390
|
+
command.workflow(op, false, false)
|
391
|
+
expect(workflow_config).to eq({})
|
392
|
+
expect(digdag_env['TREASURE_DATA_WORKFLOW_ENDPOINT']).to be_nil
|
393
|
+
end
|
394
|
+
end
|
395
|
+
context 'endpoint: https://api.treasuredata.co.jp' do
|
396
|
+
let(:apikey){ '1/deadbeaf' }
|
397
|
+
let (:endpoint){ 'https://api.treasuredata.co.jp' }
|
398
|
+
it 'writes temporary workflow conf' do
|
399
|
+
op = List::CommandParser.new("workflow", [], [], nil, ['version'], true)
|
400
|
+
command.workflow(op, false, false)
|
401
|
+
expect(workflow_config['client.http.endpoint']).to eq 'https://api-workflow.treasuredata.co.jp'
|
402
|
+
expect(workflow_config['client.http.headers.authorization']).to eq "TD1 #{apikey}"
|
403
|
+
expect(workflow_config['secrets.td.apikey']).to eq apikey
|
404
|
+
expect(digdag_env['TREASURE_DATA_WORKFLOW_ENDPOINT']).to eq 'https://api-workflow.treasuredata.co.jp'
|
405
|
+
end
|
406
|
+
end
|
407
|
+
end
|
328
408
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'td/config'
|
3
|
+
|
4
|
+
describe TreasureData::Config do
|
5
|
+
context 'workflow_endpoint' do
|
6
|
+
before { TreasureData::Config.endpoint = api_endpoint }
|
7
|
+
subject { TreasureData::Config.workflow_endpoint }
|
8
|
+
context 'api.treasuredata.com' do
|
9
|
+
context 'works without http schema' do
|
10
|
+
let(:api_endpoint){ 'api.treasuredata.com' }
|
11
|
+
it { is_expected.to eq 'https://api-workflow.treasuredata.com' }
|
12
|
+
end
|
13
|
+
context 'works with http schema' do
|
14
|
+
let(:api_endpoint){ 'http://api.treasuredata.com' }
|
15
|
+
it { is_expected.to eq 'https://api-workflow.treasuredata.com' }
|
16
|
+
end
|
17
|
+
context 'works with https schema' do
|
18
|
+
let(:api_endpoint){ 'https://api.treasuredata.com' }
|
19
|
+
it { is_expected.to eq 'https://api-workflow.treasuredata.com' }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
context 'api.treasuredata.co.jp' do
|
23
|
+
let(:api_endpoint){ 'api.treasuredata.co.jp' }
|
24
|
+
it { is_expected.to eq 'https://api-workflow.treasuredata.co.jp' }
|
25
|
+
end
|
26
|
+
context 'api-staging.treasuredata.com' do
|
27
|
+
let(:api_endpoint){ 'api-staging.treasuredata.com' }
|
28
|
+
it { is_expected.to eq 'https://api-staging-workflow.treasuredata.com' }
|
29
|
+
end
|
30
|
+
context 'api-staging.treasuredata.co.jp' do
|
31
|
+
let(:api_endpoint){ 'api-staging.treasuredata.co.jp' }
|
32
|
+
it { is_expected.to eq 'https://api-staging-workflow.treasuredata.co.jp' }
|
33
|
+
end
|
34
|
+
context 'ybi.jp-east.idcfcloud.com' do
|
35
|
+
let(:api_endpoint){ 'ybi.jp-east.idcfcloud.com' }
|
36
|
+
it 'raise error' do
|
37
|
+
expect { subject }.to raise_error(TreasureData::ConfigError)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Treasure Data, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack
|
@@ -280,6 +280,7 @@ files:
|
|
280
280
|
- spec/td/command/workflow_spec.rb
|
281
281
|
- spec/td/common_spec.rb
|
282
282
|
- spec/td/compact_format_yamler_spec.rb
|
283
|
+
- spec/td/config_spec.rb
|
283
284
|
- spec/td/connector_config_normalizer_spec.rb
|
284
285
|
- spec/td/fixture/bulk_load.yml
|
285
286
|
- spec/td/fixture/ca.cert
|
@@ -332,6 +333,7 @@ test_files:
|
|
332
333
|
- spec/td/command/workflow_spec.rb
|
333
334
|
- spec/td/common_spec.rb
|
334
335
|
- spec/td/compact_format_yamler_spec.rb
|
336
|
+
- spec/td/config_spec.rb
|
335
337
|
- spec/td/connector_config_normalizer_spec.rb
|
336
338
|
- spec/td/fixture/bulk_load.yml
|
337
339
|
- spec/td/fixture/ca.cert
|