magellan-cli 0.2.1 → 0.2.2
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/Gemfile.lock +1 -1
- data/lib/magellan/cli/base.rb +1 -0
- data/lib/magellan/cli/command.rb +1 -2
- data/lib/magellan/cli/http.rb +5 -0
- data/lib/magellan/cli/resources/base.rb +5 -1
- data/lib/magellan/cli/resources/cloudsql.rb +32 -0
- data/lib/magellan/cli/resources/stage.rb +60 -2
- data/lib/magellan/cli/resources.rb +1 -0
- data/lib/magellan/cli/version.rb +1 -1
- metadata +3 -4
- data/lib/magellan/cli/resources/container_assignment.rb +0 -43
- data/lib/magellan/cli/resources/vm_instance.rb +0 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afa7a868a64b02328acb0a38a2bfb053de87e49b
|
4
|
+
data.tar.gz: bcabb60c11b143ea38770f29c8067c99e52b56eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9f0d1be5fc876158a71a669a6bb216f0ff349c55d9e5617037087b3a21c3bc6addd26fb468081a82073be2cdf88189af2d1def64d0f8c075fab4930902a19bb2
|
7
|
+
data.tar.gz: eebc2f8eb73895bee74cb42746b983e4f13efbc75dde1fe3a132a354426390bdb11bd8dde8c93d4126823e2b5d1fce9a86017e4662c50945adf867cdd709e0c3
|
data/Gemfile.lock
CHANGED
data/lib/magellan/cli/base.rb
CHANGED
data/lib/magellan/cli/command.rb
CHANGED
@@ -16,10 +16,9 @@ module Magellan
|
|
16
16
|
"client_version" => "ClientVersion",
|
17
17
|
"tr" => "TransactionRouter",
|
18
18
|
"worker" => "WorkerVersion",
|
19
|
-
"instance" => "VmInstance",
|
20
19
|
"image" => "ContainerImage",
|
21
20
|
"container" => "ContainerInstance",
|
22
|
-
"
|
21
|
+
"cloudsql" => "Cloudsql",
|
23
22
|
}.each do |name, classname|
|
24
23
|
desc "#{name} SUBCOMMAND ...ARGS", "manage #{name}"
|
25
24
|
subcommand name, ::Magellan::Cli::Resources.const_get(classname)
|
data/lib/magellan/cli/http.rb
CHANGED
@@ -97,8 +97,13 @@ module Magellan
|
|
97
97
|
when 200...300 then
|
98
98
|
r = JSON.parse(res.body)
|
99
99
|
verbose(JSON.pretty_generate(r))
|
100
|
+
unless r["success"]
|
101
|
+
error(r["message"])
|
102
|
+
end
|
103
|
+
return r
|
100
104
|
else
|
101
105
|
info("\e[31m[#{res.status}]\e[0m\ #{res.body}")
|
106
|
+
return nil
|
102
107
|
end
|
103
108
|
end
|
104
109
|
|
@@ -86,6 +86,10 @@ module Magellan
|
|
86
86
|
|
87
87
|
def list
|
88
88
|
res1 = query_list
|
89
|
+
show_list(res1)
|
90
|
+
end
|
91
|
+
|
92
|
+
def show_list(res1)
|
89
93
|
return $stdout.puts("Total: 0") if res1.empty?
|
90
94
|
|
91
95
|
t = Text::Table.new
|
@@ -151,7 +155,7 @@ module Magellan
|
|
151
155
|
|
152
156
|
def deselect
|
153
157
|
update_selections do |s|
|
154
|
-
s.delete(self.class.
|
158
|
+
s.delete(self.class.parameter_name)
|
155
159
|
end
|
156
160
|
end
|
157
161
|
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require "magellan/cli/resources"
|
3
|
+
|
4
|
+
module Magellan
|
5
|
+
module Cli
|
6
|
+
module Resources
|
7
|
+
|
8
|
+
class Cloudsql < Base
|
9
|
+
self.resource_name = "cloudsql~database"
|
10
|
+
self.resource_dependency = {"stage" => "stage"}
|
11
|
+
self.hidden_fields = %w[cloudsql_instance_id].map(&:freeze).freeze
|
12
|
+
|
13
|
+
desc "create NAME", "create new CloudSQL Database with NAME"
|
14
|
+
def create(name)
|
15
|
+
o = load_selection("stage")
|
16
|
+
params = {
|
17
|
+
parameter_name => {
|
18
|
+
"stage_title_id" => o["id"],
|
19
|
+
"name" => name,
|
20
|
+
}
|
21
|
+
}
|
22
|
+
post_json("/admin/#{resource_name}/new.js", params)
|
23
|
+
end
|
24
|
+
|
25
|
+
desc "delete ID", "delete CloudSQL Database"
|
26
|
+
def delete(id)
|
27
|
+
super("/admin/#{resource_name}/#{id}/delete.js")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -44,6 +44,14 @@ module Magellan
|
|
44
44
|
update_first_result("stage-version", "/admin/stage~version.json", q, %w[id])
|
45
45
|
end
|
46
46
|
|
47
|
+
desc "deselect", "deselect Stage"
|
48
|
+
def deselect
|
49
|
+
update_selections do |s|
|
50
|
+
s.delete("stage")
|
51
|
+
s.delete("stage-version")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
47
55
|
desc "planning", "switch to planning to build next released version"
|
48
56
|
def planning
|
49
57
|
switch_version(1)
|
@@ -66,7 +74,8 @@ module Magellan
|
|
66
74
|
def prepare
|
67
75
|
s = load_selection("stage")
|
68
76
|
id = s["id"]
|
69
|
-
post_json("/admin/stage~title/#{id}/simple_method_call.json", {method_name: "prepare_containers"})
|
77
|
+
r = post_json("/admin/stage~title/#{id}/simple_method_call.json", {method_name: "prepare_containers"})
|
78
|
+
ContainerInstance.new.show_list(r["result"])
|
70
79
|
end
|
71
80
|
|
72
81
|
desc "update ATTRIBUTES", "update stage with ATTRIBUTES"
|
@@ -77,10 +86,51 @@ module Magellan
|
|
77
86
|
end
|
78
87
|
|
79
88
|
desc "release_now", "release changes now"
|
89
|
+
option :A, type: :boolean, default: false, desc: "-A async mode. release_now returns soon"
|
90
|
+
option :i, type: :numeric, default: 10, desc: "-i polling interval(seconds)"
|
91
|
+
option :t, type: :numeric, default: 600, desc: "-t timeout(seconds)"
|
80
92
|
def release_now
|
93
|
+
spacer = "\r" << (" " * 20)
|
94
|
+
print "\rrelease starting"
|
81
95
|
s = load_selection("stage")
|
82
96
|
id = s["id"]
|
83
|
-
post_json("/admin/stage~title/#{id}/simple_method_call.json", {method_name: "release_now"})
|
97
|
+
res0 = post_json("/admin/stage~title/#{id}/simple_method_call.json", {method_name: "release_now"})
|
98
|
+
res1 = res0["result"]
|
99
|
+
if res1
|
100
|
+
print spacer
|
101
|
+
print "\rnow #{res1['status']}"
|
102
|
+
else
|
103
|
+
print spacer
|
104
|
+
puts "\e[31m#{res0.inspect}\e[0m"
|
105
|
+
raise res0["message"]
|
106
|
+
end
|
107
|
+
|
108
|
+
return res1 if options["A"]
|
109
|
+
res2 = get_json("/admin/release~operation.json", build_query("release_job" => res1["id"]))
|
110
|
+
ope = res2.first
|
111
|
+
ope_id = ope["id"]
|
112
|
+
i = options["i"]
|
113
|
+
Timeout.timeout(options["t"]) do
|
114
|
+
loop do
|
115
|
+
sleep(i)
|
116
|
+
res3 = get_json("/admin/release~job/#{ope_id}.json", default_query)
|
117
|
+
st = res3["status"]
|
118
|
+
unless res1["status"] == st
|
119
|
+
case st
|
120
|
+
when "executing" then
|
121
|
+
res4 = get_json("/admin/release~transaction.json", build_query("release_operation" => ope_id))
|
122
|
+
total = res4.length
|
123
|
+
complete = res4.select{ |r| r["status"] == "completed" }.length
|
124
|
+
print spacer
|
125
|
+
print "\rProgress: %2d /%2d" % [complete, total]
|
126
|
+
when "completed", "aborted" then
|
127
|
+
print spacer
|
128
|
+
puts "\r#{st}"
|
129
|
+
return
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
84
134
|
end
|
85
135
|
|
86
136
|
desc "logs", "fetch worker logs"
|
@@ -94,6 +144,14 @@ module Magellan
|
|
94
144
|
end
|
95
145
|
end
|
96
146
|
end
|
147
|
+
|
148
|
+
desc "set_container_num NUM", "set container numbers for selected stage and image"
|
149
|
+
def set_container_num(num)
|
150
|
+
s = load_selection("stage")
|
151
|
+
v = load_selection("stage-version")
|
152
|
+
i = load_selection("container_image")
|
153
|
+
post_json("/admin/stage~version/#{v["id"]}/set_container_num.json", { container_num: num, container_image_id: i["id"] })
|
154
|
+
end
|
97
155
|
end
|
98
156
|
|
99
157
|
end
|
data/lib/magellan/cli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: magellan-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akm2000
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
@@ -151,7 +151,7 @@ files:
|
|
151
151
|
- lib/magellan/cli/resources.rb
|
152
152
|
- lib/magellan/cli/resources/base.rb
|
153
153
|
- lib/magellan/cli/resources/client_version.rb
|
154
|
-
- lib/magellan/cli/resources/
|
154
|
+
- lib/magellan/cli/resources/cloudsql.rb
|
155
155
|
- lib/magellan/cli/resources/container_image.rb
|
156
156
|
- lib/magellan/cli/resources/container_instance.rb
|
157
157
|
- lib/magellan/cli/resources/organization.rb
|
@@ -159,7 +159,6 @@ files:
|
|
159
159
|
- lib/magellan/cli/resources/stage.rb
|
160
160
|
- lib/magellan/cli/resources/team.rb
|
161
161
|
- lib/magellan/cli/resources/transaction_router.rb
|
162
|
-
- lib/magellan/cli/resources/vm_instance.rb
|
163
162
|
- lib/magellan/cli/resources/worker_version.rb
|
164
163
|
- lib/magellan/cli/sample_launch_options.json
|
165
164
|
- lib/magellan/cli/ssl.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require "magellan/cli/resources"
|
3
|
-
|
4
|
-
module Magellan
|
5
|
-
module Cli
|
6
|
-
module Resources
|
7
|
-
|
8
|
-
class ContainerAssignment < Base
|
9
|
-
self.resource_name = "container~assignment"
|
10
|
-
self.resource_dependency = {"stage" => "stage-version"}
|
11
|
-
|
12
|
-
self.field_associations = {
|
13
|
-
"stage_version_id" => {name: "stage", resource: "stage~version"},
|
14
|
-
"vm_instance_id" => {name: "instance", class: "VmInstance"},
|
15
|
-
"container_image_id" => {name: "image", class: "ContainerImage"},
|
16
|
-
}
|
17
|
-
|
18
|
-
desc "create AMOUNT", "create assignment"
|
19
|
-
def create(amount)
|
20
|
-
img = load_selection("container_image")
|
21
|
-
instance = load_selection("vm_instance")
|
22
|
-
stage_version = load_selection("stage-version")
|
23
|
-
params = {
|
24
|
-
"container_assignment" => {
|
25
|
-
"stage_version_id" => stage_version["id"],
|
26
|
-
"vm_instance_id" => instance["id"],
|
27
|
-
"container_image_id" => img["id"],
|
28
|
-
"amount" => amount.to_i,
|
29
|
-
}
|
30
|
-
}
|
31
|
-
post_json("/admin/#{self.resource_name}/new.js", params)
|
32
|
-
end
|
33
|
-
|
34
|
-
desc "delete ID", "delete assignment"
|
35
|
-
def delete(id)
|
36
|
-
super "/admin/#{self.resource_name}/#{id}/delete"
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require "magellan/cli/resources"
|
3
|
-
|
4
|
-
module Magellan
|
5
|
-
module Cli
|
6
|
-
module Resources
|
7
|
-
|
8
|
-
class VmInstance < Base
|
9
|
-
self.resource_name = "vm~instance"
|
10
|
-
self.resource_dependency = {"stage" => "stage"}
|
11
|
-
|
12
|
-
self.multiline_fields = %w[additional_disks_yaml].map(&:freeze).freeze
|
13
|
-
|
14
|
-
no_commands do
|
15
|
-
def query_list
|
16
|
-
stage_id = load_selection("stage")["id"] rescue nil
|
17
|
-
if stage_id
|
18
|
-
get_json("/admin/stage~title/#{stage_id}/instance_list.json", {})
|
19
|
-
else
|
20
|
-
get_json("/admin/vm~instance.json")
|
21
|
-
end
|
22
|
-
end
|
23
|
-
private :query_list
|
24
|
-
end
|
25
|
-
|
26
|
-
def select(name)
|
27
|
-
q = build_query("name" => name)
|
28
|
-
update_first_result(self.class.parameter_name, "/admin/#{self.class.resource_name}.json", q)
|
29
|
-
end
|
30
|
-
|
31
|
-
desc "sample_launch_options", "dump sample launch_options for create"
|
32
|
-
def sample_launch_options
|
33
|
-
$stdout.puts File.read(File.expand_path("../sample_launch_options.json", __FILE__))
|
34
|
-
end
|
35
|
-
|
36
|
-
desc "create NAME [LAUNCH_OPTIONS]", "create Instance"
|
37
|
-
def create(name, launch_options = nil)
|
38
|
-
stage_id = load_selection("stage-version")
|
39
|
-
launch_options = JSON.parse(File.readable?(launch_options) ? File.read(launch_options) : launch_options)
|
40
|
-
|
41
|
-
params = {
|
42
|
-
"host_instance" => {
|
43
|
-
"stage_id" => stage_id,
|
44
|
-
"name" => name,
|
45
|
-
"launch_options_yaml" => YAML.dump(launch_options),
|
46
|
-
}
|
47
|
-
}
|
48
|
-
post_json("/admin/vm~instance/new.js", params)
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|