vagrant-lxd 0.4.3 → 0.5.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c4e09ae9c1b8bd49ad70106106a70bd6c1b6a82eb50a002e606603ba278d120
4
- data.tar.gz: 3be761524f420eb75a04ab3a3c1043ca109a89ae4108e345bc22b5d7bd8cfbc6
3
+ metadata.gz: c5d2a6ff5340ba242bdcc464893541745d00f1ad92dd947e87097c14335a4704
4
+ data.tar.gz: b52fc2232901b1c49c95b71d28d60b514cafa19dc0ff3698b80710ca55e16aed
5
5
  SHA512:
6
- metadata.gz: 79518954226df0b863a3108c6f8fbb360549ce53b7577ad9d07c24d94c67ae5005bc8053d04fe3344de3b8d21ad0447244d253e1190757f1b8d3a8304b226cbf
7
- data.tar.gz: ddc249f6db94da9a27add204ad36549d4171d303a7c189c530df5d8163437d3807652924f77398f9c36e8814b94d64bf7f1c3951e8659d17a5a55ded84e15559
6
+ metadata.gz: 3a8269778bebfd757d6511668a6de1a30f19adaadffc124f0efc889bbea18eac796397857cdf67cbe72fe6cc733a6a94e4b6edbd568b5820861dba22b5466abd
7
+ data.tar.gz: 137bf5106e33b466b58a85484079efe7214116f4698c11acbc1c5c08292197e51dafd0b51fb2d63431369a4d923394b4461241afa43dc5c767dccf05ab81ec3c
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  /.bundle/
2
+ /.tool-versions
2
3
  /.vagrant/
3
- /pkg/
4
4
  /Vagrantfile
5
+ /pkg/
5
6
  /vendor/
@@ -1,4 +1,4 @@
1
- image: "ruby:2.3"
1
+ image: ruby:2.5
2
2
 
3
3
  before_script:
4
4
  - apt-get -y update
data/Gemfile CHANGED
@@ -1,12 +1,13 @@
1
1
  source 'https://rubygems.org/'
2
2
 
3
3
  group :development do
4
+ require 'pp' # avoid superclass mismatch error
4
5
  gem 'fakefs'
5
6
  gem 'rake'
6
7
  gem 'rspec'
7
8
  gem 'rspec-its'
8
9
  gem 'rspec-mocks'
9
- gem 'vagrant', :git => 'https://github.com/mitchellh/vagrant.git'
10
+ gem 'vagrant', git: 'https://github.com/mitchellh/vagrant.git'
10
11
  end
11
12
 
12
13
  group :plugins do
@@ -1,60 +1,62 @@
1
1
  GIT
2
2
  remote: https://github.com/mitchellh/vagrant.git
3
- revision: 1dda6cc14c2d221a8e2e7b5091fed2fca9ba1ecf
3
+ revision: 2063111ab5cfcce0f6b2dbcecd9d24d47b512a96
4
4
  specs:
5
- vagrant (2.2.6.dev)
5
+ vagrant (2.2.10.dev)
6
6
  bcrypt_pbkdf (~> 1.0.0)
7
- childprocess (~> 0.6.0)
7
+ childprocess (~> 4.0.0)
8
8
  ed25519 (~> 1.2.4)
9
9
  erubis (~> 2.7.0)
10
10
  hashicorp-checkpoint (~> 0.1.5)
11
- i18n (~> 1.1.1)
12
- listen (~> 3.1.5)
11
+ i18n (~> 1.8)
12
+ listen (~> 3.1)
13
13
  log4r (~> 1.1.9, < 1.1.11)
14
+ mime (~> 0.4.4)
14
15
  net-scp (~> 1.2.0)
15
- net-sftp (~> 2.1)
16
- net-ssh (~> 5.1.0)
16
+ net-sftp (~> 3.0)
17
+ net-ssh (~> 6.0)
17
18
  rb-kqueue (~> 0.2.0)
18
19
  rest-client (>= 1.6.0, < 3.0)
19
20
  ruby_dep (<= 1.3.1)
20
- rubyzip (~> 1.2.2)
21
- vagrant_cloud (~> 2.0.2)
21
+ rubyzip (~> 2.0)
22
+ vagrant_cloud (~> 2.0.3)
22
23
  wdm (~> 0.1.0)
23
- winrm (~> 2.1)
24
- winrm-elevated (~> 1.1)
25
- winrm-fs (~> 1.0)
24
+ winrm (>= 2.3.4, < 3.0)
25
+ winrm-elevated (>= 1.2.1, < 2.0)
26
+ winrm-fs (>= 1.3.4, < 2.0)
26
27
 
27
28
  PATH
28
29
  remote: .
29
30
  specs:
30
- vagrant-lxd (0.4.3)
31
+ vagrant-lxd (0.5.2)
31
32
  activesupport (~> 5.2.3)
32
- hyperkit (~> 1.2.0)
33
+ faraday (~> 0.17)
34
+ hyperkit (~> 1.3.0)
33
35
 
34
36
  GEM
35
37
  remote: https://rubygems.org/
36
38
  specs:
37
- activesupport (5.2.3)
39
+ activesupport (5.2.4.4)
38
40
  concurrent-ruby (~> 1.0, >= 1.0.2)
39
41
  i18n (>= 0.7, < 2)
40
42
  minitest (~> 5.1)
41
43
  tzinfo (~> 1.1)
42
- addressable (2.6.0)
43
- public_suffix (>= 2.0.2, < 4.0)
44
+ addressable (2.7.0)
45
+ public_suffix (>= 2.0.2, < 5.0)
44
46
  bcrypt_pbkdf (1.0.1)
45
- builder (3.2.3)
46
- childprocess (0.6.3)
47
- ffi (~> 1.0, >= 1.0.11)
48
- concurrent-ruby (1.1.5)
49
- diff-lcs (1.3)
47
+ builder (3.2.4)
48
+ childprocess (4.0.0)
49
+ concurrent-ruby (1.1.7)
50
+ diff-lcs (1.4.4)
50
51
  domain_name (0.5.20190701)
51
52
  unf (>= 0.0.5, < 1.0.0)
52
53
  ed25519 (1.2.4)
54
+ erubi (1.9.0)
53
55
  erubis (2.7.0)
54
- fakefs (0.20.1)
55
- faraday (0.15.4)
56
+ fakefs (1.2.2)
57
+ faraday (0.17.3)
56
58
  multipart-post (>= 1.2, < 3)
57
- ffi (1.11.1)
59
+ ffi (1.13.1)
58
60
  gssapi (1.3.0)
59
61
  ffi (>= 1.0.1)
60
62
  gyoku (1.3.1)
@@ -63,37 +65,37 @@ GEM
63
65
  http-cookie (1.0.3)
64
66
  domain_name (~> 0.5)
65
67
  httpclient (2.8.3)
66
- hyperkit (1.2.0)
68
+ hyperkit (1.3.0)
67
69
  activesupport (>= 4.2.6)
68
70
  sawyer
69
- i18n (1.1.1)
71
+ i18n (1.8.5)
70
72
  concurrent-ruby (~> 1.0)
71
- listen (3.1.5)
72
- rb-fsevent (~> 0.9, >= 0.9.4)
73
- rb-inotify (~> 0.9, >= 0.9.7)
74
- ruby_dep (~> 1.2)
73
+ listen (3.2.1)
74
+ rb-fsevent (~> 0.10, >= 0.10.3)
75
+ rb-inotify (~> 0.9, >= 0.9.10)
75
76
  little-plugger (1.1.4)
76
77
  log4r (1.1.10)
77
- logging (2.2.2)
78
+ logging (2.3.0)
78
79
  little-plugger (~> 1.1)
79
- multi_json (~> 1.10)
80
- mime-types (3.2.2)
80
+ multi_json (~> 1.14)
81
+ mime (0.4.4)
82
+ mime-types (3.3.1)
81
83
  mime-types-data (~> 3.2015)
82
- mime-types-data (3.2019.0331)
83
- minitest (5.11.3)
84
- multi_json (1.13.1)
84
+ mime-types-data (3.2020.0512)
85
+ minitest (5.14.2)
86
+ multi_json (1.15.0)
85
87
  multipart-post (2.1.1)
86
88
  net-scp (1.2.1)
87
89
  net-ssh (>= 2.6.5)
88
- net-sftp (2.1.2)
89
- net-ssh (>= 2.6.5)
90
- net-ssh (5.1.0)
90
+ net-sftp (3.0.0)
91
+ net-ssh (>= 5.0.0, < 7.0.0)
92
+ net-ssh (6.1.0)
91
93
  netrc (0.11.0)
92
94
  nori (2.6.0)
93
- public_suffix (3.1.1)
94
- rake (12.3.3)
95
- rb-fsevent (0.10.3)
96
- rb-inotify (0.10.0)
95
+ public_suffix (4.0.6)
96
+ rake (13.0.1)
97
+ rb-fsevent (0.10.4)
98
+ rb-inotify (0.10.1)
97
99
  ffi (~> 1.0)
98
100
  rb-kqueue (0.2.5)
99
101
  ffi (>= 0.5.0)
@@ -101,53 +103,54 @@ GEM
101
103
  http-cookie (>= 1.0.2, < 2.0)
102
104
  mime-types (>= 1.16, < 4.0)
103
105
  netrc (~> 0.8)
104
- rspec (3.8.0)
105
- rspec-core (~> 3.8.0)
106
- rspec-expectations (~> 3.8.0)
107
- rspec-mocks (~> 3.8.0)
108
- rspec-core (3.8.2)
109
- rspec-support (~> 3.8.0)
110
- rspec-expectations (3.8.4)
106
+ rspec (3.9.0)
107
+ rspec-core (~> 3.9.0)
108
+ rspec-expectations (~> 3.9.0)
109
+ rspec-mocks (~> 3.9.0)
110
+ rspec-core (3.9.2)
111
+ rspec-support (~> 3.9.3)
112
+ rspec-expectations (3.9.2)
111
113
  diff-lcs (>= 1.2.0, < 2.0)
112
- rspec-support (~> 3.8.0)
114
+ rspec-support (~> 3.9.0)
113
115
  rspec-its (1.3.0)
114
116
  rspec-core (>= 3.0.0)
115
117
  rspec-expectations (>= 3.0.0)
116
- rspec-mocks (3.8.1)
118
+ rspec-mocks (3.9.1)
117
119
  diff-lcs (>= 1.2.0, < 2.0)
118
- rspec-support (~> 3.8.0)
119
- rspec-support (3.8.2)
120
+ rspec-support (~> 3.9.0)
121
+ rspec-support (3.9.3)
120
122
  ruby_dep (1.3.1)
121
123
  rubyntlm (0.6.2)
122
- rubyzip (1.2.3)
124
+ rubyzip (2.3.0)
123
125
  sawyer (0.8.2)
124
126
  addressable (>= 2.3.5)
125
127
  faraday (> 0.8, < 2.0)
126
128
  thread_safe (0.3.6)
127
- tzinfo (1.2.5)
129
+ tzinfo (1.2.7)
128
130
  thread_safe (~> 0.1)
129
131
  unf (0.1.4)
130
132
  unf_ext
131
- unf_ext (0.0.7.6)
132
- vagrant_cloud (2.0.2)
133
+ unf_ext (0.0.7.7)
134
+ vagrant_cloud (2.0.3)
133
135
  rest-client (~> 2.0.2)
134
136
  wdm (0.1.1)
135
- winrm (2.3.2)
137
+ winrm (2.3.4)
136
138
  builder (>= 2.1.2)
137
- erubis (~> 2.7)
139
+ erubi (~> 1.8)
138
140
  gssapi (~> 1.2)
139
141
  gyoku (~> 1.0)
140
142
  httpclient (~> 2.2, >= 2.2.0.2)
141
143
  logging (>= 1.6.1, < 3.0)
142
144
  nori (~> 2.0)
143
145
  rubyntlm (~> 0.6.0, >= 0.6.1)
144
- winrm-elevated (1.1.1)
146
+ winrm-elevated (1.2.1)
147
+ erubi (~> 1.8)
145
148
  winrm (~> 2.0)
146
149
  winrm-fs (~> 1.0)
147
- winrm-fs (1.3.2)
148
- erubis (~> 2.7)
150
+ winrm-fs (1.3.4)
151
+ erubi (~> 1.8)
149
152
  logging (>= 1.6.1, < 3.0)
150
- rubyzip (~> 1.1)
153
+ rubyzip (~> 2.0)
151
154
  winrm (~> 2.0)
152
155
 
153
156
  PLATFORMS
@@ -163,4 +166,4 @@ DEPENDENCIES
163
166
  vagrant-lxd!
164
167
 
165
168
  BUNDLED WITH
166
- 2.0.2
169
+ 2.1.4
data/README.md CHANGED
@@ -13,7 +13,8 @@ The following features are currently supported:
13
13
  - VM management (create, suspend, destroy, etc.)
14
14
  - IPv4 networking
15
15
  - Synced folders
16
- - Snapshots
16
+ - Snapshots (via `vagrant snapshot`)
17
+ - Box Packaging (via `vagrant package`)
17
18
 
18
19
  The following features are not expected to work yet:
19
20
 
@@ -147,7 +148,7 @@ is passed through to LXD. The hash values should all be strings:
147
148
  recursive: 'false',
148
149
  }
149
150
 
150
- [disk]: https://lxd.readthedocs.io/en/latest/containers/#type-disk
151
+ [disk]: https://lxd.readthedocs.io/en/latest/instances/#type-disk
151
152
 
152
153
  ### Shared LXD Containers
153
154
 
@@ -233,7 +234,7 @@ to run graphical applications transparently from within the guest:
233
234
  Note that disk devices should be configured as [synced
234
235
  folders](#synced-folders) rather than ad-hoc devices.
235
236
 
236
- [device-config]: https://lxd.readthedocs.io/en/latest/containers/#device-configuration
237
+ [device-config]: https://lxd.readthedocs.io/en/latest/instances/#devices-configuration
237
238
 
238
239
  ## Hacking
239
240
 
@@ -9,7 +9,46 @@ Specifically, the following settings need to be applied:
9
9
  3. Your user must be in the "lxd" group.
10
10
  4. Your user must have a client certificate registered with LXD.
11
11
 
12
- ## Xenial
12
+ ## Ubuntu Focal and Later
13
+
14
+ On Ubuntu 20.04 and later, LXD is installed as a [Snap][]. To install
15
+ and configure it as described above, you can use the following commands:
16
+
17
+ ```sh
18
+ # install lxd
19
+ sudo apt install -y lxd
20
+
21
+ # enable https api access
22
+ sudo lxd init --auto --network-address=127.0.0.1 --network-port=8443
23
+
24
+ # add your user to the lxd group
25
+ sudo usermod -a lxd -G $(whoami)
26
+
27
+ # apply the new group membership
28
+ newgrp lxd
29
+ ```
30
+
31
+ Then, the first time you run Vagrant in a project that uses the LXD
32
+ provider, it will generate a client certificate for the plugin to use
33
+ and instruct you to add it to LXD with the following message:
34
+
35
+ ```
36
+ You may need configure LXD to allow requests from this machine. The
37
+ easiest way to do this is to add your LXC client certificate to LXD's
38
+ list of trusted certificates. This can typically be done with the
39
+ following command:
40
+
41
+ $ lxc config trust add ~/.vagrant.d/data/lxd/client.crt
42
+
43
+ You can find more information about configuring LXD at:
44
+
45
+ https://linuxcontainers.org/lxd/getting-started-cli/#initial-configuration
46
+ ```
47
+
48
+ Once you run that command as instructed, everything should be set up for
49
+ the plugin to work correctly.
50
+
51
+ ## Ubuntu Xenial
13
52
 
14
53
  To install LXD and configure it as described above on Ubuntu 16.04, you
15
54
  can use the following commands:
@@ -37,7 +76,7 @@ automatically generate the certificate for you):
37
76
  newgrp lxd
38
77
 
39
78
  # create and add a client certificate
40
- lxc config trust add /home/ubuntu/.config/lxc/client.crt
79
+ lxc config trust add ~/.config/lxc/client.crt
41
80
  ```
42
81
 
43
82
  At this point everything should be set up for the plugin to work
@@ -53,5 +92,6 @@ If you're using the plugin on another platform, please feel free to
53
92
  propose an addition to this document or add instructions to the
54
93
  project's [wiki][] for others to follow.
55
94
 
95
+ [Snap]: https://snapcraft.io/
56
96
  [getting-started-cli]: https://linuxcontainers.org/lxd/getting-started-cli/
57
97
  [wiki]: https://gitlab.com/catalyst-it/vagrant-lxd/wikis
@@ -124,6 +124,20 @@ module VagrantLXD
124
124
  end
125
125
  end
126
126
 
127
+ class Package
128
+ def initialize(app, env)
129
+ @app = app
130
+ @env = env
131
+ end
132
+
133
+ def call(env)
134
+ env['package.directory'] = env[:machine_package]
135
+ @app.call(env)
136
+ ensure
137
+ FileUtils.rm_rf(env[:machine_package])
138
+ end
139
+ end
140
+
127
141
  #
128
142
  # Action definitions.
129
143
  #
@@ -335,6 +349,24 @@ module VagrantLXD
335
349
  builder { |b| b.use SSHRun }
336
350
  end
337
351
 
352
+ def package
353
+ builder do |b|
354
+ b.use Call, state do |env, c|
355
+ case env[:machine_state]
356
+ when Vagrant::MachineState::NOT_CREATED_ID
357
+ next
358
+ when :frozen, :running
359
+ c.use halt
360
+ end
361
+
362
+ c.use Message, :info, 'Packaging machine...'
363
+ c.use LXD.action(:package)
364
+ c.use Package
365
+ c.use Vagrant::Action::General::Package
366
+ end
367
+ end
368
+ end
369
+
338
370
  private
339
371
 
340
372
  def builder
@@ -29,14 +29,33 @@ module VagrantLXD
29
29
  def Capability.synced_folders(env)
30
30
  logger = Log4r::Logger.new('vagrant::lxd::capability')
31
31
  logger.debug "Checking synced folders support for effective UID/GID #{Process.uid}/#{Process.gid}..."
32
- result = %w(uid gid).all? do |type|
32
+ %w(uid gid).all? do |type|
33
33
  begin
34
- File.readlines("/etc/sub#{type}").grep(/^root:#{Process.send(type)}:[1-9]/).any?
34
+ id = Process.send(type)
35
+ id_map = File.readlines("/etc/sub#{type}")
36
+ id_in_sub_id?(id, id_map)
35
37
  rescue StandardError => e
36
38
  logger.warn "Cannot read subordinate permissions file: #{e.message}"
37
39
  false
38
40
  end
39
41
  end
40
42
  end
43
+
44
+ # Determines whether the given numerical `id` is included in the
45
+ # subordinate map `id_map`, which should be an array of lines from
46
+ # the file /etc/subuid or /etc/subgid.
47
+ #
48
+ # Invalid lines, and any lines for a user or group other than root,
49
+ # are ignored. See subuid(5) and subgid(5) for details about these
50
+ # files, and the expected format of their entries.
51
+ def Capability.id_in_sub_id?(id, id_map)
52
+ id_map.any? do |line|
53
+ if line.match(/^(root|0):(\d+):(\d+)/)
54
+ range_min = $2.to_i
55
+ range_max = range_min + $3.to_i
56
+ id.between?(range_min, range_max)
57
+ end
58
+ end
59
+ end
41
60
  end
42
61
  end
@@ -71,6 +71,10 @@ module VagrantLXD
71
71
  error_key 'lxd_image_creation_failure'
72
72
  end
73
73
 
74
+ class ImageExportFailure < Vagrant::Errors::VagrantError
75
+ error_key 'lxd_image_export_failure'
76
+ end
77
+
74
78
  class ContainerNotFound < Vagrant::Errors::VagrantError
75
79
  error_key 'lxd_container_not_found'
76
80
  end
@@ -115,15 +119,6 @@ module VagrantLXD
115
119
  end
116
120
  end
117
121
 
118
- module Hyperkit::Client::Containers
119
- alias extract_container_options_without_devices extract_container_options
120
-
121
- def extract_container_options(name, options)
122
- opts = extract_container_options_without_devices(name, options)
123
- options.slice(:devices).merge(opts)
124
- end
125
- end
126
-
127
122
  NOT_CREATED = Vagrant::MachineState::NOT_CREATED_ID
128
123
 
129
124
  attr_reader :api_endpoint
@@ -166,11 +161,11 @@ module VagrantLXD
166
161
 
167
162
  def synced_folders_usable?
168
163
  # Check whether we've registered an idmap for the current user.
169
- raw_idmap = container[:config][:'raw.idmap']
164
+ raw_idmap = config[:'raw.idmap']
170
165
  begin
171
166
  raw_idmap and
172
- raw_idmap =~ /^uid #{Process.uid} #{vagrant_uid}$/ and
173
- raw_idmap =~ /^gid #{Process.gid} #{vagrant_gid}$/
167
+ id_in_map?(Process.uid, 'uid', raw_idmap) and
168
+ id_in_map?(Process.gid, 'gid', raw_idmap)
174
169
  end
175
170
  rescue Vagrant::Errors::ProviderNotUsable
176
171
  false
@@ -343,6 +338,14 @@ module VagrantLXD
343
338
  end
344
339
  end
345
340
 
341
+ def package
342
+ if in_state? :stopped
343
+ create_package_directory
344
+ else
345
+ @logger.debug "Skipped packaging (#{machine_id} is not stopped)"
346
+ end
347
+ end
348
+
346
349
  def configure
347
350
  container = lxd.container(machine_id)
348
351
  container[:config] = container[:config].to_hash.merge(config)
@@ -391,7 +394,7 @@ module VagrantLXD
391
394
  end
392
395
  end
393
396
 
394
- private
397
+ private
395
398
 
396
399
  #
397
400
  # The remaining methods are just conveniences, not part of the API
@@ -538,11 +541,27 @@ module VagrantLXD
538
541
  config
539
542
  end
540
543
 
544
+ # Determines whether the numerical `id` of the specified `type` is
545
+ # included in the given idmap. These values should follow the format
546
+ # of the "raw.idmap" property specified here:
547
+ #
548
+ # https://lxd.readthedocs.io/en/latest/userns-idmap/#custom-idmaps
549
+ #
550
+ def id_in_map?(id, type, map)
551
+ range_types = ['both', type]
552
+ map.each_line.any? do |line|
553
+ range_type, range_values = line.split
554
+ range = range_values.split('-')
555
+ begin
556
+ range_types.include?(range_type) and
557
+ id.between?(range.first.to_i, range.last.to_i)
558
+ end
559
+ end
560
+ end
561
+
541
562
  def locate_or_generate_client_certificate
542
563
  vagrant_path = @machine.env.data_dir / 'lxd'
543
- default_path = Certificate.default_path / 'lxc'
544
-
545
- search_paths = [vagrant_path, default_path]
564
+ search_paths = [vagrant_path] + Certificate.default_paths
546
565
 
547
566
  Certificate.locate(search_paths) or
548
567
  Certificate.generate(vagrant_path)
@@ -602,6 +621,42 @@ module VagrantLXD
602
621
  FileUtils.rm_rf(tmpdir)
603
622
  end
604
623
 
624
+ # TODO s.a.
625
+ def create_package_directory
626
+ package_directory = Dir.mktmpdir
627
+
628
+ image = begin
629
+ lxd.create_image_from_container(machine_id, IMAGE_PROPERTIES)
630
+ rescue Hyperkit::BadRequest => e
631
+ if e.reason =~ /The image already exists: (\h{64})/
632
+ {
633
+ metadata: { fingerprint: $1 }
634
+ }
635
+ else
636
+ fail ImageExportFailure, machine_name: @machine.name, reason: e.reason
637
+ end
638
+ end
639
+
640
+ lxd.export_image(image[:metadata][:fingerprint], package_directory, filename: 'rootfs.tar.gz')
641
+
642
+ File.open(File.join(package_directory, 'metadata.json'), 'w') do |metadata|
643
+ metadata.puts JSON.pretty_generate({
644
+ 'provider' => 'lxc',
645
+ 'version' => '1.0.0',
646
+ 'built-on' => Time.now.strftime("%a %m %d %H:%M:%S %z %Y"),
647
+ })
648
+ end
649
+ rescue Exception => e
650
+ @machine.ui.error 'Failed to export container image'
651
+ @logger.error 'Error preparing container image: ' << e.message << "\n" << e.backtrace.join("\n")
652
+ fail ImageExportFailure, machine_name: @machine.name, reason: e.message
653
+ else
654
+ package_directory
655
+ ensure
656
+ # If the image was created just for this package, remove it.
657
+ lxd.delete_image(image[:metadata][:fingerprint]) rescue nil if image.is_a? Sawyer::Resource
658
+ end
659
+
605
660
  def error(klass)
606
661
  klass.new(
607
662
  provider: Version::NAME,
@@ -33,8 +33,11 @@ module VagrantLXD
33
33
 
34
34
  @logger = Log4r::Logger.new('vagrant::lxd::driver::certificate')
35
35
 
36
- def Certificate.default_path
37
- Pathname.new('~/.config').expand_path
36
+ def Certificate.default_paths
37
+ [
38
+ Pathname.new('~/.config/lxc').expand_path,
39
+ Pathname.new('~/snap/lxd/current/.config/lxc').expand_path,
40
+ ]
38
41
  end
39
42
 
40
43
  def Certificate.issuer_name
@@ -24,6 +24,7 @@ module VagrantLXD
24
24
 
25
25
  def usable?(machine, raise_error = false)
26
26
  return false unless machine.provider_name == :lxd
27
+ return false unless machine.env.host.capability(:synced_folders)
27
28
 
28
29
  @driver ||= Driver.new(machine)
29
30
 
@@ -20,7 +20,7 @@
20
20
  module VagrantLXD
21
21
  module Version
22
22
  NAME = 'vagrant-lxd'
23
- VERSION = '0.4.3'
23
+ VERSION = '0.5.2'
24
24
  DESCRIPTION = 'Vagrant LXD provider'
25
25
  end
26
26
  end
@@ -134,6 +134,13 @@ en:
134
134
 
135
135
  https://gitlab.com/catalyst-it/vagrant-lxd/issues
136
136
 
137
+ lxd_image_export_failure: |-
138
+ The provider was unable to export a container image for '%{machine_name}'.
139
+
140
+ The underlying error message was: %{reason}
141
+
142
+ The LXD logs may contain more information about the cause of this failure.
143
+
137
144
  lxd_duplicate_attachment_failure: |-
138
145
  A machine can only be associated with one container at a time.
139
146
 
@@ -36,5 +36,9 @@ Gem::Specification.new do |spec|
36
36
  end
37
37
 
38
38
  spec.add_runtime_dependency 'activesupport', '~> 5.2.3'
39
- spec.add_runtime_dependency 'hyperkit', '~> 1.2.0'
39
+ spec.add_runtime_dependency 'hyperkit', '~> 1.3.0'
40
+
41
+ # NOTE fixed to preserve ruby 1.x compatibility, versions after 1.0
42
+ # use the safe navigation operator and thus need ruby 2.3 or newer
43
+ spec.add_runtime_dependency 'faraday', '~> 0.17'
40
44
  end
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.4.3
4
+ version: 0.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Hanson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-21 00:00:00.000000000 Z
11
+ date: 2020-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.2.0
33
+ version: 1.3.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.2.0
40
+ version: 1.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.17'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.17'
41
55
  description: A Vagrant plugin that allows management of containers using LXD.
42
56
  email:
43
57
  - evanh@catalyst.net.nz