vagrant-skytap 0.1.8 → 0.1.9
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/.byebug_history +204 -204
- data/autossh.log +21149 -0
- data/lib/vagrant-skytap/action.rb +24 -39
- data/lib/vagrant-skytap/api/environment.rb +19 -1
- data/lib/vagrant-skytap/api/publish_set.rb +36 -0
- data/lib/vagrant-skytap/api/vm.rb +1 -1
- data/lib/vagrant-skytap/cap/public_address.rb +14 -0
- data/lib/vagrant-skytap/command/helpers.rb +30 -0
- data/lib/vagrant-skytap/command/publish_url/create.rb +65 -0
- data/lib/vagrant-skytap/command/publish_url/delete.rb +49 -0
- data/lib/vagrant-skytap/command/publish_url/root.rb +76 -0
- data/lib/vagrant-skytap/command/publish_url/show.rb +29 -0
- data/lib/vagrant-skytap/plugin.rb +11 -1
- data/lib/vagrant-skytap/version.rb +1 -1
- data/locales/en.yml +29 -0
- data/spec/unit/base.rb +1 -4
- data/spec/unit/environment_spec.rb +28 -3
- data/spec/unit/publish_set_spec.rb +78 -0
- data/spec/unit/skeletons/empty_publish_set.json +19 -0
- metadata +12 -3
- data/Vagrantfile.keep +0 -91
@@ -9,9 +9,7 @@ module VagrantPlugins
|
|
9
9
|
# This action is called to halt the remote machine.
|
10
10
|
def self.action_halt
|
11
11
|
Vagrant::Action::Builder.new.tap do |b|
|
12
|
-
b.use
|
13
|
-
b.use InitializeAPIClient
|
14
|
-
b.use FetchEnvironment
|
12
|
+
b.use action_fetch_environment
|
15
13
|
b.use Call, ExistenceCheck do |env1, b1|
|
16
14
|
case result = env1[:result]
|
17
15
|
when :missing_environment, :missing_vm, :no_vms
|
@@ -26,9 +24,7 @@ module VagrantPlugins
|
|
26
24
|
# This action is called to suspend the remote machine.
|
27
25
|
def self.action_suspend
|
28
26
|
Vagrant::Action::Builder.new.tap do |b|
|
29
|
-
b.use
|
30
|
-
b.use InitializeAPIClient
|
31
|
-
b.use FetchEnvironment
|
27
|
+
b.use action_fetch_environment
|
32
28
|
b.use Call, ExistenceCheck do |env1, b1|
|
33
29
|
case result = env1[:result]
|
34
30
|
when :missing_environment, :missing_vm, :no_vms
|
@@ -43,9 +39,7 @@ module VagrantPlugins
|
|
43
39
|
# This action is called to terminate the remote machine.
|
44
40
|
def self.action_destroy
|
45
41
|
Vagrant::Action::Builder.new.tap do |b|
|
46
|
-
b.use
|
47
|
-
b.use InitializeAPIClient
|
48
|
-
b.use FetchEnvironment
|
42
|
+
b.use action_fetch_environment
|
49
43
|
b.use Call, ExistenceCheck do |env, b1|
|
50
44
|
case existence_state = env[:result]
|
51
45
|
when :missing_environment, :no_vms
|
@@ -79,9 +73,7 @@ module VagrantPlugins
|
|
79
73
|
# This action is called when `vagrant provision` is called.
|
80
74
|
def self.action_provision
|
81
75
|
Vagrant::Action::Builder.new.tap do |b|
|
82
|
-
b.use
|
83
|
-
b.use InitializeAPIClient
|
84
|
-
b.use FetchEnvironment
|
76
|
+
b.use action_fetch_environment
|
85
77
|
b.use Call, ExistenceCheck do |env, b1|
|
86
78
|
case result = env[:result]
|
87
79
|
when :missing_environment, :missing_vm, :no_vms
|
@@ -115,9 +107,7 @@ module VagrantPlugins
|
|
115
107
|
# key.
|
116
108
|
def self.action_read_ssh_info
|
117
109
|
Vagrant::Action::Builder.new.tap do |b|
|
118
|
-
b.use
|
119
|
-
b.use InitializeAPIClient
|
120
|
-
b.use FetchEnvironment
|
110
|
+
b.use action_fetch_environment
|
121
111
|
b.use ReadSSHInfo
|
122
112
|
end
|
123
113
|
end
|
@@ -127,9 +117,7 @@ module VagrantPlugins
|
|
127
117
|
# key.
|
128
118
|
def self.action_read_state
|
129
119
|
Vagrant::Action::Builder.new.tap do |b|
|
130
|
-
b.use
|
131
|
-
b.use InitializeAPIClient
|
132
|
-
b.use FetchEnvironment
|
120
|
+
b.use action_fetch_environment
|
133
121
|
#TODO:NLA Can this whole action be removed?
|
134
122
|
b.use ReadState
|
135
123
|
end
|
@@ -138,9 +126,7 @@ module VagrantPlugins
|
|
138
126
|
# This action is called to SSH into the machine.
|
139
127
|
def self.action_ssh
|
140
128
|
Vagrant::Action::Builder.new.tap do |b|
|
141
|
-
b.use
|
142
|
-
b.use InitializeAPIClient
|
143
|
-
b.use FetchEnvironment
|
129
|
+
b.use action_fetch_environment
|
144
130
|
b.use Call, ExistenceCheck do |env1, b1|
|
145
131
|
case result = env1[:result]
|
146
132
|
when :missing_environment, :missing_vm, :no_vms
|
@@ -154,9 +140,7 @@ module VagrantPlugins
|
|
154
140
|
|
155
141
|
def self.action_ssh_run
|
156
142
|
Vagrant::Action::Builder.new.tap do |b|
|
157
|
-
b.use
|
158
|
-
b.use InitializeAPIClient
|
159
|
-
b.use FetchEnvironment
|
143
|
+
b.use action_fetch_environment
|
160
144
|
b.use Call, ExistenceCheck do |env1, b1|
|
161
145
|
case result = env1[:result]
|
162
146
|
when :missing_environment, :missing_vm, :no_vms
|
@@ -185,15 +169,12 @@ module VagrantPlugins
|
|
185
169
|
|
186
170
|
def self.action_resume
|
187
171
|
Vagrant::Action::Builder.new.tap do |b|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
b1.use RunVm
|
195
|
-
b1.use WaitForCommunicator
|
196
|
-
end
|
172
|
+
b.use action_fetch_environment
|
173
|
+
b.use Call, IsSuspended do |env, b1|
|
174
|
+
if env[:result]
|
175
|
+
b1.use MessageResuming
|
176
|
+
b1.use RunVm
|
177
|
+
b1.use WaitForCommunicator
|
197
178
|
end
|
198
179
|
end
|
199
180
|
end
|
@@ -209,9 +190,7 @@ module VagrantPlugins
|
|
209
190
|
def self.action_create
|
210
191
|
Vagrant::Action::Builder.new.tap do |b|
|
211
192
|
b.use HandleBox
|
212
|
-
b.use
|
213
|
-
b.use InitializeAPIClient
|
214
|
-
b.use FetchEnvironment
|
193
|
+
b.use action_fetch_environment
|
215
194
|
b.use Call, ExistenceCheck do |env, b1|
|
216
195
|
case result = env[:result]
|
217
196
|
when :missing_environment
|
@@ -277,9 +256,7 @@ module VagrantPlugins
|
|
277
256
|
|
278
257
|
def self.action_reload
|
279
258
|
Vagrant::Action::Builder.new.tap do |b|
|
280
|
-
b.use
|
281
|
-
b.use InitializeAPIClient
|
282
|
-
b.use FetchEnvironment
|
259
|
+
b.use action_fetch_environment
|
283
260
|
b.use Call, ExistenceCheck do |env, b1|
|
284
261
|
case env[:result]
|
285
262
|
when :missing_environment, :missing_vm, :no_vms
|
@@ -296,6 +273,14 @@ module VagrantPlugins
|
|
296
273
|
end
|
297
274
|
end
|
298
275
|
|
276
|
+
def self.action_fetch_environment
|
277
|
+
Vagrant::Action::Builder.new.tap do |b|
|
278
|
+
b.use ConfigValidate
|
279
|
+
b.use InitializeAPIClient
|
280
|
+
b.use FetchEnvironment
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
299
284
|
# The autoload farm
|
300
285
|
action_root = Pathname.new(File.expand_path("../action", __FILE__))
|
301
286
|
autoload :StoreExtraData, action_root.join("store_extra_data")
|
@@ -4,6 +4,8 @@ require 'vagrant-skytap/environment_properties'
|
|
4
4
|
require 'vagrant-skytap/api/resource'
|
5
5
|
require 'vagrant-skytap/api/vm'
|
6
6
|
require 'vagrant-skytap/api/network'
|
7
|
+
require 'vagrant-skytap/api/publish_set'
|
8
|
+
|
7
9
|
require_relative 'runstate_operations'
|
8
10
|
|
9
11
|
module VagrantPlugins
|
@@ -54,8 +56,12 @@ module VagrantPlugins
|
|
54
56
|
end
|
55
57
|
end
|
56
58
|
|
59
|
+
def get_vms_by_id(ids=[])
|
60
|
+
vms.select{|vm| ids.include?(vm.id)}
|
61
|
+
end
|
62
|
+
|
57
63
|
def get_vm_by_id(id)
|
58
|
-
|
64
|
+
get_vms_by_id([id]).first
|
59
65
|
end
|
60
66
|
|
61
67
|
def current_vm
|
@@ -68,6 +74,12 @@ module VagrantPlugins
|
|
68
74
|
end
|
69
75
|
end
|
70
76
|
|
77
|
+
def publish_sets
|
78
|
+
@publish_sets ||= (get_api_attribute('publish_sets') || []).collect do |ps_attrs|
|
79
|
+
PublishSet.new(ps_attrs, self, env)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
71
83
|
def region
|
72
84
|
get_api_attribute('region')
|
73
85
|
end
|
@@ -75,6 +87,7 @@ module VagrantPlugins
|
|
75
87
|
def refresh(attrs)
|
76
88
|
@vms = nil
|
77
89
|
@networks = nil
|
90
|
+
@publish_sets = nil
|
78
91
|
super
|
79
92
|
end
|
80
93
|
|
@@ -104,6 +117,11 @@ module VagrantPlugins
|
|
104
117
|
self.class.check_vm_before_adding(env, vm)
|
105
118
|
end
|
106
119
|
|
120
|
+
def create_publish_set(attrs={})
|
121
|
+
resp = api_client.post("#{url}/publish_sets", JSON.dump(attrs))
|
122
|
+
PublishSet.new(JSON.load(resp.body), self, env)
|
123
|
+
end
|
124
|
+
|
107
125
|
def properties
|
108
126
|
@properties ||= EnvironmentProperties.new(env[:machine].env.local_data_path)
|
109
127
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'vagrant-skytap/api/resource'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Skytap
|
5
|
+
module API
|
6
|
+
class PublishSet < Resource
|
7
|
+
|
8
|
+
attr_reader :environment
|
9
|
+
reads :id, :url, :desktops_url
|
10
|
+
|
11
|
+
def initialize(attrs, environment, env)
|
12
|
+
super
|
13
|
+
@environment = environment
|
14
|
+
end
|
15
|
+
|
16
|
+
def password_protected?
|
17
|
+
# password attribute contains asterisks or null
|
18
|
+
get_api_attribute('password').present?
|
19
|
+
end
|
20
|
+
|
21
|
+
def vm_ids
|
22
|
+
vm_refs = get_api_attribute("vms").collect{|ref| ref['vm_ref']}
|
23
|
+
vm_refs.collect{|ref| ref.match(/\/vms\/(\d+)/)}.compact.map{|match| match[1]}
|
24
|
+
end
|
25
|
+
|
26
|
+
def vms
|
27
|
+
environment.get_vms_by_id(vm_ids)
|
28
|
+
end
|
29
|
+
|
30
|
+
def delete
|
31
|
+
api_client.delete(url)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Skytap
|
3
|
+
module Command
|
4
|
+
module Helpers
|
5
|
+
def target_vms
|
6
|
+
@target_vms ||= [].tap do |ret|
|
7
|
+
with_target_vms{|machine| ret << machine}
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def fetch_environment
|
12
|
+
if machine = target_vms.first
|
13
|
+
@environment ||= machine.action(:fetch_environment)[:environment]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def target_skytap_vms
|
18
|
+
fetch_environment.get_vms_by_id(target_vms.collect(&:id))
|
19
|
+
end
|
20
|
+
|
21
|
+
def machine_names(vm_ids)
|
22
|
+
target_vms.select{|m| vm_ids.include?(m.id)}.collect{|m| m.name.to_s}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'vagrant-skytap/command/helpers'
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module Skytap
|
6
|
+
module Command
|
7
|
+
module PublishUrl
|
8
|
+
class Create < Vagrant.plugin("2", :command)
|
9
|
+
include Command::Helpers
|
10
|
+
|
11
|
+
def execute
|
12
|
+
options = {}
|
13
|
+
|
14
|
+
opts = OptionParser.new do |o|
|
15
|
+
o.banner = "Usage: vagrant publish-url create [options]"
|
16
|
+
o.separator ""
|
17
|
+
o.separator "Options:"
|
18
|
+
o.separator ""
|
19
|
+
|
20
|
+
|
21
|
+
o.on("-p", "--password PASSWORD", "Set a password for the publish set") do |p|
|
22
|
+
options[:password] = p
|
23
|
+
end
|
24
|
+
|
25
|
+
o.on("-np", "--no-password", "Do not set a password") do |np|
|
26
|
+
options[:no_password] = true
|
27
|
+
end
|
28
|
+
|
29
|
+
o.separator ""
|
30
|
+
o.separator "You will be prompted for a password unless one of the"
|
31
|
+
o.separator "options --password or --no-password have been provided."
|
32
|
+
o.separator "Blank passwords are allowed."
|
33
|
+
o.separator ""
|
34
|
+
end
|
35
|
+
|
36
|
+
return unless argv = parse_options(opts)
|
37
|
+
|
38
|
+
unless options[:no_password] || password = options[:password]
|
39
|
+
password = @env.ui.ask("Password for publish set (will be hidden; blank for no password): ", echo: false)
|
40
|
+
end
|
41
|
+
password ||= ""
|
42
|
+
|
43
|
+
ps = fetch_environment.create_publish_set(
|
44
|
+
name: "Vagrant publish set",
|
45
|
+
publish_set_type: "single_url",
|
46
|
+
vms: target_skytap_vms.collect do |vm|
|
47
|
+
{
|
48
|
+
vm_ref: vm.url,
|
49
|
+
access: "run_and_use",
|
50
|
+
}
|
51
|
+
end,
|
52
|
+
password: password
|
53
|
+
)
|
54
|
+
@logger.debug("New publish set: #{ps.url}")
|
55
|
+
|
56
|
+
@env.ui.info(I18n.t("vagrant_skytap.commands.publish_urls.created", url: ps.desktops_url))
|
57
|
+
|
58
|
+
# Success, exit status 0
|
59
|
+
0
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
require 'vagrant-skytap/command/helpers'
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module Skytap
|
6
|
+
module Command
|
7
|
+
module PublishUrl
|
8
|
+
class Delete < Vagrant.plugin("2", :command)
|
9
|
+
include Command::Helpers
|
10
|
+
|
11
|
+
def execute
|
12
|
+
options = {}
|
13
|
+
|
14
|
+
opts = OptionParser.new do |o|
|
15
|
+
o.separator ""
|
16
|
+
o.separator "Deletes all published URLs for this project, including any"
|
17
|
+
o.separator "created through the Skytap UI."
|
18
|
+
|
19
|
+
o.banner = "Usage: vagrant publish-url delete [options]"
|
20
|
+
o.separator ""
|
21
|
+
o.separator "Options:"
|
22
|
+
o.separator ""
|
23
|
+
|
24
|
+
o.on("-f", "--force", "Delete without prompting") do |f|
|
25
|
+
options[:force] = f
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
return unless argv = parse_options(opts)
|
30
|
+
|
31
|
+
if publish_sets = fetch_environment.publish_sets.presence
|
32
|
+
unless options[:force]
|
33
|
+
confirm = @env.ui.ask(I18n.t("vagrant_skytap.commands.publish_urls.confirm_delete"))
|
34
|
+
return unless confirm.downcase == 'y'
|
35
|
+
end
|
36
|
+
publish_sets.each(&:delete)
|
37
|
+
@env.ui.info(I18n.t("vagrant_skytap.commands.publish_urls.deleted"))
|
38
|
+
else
|
39
|
+
@env.ui.info(I18n.t("vagrant_skytap.commands.publish_urls.empty_list"))
|
40
|
+
end
|
41
|
+
|
42
|
+
# Success, exit status 0
|
43
|
+
0
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Skytap
|
5
|
+
module Command
|
6
|
+
module PublishUrl
|
7
|
+
class Root < Vagrant.plugin("2", :command)
|
8
|
+
def self.synopsis
|
9
|
+
"manages published URLs"
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(argv, env)
|
13
|
+
super
|
14
|
+
|
15
|
+
@main_args, @sub_command, @sub_args = split_main_and_subcommand(argv)
|
16
|
+
|
17
|
+
@subcommands = Vagrant::Registry.new
|
18
|
+
@subcommands.register(:create) do
|
19
|
+
require_relative "create"
|
20
|
+
Create
|
21
|
+
end
|
22
|
+
|
23
|
+
@subcommands.register(:delete) do
|
24
|
+
require_relative "delete"
|
25
|
+
Delete
|
26
|
+
end
|
27
|
+
|
28
|
+
@subcommands.register(:show) do
|
29
|
+
require_relative "show"
|
30
|
+
Show
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def execute
|
35
|
+
if @main_args.include?("-h") || @main_args.include?("--help")
|
36
|
+
# Print the help for all the box commands.
|
37
|
+
return help
|
38
|
+
end
|
39
|
+
|
40
|
+
# If we reached this far then we must have a subcommand. If not,
|
41
|
+
# then we also just print the help and exit.
|
42
|
+
command_class = @subcommands.get(@sub_command.to_sym) if @sub_command
|
43
|
+
return help if !command_class || !@sub_command
|
44
|
+
@logger.debug("Invoking command class: #{command_class} #{@sub_args.inspect}")
|
45
|
+
|
46
|
+
# Initialize and execute the command class
|
47
|
+
command_class.new(@sub_args, @env).execute
|
48
|
+
end
|
49
|
+
|
50
|
+
# Prints the help out for this command
|
51
|
+
def help
|
52
|
+
opts = OptionParser.new do |opts|
|
53
|
+
opts.banner = "Usage: vagrant publish-url <subcommand> [<args>]"
|
54
|
+
opts.separator ""
|
55
|
+
opts.separator "Available subcommands:"
|
56
|
+
|
57
|
+
# Add the available subcommands as separators in order to print them
|
58
|
+
# out as well.
|
59
|
+
keys = []
|
60
|
+
@subcommands.each { |key, value| keys << key.to_s }
|
61
|
+
|
62
|
+
keys.sort.each do |key|
|
63
|
+
opts.separator " #{key}"
|
64
|
+
end
|
65
|
+
|
66
|
+
opts.separator ""
|
67
|
+
opts.separator "For help on any individual subcommand run `vagrant publish-url <subcommand> -h`"
|
68
|
+
end
|
69
|
+
|
70
|
+
@env.ui.info(opts.help, prefix: false)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'vagrant-skytap/command/helpers'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Skytap
|
5
|
+
module Command
|
6
|
+
module PublishUrl
|
7
|
+
class Show < Vagrant.plugin("2", :command)
|
8
|
+
include Command::Helpers
|
9
|
+
|
10
|
+
def execute
|
11
|
+
if publish_sets = fetch_environment.publish_sets.presence
|
12
|
+
results = publish_sets.collect do |ps|
|
13
|
+
"#{ps.desktops_url || 'n/a'}\n" \
|
14
|
+
" VMs: #{machine_names(ps.vm_ids).join(', ').presence || '(none)'}" \
|
15
|
+
" Password protected? #{ps.password_protected? ? 'yes' : 'no'}"
|
16
|
+
end
|
17
|
+
@env.ui.info(I18n.t("vagrant_skytap.commands.publish_urls.list", publish_urls: results.join("\n")))
|
18
|
+
else
|
19
|
+
@env.ui.info(I18n.t("vagrant_skytap.commands.publish_urls.empty_list"))
|
20
|
+
end
|
21
|
+
|
22
|
+
# Success, exit status 0
|
23
|
+
0
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -36,7 +36,17 @@ module VagrantPlugins
|
|
36
36
|
|
37
37
|
command("up", primary: true) do
|
38
38
|
require_relative "command/up"
|
39
|
-
Command::Up
|
39
|
+
Skytap::Command::Up
|
40
|
+
end
|
41
|
+
|
42
|
+
command("publish-url", primary: true) do
|
43
|
+
require_relative "command/publish_url/root"
|
44
|
+
Skytap::Command::PublishUrl::Root
|
45
|
+
end
|
46
|
+
|
47
|
+
provider_capability(:skytap, :public_address) do
|
48
|
+
require_relative "cap/public_address"
|
49
|
+
Cap::PublicAddress
|
40
50
|
end
|
41
51
|
|
42
52
|
# This initializes the internationalization strings.
|
data/locales/en.yml
CHANGED
@@ -136,3 +136,32 @@ en:
|
|
136
136
|
long_busy: |-
|
137
137
|
The Skytap instance is busy. Wait for the current operation to complete.
|
138
138
|
|
139
|
+
commands:
|
140
|
+
publish_urls:
|
141
|
+
list: |-
|
142
|
+
The VMs in this Skytap environment can be accessed through the
|
143
|
+
following published URL(s):
|
144
|
+
%{publish_urls}
|
145
|
+
empty_list: |-
|
146
|
+
No published URLs were found for this Skytap environment. Run
|
147
|
+
`vagrant publish-url create` to create one.
|
148
|
+
created: |-
|
149
|
+
This Skytap environment (or the specified subset of VMs) can be
|
150
|
+
accessed at the following URL: %{url}
|
151
|
+
Note that anyone with this URL and password will have full control
|
152
|
+
of the VMs until the published URL is deleted. (Finer-grained
|
153
|
+
control is available through the Skytap UI.)
|
154
|
+
already_exists: |-
|
155
|
+
There is already a published URL for this Skytap environment.
|
156
|
+
To modify the published URL, please delete it and create a new
|
157
|
+
one. (Finer-grained control is available through the Skytap UI.)
|
158
|
+
confirm_delete: |-
|
159
|
+
This action will delete ALL published URLs for this Skytap
|
160
|
+
environment, including those created through the Skytap UI.
|
161
|
+
Are you sure you wish to do this? [yN]
|
162
|
+
deleted: |-
|
163
|
+
All published URLs for this Skytap environment (including those
|
164
|
+
created through the Skytap UI) have been deleted. Users cannot
|
165
|
+
manage these VMs, or access them through SmartClient, unless they
|
166
|
+
have a Skytap user account with appropriate permissions.
|
167
|
+
|
data/spec/unit/base.rb
CHANGED
@@ -23,10 +23,7 @@ require "unit/support/shared/capability_helpers_context"
|
|
23
23
|
require "unit/support/shared/plugin_command_context"
|
24
24
|
require "unit/support/shared/skytap_context"
|
25
25
|
|
26
|
-
require "vagrant-skytap
|
27
|
-
require "vagrant-skytap/core_ext/object/tap"
|
28
|
-
require "vagrant-skytap/core_ext/try"
|
29
|
-
require "vagrant-skytap/plugin"
|
26
|
+
require "vagrant-skytap"
|
30
27
|
|
31
28
|
# Do not buffer output
|
32
29
|
$stdout.sync = true
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require_relative 'base'
|
2
2
|
require "vagrant-skytap/api/environment"
|
3
3
|
require "vagrant-skytap/api/vm"
|
4
|
-
require "vagrant-skytap/errors"
|
5
4
|
|
6
5
|
describe VagrantPlugins::Skytap::API::Environment do
|
7
6
|
include_context "unit"
|
@@ -13,6 +12,7 @@ describe VagrantPlugins::Skytap::API::Environment do
|
|
13
12
|
let(:network1_attrs) { JSON.load(File.read(File.join(File.expand_path('..', __FILE__), 'skeletons', 'network1.json'))) }
|
14
13
|
let(:vpn_attachment1_attrs) { JSON.load(File.read(File.join(File.expand_path('..', __FILE__), 'skeletons', 'vpn_attachment1.json'))) }
|
15
14
|
let(:empty_environment_attrs) { JSON.load(File.read(File.join(File.expand_path('..', __FILE__), 'skeletons', 'empty_environment.json')))}
|
15
|
+
let(:empty_publish_set_attrs) { JSON.load(File.read(File.join(File.expand_path('..', __FILE__), 'skeletons', 'empty_publish_set.json')))}
|
16
16
|
|
17
17
|
let(:attrs_one_vm) do
|
18
18
|
empty_environment_attrs.dup.tap do |ret|
|
@@ -26,6 +26,11 @@ describe VagrantPlugins::Skytap::API::Environment do
|
|
26
26
|
let(:attrs) do
|
27
27
|
attrs_one_vm.dup.tap do |ret|
|
28
28
|
ret['vms'] = [vm1_attrs, vm2_attrs]
|
29
|
+
ret['publish_sets'] = [empty_publish_set_attrs.dup]
|
30
|
+
ret['publish_sets'].first['vms'] = [
|
31
|
+
{"vm_ref" => "http://example.com/vms/#{vm1_attrs['id']}"},
|
32
|
+
{"vm_ref" => "http://example.com/vms/#{vm2_attrs['id']}"}
|
33
|
+
]
|
29
34
|
end
|
30
35
|
end
|
31
36
|
|
@@ -123,6 +128,13 @@ describe VagrantPlugins::Skytap::API::Environment do
|
|
123
128
|
it { should be_a VagrantPlugins::Skytap::API::Network }
|
124
129
|
end
|
125
130
|
|
131
|
+
describe "publish_sets" do
|
132
|
+
subject do
|
133
|
+
instance.publish_sets.first
|
134
|
+
end
|
135
|
+
it { should be_a VagrantPlugins::Skytap::API::PublishSet }
|
136
|
+
end
|
137
|
+
|
126
138
|
describe "get_vm_by_id" do
|
127
139
|
subject do
|
128
140
|
instance
|
@@ -135,9 +147,20 @@ describe VagrantPlugins::Skytap::API::Environment do
|
|
135
147
|
end
|
136
148
|
end
|
137
149
|
|
150
|
+
describe "get_vms_by_id" do
|
151
|
+
subject do
|
152
|
+
instance
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should return the appropriate vms from the collection" do
|
156
|
+
expect(subject.vms.count).to eq 2
|
157
|
+
expect(subject.get_vms_by_id(['6981850', '6981851']).collect(&:name)).to eq ['VM1', 'VM2']
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
138
161
|
describe "reload" do
|
139
162
|
subject do
|
140
|
-
old_attrs = attrs_one_vm.merge('networks' => [])
|
163
|
+
old_attrs = attrs_one_vm.merge('networks' => [], 'publish_sets' => [])
|
141
164
|
new_attrs = attrs.merge('name' => 'Environment with 2 vms')
|
142
165
|
client = double('api_client',
|
143
166
|
get: double('resp', body: JSON.dump(new_attrs))
|
@@ -146,14 +169,16 @@ describe VagrantPlugins::Skytap::API::Environment do
|
|
146
169
|
described_class.new(old_attrs, myenv)
|
147
170
|
end
|
148
171
|
|
149
|
-
it "reloads the
|
172
|
+
it "reloads the child objects" do
|
150
173
|
expect(subject.name).to eq 'Environment 1'
|
151
174
|
expect(subject.vms.count).to eq 1
|
152
175
|
expect(subject.networks.count).to eq 0
|
176
|
+
expect(subject.publish_sets.count).to eq 0
|
153
177
|
subject.reload
|
154
178
|
expect(subject.name).to eq 'Environment with 2 vms'
|
155
179
|
expect(subject.vms.count).to eq 2
|
156
180
|
expect(subject.networks.count).to eq 1
|
181
|
+
expect(subject.publish_sets.count).to eq 1
|
157
182
|
end
|
158
183
|
end
|
159
184
|
|