vagrant-lxd 0.4.4 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81d3c5f71aaa0fb4f5fd3128722bf0d045619f7b56f2f6056f87ab396548d18f
4
- data.tar.gz: 966e0817b7bb8fd94b7a865e2799b468a92b4522de5218a088e7502f75d218be
3
+ metadata.gz: b89636a6a97535b4de4e9e3cfb4fcc458fb06f70ca3d55ff7bc62c9bea14c74a
4
+ data.tar.gz: a3fe8906086a40e8b9ed66840834990832a401569a70373d99ee8b81281e47a8
5
5
  SHA512:
6
- metadata.gz: f222d710cf807b6cbba3a5aae4dc0fb69df34c4a6d7112ef2df727f9218fd5296d8d3ed0a17fcecd8c68e3243bc982ea82a2fcdfedeb0932257bd7f08f940a9d
7
- data.tar.gz: 9a0c720fd7130f77bf60663b5e1d7c2f8bc4da4bf74683214e3b4ec1e632334f704085053ae3e564d0cc967a6861d2b7597443fed20be33d8fad38cf13e49445
6
+ metadata.gz: d0289b302cb01183cea109c3dc80aa61ea0d54350b9d9ae1539bed266f784f37f12b4ce64711afe9cc17cedcac87d0825ad51df1aa66fe90a1df750fa9e9a9e9
7
+ data.tar.gz: 180e12636dd09fed787989067229a4f501120dfcdfac46ec6cdeb1d799254ddd4e5f305b51a272c4b8e10b30fd68efdaf9280088299c25294655e2c95eef5736
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,41 +1,42 @@
1
1
  GIT
2
2
  remote: https://github.com/mitchellh/vagrant.git
3
- revision: 1dda6cc14c2d221a8e2e7b5091fed2fca9ba1ecf
3
+ revision: f19eb286e4cc2aeae06b632ef1fa44db499df403
4
4
  specs:
5
- vagrant (2.2.6.dev)
5
+ vagrant (2.2.11.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
- erubis (~> 2.7.0)
9
+ erubi
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.4)
31
+ vagrant-lxd (0.5.3)
31
32
  activesupport (~> 5.2.3)
32
33
  faraday (~> 0.17)
33
- hyperkit (~> 1.2.0)
34
+ hyperkit (~> 1.3.0)
34
35
 
35
36
  GEM
36
37
  remote: https://rubygems.org/
37
38
  specs:
38
- activesupport (5.2.4.1)
39
+ activesupport (5.2.4.4)
39
40
  concurrent-ruby (~> 1.0, >= 1.0.2)
40
41
  i18n (>= 0.7, < 2)
41
42
  minitest (~> 5.1)
@@ -43,19 +44,18 @@ GEM
43
44
  addressable (2.7.0)
44
45
  public_suffix (>= 2.0.2, < 5.0)
45
46
  bcrypt_pbkdf (1.0.1)
46
- builder (3.2.3)
47
- childprocess (0.6.3)
48
- ffi (~> 1.0, >= 1.0.11)
49
- concurrent-ruby (1.1.5)
50
- 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)
51
51
  domain_name (0.5.20190701)
52
52
  unf (>= 0.0.5, < 1.0.0)
53
53
  ed25519 (1.2.4)
54
- erubis (2.7.0)
55
- fakefs (0.20.1)
54
+ erubi (1.9.0)
55
+ fakefs (1.2.2)
56
56
  faraday (0.17.3)
57
57
  multipart-post (>= 1.2, < 3)
58
- ffi (1.11.1)
58
+ ffi (1.13.1)
59
59
  gssapi (1.3.0)
60
60
  ffi (>= 1.0.1)
61
61
  gyoku (1.3.1)
@@ -64,37 +64,37 @@ GEM
64
64
  http-cookie (1.0.3)
65
65
  domain_name (~> 0.5)
66
66
  httpclient (2.8.3)
67
- hyperkit (1.2.0)
67
+ hyperkit (1.3.0)
68
68
  activesupport (>= 4.2.6)
69
69
  sawyer
70
- i18n (1.1.1)
70
+ i18n (1.8.5)
71
71
  concurrent-ruby (~> 1.0)
72
- listen (3.1.5)
73
- rb-fsevent (~> 0.9, >= 0.9.4)
74
- rb-inotify (~> 0.9, >= 0.9.7)
75
- ruby_dep (~> 1.2)
72
+ listen (3.2.1)
73
+ rb-fsevent (~> 0.10, >= 0.10.3)
74
+ rb-inotify (~> 0.9, >= 0.9.10)
76
75
  little-plugger (1.1.4)
77
76
  log4r (1.1.10)
78
- logging (2.2.2)
77
+ logging (2.3.0)
79
78
  little-plugger (~> 1.1)
80
- multi_json (~> 1.10)
81
- mime-types (3.2.2)
79
+ multi_json (~> 1.14)
80
+ mime (0.4.4)
81
+ mime-types (3.3.1)
82
82
  mime-types-data (~> 3.2015)
83
- mime-types-data (3.2019.0331)
84
- minitest (5.13.0)
85
- multi_json (1.13.1)
83
+ mime-types-data (3.2020.0512)
84
+ minitest (5.14.2)
85
+ multi_json (1.15.0)
86
86
  multipart-post (2.1.1)
87
87
  net-scp (1.2.1)
88
88
  net-ssh (>= 2.6.5)
89
- net-sftp (2.1.2)
90
- net-ssh (>= 2.6.5)
91
- net-ssh (5.1.0)
89
+ net-sftp (3.0.0)
90
+ net-ssh (>= 5.0.0, < 7.0.0)
91
+ net-ssh (6.1.0)
92
92
  netrc (0.11.0)
93
93
  nori (2.6.0)
94
- public_suffix (4.0.3)
95
- rake (12.3.3)
96
- rb-fsevent (0.10.3)
97
- rb-inotify (0.10.0)
94
+ public_suffix (4.0.6)
95
+ rake (13.0.1)
96
+ rb-fsevent (0.10.4)
97
+ rb-inotify (0.10.1)
98
98
  ffi (~> 1.0)
99
99
  rb-kqueue (0.2.5)
100
100
  ffi (>= 0.5.0)
@@ -102,53 +102,54 @@ GEM
102
102
  http-cookie (>= 1.0.2, < 2.0)
103
103
  mime-types (>= 1.16, < 4.0)
104
104
  netrc (~> 0.8)
105
- rspec (3.8.0)
106
- rspec-core (~> 3.8.0)
107
- rspec-expectations (~> 3.8.0)
108
- rspec-mocks (~> 3.8.0)
109
- rspec-core (3.8.2)
110
- rspec-support (~> 3.8.0)
111
- rspec-expectations (3.8.4)
105
+ rspec (3.9.0)
106
+ rspec-core (~> 3.9.0)
107
+ rspec-expectations (~> 3.9.0)
108
+ rspec-mocks (~> 3.9.0)
109
+ rspec-core (3.9.3)
110
+ rspec-support (~> 3.9.3)
111
+ rspec-expectations (3.9.2)
112
112
  diff-lcs (>= 1.2.0, < 2.0)
113
- rspec-support (~> 3.8.0)
113
+ rspec-support (~> 3.9.0)
114
114
  rspec-its (1.3.0)
115
115
  rspec-core (>= 3.0.0)
116
116
  rspec-expectations (>= 3.0.0)
117
- rspec-mocks (3.8.1)
117
+ rspec-mocks (3.9.1)
118
118
  diff-lcs (>= 1.2.0, < 2.0)
119
- rspec-support (~> 3.8.0)
120
- rspec-support (3.8.2)
119
+ rspec-support (~> 3.9.0)
120
+ rspec-support (3.9.3)
121
121
  ruby_dep (1.3.1)
122
122
  rubyntlm (0.6.2)
123
- rubyzip (1.2.3)
123
+ rubyzip (2.3.0)
124
124
  sawyer (0.8.2)
125
125
  addressable (>= 2.3.5)
126
126
  faraday (> 0.8, < 2.0)
127
127
  thread_safe (0.3.6)
128
- tzinfo (1.2.6)
128
+ tzinfo (1.2.7)
129
129
  thread_safe (~> 0.1)
130
130
  unf (0.1.4)
131
131
  unf_ext
132
- unf_ext (0.0.7.6)
133
- vagrant_cloud (2.0.2)
132
+ unf_ext (0.0.7.7)
133
+ vagrant_cloud (2.0.3)
134
134
  rest-client (~> 2.0.2)
135
135
  wdm (0.1.1)
136
- winrm (2.3.2)
136
+ winrm (2.3.4)
137
137
  builder (>= 2.1.2)
138
- erubis (~> 2.7)
138
+ erubi (~> 1.8)
139
139
  gssapi (~> 1.2)
140
140
  gyoku (~> 1.0)
141
141
  httpclient (~> 2.2, >= 2.2.0.2)
142
142
  logging (>= 1.6.1, < 3.0)
143
143
  nori (~> 2.0)
144
144
  rubyntlm (~> 0.6.0, >= 0.6.1)
145
- winrm-elevated (1.1.1)
145
+ winrm-elevated (1.2.2)
146
+ erubi (~> 1.8)
146
147
  winrm (~> 2.0)
147
148
  winrm-fs (~> 1.0)
148
- winrm-fs (1.3.2)
149
- erubis (~> 2.7)
149
+ winrm-fs (1.3.5)
150
+ erubi (~> 1.8)
150
151
  logging (>= 1.6.1, < 3.0)
151
- rubyzip (~> 1.1)
152
+ rubyzip (~> 2.0)
152
153
  winrm (~> 2.0)
153
154
 
154
155
  PLATFORMS
@@ -164,4 +165,4 @@ DEPENDENCIES
164
165
  vagrant-lxd!
165
166
 
166
167
  BUNDLED WITH
167
- 2.0.2
168
+ 2.1.4
data/README.md CHANGED
@@ -148,7 +148,7 @@ is passed through to LXD. The hash values should all be strings:
148
148
  recursive: 'false',
149
149
  }
150
150
 
151
- [disk]: https://lxd.readthedocs.io/en/latest/containers/#type-disk
151
+ [disk]: https://lxd.readthedocs.io/en/latest/instances/#type-disk
152
152
 
153
153
  ### Shared LXD Containers
154
154
 
@@ -234,7 +234,7 @@ to run graphical applications transparently from within the guest:
234
234
  Note that disk devices should be configured as [synced
235
235
  folders](#synced-folders) rather than ad-hoc devices.
236
236
 
237
- [device-config]: https://lxd.readthedocs.io/en/latest/containers/#device-configuration
237
+ [device-config]: https://lxd.readthedocs.io/en/latest/instances/#devices-configuration
238
238
 
239
239
  ## Hacking
240
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 -G lxd $(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:
@@ -25,7 +64,7 @@ sudo lxd init --auto --network-address=127.0.0.1 --network-port=8443
25
64
  sudo dpkg-reconfigure -p medium lxd
26
65
 
27
66
  # add your user to the lxd group
28
- sudo usermod -a lxd -G $(whoami)
67
+ sudo usermod -a -G lxd $(whoami)
29
68
  ```
30
69
 
31
70
  Once LXD is configured, you should register a client certificate for
@@ -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
@@ -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
@@ -119,15 +119,6 @@ module VagrantLXD
119
119
  end
120
120
  end
121
121
 
122
- module Hyperkit::Client::Containers
123
- alias extract_container_options_without_devices extract_container_options
124
-
125
- def extract_container_options(name, options)
126
- opts = extract_container_options_without_devices(name, options)
127
- options.slice(:devices).merge(opts)
128
- end
129
- end
130
-
131
122
  NOT_CREATED = Vagrant::MachineState::NOT_CREATED_ID
132
123
 
133
124
  attr_reader :api_endpoint
@@ -170,11 +161,11 @@ module VagrantLXD
170
161
 
171
162
  def synced_folders_usable?
172
163
  # Check whether we've registered an idmap for the current user.
173
- raw_idmap = container[:config][:'raw.idmap']
164
+ raw_idmap = config[:'raw.idmap']
174
165
  begin
175
166
  raw_idmap and
176
- raw_idmap =~ /^uid #{Process.uid} #{vagrant_uid}$/ and
177
- 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)
178
169
  end
179
170
  rescue Vagrant::Errors::ProviderNotUsable
180
171
  false
@@ -403,7 +394,7 @@ module VagrantLXD
403
394
  end
404
395
  end
405
396
 
406
- private
397
+ private
407
398
 
408
399
  #
409
400
  # The remaining methods are just conveniences, not part of the API
@@ -539,6 +530,8 @@ module VagrantLXD
539
530
  # If the user has already specified a 'raw.idmap', leave it alone.
540
531
  if config.include?(:'raw.idmap')
541
532
  # Manually specified, carry on.
533
+ elsif @machine.config.vm.synced_folders.reject { |_, f| f[:disabled] }.empty?
534
+ # No synced folders configured, carry on.
542
535
  elsif @machine.env.host.capability(:synced_folders)
543
536
  config[:'raw.idmap'] = ''
544
537
  config[:'raw.idmap'] << "uid #{Process.uid} #{vagrant_uid}\n"
@@ -550,11 +543,27 @@ module VagrantLXD
550
543
  config
551
544
  end
552
545
 
546
+ # Determines whether the numerical `id` of the specified `type` is
547
+ # included in the given idmap. These values should follow the format
548
+ # of the "raw.idmap" property specified here:
549
+ #
550
+ # https://lxd.readthedocs.io/en/latest/userns-idmap/#custom-idmaps
551
+ #
552
+ def id_in_map?(id, type, map)
553
+ range_types = ['both', type]
554
+ map.each_line.any? do |line|
555
+ range_type, range_values = line.split
556
+ range = range_values.split('-')
557
+ begin
558
+ range_types.include?(range_type) and
559
+ id.between?(range.first.to_i, range.last.to_i)
560
+ end
561
+ end
562
+ end
563
+
553
564
  def locate_or_generate_client_certificate
554
565
  vagrant_path = @machine.env.data_dir / 'lxd'
555
- default_path = Certificate.default_path / 'lxc'
556
-
557
- search_paths = [vagrant_path, default_path]
566
+ search_paths = [vagrant_path] + Certificate.default_paths
558
567
 
559
568
  Certificate.locate(search_paths) or
560
569
  Certificate.generate(vagrant_path)
@@ -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.4'
23
+ VERSION = '0.5.3'
24
24
  DESCRIPTION = 'Vagrant LXD provider'
25
25
  end
26
26
  end
@@ -36,7 +36,7 @@ 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
40
 
41
41
  # NOTE fixed to preserve ruby 1.x compatibility, versions after 1.0
42
42
  # use the safe navigation operator and thus need ruby 2.3 or newer
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.4
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Hanson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-06 00:00:00.000000000 Z
11
+ date: 2020-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ 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
41
  - !ruby/object:Gem::Dependency
42
42
  name: faraday
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -99,8 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
99
  - !ruby/object:Gem::Version
100
100
  version: '0'
101
101
  requirements: []
102
- rubyforge_project:
103
- rubygems_version: 2.7.6
102
+ rubygems_version: 3.0.3
104
103
  signing_key:
105
104
  specification_version: 4
106
105
  summary: Vagrant LXD provider