bosh_cli 0.19.6 → 1.0.rc1
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.
- data/bin/bosh +3 -0
- data/lib/cli.rb +15 -5
- data/lib/cli/{commands/base.rb → base_command.rb} +38 -44
- data/lib/cli/command_discovery.rb +40 -0
- data/lib/cli/command_handler.rb +135 -0
- data/lib/cli/commands/biff.rb +16 -12
- data/lib/cli/commands/blob_management.rb +10 -3
- data/lib/cli/commands/cloudcheck.rb +13 -11
- data/lib/cli/commands/complete.rb +29 -0
- data/lib/cli/commands/deployment.rb +137 -28
- data/lib/cli/commands/help.rb +96 -0
- data/lib/cli/commands/job.rb +4 -1
- data/lib/cli/commands/job_management.rb +36 -23
- data/lib/cli/commands/job_rename.rb +11 -12
- data/lib/cli/commands/log_management.rb +28 -32
- data/lib/cli/commands/maintenance.rb +6 -1
- data/lib/cli/commands/misc.rb +129 -87
- data/lib/cli/commands/package.rb +6 -65
- data/lib/cli/commands/property_management.rb +20 -8
- data/lib/cli/commands/release.rb +211 -206
- data/lib/cli/commands/ssh.rb +178 -188
- data/lib/cli/commands/stemcell.rb +114 -51
- data/lib/cli/commands/task.rb +74 -56
- data/lib/cli/commands/user.rb +6 -3
- data/lib/cli/commands/vms.rb +17 -15
- data/lib/cli/config.rb +27 -1
- data/lib/cli/core_ext.rb +27 -1
- data/lib/cli/deployment_helper.rb +47 -0
- data/lib/cli/director.rb +18 -9
- data/lib/cli/errors.rb +6 -0
- data/lib/cli/job_builder.rb +75 -23
- data/lib/cli/job_property_collection.rb +87 -0
- data/lib/cli/job_property_validator.rb +130 -0
- data/lib/cli/package_builder.rb +32 -5
- data/lib/cli/release.rb +2 -0
- data/lib/cli/release_builder.rb +9 -13
- data/lib/cli/release_compiler.rb +5 -34
- data/lib/cli/release_tarball.rb +4 -19
- data/lib/cli/runner.rb +118 -694
- data/lib/cli/version.rb +1 -1
- data/spec/assets/config/swift-hp/config/final.yml +6 -0
- data/spec/assets/config/swift-hp/config/private.yml +7 -0
- data/spec/assets/config/swift-rackspace/config/final.yml +6 -0
- data/spec/assets/config/swift-rackspace/config/private.yml +6 -0
- data/spec/spec_helper.rb +0 -5
- data/spec/unit/base_command_spec.rb +32 -37
- data/spec/unit/biff_spec.rb +11 -10
- data/spec/unit/cli_commands_spec.rb +96 -88
- data/spec/unit/core_ext_spec.rb +1 -1
- data/spec/unit/deployment_manifest_spec.rb +36 -0
- data/spec/unit/director_spec.rb +17 -3
- data/spec/unit/job_builder_spec.rb +2 -2
- data/spec/unit/job_property_collection_spec.rb +111 -0
- data/spec/unit/job_property_validator_spec.rb +7 -0
- data/spec/unit/job_rename_spec.rb +7 -6
- data/spec/unit/package_builder_spec.rb +2 -2
- data/spec/unit/release_builder_spec.rb +33 -0
- data/spec/unit/release_spec.rb +54 -0
- data/spec/unit/release_tarball_spec.rb +2 -7
- data/spec/unit/runner_spec.rb +1 -151
- data/spec/unit/ssh_spec.rb +15 -9
- metadata +41 -12
- data/lib/cli/command_definition.rb +0 -52
- data/lib/cli/templates/help_message.erb +0 -80
data/lib/cli/commands/task.rb
CHANGED
@@ -3,22 +3,61 @@
|
|
3
3
|
module Bosh::Cli::Command
|
4
4
|
class Task < Base
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
INCLUDE_ALL = "Include all task types (ssh, logs, vms, etc)"
|
7
|
+
|
8
|
+
# bosh task
|
9
|
+
usage "task"
|
10
|
+
desc "Show task status and start tracking its output"
|
11
|
+
option "--no-cache", "Don't cache output locally"
|
12
|
+
option "--event", "Track event log"
|
13
|
+
option "--soap", "Track CPI log"
|
14
|
+
option "--debug", "Track debug log"
|
15
|
+
option "--result", "Track result log"
|
16
|
+
option "--raw", "Show raw log"
|
17
|
+
option "--no-filter", INCLUDE_ALL
|
18
|
+
def track(task_id = nil)
|
12
19
|
auth_required
|
20
|
+
use_filter = !options.key?(:no_filter)
|
21
|
+
use_cache = !options.key?(:no_cache)
|
22
|
+
raw_output = options[:raw]
|
23
|
+
|
24
|
+
log_type = "event"
|
25
|
+
n_types = 0
|
26
|
+
if options[:soap]
|
27
|
+
log_type = "soap"
|
28
|
+
n_types += 1
|
29
|
+
end
|
30
|
+
|
31
|
+
if options[:debug]
|
32
|
+
log_type = "debug"
|
33
|
+
n_types += 1
|
34
|
+
end
|
13
35
|
|
14
|
-
|
36
|
+
if options[:event]
|
37
|
+
log_type = "event"
|
38
|
+
n_types += 1
|
39
|
+
end
|
40
|
+
|
41
|
+
if options[:result]
|
42
|
+
log_type = "result"
|
43
|
+
raw_output = true
|
44
|
+
n_types += 1
|
45
|
+
end
|
46
|
+
|
47
|
+
if n_types > 1
|
48
|
+
err("Cannot track more than one log type")
|
49
|
+
end
|
15
50
|
|
16
51
|
track_options = {
|
17
52
|
:log_type => log_type,
|
18
|
-
:use_cache =>
|
53
|
+
:use_cache => use_cache,
|
19
54
|
:raw_output => raw_output
|
20
55
|
}
|
21
56
|
|
57
|
+
if task_id.nil? || %w(last latest).include?(task_id)
|
58
|
+
task_id = get_last_task_id(get_verbose_level(use_filter))
|
59
|
+
end
|
60
|
+
|
22
61
|
if task_id.to_i <= 0
|
23
62
|
err("Task id must be a positive integer")
|
24
63
|
end
|
@@ -27,83 +66,55 @@ module Bosh::Cli::Command
|
|
27
66
|
tracker.track
|
28
67
|
end
|
29
68
|
|
69
|
+
# bosh tasks
|
70
|
+
usage "tasks"
|
71
|
+
desc "Show running tasks"
|
72
|
+
option "--no-filter", INCLUDE_ALL
|
30
73
|
def list_running
|
31
74
|
auth_required
|
32
|
-
|
75
|
+
use_filter = !options.key?(:no_filter)
|
76
|
+
tasks = director.list_running_tasks(get_verbose_level(use_filter))
|
33
77
|
err("No running tasks") if tasks.empty?
|
34
78
|
show_tasks_table(tasks.sort_by { |t| t["id"].to_i * -1 })
|
35
79
|
say("Total tasks running now: %d" % [tasks.size])
|
36
80
|
end
|
37
81
|
|
82
|
+
# bosh tasks recent
|
83
|
+
usage "tasks recent"
|
84
|
+
desc "Show <number> recent tasks"
|
85
|
+
option "--no-filter", INCLUDE_ALL
|
38
86
|
def list_recent(count = 30)
|
39
87
|
auth_required
|
40
|
-
|
88
|
+
use_filter = !options.key?(:no_filter)
|
89
|
+
tasks = director.list_recent_tasks(count, get_verbose_level(use_filter))
|
41
90
|
err("No recent tasks") if tasks.empty?
|
42
91
|
show_tasks_table(tasks)
|
43
|
-
say("Showing
|
44
|
-
tasks.size == 1 ? "task" : "tasks"])
|
92
|
+
say("Showing #{tasks.size} recent #{tasks.size == 1 ? "task" : "tasks"}")
|
45
93
|
end
|
46
94
|
|
95
|
+
# bosh cancel task
|
96
|
+
usage "cancel task"
|
97
|
+
desc "Cancel task once it reaches the next checkpoint"
|
47
98
|
def cancel(task_id)
|
48
99
|
auth_required
|
49
100
|
task = Bosh::Cli::DirectorTask.new(director, task_id)
|
50
101
|
task.cancel
|
51
|
-
say("
|
102
|
+
say("Task #{task_id} is getting canceled")
|
52
103
|
end
|
53
104
|
|
54
105
|
private
|
55
106
|
|
56
|
-
# Parses the command line args to see what options have been specified.
|
57
|
-
#
|
58
|
-
# @param [Array] flags The args that were passed in from the command line.
|
59
|
-
# @return [String, String, Boolean, Boolean] The task id, the type of log
|
60
|
-
# output, whether to use cache or not, whether to output the raw log.
|
61
|
-
def parse_flags(flags)
|
62
|
-
task_id = flags.shift
|
63
|
-
task_id = get_last_task_id if asking_for_last_task?(task_id)
|
64
|
-
|
65
|
-
log_type = get_log_type(flags)
|
66
|
-
no_cache = flags.include?("--no-cache")
|
67
|
-
raw_output = flags.include?("--raw")
|
68
|
-
|
69
|
-
[task_id, log_type, no_cache, raw_output]
|
70
|
-
end
|
71
|
-
|
72
|
-
# Whether the bosh user has asked for the last (most recently run) task.
|
73
|
-
#
|
74
|
-
# @param [String] task_id The task id specified by the user. Could be a
|
75
|
-
# number as a string or it could be "last" or "latest".
|
76
|
-
# @return [Boolean] Whether the user is asking for the most recent task.
|
77
|
-
def asking_for_last_task?(task_id)
|
78
|
-
task_id.nil? || %w(last latest).include?(task_id)
|
79
|
-
end
|
80
|
-
|
81
107
|
# Returns the task id of the most recently run task.
|
82
|
-
#
|
83
108
|
# @return [String] The task id of the most recently run task.
|
84
|
-
def get_last_task_id
|
85
|
-
last = director.list_recent_tasks(1)
|
86
|
-
if last.
|
109
|
+
def get_last_task_id(verbose = 1)
|
110
|
+
last = director.list_recent_tasks(1, verbose)
|
111
|
+
if last.empty?
|
87
112
|
err("No tasks found")
|
88
113
|
end
|
89
114
|
|
90
115
|
last[0]["id"]
|
91
116
|
end
|
92
117
|
|
93
|
-
# Returns what type of log output the user is asking for.
|
94
|
-
#
|
95
|
-
# @param [Array] flags The args that were passed in from the command line.
|
96
|
-
# @return [String] The type of log output the user is asking for.
|
97
|
-
def get_log_type(flags)
|
98
|
-
if flags.include?("--soap")
|
99
|
-
"soap"
|
100
|
-
elsif flags.include?("--debug")
|
101
|
-
"debug"
|
102
|
-
else
|
103
|
-
"event"
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
118
|
def show_tasks_table(tasks)
|
108
119
|
return if tasks.empty?
|
109
120
|
tasks_table = table do |t|
|
@@ -118,5 +129,12 @@ module Bosh::Cli::Command
|
|
118
129
|
say(tasks_table)
|
119
130
|
say("\n")
|
120
131
|
end
|
132
|
+
|
133
|
+
# Returns the verbose level for the given no_filter flag
|
134
|
+
# @param [Boolean] use_filter Is filtering performed?
|
135
|
+
# @return [Number] director verbose level
|
136
|
+
def get_verbose_level(use_filter)
|
137
|
+
use_filter ? 1 : 2
|
138
|
+
end
|
121
139
|
end
|
122
140
|
end
|
data/lib/cli/commands/user.rb
CHANGED
@@ -3,10 +3,13 @@
|
|
3
3
|
module Bosh::Cli::Command
|
4
4
|
class User < Base
|
5
5
|
|
6
|
+
# bosh create user
|
7
|
+
usage "create user"
|
8
|
+
desc "Create user"
|
6
9
|
def create(username = nil, password = nil)
|
7
10
|
auth_required
|
8
11
|
|
9
|
-
|
12
|
+
if interactive?
|
10
13
|
username = ask("Enter username: ") if username.blank?
|
11
14
|
if password.blank?
|
12
15
|
password = ask("Enter password: ") { |q| q.echo = "*" }
|
@@ -18,9 +21,9 @@ module Bosh::Cli::Command
|
|
18
21
|
end
|
19
22
|
|
20
23
|
if director.create_user(username, password)
|
21
|
-
say("User
|
24
|
+
say("User `#{username}' has been created".green)
|
22
25
|
else
|
23
|
-
|
26
|
+
err("Error creating user")
|
24
27
|
end
|
25
28
|
end
|
26
29
|
|
data/lib/cli/commands/vms.rb
CHANGED
@@ -4,22 +4,22 @@ module Bosh::Cli::Command
|
|
4
4
|
class Vms < Base
|
5
5
|
include Bosh::Cli::DeploymentHelper
|
6
6
|
|
7
|
-
|
7
|
+
usage "vms"
|
8
|
+
desc "List all VMs that in a deployment"
|
9
|
+
option "--full", "Return detailed VM information"
|
10
|
+
def list(deployment_name = nil)
|
8
11
|
auth_required
|
12
|
+
show_full_stats = options[:full]
|
9
13
|
|
10
|
-
|
11
|
-
name = args.first
|
12
|
-
|
13
|
-
if name.nil?
|
14
|
+
if deployment_name.nil?
|
14
15
|
deployment_required
|
15
16
|
manifest = prepare_deployment_manifest
|
16
|
-
|
17
|
+
deployment_name = manifest["name"]
|
17
18
|
end
|
18
19
|
|
19
|
-
say("Deployment
|
20
|
-
|
21
|
-
|
22
|
-
err("No VMs") if vms.size == 0
|
20
|
+
say("Deployment `#{deployment_name.green}'")
|
21
|
+
vms = director.fetch_vm_state(deployment_name)
|
22
|
+
err("No VMs") if vms.empty?
|
23
23
|
|
24
24
|
sorted = vms.sort do |a, b|
|
25
25
|
s = a["job_name"].to_s <=> b["job_name"].to_s
|
@@ -35,17 +35,19 @@ module Bosh::Cli::Command
|
|
35
35
|
t.headings = headings
|
36
36
|
|
37
37
|
sorted.each do |vm|
|
38
|
-
job = "#{vm["job_name"]}/#{vm["index"]
|
39
|
-
|
40
|
-
|
38
|
+
job = "#{vm["job_name"] || "unknown"}/#{vm["index"] || "unknown"}"
|
39
|
+
ips = Array(vm["ips"]).join(", ")
|
40
|
+
|
41
|
+
row = [job, vm["job_state"], vm["resource_pool"], ips]
|
41
42
|
row += [vm["vm_cid"], vm["agent_id"]] if show_full_stats
|
43
|
+
|
42
44
|
t << row
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
|
-
|
48
|
+
nl
|
47
49
|
say(vms_table)
|
48
|
-
|
50
|
+
nl
|
49
51
|
say("VMs total: %d" % vms.size)
|
50
52
|
end
|
51
53
|
|
data/lib/cli/config.rb
CHANGED
@@ -5,14 +5,40 @@ module Bosh::Cli
|
|
5
5
|
VALID_ID = /^[-a-z0-9_.]+$/i
|
6
6
|
|
7
7
|
class << self
|
8
|
+
# @return [Hash<String,Bosh::Cli::CommandDefinition>] Available commands
|
9
|
+
attr_reader :commands
|
10
|
+
|
11
|
+
# @return [Boolean] Should CLI output be colorized?
|
8
12
|
attr_accessor :colorize
|
13
|
+
|
14
|
+
# @return [IO] Where output goes
|
9
15
|
attr_accessor :output
|
16
|
+
|
17
|
+
# @return [Boolean] Is CLI being used interactively?
|
10
18
|
attr_accessor :interactive
|
19
|
+
|
20
|
+
# @return [Bosh::Cli::Cache] CLI cache (to save task logs etc.)
|
11
21
|
attr_accessor :cache
|
12
22
|
end
|
13
23
|
|
24
|
+
@commands = {}
|
25
|
+
@colorize = true
|
26
|
+
@output = nil
|
27
|
+
@interactive = false
|
28
|
+
@cache = nil
|
29
|
+
|
30
|
+
# Register command with BOSH CLI
|
31
|
+
# @param [Bosh::Cli::CommandDefinition] command
|
32
|
+
# @return [void]
|
33
|
+
def self.register_command(command)
|
34
|
+
if @commands.has_key?(command.usage)
|
35
|
+
raise CliError, "Duplicate command `#{command.usage}'"
|
36
|
+
end
|
37
|
+
@commands[command.usage] = command
|
38
|
+
end
|
39
|
+
|
14
40
|
def initialize(filename, work_dir = Dir.pwd)
|
15
|
-
@filename = File.expand_path(filename)
|
41
|
+
@filename = File.expand_path(filename || Bosh::Cli::DEFAULT_CONFIG_PATH)
|
16
42
|
@work_dir = work_dir
|
17
43
|
|
18
44
|
unless File.exists?(@filename)
|
data/lib/cli/core_ext.rb
CHANGED
@@ -27,7 +27,7 @@ module BoshExtensions
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def err(message)
|
30
|
-
raise Bosh::Cli::
|
30
|
+
raise Bosh::Cli::CliError, message
|
31
31
|
end
|
32
32
|
|
33
33
|
def quit(message = nil)
|
@@ -85,6 +85,11 @@ module BoshExtensions
|
|
85
85
|
file.write(yaml.gsub(" \n", "\n"))
|
86
86
|
file.flush
|
87
87
|
end
|
88
|
+
|
89
|
+
# @return [Fixnum]
|
90
|
+
def terminal_width
|
91
|
+
[HighLine::SystemExtensions.terminal_size[0], 120].min
|
92
|
+
end
|
88
93
|
end
|
89
94
|
|
90
95
|
module BoshStringExtensions
|
@@ -138,6 +143,27 @@ module BoshStringExtensions
|
|
138
143
|
end
|
139
144
|
end
|
140
145
|
|
146
|
+
def columnize(width = 80, left_margin = 0)
|
147
|
+
result = ""
|
148
|
+
buf = ""
|
149
|
+
self.split(/\s+/).each do |word|
|
150
|
+
if buf.size + word.size > width
|
151
|
+
result << buf << "\n" << " " * left_margin
|
152
|
+
buf = word + " "
|
153
|
+
else
|
154
|
+
buf << word << " "
|
155
|
+
end
|
156
|
+
|
157
|
+
end
|
158
|
+
result + buf
|
159
|
+
end
|
160
|
+
|
161
|
+
def indent(margin = 2)
|
162
|
+
self.split("\n").map { |line|
|
163
|
+
" " * margin + line
|
164
|
+
}.join("\n")
|
165
|
+
end
|
166
|
+
|
141
167
|
end
|
142
168
|
|
143
169
|
class Object
|
@@ -60,6 +60,7 @@ module Bosh::Cli
|
|
60
60
|
end
|
61
61
|
|
62
62
|
resolve_release_aliases(manifest)
|
63
|
+
resolve_stemcell_aliases(manifest)
|
63
64
|
|
64
65
|
options[:yaml] ? YAML.dump(manifest) : manifest
|
65
66
|
end
|
@@ -336,6 +337,52 @@ module Bosh::Cli
|
|
336
337
|
end
|
337
338
|
end
|
338
339
|
|
340
|
+
# @param [Hash] manifest Deployment manifest (will be modified)
|
341
|
+
# @return [void]
|
342
|
+
def resolve_stemcell_aliases(manifest)
|
343
|
+
return if manifest["resource_pools"].nil?
|
344
|
+
|
345
|
+
manifest["resource_pools"].each do |rp|
|
346
|
+
stemcell = rp["stemcell"]
|
347
|
+
unless stemcell.is_a?(Hash)
|
348
|
+
err("Invalid stemcell spec in the deployment manifest")
|
349
|
+
end
|
350
|
+
if stemcell["version"] == "latest"
|
351
|
+
latest_version = latest_stemcells[stemcell["name"]]
|
352
|
+
if latest_version.nil?
|
353
|
+
err("Latest version for stemcell `#{stemcell["name"]}' is unknown")
|
354
|
+
end
|
355
|
+
# Avoiding {Float,Fixnum} -> String noise in diff
|
356
|
+
if latest_version.to_s == latest_version.to_f.to_s
|
357
|
+
latest_version = latest_version.to_f
|
358
|
+
elsif latest_version.to_s == latest_version.to_i.to_s
|
359
|
+
latest_version = latest_version.to_i
|
360
|
+
end
|
361
|
+
stemcell["version"] = latest_version
|
362
|
+
end
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
366
|
+
# @return [Array]
|
367
|
+
def latest_stemcells
|
368
|
+
@_latest_stemcells ||= begin
|
369
|
+
stemcells = director.list_stemcells.inject({}) do |hash, stemcell|
|
370
|
+
unless stemcell.is_a?(Hash) && stemcell["name"] && stemcell["version"]
|
371
|
+
err("Invalid director stemcell list format")
|
372
|
+
end
|
373
|
+
hash[stemcell["name"]] ||= []
|
374
|
+
hash[stemcell["name"]] << stemcell["version"]
|
375
|
+
hash
|
376
|
+
end
|
377
|
+
|
378
|
+
stemcells.inject({}) do |hash, (name, versions)|
|
379
|
+
hash[name] = versions.sort { |v1, v2| version_cmp(v2, v1) }.first
|
380
|
+
hash
|
381
|
+
end
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
# @return [Array]
|
339
386
|
def latest_releases
|
340
387
|
@_latest_releases ||= begin
|
341
388
|
director.list_releases.inject({}) do |hash, release|
|
data/lib/cli/director.rb
CHANGED
@@ -12,6 +12,12 @@ module Bosh
|
|
12
12
|
|
13
13
|
attr_reader :director_uri
|
14
14
|
|
15
|
+
# @return [String]
|
16
|
+
attr_accessor :user
|
17
|
+
|
18
|
+
# @return [String]
|
19
|
+
attr_accessor :password
|
20
|
+
|
15
21
|
def initialize(director_uri, user = nil, password = nil)
|
16
22
|
if director_uri.nil? || director_uri =~ /^\s*$/
|
17
23
|
raise DirectorMissing, "no director URI given"
|
@@ -78,17 +84,18 @@ module Bosh
|
|
78
84
|
get_json("/deployments")
|
79
85
|
end
|
80
86
|
|
81
|
-
def list_running_tasks
|
87
|
+
def list_running_tasks(verbose = 1)
|
82
88
|
if version_less(get_version, "0.3.5")
|
83
89
|
get_json("/tasks?state=processing")
|
84
90
|
else
|
85
|
-
get_json("/tasks?state=processing,cancelling,queued"
|
91
|
+
get_json("/tasks?state=processing,cancelling,queued" +
|
92
|
+
"&verbose=#{verbose}")
|
86
93
|
end
|
87
94
|
end
|
88
95
|
|
89
|
-
def list_recent_tasks(count = 30)
|
96
|
+
def list_recent_tasks(count = 30, verbose = 1)
|
90
97
|
count = [count.to_i, 100].min
|
91
|
-
get_json("/tasks?limit=#{count}")
|
98
|
+
get_json("/tasks?limit=#{count}&verbose=#{verbose}")
|
92
99
|
end
|
93
100
|
|
94
101
|
def get_release(name)
|
@@ -123,6 +130,12 @@ module Bosh
|
|
123
130
|
upload_and_track(:post, "/releases", filename, options)
|
124
131
|
end
|
125
132
|
|
133
|
+
def rebase_release(filename, options = {})
|
134
|
+
options = options.dup
|
135
|
+
options[:content_type] = "application/x-compressed"
|
136
|
+
upload_and_track(:post, "/releases?rebase=true", filename, options)
|
137
|
+
end
|
138
|
+
|
126
139
|
def delete_stemcell(name, version, options = {})
|
127
140
|
options = options.dup
|
128
141
|
request_and_track(:delete, "/stemcells/#{name}/#{version}", options)
|
@@ -192,11 +205,7 @@ module Bosh
|
|
192
205
|
options[:payload] = JSON.generate(payload)
|
193
206
|
options[:content_type] = "application/json"
|
194
207
|
|
195
|
-
|
196
|
-
|
197
|
-
# TODO: this needs to be done in command handler, not in director.rb
|
198
|
-
return nil if status != :done
|
199
|
-
JSON.parse(get_task_result_log(task_id))
|
208
|
+
request_and_track(:post, url, options)
|
200
209
|
end
|
201
210
|
|
202
211
|
def cleanup_ssh(deployment_name, job, user_regex, indexes, options = {})
|