vagrant-libvirt 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vagrant-libvirt/action/shutdown_domain.rb +28 -6
- data/lib/vagrant-libvirt/action.rb +10 -11
- data/lib/vagrant-libvirt/errors.rb +4 -0
- data/lib/vagrant-libvirt/version +1 -1
- data/locales/en.yml +1 -0
- data/spec/unit/action/shutdown_domain_spec.rb +31 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4e3e0061bb4ad5e0450c7707ce5e87d218b5c02420b9ba6d2f8c2f92760e247
|
4
|
+
data.tar.gz: ef229d196674e1e9771775eb917d3091b84853633356c1244a81be88f05d0a08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1067ed32c578df57810c451e95239c9e8d3e5dd8ef96719dd1cb835ff91e906357d391794ac9d0d300133c5b98bfe096b74f230d040f4a289275c28d459e933a
|
7
|
+
data.tar.gz: fcf09c0a02a054fbc10374361f69169c9a68434b4146473d7c3e150b813aa69e4172b9c5aad103124c2f3198f80f10a5ac0f59bd14d11458247851775dd5f2e9
|
@@ -1,5 +1,24 @@
|
|
1
1
|
require 'log4r'
|
2
2
|
|
3
|
+
module VagrantPlugins
|
4
|
+
module ProviderLibvirt
|
5
|
+
module Action
|
6
|
+
# To wrap GracefulShutdown need to track the time taken
|
7
|
+
class StartShutdownTimer
|
8
|
+
def initialize(app, _env)
|
9
|
+
@app = app
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
env[:shutdown_start_time] = Time.now
|
14
|
+
|
15
|
+
@app.call(env)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
3
22
|
module VagrantPlugins
|
4
23
|
module ProviderLibvirt
|
5
24
|
module Action
|
@@ -15,21 +34,22 @@ module VagrantPlugins
|
|
15
34
|
def call(env)
|
16
35
|
timeout = env[:machine].config.vm.graceful_halt_timeout
|
17
36
|
|
18
|
-
start_time =
|
37
|
+
start_time = env[:shutdown_start_time]
|
19
38
|
|
20
|
-
|
21
|
-
|
22
|
-
|
39
|
+
if start_time.nil?
|
40
|
+
# this really shouldn't happen
|
41
|
+
raise Errors::CallChainError, require_action: StartShutdownTimer.name, current_action: ShutdownDomain.name
|
42
|
+
end
|
23
43
|
|
24
44
|
# return if successful, otherwise will ensure result is set to false
|
25
45
|
env[:result] = env[:machine].state.id == @target_state
|
26
46
|
|
27
|
-
return if env[:result]
|
47
|
+
return @app.call(env) if env[:result]
|
28
48
|
|
29
49
|
current_time = Time.now
|
30
50
|
|
31
51
|
# if we've already exceeded the timeout
|
32
|
-
return if current_time - start_time >= timeout
|
52
|
+
return @app.call(env) if current_time - start_time >= timeout
|
33
53
|
|
34
54
|
# otherwise construct a new timeout.
|
35
55
|
timeout = timeout - (current_time - start_time)
|
@@ -42,6 +62,8 @@ module VagrantPlugins
|
|
42
62
|
end
|
43
63
|
|
44
64
|
env[:result] = env[:machine].state.id == @target_state
|
65
|
+
|
66
|
+
@app.call(env)
|
45
67
|
end
|
46
68
|
end
|
47
69
|
end
|
@@ -143,19 +143,17 @@ module VagrantPlugins
|
|
143
143
|
b2.use Call, IsRunning do |env2, b3|
|
144
144
|
next unless env2[:result]
|
145
145
|
|
146
|
-
b3.use
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
146
|
+
b3.use StartShutdownTimer
|
147
|
+
b3.use Call, GracefulHalt, :shutoff, :running do |env3, b4|
|
148
|
+
if !env3[:result]
|
149
|
+
b4.use Call, ShutdownDomain, :shutoff, :running do |env4, b5|
|
150
|
+
if !env4[:result]
|
151
|
+
b5.use HaltDomain
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
151
155
|
end
|
152
156
|
|
153
|
-
# Only force halt if previous actions insufficient.
|
154
|
-
b3.use Call, IsRunning do |env3, b4|
|
155
|
-
next unless env3[:result]
|
156
|
-
|
157
|
-
b4.use HaltDomain
|
158
|
-
end
|
159
157
|
end
|
160
158
|
end
|
161
159
|
end
|
@@ -360,6 +358,7 @@ module VagrantPlugins
|
|
360
358
|
autoload :ForwardPorts, action_root.join('forward_ports')
|
361
359
|
autoload :ClearForwardedPorts, action_root.join('forward_ports')
|
362
360
|
autoload :HaltDomain, action_root.join('halt_domain')
|
361
|
+
autoload :StartShutdownTimer, action_root.join('shutdown_domain')
|
363
362
|
autoload :ShutdownDomain, action_root.join('shutdown_domain')
|
364
363
|
autoload :HandleBoxImage, action_root.join('handle_box_image')
|
365
364
|
autoload :HandleStoragePool, action_root.join('handle_storage_pool')
|
@@ -9,6 +9,10 @@ module VagrantPlugins
|
|
9
9
|
error_namespace('vagrant_libvirt.errors')
|
10
10
|
end
|
11
11
|
|
12
|
+
class CallChainError < VagrantLibvirtError
|
13
|
+
error_key(:call_chain_error)
|
14
|
+
end
|
15
|
+
|
12
16
|
# package not supported
|
13
17
|
class PackageNotSupported < VagrantLibvirtError
|
14
18
|
error_key(:package_not_supported)
|
data/lib/vagrant-libvirt/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.1
|
data/locales/en.yml
CHANGED
@@ -62,6 +62,7 @@ en:
|
|
62
62
|
Forwarding UDP ports is not supported. Ignoring.
|
63
63
|
|
64
64
|
errors:
|
65
|
+
call_chain_error: Invalid action chain, must ensure that '%{require_action}' is called prior to calling '%{current_action}'
|
65
66
|
package_not_supported: No support for package with Libvirt. Create box manually.
|
66
67
|
fog_error: |-
|
67
68
|
There was an error talking to Libvirt. The error message is shown
|
@@ -3,6 +3,20 @@ require 'support/sharedcontext'
|
|
3
3
|
require 'support/libvirt_context'
|
4
4
|
require 'vagrant-libvirt/action/shutdown_domain'
|
5
5
|
|
6
|
+
describe VagrantPlugins::ProviderLibvirt::Action::StartShutdownTimer do
|
7
|
+
subject { described_class.new(app, env) }
|
8
|
+
|
9
|
+
include_context 'unit'
|
10
|
+
|
11
|
+
describe '#call' do
|
12
|
+
it 'should set shutdown_start_time' do
|
13
|
+
expect(env[:shutdown_start_time]).to eq(nil)
|
14
|
+
expect(subject.call(env)).to eq(nil)
|
15
|
+
expect(env[:shutdown_start_time]).to_not eq(nil)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
6
20
|
describe VagrantPlugins::ProviderLibvirt::Action::ShutdownDomain do
|
7
21
|
subject { described_class.new(app, env, target_state, current_state) }
|
8
22
|
|
@@ -26,6 +40,8 @@ describe VagrantPlugins::ProviderLibvirt::Action::ShutdownDomain do
|
|
26
40
|
allow(connection).to receive(:servers).and_return(servers)
|
27
41
|
allow(servers).to receive(:get).and_return(domain)
|
28
42
|
allow(ui).to receive(:info).with('Attempting direct shutdown of domain...')
|
43
|
+
allow(env).to receive(:[]).and_call_original
|
44
|
+
allow(env).to receive(:[]).with(:shutdown_start_time).and_return(Time.now)
|
29
45
|
end
|
30
46
|
|
31
47
|
context "when state is shutoff" do
|
@@ -97,7 +113,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::ShutdownDomain do
|
|
97
113
|
context "when timeout exceeded" do
|
98
114
|
before do
|
99
115
|
expect(machine).to receive_message_chain('config.vm.graceful_halt_timeout').and_return(1)
|
100
|
-
expect(
|
116
|
+
expect(Time).to receive(:now).and_return(env[:shutdown_start_time] + 2)
|
101
117
|
expect(driver).to receive(:state).and_return(:running).exactly(1).times
|
102
118
|
expect(domain).to_not receive(:wait_for)
|
103
119
|
expect(domain).to_not receive(:shutdown)
|
@@ -112,7 +128,7 @@ describe VagrantPlugins::ProviderLibvirt::Action::ShutdownDomain do
|
|
112
128
|
context "when timeout not exceeded" do
|
113
129
|
before do
|
114
130
|
expect(machine).to receive_message_chain('config.vm.graceful_halt_timeout').and_return(2)
|
115
|
-
expect(
|
131
|
+
expect(Time).to receive(:now).and_return(env[:shutdown_start_time] + 1.5)
|
116
132
|
expect(driver).to receive(:state).and_return(:running).exactly(3).times
|
117
133
|
expect(domain).to receive(:wait_for) do |time|
|
118
134
|
expect(time).to be < 1
|
@@ -127,5 +143,18 @@ describe VagrantPlugins::ProviderLibvirt::Action::ShutdownDomain do
|
|
127
143
|
end
|
128
144
|
end
|
129
145
|
end
|
146
|
+
|
147
|
+
context "when required action not run" do
|
148
|
+
before do
|
149
|
+
expect(env).to receive(:[]).with(:shutdown_start_time).and_call_original
|
150
|
+
end
|
151
|
+
|
152
|
+
it "should raise an exception" do
|
153
|
+
expect { subject.call(env) }.to raise_error(
|
154
|
+
VagrantPlugins::ProviderLibvirt::Errors::CallChainError,
|
155
|
+
/Invalid action chain, must ensure that '.*ShutdownTimer' is called prior to calling '.*ShutdownDomain'/
|
156
|
+
)
|
157
|
+
end
|
158
|
+
end
|
130
159
|
end
|
131
160
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-libvirt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Stanek
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2021-10-
|
14
|
+
date: 2021-10-11 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rspec-core
|
@@ -324,9 +324,9 @@ test_files:
|
|
324
324
|
- spec/unit/action/start_domain_spec.rb
|
325
325
|
- spec/unit/action/destroy_domain_spec.rb
|
326
326
|
- spec/unit/action/halt_domain_spec.rb
|
327
|
-
- spec/unit/action/shutdown_domain_spec.rb
|
328
327
|
- spec/unit/action/create_domain_spec.rb
|
329
328
|
- spec/unit/action/package_domain_spec.rb
|
329
|
+
- spec/unit/action/shutdown_domain_spec.rb
|
330
330
|
- spec/unit/templates/tpm/version_1.2.xml
|
331
331
|
- spec/unit/templates/tpm/version_2.0.xml
|
332
332
|
- spec/unit/templates/domain_custom_cpu_model.xml
|