td 0.10.92 → 0.10.93
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +16 -5
- data/build/update-td-import-java.sh +2 -2
- data/java/VERSION +1 -1
- data/java/td-import-java.version +1 -1
- data/java/td-import.jar +0 -0
- data/lib/td/command/bulk_import.rb +2 -12
- data/lib/td/command/common.rb +0 -8
- data/lib/td/command/db.rb +2 -11
- data/lib/td/command/export.rb +0 -5
- data/lib/td/command/job.rb +24 -20
- data/lib/td/command/list.rb +1 -29
- data/lib/td/command/query.rb +4 -6
- data/lib/td/command/result.rb +4 -12
- data/lib/td/command/sched.rb +13 -20
- data/lib/td/command/table.rb +35 -6
- data/lib/td/command/user.rb +6 -34
- data/lib/td/version.rb +1 -1
- metadata +47 -22
- checksums.yaml +0 -7
- data/lib/td/command/ip_limit.rb +0 -53
- data/lib/td/command/org.rb +0 -63
- data/lib/td/command/role.rb +0 -91
data/ChangeLog
CHANGED
@@ -1,10 +1,21 @@
|
|
1
|
+
== 2013-11-14 version 0.10.93
|
2
|
+
|
3
|
+
* Improve import:prepare command. 'all-string' option is added.
|
4
|
+
* Fix import:prepare command. NumberFormatException often occurs. (When sample method in CSVFileReader class is executed. SimpleDateFormat objects are used in non synchronized block.)
|
5
|
+
* Fix import:prepare command. There are incompatibility with bulk_import command regarding 'NULL' string.
|
6
|
+
* Fix import:prepare command. NullPointerException occurs when unknown column type is specified as 'column-types' option.
|
7
|
+
* Support item type in table:create
|
8
|
+
* Remove organization, role and ip_limit subcommands
|
9
|
+
* Enable query result download even if job status is error
|
10
|
+
|
11
|
+
|
1
12
|
== 2013-11-05 version 0.10.92
|
2
13
|
|
3
|
-
*
|
4
|
-
*
|
5
|
-
*
|
6
|
-
*
|
7
|
-
* Fix import:upload command. NullPointerException often
|
14
|
+
* Improve import commands. It can parse string values of 'HH:mm:ss' time format automatically without specifying '%T' and transfer into long unix timestamp.
|
15
|
+
* Improve import commands. It can parse string values of 'yyyy/MM/dd HH:mm:ss' time format automatically without specifying 'time-format' and transfer into long unix timestamp.
|
16
|
+
* Improve import commands. It can parse string values of 'yyyy/MM/dd HH:mm:ss Z' time format automatically without specifying 'time-format' and transfer into long unix timestamp.
|
17
|
+
* Add 'regex' to source file format option of import:prepare command.
|
18
|
+
* Fix import:upload command. NullPointerException often occurs when data files are uploaded.
|
8
19
|
|
9
20
|
|
10
21
|
== 2013-10-04 version 0.10.91
|
@@ -19,11 +19,11 @@ if [ -n "$chrev" ];then
|
|
19
19
|
fi
|
20
20
|
|
21
21
|
revname="$(git show --pretty=format:'%H %ad' | head -n 1)"
|
22
|
-
vername="0.
|
22
|
+
vername="0.4.1-SNAPSHOT"
|
23
23
|
|
24
24
|
mvn package -Dmaven.test.skip=true || exit 1
|
25
25
|
echo "copy td-import-${vername}.jar"
|
26
|
-
cp target/td-import-${vername}.jar ../../java/td-import.jar
|
26
|
+
cp target/td-import-${vername}-jar-with-dependencies.jar ../../java/td-import.jar
|
27
27
|
echo "copy logging.properties"
|
28
28
|
cp src/test/resources/java/logging.properties ../../java/logging.properties
|
29
29
|
echo "create VERSION file"
|
data/java/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.1-SNAPSHOT
|
data/java/td-import-java.version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
466a09aef2fb634defffbe117cec80777772d7a2 Thu Nov 14 15:35:00 2013 +0900
|
data/java/td-import.jar
CHANGED
Binary file
|
@@ -10,13 +10,11 @@ module Command
|
|
10
10
|
bis = client.bulk_imports
|
11
11
|
|
12
12
|
rows = []
|
13
|
-
has_org = false
|
14
13
|
bis.each {|bi|
|
15
|
-
rows << {:Name=>bi.name, :Table=>"#{bi.database}.#{bi.table}", :Status=>bi.status.to_s.capitalize, :Frozen=>bi.upload_frozen? ? 'Frozen' : '', :JobID=>bi.job_id, :"Valid Parts"=>bi.valid_parts, :"Error Parts"=>bi.error_parts, :"Valid Records"=>bi.valid_records, :"Error Records"=>bi.error_records
|
16
|
-
has_org = true if bi.org_name
|
14
|
+
rows << {:Name=>bi.name, :Table=>"#{bi.database}.#{bi.table}", :Status=>bi.status.to_s.capitalize, :Frozen=>bi.upload_frozen? ? 'Frozen' : '', :JobID=>bi.job_id, :"Valid Parts"=>bi.valid_parts, :"Error Parts"=>bi.error_parts, :"Valid Records"=>bi.valid_records, :"Error Records"=>bi.error_records}
|
17
15
|
}
|
18
16
|
|
19
|
-
puts cmd_render_table(rows, :fields =>
|
17
|
+
puts cmd_render_table(rows, :fields => [:Name, :Table, :Status, :Frozen, :JobID, :"Valid Parts", :"Error Parts", :"Valid Records", :"Error Records"], :max_width=>200)
|
20
18
|
|
21
19
|
if rows.empty?
|
22
20
|
$stderr.puts "There are no bulk import sessions."
|
@@ -25,12 +23,6 @@ module Command
|
|
25
23
|
end
|
26
24
|
|
27
25
|
def bulk_import_create(op)
|
28
|
-
org = nil
|
29
|
-
|
30
|
-
op.on('-g', '--org ORGANIZATION', "create the bulk import session under this organization") {|s|
|
31
|
-
org = s
|
32
|
-
}
|
33
|
-
|
34
26
|
name, db_name, table_name = op.cmd_parse
|
35
27
|
|
36
28
|
client = get_client
|
@@ -38,7 +30,6 @@ module Command
|
|
38
30
|
table = get_table(client, db_name, table_name)
|
39
31
|
|
40
32
|
opts = {}
|
41
|
-
opts['organization'] = org if org
|
42
33
|
client.create_bulk_import(name, db_name, table_name, opts)
|
43
34
|
|
44
35
|
$stderr.puts "Bulk import session '#{name}' is created."
|
@@ -73,7 +64,6 @@ module Command
|
|
73
64
|
exit 1
|
74
65
|
end
|
75
66
|
|
76
|
-
$stderr.puts "Organization : #{bi.org_name}"
|
77
67
|
$stderr.puts "Name : #{bi.name}"
|
78
68
|
$stderr.puts "Database : #{bi.database}"
|
79
69
|
$stderr.puts "Table : #{bi.table}"
|
data/lib/td/command/common.rb
CHANGED
@@ -42,14 +42,6 @@ module Command
|
|
42
42
|
Hirb::Helpers::Table.render(rows, *opts)
|
43
43
|
end
|
44
44
|
|
45
|
-
def gen_table_fields(has_org, fields)
|
46
|
-
if has_org
|
47
|
-
fields.unshift(:Organization)
|
48
|
-
else
|
49
|
-
fields
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
45
|
def normalized_message
|
54
46
|
<<EOS
|
55
47
|
Your event has large number larger than 2^64.
|
data/lib/td/command/db.rb
CHANGED
@@ -30,12 +30,10 @@ module Command
|
|
30
30
|
dbs = client.databases
|
31
31
|
|
32
32
|
rows = []
|
33
|
-
has_org = false
|
34
33
|
dbs.each {|db|
|
35
|
-
rows << {:Name=>db.name, :Count=>db.count
|
36
|
-
has_org = true if db.org_name
|
34
|
+
rows << {:Name=>db.name, :Count=>db.count}
|
37
35
|
}
|
38
|
-
puts cmd_render_table(rows, :fields =>
|
36
|
+
puts cmd_render_table(rows, :fields => [:Name, :Count])
|
39
37
|
|
40
38
|
if dbs.empty?
|
41
39
|
$stderr.puts "There are no databases."
|
@@ -44,12 +42,6 @@ module Command
|
|
44
42
|
end
|
45
43
|
|
46
44
|
def db_create(op)
|
47
|
-
org = nil
|
48
|
-
|
49
|
-
op.on('-g', '--org ORGANIZATION', "create the database under this organization") {|s|
|
50
|
-
org = s
|
51
|
-
}
|
52
|
-
|
53
45
|
db_name = op.cmd_parse
|
54
46
|
|
55
47
|
API.validate_database_name(db_name)
|
@@ -57,7 +49,6 @@ module Command
|
|
57
49
|
client = get_client
|
58
50
|
|
59
51
|
opts = {}
|
60
|
-
opts['organization'] = org if org
|
61
52
|
begin
|
62
53
|
client.create_database(db_name, opts)
|
63
54
|
rescue AlreadyExistsError
|
data/lib/td/command/export.rb
CHANGED
@@ -4,7 +4,6 @@ module Command
|
|
4
4
|
SUPPORTED_FORMATS = %W[json.gz line-json.gz]
|
5
5
|
|
6
6
|
def table_export(op)
|
7
|
-
org = nil
|
8
7
|
from = nil
|
9
8
|
to = nil
|
10
9
|
s3_bucket = nil
|
@@ -12,9 +11,6 @@ module Command
|
|
12
11
|
aws_secret_access_key = nil
|
13
12
|
file_format = nil
|
14
13
|
|
15
|
-
op.on('-g', '--org ORGANIZATION', "export the data under this organization") {|s|
|
16
|
-
org = s
|
17
|
-
}
|
18
14
|
op.on('-f', '--from TIME', 'export data which is newer than or same with the TIME') {|s|
|
19
15
|
from = export_parse_time(s)
|
20
16
|
}
|
@@ -59,7 +55,6 @@ module Command
|
|
59
55
|
client = get_ssl_client
|
60
56
|
|
61
57
|
s3_opts = {}
|
62
|
-
s3_opts['organization'] = org if org
|
63
58
|
s3_opts['from'] = from.to_s if from
|
64
59
|
s3_opts['to'] = to.to_s if to
|
65
60
|
s3_opts['file_format'] = file_format
|
data/lib/td/command/job.rb
CHANGED
@@ -69,16 +69,14 @@ module Command
|
|
69
69
|
jobs = client.jobs(skip, skip+max-1, status, conditions)
|
70
70
|
|
71
71
|
rows = []
|
72
|
-
has_org = false
|
73
72
|
jobs.each {|job|
|
74
73
|
start = job.start_at
|
75
74
|
elapsed = cmd_format_elapsed(start, job.end_at)
|
76
75
|
priority = job_priority_name_of(job.priority)
|
77
|
-
rows << {:JobID => job.job_id, :Database => job.db_name, :Status => job.status, :Type => job.type, :Query => job.query.to_s, :Start => (start ? start.localtime : ''), :Elapsed => elapsed, :Priority => priority, :Result => job.result_url
|
78
|
-
has_org = true if job.org_name
|
76
|
+
rows << {:JobID => job.job_id, :Database => job.db_name, :Status => job.status, :Type => job.type, :Query => job.query.to_s, :Start => (start ? start.localtime : ''), :Elapsed => elapsed, :Priority => priority, :Result => job.result_url}
|
79
77
|
}
|
80
78
|
|
81
|
-
puts cmd_render_table(rows, :fields =>
|
79
|
+
puts cmd_render_table(rows, :fields => [:JobID, :Status, :Start, :Elapsed, :Priority, :Result, :Type, :Database, :Query], :max_width => 140)
|
82
80
|
end
|
83
81
|
|
84
82
|
def job_show(op)
|
@@ -117,28 +115,34 @@ module Command
|
|
117
115
|
|
118
116
|
job = client.job(job_id)
|
119
117
|
|
120
|
-
puts "
|
121
|
-
puts "
|
122
|
-
|
123
|
-
puts "
|
124
|
-
puts "
|
125
|
-
puts "
|
126
|
-
puts "
|
127
|
-
puts "
|
128
|
-
puts "
|
129
|
-
puts "Query : #{job.query}"
|
118
|
+
puts "JobID : #{job.job_id}"
|
119
|
+
#puts "URL : #{job.url}"
|
120
|
+
puts "Status : #{job.status}"
|
121
|
+
puts "Type : #{job.type}"
|
122
|
+
puts "Priority : #{job_priority_name_of(job.priority)}"
|
123
|
+
puts "Retry limit : #{job.retry_limit}"
|
124
|
+
puts "Result : #{job.result_url}"
|
125
|
+
puts "Database : #{job.db_name}"
|
126
|
+
puts "Query : #{job.query}"
|
130
127
|
|
131
128
|
if wait && !job.finished?
|
132
129
|
wait_job(job)
|
133
|
-
if
|
134
|
-
puts "Result
|
135
|
-
|
130
|
+
if [:hive, :pig, :impala].include?(job.type) && !exclude
|
131
|
+
puts "Result :"
|
132
|
+
begin
|
133
|
+
show_result(job, output, format, render_opts)
|
134
|
+
rescue TreasureData::NotFoundError => e
|
135
|
+
# Got 404 because result not found.
|
136
|
+
end
|
136
137
|
end
|
137
138
|
|
138
139
|
else
|
139
|
-
if
|
140
|
-
puts "Result
|
141
|
-
|
140
|
+
if [:hive, :pig, :impala].include?(job.type) && !exclude
|
141
|
+
puts "Result :"
|
142
|
+
begin
|
143
|
+
show_result(job, output, format, render_opts)
|
144
|
+
rescue TreasureData::NotFoundError => e
|
145
|
+
end
|
142
146
|
end
|
143
147
|
|
144
148
|
if verbose
|
data/lib/td/command/list.rb
CHANGED
@@ -127,7 +127,7 @@ module List
|
|
127
127
|
LIST = []
|
128
128
|
COMMAND = {}
|
129
129
|
GUESS = {}
|
130
|
-
HELP_EXCLUDE = [/^help/, /^account/, /^aggr/, /^update/, /^user/, /^
|
130
|
+
HELP_EXCLUDE = [/^help/, /^account/, /^aggr/, /^update/, /^user/, /^acl/]
|
131
131
|
USAGE_EXCLUDE = [/bulk_import:upload_part\z/, /bulk_import:delete_part\z/]
|
132
132
|
|
133
133
|
def self.add_list(name, args, description, *examples)
|
@@ -302,28 +302,11 @@ module List
|
|
302
302
|
add_list 'user:apikey:remove', %w[name apikey], 'Remove an API key from an user'
|
303
303
|
add_list 'user:password:change', %w[name], 'Change password'
|
304
304
|
|
305
|
-
add_list 'role:list', %w[], 'Show list of roles'
|
306
|
-
add_list 'role:show', %w[name], 'Show a role'
|
307
|
-
add_list 'role:create', %w[name], 'Create a role'
|
308
|
-
add_list 'role:delete', %w[name], 'Delete a role'
|
309
|
-
add_list 'role:grant', %w[name user], 'Grant role to an user'
|
310
|
-
add_list 'role:revoke', %w[name user], 'Revoke role from an user'
|
311
|
-
|
312
|
-
add_list 'org:list', %w[], 'Show list of organizations'
|
313
|
-
add_list 'org:show', %w[name], 'Show an organizations'
|
314
|
-
add_list 'org:create', %w[name], 'Create an organizations'
|
315
|
-
add_list 'org:delete', %w[name], 'Delete an organizations'
|
316
|
-
|
317
305
|
add_list 'acl:list', %w[], 'Show list of access controls'
|
318
306
|
add_list 'acl:grant', %w[subject action scope], 'Grant an access control'
|
319
307
|
add_list 'acl:revoke', %w[subject action scope], 'Revoke an access control'
|
320
308
|
# TODO acl:test
|
321
309
|
|
322
|
-
add_list 'ip_limit:list', %w[], 'Show list of all IP range limitations'
|
323
|
-
add_list 'ip_limit:show', %w[org], "Show list of org's IP range limitations"
|
324
|
-
add_list 'ip_limit:set', %w[org ip_range_], 'Set an IP range limitation'
|
325
|
-
add_list 'ip_limit:delete', %w[org], 'Delete an IP range limitation'
|
326
|
-
|
327
310
|
add_list 'aggr:list', %w[], 'Show list of aggregation schemas'
|
328
311
|
add_list 'aggr:show', %w[name], 'Describe a aggregation schema'
|
329
312
|
add_list 'aggr:create', %w[name relation_key], 'Create a aggregation schema'
|
@@ -388,20 +371,9 @@ module List
|
|
388
371
|
add_alias 'user:apikey', 'user:apikey:list'
|
389
372
|
add_alias 'user:apikeys', 'user:apikey:list'
|
390
373
|
|
391
|
-
add_alias 'role', 'role:show'
|
392
|
-
add_alias 'roles', 'role:list'
|
393
|
-
|
394
|
-
add_alias 'org', 'org:show'
|
395
|
-
add_alias 'orgs', 'org:list'
|
396
|
-
add_alias 'organization', 'org:create'
|
397
|
-
add_alias 'organization', 'org:delete'
|
398
|
-
add_alias 'organization', 'org:list'
|
399
|
-
|
400
374
|
add_alias 'acl', 'acl:list'
|
401
375
|
add_alias 'acls', 'acl:list'
|
402
376
|
|
403
|
-
add_alias 'ip_limits', 'ip_limit:list'
|
404
|
-
|
405
377
|
add_alias 'aggr', 'aggr:show'
|
406
378
|
add_alias 'aggrs', 'aggr:list'
|
407
379
|
|
data/lib/td/command/query.rb
CHANGED
@@ -3,7 +3,6 @@ module TreasureData
|
|
3
3
|
module Command
|
4
4
|
|
5
5
|
def query(op)
|
6
|
-
org = nil
|
7
6
|
db_name = nil
|
8
7
|
wait = false
|
9
8
|
output = nil
|
@@ -19,9 +18,6 @@ module Command
|
|
19
18
|
type = nil
|
20
19
|
exclude = false
|
21
20
|
|
22
|
-
op.on('-g', '--org ORGANIZATION', "issue the query under this organization") {|s|
|
23
|
-
org = s
|
24
|
-
}
|
25
21
|
op.on('-d', '--database DB_NAME', 'use the database (required)') {|s|
|
26
22
|
db_name = s
|
27
23
|
}
|
@@ -100,7 +96,6 @@ module Command
|
|
100
96
|
get_database(client, db_name)
|
101
97
|
|
102
98
|
opts = {}
|
103
|
-
opts['organization'] = org if org
|
104
99
|
opts['sampling_all'] = sampling_all if sampling_all
|
105
100
|
opts['type'] = type if type
|
106
101
|
job = client.query(db_name, sql, result_url, priority, retry_limit, opts)
|
@@ -114,7 +109,10 @@ module Command
|
|
114
109
|
puts "Status : #{job.status}"
|
115
110
|
if job.success? && !exclude
|
116
111
|
puts "Result :"
|
117
|
-
|
112
|
+
begin
|
113
|
+
show_result(job, output, format, render_opts)
|
114
|
+
rescue TreasureData::NotFoundError => e
|
115
|
+
end
|
118
116
|
end
|
119
117
|
end
|
120
118
|
end
|
data/lib/td/command/result.rb
CHANGED
@@ -16,9 +16,8 @@ module Command
|
|
16
16
|
exit 1
|
17
17
|
end
|
18
18
|
|
19
|
-
puts "
|
20
|
-
puts "
|
21
|
-
puts "URL : #{r.url}"
|
19
|
+
puts "Name : #{r.name}"
|
20
|
+
puts "URL : #{r.url}"
|
22
21
|
end
|
23
22
|
|
24
23
|
def result_list(op)
|
@@ -29,16 +28,14 @@ module Command
|
|
29
28
|
rs = client.results
|
30
29
|
|
31
30
|
rows = []
|
32
|
-
has_org = false
|
33
31
|
rs.each {|r|
|
34
|
-
rows << {:Name => r.name, :URL => r.url
|
35
|
-
has_org = true if r.org_name
|
32
|
+
rows << {:Name => r.name, :URL => r.url}
|
36
33
|
}
|
37
34
|
rows = rows.sort_by {|map|
|
38
35
|
map[:Name]
|
39
36
|
}
|
40
37
|
|
41
|
-
puts cmd_render_table(rows, :fields =>
|
38
|
+
puts cmd_render_table(rows, :fields => [:Name, :URL])
|
42
39
|
|
43
40
|
if rs.empty?
|
44
41
|
$stderr.puts "There are no result URLs."
|
@@ -47,13 +44,9 @@ module Command
|
|
47
44
|
end
|
48
45
|
|
49
46
|
def result_create(op)
|
50
|
-
org = nil
|
51
47
|
result_user = nil
|
52
48
|
result_ask_password = false
|
53
49
|
|
54
|
-
op.on('-g', '--org ORGANIZATION', "create the result under this organization") {|s|
|
55
|
-
org = s
|
56
|
-
}
|
57
50
|
op.on('-u', '--user NAME', 'set user name for authentication') {|s|
|
58
51
|
result_user = s
|
59
52
|
}
|
@@ -70,7 +63,6 @@ module Command
|
|
70
63
|
url = build_result_url(url, result_user, result_ask_password)
|
71
64
|
|
72
65
|
opts = {}
|
73
|
-
opts['organization'] = org if org
|
74
66
|
begin
|
75
67
|
client.create_result(name, url, opts)
|
76
68
|
rescue AlreadyExistsError
|
data/lib/td/command/sched.rb
CHANGED
@@ -12,22 +12,19 @@ module Command
|
|
12
12
|
scheds = client.schedules
|
13
13
|
|
14
14
|
rows = []
|
15
|
-
has_org = false
|
16
15
|
scheds.each {|sched|
|
17
|
-
rows << {:Name => sched.name, :Cron => sched.cron, :Timezone => sched.timezone, :Delay => sched.delay, :Priority => job_priority_name_of(sched.priority), :Result => sched.result_url, :Database => sched.database, :Query => sched.query, :"Next schedule" => sched.next_time ? sched.next_time.localtime : nil
|
18
|
-
has_org = true if sched.org_name
|
16
|
+
rows << {:Name => sched.name, :Cron => sched.cron, :Timezone => sched.timezone, :Delay => sched.delay, :Priority => job_priority_name_of(sched.priority), :Result => sched.result_url, :Database => sched.database, :Query => sched.query, :"Next schedule" => sched.next_time ? sched.next_time.localtime : nil}
|
19
17
|
}
|
20
18
|
rows = rows.sort_by {|map|
|
21
19
|
map[:Name]
|
22
20
|
}
|
23
21
|
|
24
|
-
puts cmd_render_table(rows, :fields =>
|
22
|
+
puts cmd_render_table(rows, :fields => [:Name, :Cron, :Timezone, :"Next schedule", :Delay, :Priority, :Result, :Database, :Query], :max_width=>500)
|
25
23
|
end
|
26
24
|
|
27
25
|
def sched_create(op)
|
28
26
|
require 'td/command/job' # job_priority_id_of
|
29
27
|
|
30
|
-
org = nil
|
31
28
|
db_name = nil
|
32
29
|
timezone = nil
|
33
30
|
delay = 0
|
@@ -39,9 +36,6 @@ module Command
|
|
39
36
|
retry_limit = nil
|
40
37
|
type = nil
|
41
38
|
|
42
|
-
op.on('-g', '--org ORGANIZATION', "create the schedule under this organization") {|s|
|
43
|
-
org = s
|
44
|
-
}
|
45
39
|
op.on('-d', '--database DB_NAME', 'use the database (required)') {|s|
|
46
40
|
db_name = s
|
47
41
|
}
|
@@ -105,7 +99,7 @@ module Command
|
|
105
99
|
get_database(client, db_name)
|
106
100
|
|
107
101
|
begin
|
108
|
-
first_time = client.create_schedule(name, :cron=>cron, :query=>sql, :database=>db_name, :result=>result_url, :timezone=>timezone, :delay=>delay, :priority=>priority, :retry_limit=>retry_limit, :
|
102
|
+
first_time = client.create_schedule(name, :cron=>cron, :query=>sql, :database=>db_name, :result=>result_url, :timezone=>timezone, :delay=>delay, :priority=>priority, :retry_limit=>retry_limit, :type=>type)
|
109
103
|
rescue AlreadyExistsError
|
110
104
|
cmd_debug_error $!
|
111
105
|
$stderr.puts "Schedule '#{name}' already exists."
|
@@ -243,17 +237,16 @@ module Command
|
|
243
237
|
|
244
238
|
scheds = client.schedules
|
245
239
|
if s = scheds.find {|s| s.name == name }
|
246
|
-
puts "
|
247
|
-
puts "
|
248
|
-
puts "
|
249
|
-
puts "
|
250
|
-
puts "
|
251
|
-
puts "
|
252
|
-
puts "
|
253
|
-
puts "
|
254
|
-
puts "
|
255
|
-
puts "
|
256
|
-
puts "Query : #{s.query}"
|
240
|
+
puts "Name : #{s.name}"
|
241
|
+
puts "Cron : #{s.cron}"
|
242
|
+
puts "Timezone : #{s.timezone}"
|
243
|
+
puts "Delay : #{s.delay} sec"
|
244
|
+
puts "Next : #{s.next_time}"
|
245
|
+
puts "Result : #{s.result_url}"
|
246
|
+
puts "Priority : #{job_priority_name_of(s.priority)}"
|
247
|
+
puts "Retry limit : #{s.retry_limit}"
|
248
|
+
puts "Database : #{s.database}"
|
249
|
+
puts "Query : #{s.query}"
|
257
250
|
end
|
258
251
|
|
259
252
|
rows = []
|
data/lib/td/command/table.rb
CHANGED
@@ -13,6 +13,31 @@ module Command
|
|
13
13
|
]
|
14
14
|
|
15
15
|
def table_create(op)
|
16
|
+
type = nil
|
17
|
+
primary_key = nil
|
18
|
+
primary_key_type = nil
|
19
|
+
|
20
|
+
op.on('-T', '--type TYPE', 'set table type (log or item)') {|s|
|
21
|
+
unless ['item', 'log'].include?(s)
|
22
|
+
raise "Unknown table type #{s.dump}. Supported types: log and item"
|
23
|
+
end
|
24
|
+
type = s.to_sym
|
25
|
+
}
|
26
|
+
op.on('--primary-key PRIMARY_KEY_AND_TYPE', '[primary key]:[primary key type]') {|s|
|
27
|
+
unless /\A[\w]+:(string|int)\z/ =~ s
|
28
|
+
$stderr.puts "--primary-key PRIMARY_KEY_AND_TYPE is required, and should be in the format [primary key]:[primary key type]"
|
29
|
+
exit 1
|
30
|
+
end
|
31
|
+
|
32
|
+
args = s.split(':')
|
33
|
+
if args.length != 2
|
34
|
+
# this really shouldn't happen with the above regex
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
primary_key = args[0]
|
38
|
+
primary_key_type = args[1]
|
39
|
+
}
|
40
|
+
|
16
41
|
db_name, table_name = op.cmd_parse
|
17
42
|
|
18
43
|
#API.validate_database_name(db_name)
|
@@ -24,10 +49,19 @@ module Command
|
|
24
49
|
$stderr.puts " For a list of all reserved keywords, see our FAQ: http://docs.treasure-data.com/articles/faq"
|
25
50
|
end
|
26
51
|
|
52
|
+
if type == :item && (primary_key.nil? || primary_key_type.nil?)
|
53
|
+
$stderr.puts "for TYPE 'item', the primary-key is required"
|
54
|
+
exit 1
|
55
|
+
end
|
56
|
+
|
27
57
|
client = get_client
|
28
58
|
|
29
59
|
begin
|
30
|
-
|
60
|
+
if type == :item
|
61
|
+
client.create_item_table(db_name, table_name, primary_key, primary_key_type)
|
62
|
+
else
|
63
|
+
client.create_log_table(db_name, table_name)
|
64
|
+
end
|
31
65
|
rescue NotFoundError
|
32
66
|
cmd_debug_error $!
|
33
67
|
$stderr.puts "Database '#{db_name}' does not exist."
|
@@ -294,14 +328,10 @@ module Command
|
|
294
328
|
end
|
295
329
|
|
296
330
|
def table_partial_delete(op)
|
297
|
-
org = nil
|
298
331
|
from = nil
|
299
332
|
to = nil
|
300
333
|
wait = false
|
301
334
|
|
302
|
-
op.on('-g', '--org ORGANIZATION', "delete data partially under this organization") {|s|
|
303
|
-
org = s
|
304
|
-
}
|
305
335
|
op.on('-t', '--to TIME', 'end time of logs to delete') {|s|
|
306
336
|
if s.to_i.to_s == s
|
307
337
|
# UNIX time
|
@@ -345,7 +375,6 @@ module Command
|
|
345
375
|
table = get_table(client, db_name, table_name)
|
346
376
|
|
347
377
|
opts = {}
|
348
|
-
opts['organization'] = org if org
|
349
378
|
job = client.partial_delete(db_name, table_name, to, from, opts)
|
350
379
|
|
351
380
|
$stderr.puts "Partial delete job #{job.job_id} is queued."
|
data/lib/td/command/user.rb
CHANGED
@@ -15,10 +15,8 @@ module Command
|
|
15
15
|
exit 1
|
16
16
|
end
|
17
17
|
|
18
|
-
$stderr.puts "Name
|
19
|
-
$stderr.puts "
|
20
|
-
$stderr.puts "Email : #{user.email}"
|
21
|
-
$stderr.puts "Roles : #{user.role_names.join(', ')}"
|
18
|
+
$stderr.puts "Name : #{user.name}"
|
19
|
+
$stderr.puts "Email : #{user.email}"
|
22
20
|
end
|
23
21
|
|
24
22
|
def user_list(op)
|
@@ -30,10 +28,10 @@ module Command
|
|
30
28
|
|
31
29
|
rows = []
|
32
30
|
users.each {|user|
|
33
|
-
rows << {:Name => user.name, :
|
31
|
+
rows << {:Name => user.name, :Email => user.email}
|
34
32
|
}
|
35
33
|
|
36
|
-
puts cmd_render_table(rows, :fields => [:Name, :
|
34
|
+
puts cmd_render_table(rows, :fields => [:Name, :Email])
|
37
35
|
|
38
36
|
if rows.empty?
|
39
37
|
$stderr.puts "There are no users."
|
@@ -42,18 +40,8 @@ module Command
|
|
42
40
|
end
|
43
41
|
|
44
42
|
def user_create(op)
|
45
|
-
org = nil
|
46
43
|
email = nil
|
47
44
|
random_password = false
|
48
|
-
create_org = nil
|
49
|
-
|
50
|
-
op.on('-g', '--org ORGANIZATION', "create the user under this organization") {|s|
|
51
|
-
org = s
|
52
|
-
}
|
53
|
-
|
54
|
-
op.on('-G', "create the user under the a new organization", TrueClass) {|b|
|
55
|
-
create_org = b
|
56
|
-
}
|
57
45
|
|
58
46
|
op.on('-e', '--email EMAIL', "Use this email address to identify the user") {|s|
|
59
47
|
email = s
|
@@ -127,25 +115,9 @@ module Command
|
|
127
115
|
end
|
128
116
|
|
129
117
|
client = get_client(:ssl => true)
|
118
|
+
client.add_user(name, nil, email, password)
|
130
119
|
|
131
|
-
|
132
|
-
org ||= name
|
133
|
-
client.create_organization(org)
|
134
|
-
end
|
135
|
-
|
136
|
-
begin
|
137
|
-
client.add_user(name, org, email, password)
|
138
|
-
ensure
|
139
|
-
if create_org
|
140
|
-
client.delete_organization(org)
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
if create_org
|
145
|
-
$stderr.puts "Organization '#{org}' and user '#{name}' are created."
|
146
|
-
else
|
147
|
-
$stderr.puts "User '#{name}' is created."
|
148
|
-
end
|
120
|
+
$stderr.puts "User '#{name}' is created."
|
149
121
|
$stderr.puts "Use '#{$prog} user:apikeys #{name}' to show the API key."
|
150
122
|
end
|
151
123
|
|
data/lib/td/version.rb
CHANGED
metadata
CHANGED
@@ -1,32 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.10.
|
4
|
+
version: 0.10.93
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Treasure Data, Inc.
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-14 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: msgpack
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
|
-
- - '>='
|
19
|
+
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: 0.4.4
|
20
|
-
- - '!='
|
22
|
+
- - ! '!='
|
21
23
|
- !ruby/object:Gem::Version
|
22
24
|
version: 0.5.0
|
23
|
-
- - '!='
|
25
|
+
- - ! '!='
|
24
26
|
- !ruby/object:Gem::Version
|
25
27
|
version: 0.5.1
|
26
|
-
- - '!='
|
28
|
+
- - ! '!='
|
27
29
|
- !ruby/object:Gem::Version
|
28
30
|
version: 0.5.2
|
29
|
-
- - '!='
|
31
|
+
- - ! '!='
|
30
32
|
- !ruby/object:Gem::Version
|
31
33
|
version: 0.5.3
|
32
34
|
- - <
|
@@ -35,20 +37,21 @@ dependencies:
|
|
35
37
|
type: :runtime
|
36
38
|
prerelease: false
|
37
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
38
41
|
requirements:
|
39
|
-
- - '>='
|
42
|
+
- - ! '>='
|
40
43
|
- !ruby/object:Gem::Version
|
41
44
|
version: 0.4.4
|
42
|
-
- - '!='
|
45
|
+
- - ! '!='
|
43
46
|
- !ruby/object:Gem::Version
|
44
47
|
version: 0.5.0
|
45
|
-
- - '!='
|
48
|
+
- - ! '!='
|
46
49
|
- !ruby/object:Gem::Version
|
47
50
|
version: 0.5.1
|
48
|
-
- - '!='
|
51
|
+
- - ! '!='
|
49
52
|
- !ruby/object:Gem::Version
|
50
53
|
version: 0.5.2
|
51
|
-
- - '!='
|
54
|
+
- - ! '!='
|
52
55
|
- !ruby/object:Gem::Version
|
53
56
|
version: 0.5.3
|
54
57
|
- - <
|
@@ -57,6 +60,7 @@ dependencies:
|
|
57
60
|
- !ruby/object:Gem::Dependency
|
58
61
|
name: yajl-ruby
|
59
62
|
requirement: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
60
64
|
requirements:
|
61
65
|
- - ~>
|
62
66
|
- !ruby/object:Gem::Version
|
@@ -64,6 +68,7 @@ dependencies:
|
|
64
68
|
type: :runtime
|
65
69
|
prerelease: false
|
66
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
67
72
|
requirements:
|
68
73
|
- - ~>
|
69
74
|
- !ruby/object:Gem::Version
|
@@ -71,20 +76,23 @@ dependencies:
|
|
71
76
|
- !ruby/object:Gem::Dependency
|
72
77
|
name: hirb
|
73
78
|
requirement: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
74
80
|
requirements:
|
75
|
-
- - '>='
|
81
|
+
- - ! '>='
|
76
82
|
- !ruby/object:Gem::Version
|
77
83
|
version: 0.4.5
|
78
84
|
type: :runtime
|
79
85
|
prerelease: false
|
80
86
|
version_requirements: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
81
88
|
requirements:
|
82
|
-
- - '>='
|
89
|
+
- - ! '>='
|
83
90
|
- !ruby/object:Gem::Version
|
84
91
|
version: 0.4.5
|
85
92
|
- !ruby/object:Gem::Dependency
|
86
93
|
name: parallel
|
87
94
|
requirement: !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
88
96
|
requirements:
|
89
97
|
- - ~>
|
90
98
|
- !ruby/object:Gem::Version
|
@@ -92,6 +100,7 @@ dependencies:
|
|
92
100
|
type: :runtime
|
93
101
|
prerelease: false
|
94
102
|
version_requirements: !ruby/object:Gem::Requirement
|
103
|
+
none: false
|
95
104
|
requirements:
|
96
105
|
- - ~>
|
97
106
|
- !ruby/object:Gem::Version
|
@@ -99,6 +108,7 @@ dependencies:
|
|
99
108
|
- !ruby/object:Gem::Dependency
|
100
109
|
name: td-client
|
101
110
|
requirement: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
102
112
|
requirements:
|
103
113
|
- - ~>
|
104
114
|
- !ruby/object:Gem::Version
|
@@ -106,6 +116,7 @@ dependencies:
|
|
106
116
|
type: :runtime
|
107
117
|
prerelease: false
|
108
118
|
version_requirements: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
109
120
|
requirements:
|
110
121
|
- - ~>
|
111
122
|
- !ruby/object:Gem::Version
|
@@ -113,6 +124,7 @@ dependencies:
|
|
113
124
|
- !ruby/object:Gem::Dependency
|
114
125
|
name: td-logger
|
115
126
|
requirement: !ruby/object:Gem::Requirement
|
127
|
+
none: false
|
116
128
|
requirements:
|
117
129
|
- - ~>
|
118
130
|
- !ruby/object:Gem::Version
|
@@ -120,6 +132,7 @@ dependencies:
|
|
120
132
|
type: :runtime
|
121
133
|
prerelease: false
|
122
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
none: false
|
123
136
|
requirements:
|
124
137
|
- - ~>
|
125
138
|
- !ruby/object:Gem::Version
|
@@ -127,6 +140,7 @@ dependencies:
|
|
127
140
|
- !ruby/object:Gem::Dependency
|
128
141
|
name: rubyzip
|
129
142
|
requirement: !ruby/object:Gem::Requirement
|
143
|
+
none: false
|
130
144
|
requirements:
|
131
145
|
- - ~>
|
132
146
|
- !ruby/object:Gem::Version
|
@@ -134,6 +148,7 @@ dependencies:
|
|
134
148
|
type: :runtime
|
135
149
|
prerelease: false
|
136
150
|
version_requirements: !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
137
152
|
requirements:
|
138
153
|
- - ~>
|
139
154
|
- !ruby/object:Gem::Version
|
@@ -141,6 +156,7 @@ dependencies:
|
|
141
156
|
- !ruby/object:Gem::Dependency
|
142
157
|
name: rake
|
143
158
|
requirement: !ruby/object:Gem::Requirement
|
159
|
+
none: false
|
144
160
|
requirements:
|
145
161
|
- - ~>
|
146
162
|
- !ruby/object:Gem::Version
|
@@ -148,6 +164,7 @@ dependencies:
|
|
148
164
|
type: :development
|
149
165
|
prerelease: false
|
150
166
|
version_requirements: !ruby/object:Gem::Requirement
|
167
|
+
none: false
|
151
168
|
requirements:
|
152
169
|
- - ~>
|
153
170
|
- !ruby/object:Gem::Version
|
@@ -155,6 +172,7 @@ dependencies:
|
|
155
172
|
- !ruby/object:Gem::Dependency
|
156
173
|
name: rspec
|
157
174
|
requirement: !ruby/object:Gem::Requirement
|
175
|
+
none: false
|
158
176
|
requirements:
|
159
177
|
- - ~>
|
160
178
|
- !ruby/object:Gem::Version
|
@@ -162,6 +180,7 @@ dependencies:
|
|
162
180
|
type: :development
|
163
181
|
prerelease: false
|
164
182
|
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
none: false
|
165
184
|
requirements:
|
166
185
|
- - ~>
|
167
186
|
- !ruby/object:Gem::Version
|
@@ -169,6 +188,7 @@ dependencies:
|
|
169
188
|
- !ruby/object:Gem::Dependency
|
170
189
|
name: simplecov
|
171
190
|
requirement: !ruby/object:Gem::Requirement
|
191
|
+
none: false
|
172
192
|
requirements:
|
173
193
|
- - ~>
|
174
194
|
- !ruby/object:Gem::Version
|
@@ -176,6 +196,7 @@ dependencies:
|
|
176
196
|
type: :development
|
177
197
|
prerelease: false
|
178
198
|
version_requirements: !ruby/object:Gem::Requirement
|
199
|
+
none: false
|
179
200
|
requirements:
|
180
201
|
- - ~>
|
181
202
|
- !ruby/object:Gem::Version
|
@@ -224,14 +245,11 @@ files:
|
|
224
245
|
- lib/td/command/export.rb
|
225
246
|
- lib/td/command/help.rb
|
226
247
|
- lib/td/command/import.rb
|
227
|
-
- lib/td/command/ip_limit.rb
|
228
248
|
- lib/td/command/job.rb
|
229
249
|
- lib/td/command/list.rb
|
230
|
-
- lib/td/command/org.rb
|
231
250
|
- lib/td/command/password.rb
|
232
251
|
- lib/td/command/query.rb
|
233
252
|
- lib/td/command/result.rb
|
234
|
-
- lib/td/command/role.rb
|
235
253
|
- lib/td/command/runner.rb
|
236
254
|
- lib/td/command/sample.rb
|
237
255
|
- lib/td/command/sched.rb
|
@@ -261,26 +279,33 @@ files:
|
|
261
279
|
- td.gemspec
|
262
280
|
homepage: http://treasure-data.com/
|
263
281
|
licenses: []
|
264
|
-
metadata: {}
|
265
282
|
post_install_message:
|
266
283
|
rdoc_options: []
|
267
284
|
require_paths:
|
268
285
|
- lib
|
269
286
|
required_ruby_version: !ruby/object:Gem::Requirement
|
287
|
+
none: false
|
270
288
|
requirements:
|
271
|
-
- - '>='
|
289
|
+
- - ! '>='
|
272
290
|
- !ruby/object:Gem::Version
|
273
291
|
version: '0'
|
292
|
+
segments:
|
293
|
+
- 0
|
294
|
+
hash: 2341272974152018852
|
274
295
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
296
|
+
none: false
|
275
297
|
requirements:
|
276
|
-
- - '>='
|
298
|
+
- - ! '>='
|
277
299
|
- !ruby/object:Gem::Version
|
278
300
|
version: '0'
|
301
|
+
segments:
|
302
|
+
- 0
|
303
|
+
hash: 2341272974152018852
|
279
304
|
requirements: []
|
280
305
|
rubyforge_project:
|
281
|
-
rubygems_version:
|
306
|
+
rubygems_version: 1.8.23
|
282
307
|
signing_key:
|
283
|
-
specification_version:
|
308
|
+
specification_version: 3
|
284
309
|
summary: CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing
|
285
310
|
test_files:
|
286
311
|
- spec/file_reader/filter_spec.rb
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 54ab5db5f823601ee978f163a00352c436d0636a
|
4
|
-
data.tar.gz: b3c3d90f2a273a47d97b904b96a5ba28a2c8ec1d
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: ac9469809cba499a0d9148694bba56a8c732510716885e1d0c63db39e0fe32afdd8c01a001c945ac33e7e4af1701a8c424b54c28b093af4906241634eef28713
|
7
|
-
data.tar.gz: 48d57829a410364a275be6863970293281aa28646be116eb98c425e6b2bc67329d06b5b2bf2a911ccc02a862dcccb7c679d51e05ec39d9b5088939daa598921c
|
data/lib/td/command/ip_limit.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
|
2
|
-
module TreasureData
|
3
|
-
module Command
|
4
|
-
def ip_limit_list(op)
|
5
|
-
op.cmd_parse
|
6
|
-
|
7
|
-
client = get_client
|
8
|
-
|
9
|
-
ip_limits = client.ip_limits
|
10
|
-
rows = ip_limits.map { |ip_limit|
|
11
|
-
{:Organization => ip_limit.org, 'IP Range' => ip_limit.ip_range}
|
12
|
-
}
|
13
|
-
|
14
|
-
puts cmd_render_table(rows, :fields => [:Organization, 'IP Range'])
|
15
|
-
|
16
|
-
if rows.empty?
|
17
|
-
$stderr.puts "There are no IP range limitations."
|
18
|
-
$stderr.puts "Use '#{$prog} ip_limit:set <organization> <ip_range>' to create IP range limitation."
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def ip_limit_show(op)
|
23
|
-
organization = op.cmd_parse
|
24
|
-
|
25
|
-
client = get_client
|
26
|
-
|
27
|
-
ip_limits = client.ip_limits
|
28
|
-
rows = ip_limits.select { |ip_limit|
|
29
|
-
ip_limit.org == organization
|
30
|
-
}.map { |ip_limit| {'IP Range' => ip_limit.ip_range} }
|
31
|
-
|
32
|
-
puts cmd_render_table(rows, :fields => ['IP Range'])
|
33
|
-
end
|
34
|
-
|
35
|
-
def ip_limit_set(op)
|
36
|
-
organization, *ip_ranges = op.cmd_parse
|
37
|
-
|
38
|
-
client = get_client
|
39
|
-
client.set_ip_limit(organization, ip_ranges)
|
40
|
-
|
41
|
-
$stderr.puts "IP range limitations [#{ip_ranges.join(' ')}] are set to #{organization}"
|
42
|
-
end
|
43
|
-
|
44
|
-
def ip_limit_delete(op)
|
45
|
-
organization = op.cmd_parse
|
46
|
-
|
47
|
-
client = get_client
|
48
|
-
client.delete_ip_limit(organization)
|
49
|
-
|
50
|
-
$stderr.puts "All IP range limitations are deleted from #{organization}"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/lib/td/command/org.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
|
2
|
-
module TreasureData
|
3
|
-
module Command
|
4
|
-
|
5
|
-
def org_show(op)
|
6
|
-
name = op.cmd_parse
|
7
|
-
|
8
|
-
client = get_client
|
9
|
-
|
10
|
-
orgs = client.organizations
|
11
|
-
org = orgs.find {|org| name == org.name }
|
12
|
-
unless org
|
13
|
-
$stderr.puts "Organization '#{name}' does not exist."
|
14
|
-
$stderr.puts "Use '#{$prog} org:create <name>' to create an organization."
|
15
|
-
exit 1
|
16
|
-
end
|
17
|
-
|
18
|
-
$stderr.puts "Name : #{org.name}"
|
19
|
-
end
|
20
|
-
|
21
|
-
def org_list(op)
|
22
|
-
op.cmd_parse
|
23
|
-
|
24
|
-
client = get_client
|
25
|
-
|
26
|
-
orgs = client.organizations
|
27
|
-
|
28
|
-
rows = []
|
29
|
-
orgs.each {|org|
|
30
|
-
rows << {:Name => org.name}
|
31
|
-
}
|
32
|
-
|
33
|
-
puts cmd_render_table(rows, :fields => [:Name])
|
34
|
-
|
35
|
-
if rows.empty?
|
36
|
-
$stderr.puts "There are no organizations."
|
37
|
-
$stderr.puts "Use '#{$prog} org:create <name>' to create an organization."
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def org_create(op)
|
42
|
-
name = op.cmd_parse
|
43
|
-
|
44
|
-
client = get_client
|
45
|
-
|
46
|
-
client.create_organization(name)
|
47
|
-
|
48
|
-
$stderr.puts "Organization '#{name}' is created."
|
49
|
-
end
|
50
|
-
|
51
|
-
def org_delete(op)
|
52
|
-
name = op.cmd_parse
|
53
|
-
|
54
|
-
client = get_client
|
55
|
-
|
56
|
-
client.delete_organization(name)
|
57
|
-
|
58
|
-
$stderr.puts "Organization '#{name}' is deleted."
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
data/lib/td/command/role.rb
DELETED
@@ -1,91 +0,0 @@
|
|
1
|
-
|
2
|
-
module TreasureData
|
3
|
-
module Command
|
4
|
-
|
5
|
-
def role_show(op)
|
6
|
-
name = op.cmd_parse
|
7
|
-
|
8
|
-
client = get_client
|
9
|
-
|
10
|
-
roles = client.roles
|
11
|
-
role = roles.find {|role| name == role.name }
|
12
|
-
unless role
|
13
|
-
$stderr.puts "Role '#{name}' does not exist."
|
14
|
-
$stderr.puts "Use '#{$prog} role:create <name>' to create a role."
|
15
|
-
exit 1
|
16
|
-
end
|
17
|
-
|
18
|
-
$stderr.puts "Organization : #{role.org_name}"
|
19
|
-
$stderr.puts "Name : #{role.name}"
|
20
|
-
$stderr.puts "Users : #{role.user_names.join(', ')}"
|
21
|
-
end
|
22
|
-
|
23
|
-
def role_list(op)
|
24
|
-
op.cmd_parse
|
25
|
-
|
26
|
-
client = get_client
|
27
|
-
|
28
|
-
roles = client.roles
|
29
|
-
|
30
|
-
rows = []
|
31
|
-
roles.each {|role|
|
32
|
-
rows << {:Name => role.name, :Organization => role.org_name, :Users => role.user_names.join(',')}
|
33
|
-
}
|
34
|
-
|
35
|
-
puts cmd_render_table(rows, :fields => [:Name, :Organization, :Users])
|
36
|
-
|
37
|
-
if rows.empty?
|
38
|
-
$stderr.puts "There are no roles."
|
39
|
-
$stderr.puts "Use '#{$prog} org:create <name>' to create a role."
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def role_create(op)
|
44
|
-
org = nil
|
45
|
-
|
46
|
-
op.on('-g', '--org ORGANIZATION', "create the role under this organization") {|s|
|
47
|
-
org = s
|
48
|
-
}
|
49
|
-
|
50
|
-
name = op.cmd_parse
|
51
|
-
|
52
|
-
client = get_client
|
53
|
-
|
54
|
-
client.create_role(name, org)
|
55
|
-
|
56
|
-
$stderr.puts "Role '#{name}' is created."
|
57
|
-
end
|
58
|
-
|
59
|
-
def role_delete(op)
|
60
|
-
name = op.cmd_parse
|
61
|
-
|
62
|
-
client = get_client
|
63
|
-
|
64
|
-
client.delete_role(name)
|
65
|
-
|
66
|
-
$stderr.puts "Role '#{name}' is deleted."
|
67
|
-
end
|
68
|
-
|
69
|
-
def role_grant(op)
|
70
|
-
name, user = op.cmd_parse
|
71
|
-
|
72
|
-
client = get_client
|
73
|
-
|
74
|
-
client.grant_role(name, user)
|
75
|
-
|
76
|
-
$stderr.puts "Role '#{name}' is granted to user '#{user}'."
|
77
|
-
end
|
78
|
-
|
79
|
-
def role_revoke(op)
|
80
|
-
name, user = op.cmd_parse
|
81
|
-
|
82
|
-
client = get_client
|
83
|
-
|
84
|
-
client.revoke_role(name, user)
|
85
|
-
|
86
|
-
$stderr.puts "Role '#{name}' is revoked from user '#{user}'."
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|