vagrant-lxd 0.7.0 → 0.7.1
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/vagrant-lxd/capability.rb +5 -0
- data/lib/vagrant-lxd/command.rb +42 -0
- data/lib/vagrant-lxd/config.rb +10 -0
- data/lib/vagrant-lxd/driver.rb +37 -24
- data/lib/vagrant-lxd/plugin.rb +5 -0
- data/lib/vagrant-lxd/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f0f075e1a4c96070a15ebb90aff04e8d7d4f256f7b5d8c8494390b2826ac729
|
4
|
+
data.tar.gz: 22ad9d6af3b0a06a88c331907b3ba62491c593627773491bcc82c95d7cad9138
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94ce807ed3c17ae49232dc19800a9f555251914fa3651b8d2b6f19941c52524a79f2042f3dbcbd4a73f0fbcfdadcdfd3e14449828582eac1cac38eb15175c759
|
7
|
+
data.tar.gz: 424cf1cbc62ea73dc806cafb32d8a2b758eb58d49a918823cf5f98f1819a82b97fe74de6c7b741a278710d923f5098132fa66f3eba456a14b08704d7c9586e08
|
data/Gemfile.lock
CHANGED
data/lib/vagrant-lxd/command.rb
CHANGED
@@ -37,6 +37,7 @@ module VagrantLXD
|
|
37
37
|
o.separator 'Commands:'
|
38
38
|
o.separator ' attach associate machine with a running container'
|
39
39
|
o.separator ' detach disassociate machine from a running container'
|
40
|
+
o.separator ' exec execute a command within a running container'
|
40
41
|
o.separator ' shadow print user and group ID mapping information'
|
41
42
|
o.separator ' version print current plugin version'
|
42
43
|
o.separator ''
|
@@ -53,6 +54,8 @@ module VagrantLXD
|
|
53
54
|
attach(args)
|
54
55
|
when 'detach'
|
55
56
|
detach(args)
|
57
|
+
when 'exec'
|
58
|
+
exec(args)
|
56
59
|
when 'shadow'
|
57
60
|
shadow(args)
|
58
61
|
when 'version'
|
@@ -164,6 +167,45 @@ module VagrantLXD
|
|
164
167
|
end
|
165
168
|
end
|
166
169
|
|
170
|
+
def exec(args)
|
171
|
+
opts = OptionParser.new do |o|
|
172
|
+
o.banner = 'Usage: vagrant lxd exec [machine ...] -- <command> [args ...]'
|
173
|
+
o.separator ''
|
174
|
+
o.separator 'Executes a command on the target LXD container(s). Vagrant'
|
175
|
+
o.separator 'will wait until each command completes before printing its'
|
176
|
+
o.separator 'output and proceeding to the next machine.'
|
177
|
+
end
|
178
|
+
|
179
|
+
if args.include?('-h') or args.include?('--help')
|
180
|
+
@env.ui.info opts.help
|
181
|
+
exit 0
|
182
|
+
end
|
183
|
+
|
184
|
+
unless dashes = args.index('--')
|
185
|
+
fail Vagrant::Errors::CLIInvalidUsage, help: opts.help
|
186
|
+
end
|
187
|
+
|
188
|
+
machines = args.take(dashes)
|
189
|
+
command = args.drop(dashes + 1)
|
190
|
+
status = 0
|
191
|
+
|
192
|
+
with_target_machines(machines) do |machine|
|
193
|
+
if machine.id.nil? or machine.state.id != :running
|
194
|
+
machine.ui.warn 'Machine is not running, skipping...'
|
195
|
+
else
|
196
|
+
result = Driver.new(machine).exec(command)
|
197
|
+
stdout = result.output[:'1']
|
198
|
+
stderr = result.output[:'2']
|
199
|
+
status = status unless status.zero?
|
200
|
+
machine.ui.info "Running command `#{command.shelljoin}`..."
|
201
|
+
machine.ui.detail stdout.chomp unless stdout.empty?
|
202
|
+
machine.ui.error stderr.chomp unless stderr.empty?
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
exit status
|
207
|
+
end
|
208
|
+
|
167
209
|
def shadow(args)
|
168
210
|
opts = OptionParser.new do |o|
|
169
211
|
o.banner = 'Usage: vagrant lxd shadow --help'
|
data/lib/vagrant-lxd/config.rb
CHANGED
@@ -24,6 +24,7 @@ module VagrantLXD
|
|
24
24
|
class Config < Vagrant.plugin('2', :config)
|
25
25
|
attr_accessor :api_endpoint
|
26
26
|
attr_accessor :name
|
27
|
+
attr_accessor :image
|
27
28
|
attr_accessor :timeout
|
28
29
|
attr_accessor :config
|
29
30
|
attr_accessor :devices
|
@@ -40,6 +41,7 @@ module VagrantLXD
|
|
40
41
|
|
41
42
|
def initialize
|
42
43
|
@name = UNSET_VALUE
|
44
|
+
@image = UNSET_VALUE
|
43
45
|
@timeout = UNSET_VALUE
|
44
46
|
@config = UNSET_VALUE
|
45
47
|
@devices = UNSET_VALUE
|
@@ -69,6 +71,10 @@ module VagrantLXD
|
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
74
|
+
unless image.nil? or image.is_a? String
|
75
|
+
errors << "Invalid `image' (value must be a string): #{image.inspect}"
|
76
|
+
end
|
77
|
+
|
72
78
|
if not timeout.is_a? Integer
|
73
79
|
errors << "Invalid `timeout' (value must be an integer): #{timeout.inspect}"
|
74
80
|
elsif timeout < 1
|
@@ -167,6 +173,10 @@ module VagrantLXD
|
|
167
173
|
@name = nil
|
168
174
|
end
|
169
175
|
|
176
|
+
if image == UNSET_VALUE
|
177
|
+
@image = nil
|
178
|
+
end
|
179
|
+
|
170
180
|
if config == UNSET_VALUE
|
171
181
|
@config = {}
|
172
182
|
end
|
data/lib/vagrant-lxd/driver.rb
CHANGED
@@ -164,6 +164,7 @@ module VagrantLXD
|
|
164
164
|
|
165
165
|
def initialize(machine)
|
166
166
|
@machine = machine
|
167
|
+
@image = machine.provider_config.image
|
167
168
|
@timeout = machine.provider_config.timeout
|
168
169
|
@api_endpoint = machine.provider_config.api_endpoint
|
169
170
|
@config = machine.provider_config.config
|
@@ -286,34 +287,15 @@ module VagrantLXD
|
|
286
287
|
|
287
288
|
def create
|
288
289
|
if in_state? NOT_CREATED
|
289
|
-
|
290
|
+
fingerprint = image_from_box
|
290
291
|
machine_id = generate_machine_id
|
291
|
-
file, fingerprint = Driver.synchronize { prepare_image_file }
|
292
|
-
|
293
|
-
Driver.synchronize do
|
294
|
-
begin
|
295
|
-
image = lxd.image(fingerprint)
|
296
|
-
@logger.debug 'Using image: ' << image.inspect
|
297
|
-
rescue Hyperkit::NotFound
|
298
|
-
image = lxd.create_image_from_file(file)
|
299
|
-
@logger.debug 'Created image: ' << image.inspect
|
300
|
-
begin
|
301
|
-
lxd.update_image(fingerprint, properties: IMAGE_PROPERTIES)
|
302
|
-
lxd.create_image_alias(fingerprint, machine_id, IMAGE_PROPERTIES)
|
303
|
-
rescue Hyperkit::Error
|
304
|
-
@logger.error 'Failed to set description for image: ' << e.reason
|
305
|
-
end
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
292
|
container = lxd.create_container(machine_id, devices: devices, ephemeral: ephemeral, fingerprint: fingerprint, config: config, profiles: profiles)
|
310
293
|
@logger.debug 'Created container: ' << container.inspect
|
311
|
-
|
312
294
|
@machine.id = machine_id
|
313
295
|
end
|
314
296
|
rescue Hyperkit::Error => e
|
315
297
|
lxd.delete_container(machine_id) rescue nil unless container.nil?
|
316
|
-
lxd.delete_image(
|
298
|
+
lxd.delete_image(fingerprint) rescue nil unless fingerprint.nil?
|
317
299
|
if e.reason =~ /Container '([^']+)' already exists/
|
318
300
|
@machine.ui.error e.reason
|
319
301
|
fail ContainerAlreadyExists, machine_name: @machine.name, container: $1
|
@@ -413,6 +395,14 @@ module VagrantLXD
|
|
413
395
|
fail ContainerConfigurationFailure, machine_name: @machine.name, reason: e.reason
|
414
396
|
end
|
415
397
|
|
398
|
+
def exec(command)
|
399
|
+
operation = lxd.execute_command(machine_id, command, sync: false, record_output: true)
|
400
|
+
wait_for_operation(operation).metadata.tap do |result|
|
401
|
+
result.output[:'1'] = lxd.get(result.output[:'1'])
|
402
|
+
result.output[:'2'] = lxd.get(result.output[:'2'])
|
403
|
+
end
|
404
|
+
end
|
405
|
+
|
416
406
|
def info
|
417
407
|
if in_state? :running, :frozen
|
418
408
|
{
|
@@ -478,8 +468,9 @@ module VagrantLXD
|
|
478
468
|
# is enabled or setting sync: true. TODO Upstream a better fix than
|
479
469
|
# this, so that `wait_for_operation` really does.
|
480
470
|
def wait_for_operation(operation)
|
471
|
+
@logger.debug 'Waiting for operation: ' << operation.inspect
|
481
472
|
lxd.wait_for_operation(operation.id)
|
482
|
-
rescue Faraday::TimeoutError
|
473
|
+
rescue Net::ReadTimeout, Faraday::TimeoutError
|
483
474
|
retry
|
484
475
|
end
|
485
476
|
|
@@ -607,7 +598,28 @@ module VagrantLXD
|
|
607
598
|
fail CertificateGenerationFailure, reason: e.message, api_endpoint: @api_endpoint.to_s, default_path: default_path, vagrant_path: vagrant_path
|
608
599
|
end
|
609
600
|
|
610
|
-
|
601
|
+
def image_from_box
|
602
|
+
file, fingerprint = Driver.synchronize { prepare_image_file }
|
603
|
+
|
604
|
+
Driver.synchronize do
|
605
|
+
begin
|
606
|
+
image = lxd.image(fingerprint)
|
607
|
+
@logger.debug 'Using image: ' << image.inspect
|
608
|
+
rescue Hyperkit::NotFound
|
609
|
+
image = lxd.create_image_from_file(file)
|
610
|
+
@logger.debug 'Created image: ' << image.inspect
|
611
|
+
begin
|
612
|
+
lxd.update_image(fingerprint, properties: IMAGE_PROPERTIES)
|
613
|
+
lxd.create_image_alias(fingerprint, machine_id, IMAGE_PROPERTIES)
|
614
|
+
rescue Hyperkit::Error => e
|
615
|
+
@logger.error 'Failed to set description for image: ' << e.reason
|
616
|
+
end
|
617
|
+
end
|
618
|
+
end
|
619
|
+
|
620
|
+
fingerprint
|
621
|
+
end
|
622
|
+
|
611
623
|
def prepare_image_file
|
612
624
|
tmpdir = Dir.mktmpdir
|
613
625
|
|
@@ -664,7 +676,8 @@ module VagrantLXD
|
|
664
676
|
package_directory = Dir.mktmpdir
|
665
677
|
|
666
678
|
image = begin
|
667
|
-
lxd.create_image_from_container(machine_id, IMAGE_PROPERTIES)
|
679
|
+
operation = lxd.create_image_from_container(machine_id, properties: IMAGE_PROPERTIES, sync: false)
|
680
|
+
wait_for_operation(operation)
|
668
681
|
rescue Hyperkit::BadRequest => e
|
669
682
|
if e.reason =~ /The image already exists: (\h{64})/
|
670
683
|
{
|
data/lib/vagrant-lxd/plugin.rb
CHANGED
data/lib/vagrant-lxd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-lxd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Hanson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|