vagrant-skytap 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,361 @@
1
+ # HG changeset patch
2
+ # Parent 3713c076cd219f51dd1ec0e9bc6409b8bedae26f
3
+ # Parent 3c74e38a2da6d728e18975b99f87943a20209c10
4
+ [mq]: tmp
5
+ * * *
6
+ [mq]: 2015-11-19_20-26-00_r88+.diff
7
+
8
+ diff -r 3713c076cd21 lib/vagrant-skytap/action.rb
9
+ --- a/lib/vagrant-skytap/action.rb Thu Nov 19 21:24:32 2015 -0800
10
+ +++ b/lib/vagrant-skytap/action.rb Thu Nov 19 21:25:06 2015 -0800
11
+ @@ -168,6 +168,11 @@
12
+ end
13
+ end
14
+
15
+ + # Some middlewares perform further actions after the succeeding
16
+ + # middleware returns. Provision and SyncedFolders, specifically,
17
+ + # both require the machine to be booted. This requirement can be
18
+ + # satisfied by putting the WaitForCommunicator middleware further
19
+ + # down in the sequence.
20
+ def self.action_prepare_boot
21
+ Vagrant::Action::Builder.new.tap do |b|
22
+ b.use PrepareNFSSettings
23
+ @@ -188,27 +193,11 @@
24
+ def self.action_up
25
+ Vagrant::Action::Builder.new.tap do |b|
26
+ b.use action_create
27
+ -
28
+ - b.use Call, IsStopped do |env, b1|
29
+ - if env[:result]
30
+ - # this has some kind of hook that executes
31
+ - # when #action returns
32
+ - b1.use action_prepare_boot
33
+ - end
34
+ - end
35
+ -
36
+ - b.use Call, IsRunning do |env, b1|
37
+ - if env[:result]
38
+ - b1.use MessageAlreadyRunning
39
+ - next
40
+ - end
41
+ - b1.use RunVm
42
+ - b1.use WaitForCommunicator
43
+ - end
44
+ + b.use action_run_vm
45
+ end
46
+ end
47
+
48
+ - # Pulled out of action_up to allow
49
+ + # This action is called by our modified "up" command.
50
+ def self.action_create
51
+ Vagrant::Action::Builder.new.tap do |b|
52
+ b.use HandleBox
53
+ @@ -237,11 +226,49 @@
54
+ end
55
+ end
56
+
57
+ - def self.action_run_environment
58
+ +# # This action is called by our modified "up" command.
59
+ +# def self.action_update_properties
60
+ +# Vagrant::Action::Builder.new.tap do |b|
61
+ +# b.use InitializeAPIClient
62
+ +# b.use FetchEnvironment
63
+ +# b.use Call, IsStopped do |env, b1|
64
+ +# if env[:result]
65
+ +# b1.use UpdateHardware
66
+ +# b1.use SetHostname
67
+ +# end
68
+ +# end
69
+ +# end
70
+ +# end
71
+ +
72
+ + # This action is called by our modified "up" command after
73
+ + # all the VMs have been created. The action is called once
74
+ + # for each machine, but by default, the RunEnvironment
75
+ + # middleware will run all the machines in parallel; after
76
+ + # the first invocation, RunEnvironment is a no-op.
77
+ + def self.action_run_vm
78
+ Vagrant::Action::Builder.new.tap do |b|
79
+ b.use InitializeAPIClient
80
+ b.use FetchEnvironment
81
+ - b.use RunEnvironment
82
+ + b.use Call, InitialState do |env, b1|
83
+ + case env[:result]
84
+ + when :running
85
+ + b1.use MessageAlreadyRunning
86
+ + next
87
+ + when :suspended
88
+ + b1.use Message, "The machine will be resumed"
89
+ + when :stopped
90
+ + b1.use action_prepare_boot
91
+ + end
92
+ +
93
+ + b1.use Call, IsParallelized do |env2, b2|
94
+ + if env2[:result]
95
+ + b2.use RunEnvironment
96
+ + else
97
+ + b2.use RunVm
98
+ + end
99
+ + end
100
+ + end
101
+ + b.use WaitForCommunicator
102
+ end
103
+ end
104
+
105
+ @@ -272,6 +299,8 @@
106
+ autoload :ExistenceCheck, action_root.join("existence_check")
107
+ autoload :FetchEnvironment, action_root.join("fetch_environment")
108
+ autoload :InitializeAPIClient, action_root.join("initialize_api_client")
109
+ + autoload :InitialState, action_root.join("initial_state")
110
+ + autoload :IsParallelized, action_root.join("is_parallelized")
111
+ autoload :IsRunning, action_root.join("is_running")
112
+ autoload :IsStopped, action_root.join("is_stopped")
113
+ autoload :IsSuspended, action_root.join("is_suspended")
114
+ @@ -284,6 +313,7 @@
115
+ autoload :PrepareNFSValidIds, action_root.join("prepare_nfs_valid_ids")
116
+ autoload :ReadSSHInfo, action_root.join("read_ssh_info")
117
+ autoload :ReadState, action_root.join("read_state")
118
+ + autoload :RequiresBoot, action_root.join("requires_boot")
119
+ autoload :RunEnvironment, action_root.join("run_environment")
120
+ autoload :RunVm, action_root.join("run_vm")
121
+ autoload :SetHostname, action_root.join("set_hostname")
122
+ diff -r 3713c076cd21 lib/vagrant-skytap/action/initial_state.rb
123
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
124
+ +++ b/lib/vagrant-skytap/action/initial_state.rb Thu Nov 19 21:25:06 2015 -0800
125
+ @@ -0,0 +1,20 @@
126
+ +module VagrantPlugins
127
+ + module Skytap
128
+ + module Action
129
+ + # This is specifically for the "up" action. When we run in parallel, we have
130
+ + # to know which machines were initially powered off so we can set up operations
131
+ + # which will happen after the machine is ready
132
+ + class InitialState
133
+ + def initialize(app, env)
134
+ + @app = app
135
+ + @logger = Log4r::Logger.new("vagrant_skytap::action::initial_state")
136
+ + end
137
+ +
138
+ + def call(env)
139
+ + env[:result] = env[:initial_states][env[:machine].id]
140
+ + @app.call(env)
141
+ + end
142
+ + end
143
+ + end
144
+ + end
145
+ +end
146
+ diff -r 3713c076cd21 lib/vagrant-skytap/action/is_parallelized.rb
147
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
148
+ +++ b/lib/vagrant-skytap/action/is_parallelized.rb Thu Nov 19 21:25:06 2015 -0800
149
+ @@ -0,0 +1,21 @@
150
+ +module VagrantPlugins
151
+ + module Skytap
152
+ + module Action
153
+ + # This can be used with "Call" built-in to check if the action
154
+ + # is being performed as part of a parallel operation.
155
+ + class IsParallelized
156
+ + def initialize(app, env)
157
+ + @app = app
158
+ + @logger = Log4r::Logger.new("vagrant_skytap::action::is_parallelized")
159
+ + end
160
+ +
161
+ + def call(env)
162
+ + env[:result] = env[:parallel]
163
+ + @logger.info("Parallelization is #{env[:result] ? 'on' : 'off'}")
164
+ +
165
+ + @app.call(env)
166
+ + end
167
+ + end
168
+ + end
169
+ + end
170
+ +end
171
+ diff -r 3713c076cd21 lib/vagrant-skytap/action/requires_boot.rb
172
+ --- /dev/null Thu Jan 01 00:00:00 1970 +0000
173
+ +++ b/lib/vagrant-skytap/action/requires_boot.rb Thu Nov 19 21:25:06 2015 -0800
174
+ @@ -0,0 +1,20 @@
175
+ +module VagrantPlugins
176
+ + module Skytap
177
+ + module Action
178
+ + # This can be used with "Call" built-in to check if the machine
179
+ + # was stopped at the beginning of the command and needs the prepare_boot
180
+ + # action. If this information is not captured,
181
+ + class RequiresBoot
182
+ + def initialize(app, env)
183
+ + @app = app
184
+ + @logger = Log4r::Logger.new("vagrant_skytap::action::requires_boot")
185
+ + end
186
+ +
187
+ + def call(env)
188
+ + env[:result] = env[:require_boot].collect(&:id).include?(env[:machine].id)
189
+ + @app.call(env)
190
+ + end
191
+ + end
192
+ + end
193
+ + end
194
+ +end
195
+ diff -r 3713c076cd21 lib/vagrant-skytap/action/run_environment.rb
196
+ --- a/lib/vagrant-skytap/action/run_environment.rb Thu Nov 19 21:24:32 2015 -0800
197
+ +++ b/lib/vagrant-skytap/action/run_environment.rb Thu Nov 19 21:25:06 2015 -0800
198
+ @@ -3,7 +3,8 @@
199
+ module VagrantPlugins
200
+ module Skytap
201
+ module Action
202
+ - # Runs the Skytap environment.
203
+ + # Runs multiple VMs in parallel. The :first_machine flag is used to prevent
204
+ + # redundant REST calls on subsequent invocations.
205
+ class RunEnvironment
206
+ include Vagrant::Util::Retryable
207
+
208
+ @@ -16,10 +17,14 @@
209
+ end
210
+
211
+ def call(env)
212
+ - env[:ui].info(I18n.t("vagrant_skytap.running_environment"))
213
+ - vm_ids = env[:machines].try(:collect, &:id)
214
+ - @logger.info("Running VMs: #{vm_ids}")
215
+ - env[:environment].run!(vm_ids)
216
+ + # Since the middleware sequence is called for each machine, use a
217
+ + # flag to ensure that we only make the request once.
218
+ + if env[:first_machine]
219
+ + env[:ui].info(I18n.t("vagrant_skytap.running_environment"))
220
+ + vm_ids = env[:machines].try(:collect, &:id)
221
+ + @logger.info("Running VMs: #{vm_ids}")
222
+ + env[:environment].run!(vm_ids)
223
+ + end
224
+
225
+ @app.call(env)
226
+ end
227
+ diff -r 3713c076cd21 lib/vagrant-skytap/command/up.rb
228
+ --- a/lib/vagrant-skytap/command/up.rb Thu Nov 19 21:24:32 2015 -0800
229
+ +++ b/lib/vagrant-skytap/command/up.rb Thu Nov 19 21:25:06 2015 -0800
230
+ @@ -1,24 +1,23 @@
231
+ require 'optparse'
232
+
233
+ require "vagrant"
234
+ -require 'byebug'
235
+ +require "byebug"
236
+
237
+ require_relative 'start_mixins'
238
+
239
+ -# This is a copy of Vagrant's built-in "up" command which handles
240
+ -# parallel runstate changes by invoking the run_environment action
241
+ -# once for all machines: runstate operations lock the environment,
242
+ -# and are therefore not thread-safe.
243
+ +# This is a modified copy of the built-in "up" command, which alters how
244
+ +# parallelization is implemented. Instead of making concurrent requests to run
245
+ +# individual VMs, we make a single REST call to update the runstates of
246
+ +# multiple VMs within the containing Skytap environment.
247
+
248
+ module VagrantPlugins
249
+ module Skytap
250
+ module Command
251
+ - #class Up < VagrantPlugins::CommandUp::Command
252
+ class Up < Vagrant.plugin("2", :command)
253
+ include StartMixins
254
+
255
+ def self.synopsis
256
+ - "starts and provisions the vagrant environment (with parallel runstate support)"
257
+ + "starts and provisions the vagrant environment"
258
+ end
259
+
260
+ def execute
261
+ @@ -61,9 +60,7 @@
262
+ # Go over each VM and bring it up
263
+ @logger.debug("'Up' each target VM...")
264
+
265
+ -
266
+ - # Begin modified section
267
+ -
268
+ + # Create the VMs, then pass all the machines to the run action
269
+ machines = []
270
+ names = argv
271
+ if names.empty?
272
+ @@ -79,41 +76,42 @@
273
+ names = nil if autostart && names.empty?
274
+ end
275
+
276
+ - with_target_vms(names, provider: options[:provider]) do |machine|
277
+ - @env.ui.info(I18n.t(
278
+ - "vagrant.commands.up.upping",
279
+ - name: machine.name,
280
+ - provider: machine.provider_name))
281
+ + if names
282
+ + with_target_vms(names, provider: options[:provider]) do |machine|
283
+ + @env.ui.info(I18n.t(
284
+ + "vagrant.commands.up.upping",
285
+ + name: machine.name,
286
+ + provider: machine.provider_name))
287
+
288
+ - machines << machine
289
+ + machines << machine
290
+ + machine.action(:create, options)
291
+ + end
292
+
293
+ - if options[:parallel]
294
+ - machine.action(:create, options)
295
+ - else
296
+ - machine.action(:up, options)
297
+ + # Capture states before the parallel runstate operation.
298
+ + # Checking state is relatively expensive. we should be smarter
299
+ + # about what information to capture. For example, we can
300
+ + # determine which machines were newly created, and put them in
301
+ + # the :stopped collection. Or call them :created? No, that
302
+ + # would likely be confusing
303
+ + #require_boot = machines.select{|m| m.state.id == :stopped}
304
+ + initial_states = machines.inject({}) do |acc, m|
305
+ + acc[m.id] = m.state.id
306
+ + acc
307
+ + end
308
+ +
309
+ + machines.each_with_index do |machine, i|
310
+ + machine.action(:run_vm, options.merge(
311
+ + first_machine: i == 0,
312
+ + machines: machines,
313
+ + #require_boot: require_boot,
314
+ + initial_states: initial_states
315
+ + ))
316
+ end
317
+ end
318
+
319
+ - if options[:parallel]
320
+ - @env.action_runner.run(VagrantPlugins::Skytap::Action.action_run_environment,
321
+ - local_data_path: @env.local_data_path,
322
+ - machines: machines,
323
+ - machine: machines.first,
324
+ - base_url: nil,
325
+ - username: nil,
326
+ - api_token: nil,
327
+ - ui: @env.ui
328
+ - )
329
+ - end
330
+ -
331
+ - # End modified section
332
+ -
333
+ -
334
+ if machines.empty?
335
+ @env.ui.info(I18n.t("vagrant.up_no_machines"))
336
+ return 0
337
+ - else
338
+ -
339
+ end
340
+
341
+ # Output the post-up messages that we have, if any
342
+ @@ -137,3 +135,4 @@
343
+ end
344
+ end
345
+ end
346
+ +
347
+ diff -r 3713c076cd21 locales/en.yml
348
+ --- a/locales/en.yml Thu Nov 19 21:24:32 2015 -0800
349
+ +++ b/locales/en.yml Thu Nov 19 21:25:06 2015 -0800
350
+ @@ -53,6 +53,11 @@
351
+ vm_url_required:
352
+ The URL of a Skytap VM must be specified via "vm_url"
353
+
354
+ + commands:
355
+ + up:
356
+ + creating: |-
357
+ + Creating machine '%{name}' with '%{provider}' provider...
358
+ +
359
+ errors:
360
+ instance_ready_timeout: |-
361
+ The instance never became "ready" in Skytap. The timeout currently