vagrant-lxd 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitlab-ci.yml +1 -1
- data/Gemfile.lock +3 -3
- data/README.md +14 -1
- data/lib/vagrant-lxd/action.rb +2 -2
- data/lib/vagrant-lxd/driver.rb +15 -1
- data/lib/vagrant-lxd/synced_folder.rb +39 -1
- data/lib/vagrant-lxd/version.rb +1 -1
- data/templates/locales/en.yml +14 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 304c1f8ee64a31435d51d95726660fd666f3febd
|
4
|
+
data.tar.gz: 46cc574e2ad04aa6604e929c8046e10accabc81c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6a49fa60209a54a54ce4de1714281bfc760ad75a80898a34d300e935b35fca7d51397f473229ffc2f037403601a7ccf8dfb583fe88aa8c6d9e32e0bbbd46b4b
|
7
|
+
data.tar.gz: ef6b64e67ecbbe673819096205b28bcba675c9162137efd550803810b8d54228fc1ccd49616cdabab705ee89092a2d0b26e91f343a0f3fc875471afe2ee71245
|
data/.gitlab-ci.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/mitchellh/vagrant.git
|
3
|
-
revision:
|
3
|
+
revision: c6b42a04cd1ca9f0936714ee6a44b4c7c001fdeb
|
4
4
|
specs:
|
5
5
|
vagrant (2.2.4.dev)
|
6
6
|
bcrypt_pbkdf (~> 1.0.0)
|
@@ -27,7 +27,7 @@ GIT
|
|
27
27
|
PATH
|
28
28
|
remote: .
|
29
29
|
specs:
|
30
|
-
vagrant-lxd (0.3.
|
30
|
+
vagrant-lxd (0.3.3)
|
31
31
|
hyperkit (~> 1.2.0)
|
32
32
|
|
33
33
|
GEM
|
@@ -50,7 +50,7 @@ GEM
|
|
50
50
|
unf (>= 0.0.5, < 1.0.0)
|
51
51
|
ed25519 (1.2.4)
|
52
52
|
erubis (2.7.0)
|
53
|
-
fakefs (0.
|
53
|
+
fakefs (0.19.1)
|
54
54
|
faraday (0.15.4)
|
55
55
|
multipart-post (>= 1.2, < 3)
|
56
56
|
ffi (1.10.0)
|
data/README.md
CHANGED
@@ -90,7 +90,7 @@ Vagrant.configure('2') do |config|
|
|
90
90
|
end
|
91
91
|
```
|
92
92
|
|
93
|
-
###
|
93
|
+
### Synced Folders
|
94
94
|
|
95
95
|
In order to use shared folders, you must first add your user ID to the
|
96
96
|
host machine's subuid(5) and subgid(5) files:
|
@@ -115,6 +115,19 @@ the default with the `vagrant_uid` and `vagrant_gid` settings.
|
|
115
115
|
lxd.vagrand_gid = 1000 # defaults to vagrant_uid
|
116
116
|
end
|
117
117
|
|
118
|
+
#### Disk Device Configuration
|
119
|
+
|
120
|
+
Synced folders are mounted as [disk devices][disk] within the guest. You
|
121
|
+
can configure them by adding settings to folder's `config` hash, which
|
122
|
+
is passed through to LXD. The hash values should all be strings:
|
123
|
+
|
124
|
+
config.vm.synced_folder '/foo', '/bar', config: {
|
125
|
+
readonly: 'true',
|
126
|
+
recursive: 'false',
|
127
|
+
}
|
128
|
+
|
129
|
+
[disk]: https://lxd.readthedocs.io/en/latest/containers/#type-disk
|
130
|
+
|
118
131
|
### Shared LXD Containers
|
119
132
|
|
120
133
|
It's possible to share a single LXD container between multiple Vagrant
|
data/lib/vagrant-lxd/action.rb
CHANGED
@@ -140,9 +140,9 @@ module VagrantLXD
|
|
140
140
|
c.use CheckForSyncedFolderSupport
|
141
141
|
c.use LXD.action(:create)
|
142
142
|
c.use Provision
|
143
|
-
c.use LXD.action(:resume)
|
144
143
|
c.use SetHostname
|
145
144
|
c.use SyncedFolders
|
145
|
+
c.use LXD.action(:resume)
|
146
146
|
c.use WaitForCommunicator
|
147
147
|
when :running
|
148
148
|
c.use Message, :info, 'Machine is already running.'
|
@@ -224,9 +224,9 @@ module VagrantLXD
|
|
224
224
|
c.use CheckForSyncedFolderSupport
|
225
225
|
c.use LXD.action(:configure)
|
226
226
|
c.use Provision
|
227
|
-
c.use LXD.action(:resume)
|
228
227
|
c.use SetHostname
|
229
228
|
c.use SyncedFolders
|
229
|
+
c.use LXD.action(:resume)
|
230
230
|
c.use WaitForCommunicator
|
231
231
|
else
|
232
232
|
c.use Message, :error, "Machine cannot be resumed while #{env[:machine_state]}."
|
data/lib/vagrant-lxd/driver.rb
CHANGED
@@ -80,6 +80,14 @@ module VagrantLXD
|
|
80
80
|
error_key 'lxd_duplicate_attachment_failure'
|
81
81
|
end
|
82
82
|
|
83
|
+
class DiskMountFailure < Vagrant::Errors::VagrantError
|
84
|
+
error_key 'lxd_disk_mount_failure'
|
85
|
+
end
|
86
|
+
|
87
|
+
class DiskUnmountFailure < Vagrant::Errors::VagrantError
|
88
|
+
error_key 'lxd_disk_unmount_failure'
|
89
|
+
end
|
90
|
+
|
83
91
|
class SnapshotNotFound < Vagrant::Errors::VagrantError
|
84
92
|
error_key 'snapshot_not_found'
|
85
93
|
end
|
@@ -150,9 +158,12 @@ module VagrantLXD
|
|
150
158
|
def mount(name, options)
|
151
159
|
container = @lxd.container(machine_id)
|
152
160
|
devices = container[:devices].to_hash
|
153
|
-
devices[name] = { type: 'disk', path: options[:guestpath], source: options[:hostpath] }
|
161
|
+
devices[name] = { type: 'disk', path: options[:guestpath], source: options[:hostpath] }.merge(options[:config])
|
154
162
|
container[:devices] = devices
|
155
163
|
@lxd.update_container(machine_id, container)
|
164
|
+
rescue Hyperkit::BadRequest => e
|
165
|
+
@machine.ui.error 'Failed to mount synced folder'
|
166
|
+
fail DiskMountFailure, machine_name: @machine.name, guestpath: options[:guestpath], reason: e.reason
|
156
167
|
end
|
157
168
|
|
158
169
|
def mounted?(name, options)
|
@@ -173,6 +184,9 @@ module VagrantLXD
|
|
173
184
|
devices.delete(name.to_sym)
|
174
185
|
container[:devices] = devices
|
175
186
|
@lxd.update_container(machine_id, container)
|
187
|
+
rescue Hyperkit::BadRequest => e
|
188
|
+
@machine.ui.error 'Failed to unmount synced folder'
|
189
|
+
fail DiskUnmountFailure, machine_name: @machine.name, guestpath: options[:guestpath], reason: e.reason
|
176
190
|
end
|
177
191
|
|
178
192
|
def attach(container)
|
@@ -38,6 +38,8 @@ module VagrantLXD
|
|
38
38
|
|
39
39
|
# TODO Figure out the proper way to mount folders before
|
40
40
|
# provisioning without using `#prepare` (which is deprecated).
|
41
|
+
# TODO Umount existing devices if they go missing from the
|
42
|
+
# Vagrantfile (either via deletion or setting disabled: true).
|
41
43
|
def prepare(machine, folders, opts)
|
42
44
|
enable(machine, folders, opts)
|
43
45
|
end
|
@@ -52,10 +54,22 @@ module VagrantLXD
|
|
52
54
|
@driver.mounted?(name, folder)
|
53
55
|
end
|
54
56
|
|
57
|
+
# Sanity check folder configs and bail if something's wrong.
|
58
|
+
folders.each do |name, folder|
|
59
|
+
validate_folder(folder)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Ensure all folders have a config hash.
|
63
|
+
folders.each do |name, folder|
|
64
|
+
folder[:config] ||= {}
|
65
|
+
folder[:config] = Hash[folder[:config].map { |k, v| [k.to_sym, v.to_s] }]
|
66
|
+
end
|
67
|
+
|
55
68
|
if folders.any?
|
56
69
|
machine.ui.info 'Mounting shared folders...'
|
57
70
|
folders.reject { |_, f| f[:disabled] }.each do |name, folder|
|
58
|
-
|
71
|
+
details = config_summary(folder[:config])
|
72
|
+
machine.ui.detail "#{folder[:guestpath]} => #{folder[:hostpath]} #{details}".strip
|
59
73
|
@driver.mount(name, folder)
|
60
74
|
end
|
61
75
|
end
|
@@ -72,5 +86,29 @@ module VagrantLXD
|
|
72
86
|
end
|
73
87
|
end
|
74
88
|
end
|
89
|
+
|
90
|
+
protected
|
91
|
+
|
92
|
+
def validate_folder(folder)
|
93
|
+
config = folder.fetch(:config) { Hash.new }
|
94
|
+
|
95
|
+
unless config.is_a? Hash
|
96
|
+
fail Vagrant::Errors::ConfigInvalid, errors: "Invalid synced_folder `config' (value must be a hash)"
|
97
|
+
end
|
98
|
+
|
99
|
+
unless config.keys.all? { |x| x.is_a? String or x.is_a? Symbol }
|
100
|
+
fail Vagrant::Errors::ConfigInvalid, errors: "Invalid synced_folder `config' (hash keys must be strings)"
|
101
|
+
end
|
102
|
+
|
103
|
+
unless config.values.all? { |x| x.is_a? String or x == true or x == false }
|
104
|
+
fail Vagrant::Errors::ConfigInvalid, errors: "Invalid synced_folder `config' (hash values must be strings)"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def config_summary(config)
|
109
|
+
if config.is_a? Hash and config.any?
|
110
|
+
"(#{config.map { |k, v| "#{k}=#{v.inspect}" }.join(', ')})"
|
111
|
+
end
|
112
|
+
end
|
75
113
|
end
|
76
114
|
end
|
data/lib/vagrant-lxd/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -110,6 +110,20 @@ en:
|
|
110
110
|
|
111
111
|
The LXD logs may contain more information about the cause of this failure.
|
112
112
|
|
113
|
+
lxd_disk_mount_failure: |-
|
114
|
+
The provider was unable to mount a disk device at %{guestpath} for the '%{machine_name}' VM.
|
115
|
+
|
116
|
+
The underlying error message was: %{reason}
|
117
|
+
|
118
|
+
The LXD logs may contain more information about the cause of this failure.
|
119
|
+
|
120
|
+
lxd_disk_unmount_failure: |-
|
121
|
+
The provider was unable to unmount a disk device at %{guestpath} for the '%{machine_name}' VM.
|
122
|
+
|
123
|
+
The underlying error message was: %{reason}
|
124
|
+
|
125
|
+
The LXD logs may contain more information about the cause of this failure.
|
126
|
+
|
113
127
|
lxd_image_creation_failure: |-
|
114
128
|
The provider was unable to create an LXD image for the '%{machine_name}' VM.
|
115
129
|
|