vagrant-lxd 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/Gemfile +1 -0
- data/Gemfile.lock +27 -12
- data/Rakefile +19 -0
- data/lib/vagrant-lxd/action.rb +31 -0
- data/lib/vagrant-lxd/capability.rb +15 -0
- data/lib/vagrant-lxd/command.rb +17 -0
- data/lib/vagrant-lxd/config.rb +2 -0
- data/lib/vagrant-lxd/driver.rb +15 -18
- data/lib/vagrant-lxd/plugin.rb +5 -0
- data/lib/vagrant-lxd/version.rb +1 -1
- data/templates/locales/en.yml +14 -0
- data/vagrant-lxd.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abc3e26c2ce8d3408a4e4469219404dc24a08d50
|
4
|
+
data.tar.gz: 720aac0252d1af7b40a0d15893fa8aeebaa08bcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 754310e162e9d5716514c9fa0a938b055c53355553433379c7bc5e484933025a22bbc10c3e1a95e4b6f7c2cc524e3178ede1461a20aebe05f572589a23c3d3b7
|
7
|
+
data.tar.gz: 0dd64052ec2514532ca7d73828048674f6753317d9da5f6be0b53fb89c93ba8b9abe634d176b85a36f5935210afc8d9d0611d542aa1b2d4f51a6eecee3cf4315
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/mitchellh/vagrant.git
|
3
|
-
revision:
|
3
|
+
revision: dbba41a7ec3d87830f9b1895266d6a807c1cd2e0
|
4
4
|
specs:
|
5
|
-
vagrant (2.
|
5
|
+
vagrant (2.1.2.dev)
|
6
6
|
childprocess (~> 0.6.0)
|
7
7
|
erubis (~> 2.7.0)
|
8
8
|
hashicorp-checkpoint (~> 0.1.5)
|
@@ -16,6 +16,8 @@ GIT
|
|
16
16
|
rest-client (>= 1.6.0, < 3.0)
|
17
17
|
ruby_dep (<= 1.3.1)
|
18
18
|
wdm (~> 0.1.0)
|
19
|
+
win32-file (~> 0.8.1)
|
20
|
+
win32-file-security (~> 1.0.10)
|
19
21
|
winrm (~> 2.1)
|
20
22
|
winrm-elevated (~> 1.1)
|
21
23
|
winrm-fs (~> 1.0)
|
@@ -23,30 +25,32 @@ GIT
|
|
23
25
|
PATH
|
24
26
|
remote: .
|
25
27
|
specs:
|
26
|
-
vagrant-lxd (0.2.
|
27
|
-
hyperkit (~> 1.1)
|
28
|
+
vagrant-lxd (0.2.1)
|
29
|
+
hyperkit (~> 1.1.0)
|
28
30
|
|
29
31
|
GEM
|
30
32
|
remote: https://rubygems.org/
|
31
33
|
specs:
|
32
|
-
activesupport (
|
33
|
-
|
34
|
-
i18n (>= 0.7, < 2)
|
34
|
+
activesupport (4.2.10)
|
35
|
+
i18n (~> 0.7)
|
35
36
|
minitest (~> 5.1)
|
37
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
36
38
|
tzinfo (~> 1.1)
|
37
39
|
addressable (2.5.2)
|
38
40
|
public_suffix (>= 2.0.2, < 4.0)
|
39
41
|
builder (3.2.3)
|
40
42
|
childprocess (0.6.3)
|
41
43
|
ffi (~> 1.0, >= 1.0.11)
|
42
|
-
concurrent-ruby (1.0.5)
|
43
44
|
diff-lcs (1.3)
|
44
|
-
domain_name (0.5.
|
45
|
+
domain_name (0.5.20180417)
|
45
46
|
unf (>= 0.0.5, < 1.0.0)
|
46
47
|
erubis (2.7.0)
|
47
|
-
|
48
|
+
fakefs (0.14.1)
|
49
|
+
faraday (0.15.2)
|
48
50
|
multipart-post (>= 1.2, < 3)
|
49
51
|
ffi (1.9.23)
|
52
|
+
ffi-win32-extensions (1.0.3)
|
53
|
+
ffi
|
50
54
|
gssapi (1.2.0)
|
51
55
|
ffi (>= 1.0.1)
|
52
56
|
gyoku (1.3.1)
|
@@ -55,8 +59,8 @@ GEM
|
|
55
59
|
http-cookie (1.0.3)
|
56
60
|
domain_name (~> 0.5)
|
57
61
|
httpclient (2.8.3)
|
58
|
-
hyperkit (1.
|
59
|
-
activesupport (
|
62
|
+
hyperkit (1.1.0)
|
63
|
+
activesupport (~> 4.2.6)
|
60
64
|
sawyer
|
61
65
|
i18n (0.8.0)
|
62
66
|
listen (3.1.5)
|
@@ -121,6 +125,16 @@ GEM
|
|
121
125
|
unf_ext
|
122
126
|
unf_ext (0.0.7.5)
|
123
127
|
wdm (0.1.1)
|
128
|
+
win32-file (0.8.1)
|
129
|
+
ffi
|
130
|
+
ffi-win32-extensions
|
131
|
+
win32-file-stat (>= 1.4.0)
|
132
|
+
win32-file-security (1.0.10)
|
133
|
+
ffi
|
134
|
+
ffi-win32-extensions
|
135
|
+
win32-file-stat (1.5.5)
|
136
|
+
ffi
|
137
|
+
ffi-win32-extensions
|
124
138
|
winrm (2.2.3)
|
125
139
|
builder (>= 2.1.2)
|
126
140
|
erubis (~> 2.7)
|
@@ -143,6 +157,7 @@ PLATFORMS
|
|
143
157
|
ruby
|
144
158
|
|
145
159
|
DEPENDENCIES
|
160
|
+
fakefs
|
146
161
|
rake
|
147
162
|
rspec
|
148
163
|
rspec-its
|
data/Rakefile
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (c) 2017-2018 Catalyst.net Ltd
|
3
|
+
#
|
4
|
+
# This file is part of vagrant-lxd.
|
5
|
+
#
|
6
|
+
# vagrant-lxd is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or (at
|
9
|
+
# your option) any later version.
|
10
|
+
#
|
11
|
+
# vagrant-lxd is distributed in the hope that it will be useful, but
|
12
|
+
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with vagrant-lxd. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
#
|
19
|
+
|
1
20
|
require 'rubygems'
|
2
21
|
require 'bundler/setup'
|
3
22
|
require 'rspec/core/rake_task'
|
data/lib/vagrant-lxd/action.rb
CHANGED
@@ -95,6 +95,35 @@ module VagrantLXD
|
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
+
#
|
99
|
+
# Issue a warning when the machine wants synced folders but the host
|
100
|
+
# doesn't support it (according to the relevant shadow files).
|
101
|
+
#
|
102
|
+
class CheckForSyncedFolderSupport
|
103
|
+
def initialize(app, env)
|
104
|
+
@app = app
|
105
|
+
@env = env
|
106
|
+
end
|
107
|
+
|
108
|
+
def call(env)
|
109
|
+
enabled_folders = env[:machine].config.vm.synced_folders.reject do |_, options|
|
110
|
+
next true if options[:disabled]
|
111
|
+
next true unless options[:type].nil? or options[:type] == :lxd
|
112
|
+
end
|
113
|
+
|
114
|
+
if enabled_folders.any? and not env[:host].capability(:synced_folders)
|
115
|
+
env[:ui].error 'The host machine does not support LXD synced folders.'
|
116
|
+
env[:ui].warn ''
|
117
|
+
env[:ui].warn 'To use this feature, you must first configure ID mappings for the'
|
118
|
+
env[:ui].warn 'current user in /etc/subuid and /etc/subgid. For more information,'
|
119
|
+
env[:ui].warn "refer to `#{File.basename($0)} lxd shadow --help`."
|
120
|
+
env[:ui].warn ''
|
121
|
+
end
|
122
|
+
|
123
|
+
@app.call(env)
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
98
127
|
#
|
99
128
|
# Action definitions.
|
100
129
|
#
|
@@ -108,6 +137,7 @@ module VagrantLXD
|
|
108
137
|
when Vagrant::MachineState::NOT_CREATED_ID
|
109
138
|
c.use Message, :info, 'Machine has not been created yet, starting...'
|
110
139
|
c.use HandleBox
|
140
|
+
c.use CheckForSyncedFolderSupport
|
111
141
|
c.use LXD.action(:create)
|
112
142
|
c.use LXD.action(:resume)
|
113
143
|
c.use SetHostname
|
@@ -191,6 +221,7 @@ module VagrantLXD
|
|
191
221
|
c.use Message, :info, 'Machine is already running.'
|
192
222
|
when :frozen, :stopped
|
193
223
|
c.use Message, :info, 'Resuming machine...'
|
224
|
+
c.use CheckForSyncedFolderSupport
|
194
225
|
c.use LXD.action(:resume)
|
195
226
|
c.use SetHostname
|
196
227
|
c.use SyncedFolders
|
@@ -17,11 +17,26 @@
|
|
17
17
|
# along with vagrant-lxd. If not, see <http://www.gnu.org/licenses/>.
|
18
18
|
#
|
19
19
|
|
20
|
+
require 'vagrant-lxd/config'
|
21
|
+
|
20
22
|
module VagrantLXD
|
21
23
|
class Capability
|
22
24
|
def Capability.snapshot_list(machine)
|
23
25
|
env = machine.action(:snapshot_list)
|
24
26
|
env[:machine_snapshot_list] || []
|
25
27
|
end
|
28
|
+
|
29
|
+
def Capability.synced_folders(env)
|
30
|
+
logger = Log4r::Logger.new('vagrant::lxd::capability')
|
31
|
+
logger.debug "Checking synced folders support for effective UID/GID #{Process.uid}/#{Process.gid}..."
|
32
|
+
result = %w(uid gid).all? do |type|
|
33
|
+
begin
|
34
|
+
File.readlines("/etc/sub#{type}").grep(/^root:#{Process.send(type)}:[1-9]/).any?
|
35
|
+
rescue StandardError => e
|
36
|
+
logger.warn "Cannot read subordinate permissions file: #{e.message}"
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
26
41
|
end
|
27
42
|
end
|
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 ' shadow print user and group ID mapping information'
|
40
41
|
o.separator ' version print current plugin version'
|
41
42
|
o.separator ''
|
42
43
|
o.separator 'For help on a specific command, run `vagrant lxd <command> -h`'
|
@@ -52,6 +53,8 @@ module VagrantLXD
|
|
52
53
|
attach(args)
|
53
54
|
when 'detach'
|
54
55
|
detach(args)
|
56
|
+
when 'shadow'
|
57
|
+
shadow(args)
|
55
58
|
when 'version'
|
56
59
|
@env.ui.info 'Vagrant LXD Provider'
|
57
60
|
@env.ui.info 'Version ' << Version::VERSION
|
@@ -153,5 +156,19 @@ module VagrantLXD
|
|
153
156
|
yield @env.machine(name, :lxd)
|
154
157
|
end
|
155
158
|
end
|
159
|
+
|
160
|
+
def shadow(args)
|
161
|
+
opts = OptionParser.new do |o|
|
162
|
+
o.banner = 'Usage: vagrant lxd shadow --help'
|
163
|
+
o.separator ''
|
164
|
+
o.separator 'Displays information about user and group ID mapping.'
|
165
|
+
end
|
166
|
+
|
167
|
+
if args.include?('-h') or args.include?('--help')
|
168
|
+
@env.ui.info I18n.t('vagrant.help.shadow', uid: Process.uid, gid: Process.gid)
|
169
|
+
else
|
170
|
+
fail Vagrant::Errors::CLIInvalidUsage, help: opts.help
|
171
|
+
end
|
172
|
+
end
|
156
173
|
end
|
157
174
|
end
|
data/lib/vagrant-lxd/config.rb
CHANGED
data/lib/vagrant-lxd/driver.rb
CHANGED
@@ -23,12 +23,13 @@ require 'securerandom'
|
|
23
23
|
require 'tempfile'
|
24
24
|
require 'timeout'
|
25
25
|
require 'vagrant/machine_state'
|
26
|
+
require 'vagrant-lxd/config'
|
26
27
|
|
27
28
|
module VagrantLXD
|
28
29
|
class Driver
|
29
30
|
include Vagrant::Util
|
30
31
|
|
31
|
-
|
32
|
+
USER_AGENT = "#{Version::DESCRIPTION} #{Version::VERSION} (#{Hyperkit::Default.user_agent})"
|
32
33
|
|
33
34
|
class OperationTimeout < Vagrant::Errors::VagrantError
|
34
35
|
error_key 'lxd_operation_timeout'
|
@@ -108,8 +109,8 @@ module VagrantLXD
|
|
108
109
|
@ephemeral = machine.provider_config.ephemeral
|
109
110
|
@profiles = machine.provider_config.profiles
|
110
111
|
@name = machine.provider_config.name
|
111
|
-
@logger = Log4r::Logger.new('vagrant::lxd')
|
112
|
-
@lxd = Hyperkit::Client.new(api_endpoint: api_endpoint.to_s, verify_ssl: false)
|
112
|
+
@logger = Log4r::Logger.new('vagrant::lxd::driver')
|
113
|
+
@lxd = Hyperkit::Client.new(api_endpoint: api_endpoint.to_s, verify_ssl: false, user_agent: USER_AGENT)
|
113
114
|
end
|
114
115
|
|
115
116
|
def validate!
|
@@ -119,8 +120,11 @@ module VagrantLXD
|
|
119
120
|
|
120
121
|
def synced_folders_usable?
|
121
122
|
# Check whether we've registered an idmap for the current user.
|
122
|
-
|
123
|
-
|
123
|
+
raw_idmap = container[:config][:'raw.idmap']
|
124
|
+
begin
|
125
|
+
raw_idmap and
|
126
|
+
raw_idmap =~ /^uid #{Process.uid} #{Config::VAGRANT_UID}$/ and
|
127
|
+
raw_idmap =~ /^gid #{Process.gid} #{Config::VAGRANT_UID}$/
|
124
128
|
end
|
125
129
|
rescue Vagrant::Errors::ProviderNotUsable
|
126
130
|
false
|
@@ -396,19 +400,12 @@ module VagrantLXD
|
|
396
400
|
# Set "raw.idmap" if the host's sub{u,g}id configuration allows it.
|
397
401
|
# This allows sharing folders via LXD (see synced_folder.rb).
|
398
402
|
# If the user has already specified a 'raw.idmap', leave it alone.
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
config[:'raw.idmap'] ||= ''
|
406
|
-
config[:'raw.idmap'] << "#{type} #{id} #{VAGRANT_UID}\n"
|
407
|
-
end
|
408
|
-
end
|
409
|
-
rescue StandardError => e
|
410
|
-
@logger.warn "Cannot read subordinate permissions file: #{e.message}"
|
411
|
-
end
|
403
|
+
if config.include?(:'raw.idmap')
|
404
|
+
# Manually specified, carry on.
|
405
|
+
elsif @machine.env.host.capability(:synced_folders)
|
406
|
+
config[:'raw.idmap'] = ''
|
407
|
+
config[:'raw.idmap'] << "uid #{Process.uid} #{Config::VAGRANT_UID}\n"
|
408
|
+
config[:'raw.idmap'] << "gid #{Process.gid} #{Config::VAGRANT_UID}\n"
|
412
409
|
end
|
413
410
|
|
414
411
|
@logger.debug 'Resulting configuration: ' << config.inspect
|
data/lib/vagrant-lxd/plugin.rb
CHANGED
data/lib/vagrant-lxd/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -16,6 +16,20 @@ en:
|
|
16
16
|
The machine has no snapshot named '%{name}'.
|
17
17
|
restored: |-
|
18
18
|
The machine has been restored to snapshot '%{name}'!
|
19
|
+
help:
|
20
|
+
shadow: |-
|
21
|
+
In order to use shared folders, you must first add the effective user
|
22
|
+
and group ID (which are currently %{uid} and %{gid}) to the host machine's
|
23
|
+
subuid(5) and subgid(5) files:
|
24
|
+
|
25
|
+
$ echo root:%{uid}:1 | sudo tee -a /etc/subuid
|
26
|
+
$ echo root:%{gid}:1 | sudo tee -a /etc/subgid
|
27
|
+
|
28
|
+
For more information about these commands, and user/group ID mapping in
|
29
|
+
general, refer to this article:
|
30
|
+
|
31
|
+
https://insights.ubuntu.com/2017/06/15/custom-user-mappings-in-lxd-containers/
|
32
|
+
|
19
33
|
errors:
|
20
34
|
lxd_connection_failure: |-
|
21
35
|
The provider was unable to contact the LXD daemon at %{api_endpoint}.
|
data/vagrant-lxd.gemspec
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.2.
|
4
|
+
version: 0.2.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: 2018-
|
11
|
+
date: 2018-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hyperkit
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.1.0
|
27
27
|
description: A Vagrant plugin that allows management of containers using LXD.
|
28
28
|
email:
|
29
29
|
- evanh@catalyst.net.nz
|