vagrant-lxd 0.1.0 → 0.1.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/README.md +17 -3
- data/doc/setting-up-lxd.md +57 -0
- data/lib/vagrant-lxd/command.rb +21 -9
- data/lib/vagrant-lxd/driver.rb +28 -7
- data/lib/vagrant-lxd/version.rb +1 -1
- data/templates/locales/en.yml +12 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ae29284d2a4a870ad54f62da227bfa06e1a879d
|
4
|
+
data.tar.gz: 1a7977adf19891632b59233f7de7bad527ed93b4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94b0882c41cd75aa6caf9f672b7f7353cfb56b9e60762f785f6b9fc23774ee8b2bb4443da86b35f957a52588cffb564a9e4130798498e3f1ab07fe037287fc0b
|
7
|
+
data.tar.gz: 9b1344147ebd312227be8186571ed421bfdc1dc4421a45c09f17bb0008759b2682b23b78c19228ed2901aa58f63f3782edaf78cb364564bf9e7982df6c9b12c1
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -25,7 +25,16 @@ The plugin requires LXD 2.0 and Vagrant 1.8.7 or newer.
|
|
25
25
|
|
26
26
|
## Installation
|
27
27
|
|
28
|
-
|
28
|
+
### From Rubygems
|
29
|
+
|
30
|
+
You can install the latest version of the plugin directly from
|
31
|
+
rubygems.org with the `vagrant plugin` command:
|
32
|
+
|
33
|
+
$ vagrant plugin install vagrant-lxd
|
34
|
+
|
35
|
+
### From Git
|
36
|
+
|
37
|
+
Installing from this repository is a three-step process.
|
29
38
|
|
30
39
|
1. Use Bundler to install development dependencies:
|
31
40
|
|
@@ -43,12 +52,17 @@ Installing the plugin from this repository is a three-step process.
|
|
43
52
|
|
44
53
|
### Quick Start
|
45
54
|
|
46
|
-
|
47
|
-
|
55
|
+
First, make sure that you've [configured LXD correctly][setting-up-lxd]
|
56
|
+
for use with Vagrant.
|
57
|
+
|
58
|
+
Once LXD is set up, you can use `vagrant up --provider lxd` to create
|
59
|
+
container-backed machines. This plugin reuses the `lxc` box format, so
|
60
|
+
VM images from [Vagrant Cloud][cloud] should work without modification:
|
48
61
|
|
49
62
|
$ vagrant init --minimal debian/stretch64
|
50
63
|
$ vagrant up --provider lxd
|
51
64
|
|
65
|
+
[setting-up-lxd]: doc/setting-up-lxd.md
|
52
66
|
[cloud]: https://app.vagrantup.com/boxes/search?provider=lxc
|
53
67
|
|
54
68
|
#### Configuration
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Setting up LXD
|
2
|
+
|
3
|
+
LXD needs to be configured a particular way before Vagrant can use it.
|
4
|
+
|
5
|
+
Specifically, the following settings need to be applied:
|
6
|
+
|
7
|
+
1. LXD must allow HTTPS API access from your machine.
|
8
|
+
2. LXD must have a working network bridge.
|
9
|
+
3. Your user must be in the "lxd" group.
|
10
|
+
4. Your user must have a client certificate registered with LXD.
|
11
|
+
|
12
|
+
## Xenial
|
13
|
+
|
14
|
+
To install LXD and configure it as described above on Ubuntu 16.04, you
|
15
|
+
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
|
+
# set up a network bridge (press enter to accept the default values)
|
25
|
+
sudo dpkg-reconfigure -p medium lxd
|
26
|
+
|
27
|
+
# add your user to the lxd group
|
28
|
+
sudo usermod -a lxd -G $(whoami)
|
29
|
+
```
|
30
|
+
|
31
|
+
Once LXD is configured, you should register a client certificate for
|
32
|
+
Vagrant to use when authenticating to the API (this command will
|
33
|
+
automatically generate the certificate for you):
|
34
|
+
|
35
|
+
```sh
|
36
|
+
# apply new group membership
|
37
|
+
newgrp lxd
|
38
|
+
|
39
|
+
# create and add a client certificate
|
40
|
+
lxc config trust add /home/ubuntu/.config/lxc/client.crt
|
41
|
+
```
|
42
|
+
|
43
|
+
At this point everything should be set up for the plugin to work
|
44
|
+
correctly.
|
45
|
+
|
46
|
+
## Other Platforms
|
47
|
+
|
48
|
+
The Linux Containers website has a [detailed guide][getting-started-cli]
|
49
|
+
to installing LXD on other platforms. The steps to configure LXD for
|
50
|
+
Vagrant will be similar to those above, but some commands will differ.
|
51
|
+
|
52
|
+
If you're using the plugin on another platform, please feel free to
|
53
|
+
propose an addition to this document or add instructions to the
|
54
|
+
project's [wiki][] for others to follow.
|
55
|
+
|
56
|
+
[getting-started-cli]: https://linuxcontainers.org/lxd/getting-started-cli/
|
57
|
+
[wiki]: https://gitlab.com/catalyst-it/vagrant-lxd/wikis
|
data/lib/vagrant-lxd/command.rb
CHANGED
@@ -61,8 +61,10 @@ module VagrantLXD
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def attach(args)
|
64
|
+
options = Hash[force: false]
|
65
|
+
|
64
66
|
opts = OptionParser.new do |o|
|
65
|
-
o.banner = 'Usage: vagrant lxd attach [machine ...
|
67
|
+
o.banner = 'Usage: vagrant lxd attach [-f] [machine ... container]'
|
66
68
|
o.separator ''
|
67
69
|
o.separator 'Associates a VM with a preexisting LXD container.'
|
68
70
|
o.separator ''
|
@@ -70,6 +72,8 @@ module VagrantLXD
|
|
70
72
|
o.separator 'preexisting LXD container. Once it has been associated with a container,'
|
71
73
|
o.separator 'the machine can be used just like it had been created with `vagrant up`'
|
72
74
|
o.separator 'or detached from the container again with `vagrant lxd detach`.'
|
75
|
+
o.separator ''
|
76
|
+
o.on('-f', '--force', 'Force attachment and ignore missing containers')
|
73
77
|
end
|
74
78
|
|
75
79
|
if args.include?('-h') or args.include?('--help')
|
@@ -77,16 +81,25 @@ module VagrantLXD
|
|
77
81
|
exit 0
|
78
82
|
end
|
79
83
|
|
80
|
-
|
81
|
-
|
82
|
-
|
84
|
+
options[:force] ||= args.delete('-f')
|
85
|
+
options[:force] ||= args.delete('--force')
|
86
|
+
options[:container_name] = args.pop
|
83
87
|
|
84
88
|
with_target_machines(args) do |machine|
|
85
|
-
if machine.
|
89
|
+
if not container = options[:container_name] || machine.provider_config.name
|
90
|
+
machine.ui.warn 'No container name specified, skipping...'
|
91
|
+
elsif machine.id == container
|
86
92
|
machine.ui.warn "Machine is already attached to container '#{container}', skipping..."
|
87
93
|
elsif machine.state.id == Vagrant::MachineState::NOT_CREATED_ID
|
88
94
|
machine.ui.info "Attaching to container '#{container}'..."
|
89
|
-
|
95
|
+
begin
|
96
|
+
Driver.new(machine).attach(container)
|
97
|
+
rescue Driver::ContainerNotFound
|
98
|
+
raise unless options[:force]
|
99
|
+
end
|
100
|
+
elsif options[:force]
|
101
|
+
detach([machine.name])
|
102
|
+
redo
|
90
103
|
else
|
91
104
|
machine.ui.error "Machine is already attached to container '#{machine.id}'"
|
92
105
|
fail Driver::DuplicateAttachmentFailure, machine_name: machine.name, container: container
|
@@ -115,9 +128,8 @@ module VagrantLXD
|
|
115
128
|
if machine.id.nil? or machine.state.id == Vagrant::MachineState::NOT_CREATED_ID
|
116
129
|
machine.ui.warn "Machine is not attached to a container, skipping..."
|
117
130
|
else
|
118
|
-
|
119
|
-
machine.
|
120
|
-
driver.detach
|
131
|
+
machine.ui.info "Detaching from container '#{machine.id}'..."
|
132
|
+
Driver.new(machine).detach
|
121
133
|
end
|
122
134
|
end
|
123
135
|
end
|
data/lib/vagrant-lxd/driver.rb
CHANGED
@@ -65,6 +65,10 @@ module VagrantLXD
|
|
65
65
|
error_key 'lxd_duplicate_attachment_failure'
|
66
66
|
end
|
67
67
|
|
68
|
+
class SnapshotNotFound < Vagrant::Errors::VagrantError
|
69
|
+
error_key 'snapshot_not_found'
|
70
|
+
end
|
71
|
+
|
68
72
|
class Hyperkit::BadRequest
|
69
73
|
def reason
|
70
74
|
return unless data.is_a? Hash
|
@@ -150,7 +154,7 @@ module VagrantLXD
|
|
150
154
|
end
|
151
155
|
rescue Hyperkit::NotFound
|
152
156
|
@machine.ui.error "Container doesn't exist: #{container}"
|
153
|
-
fail ContainerNotFound, container: container
|
157
|
+
fail ContainerNotFound, machine_name: @machine.name, container: container
|
154
158
|
end
|
155
159
|
|
156
160
|
def detach
|
@@ -166,15 +170,23 @@ module VagrantLXD
|
|
166
170
|
end
|
167
171
|
|
168
172
|
def snapshot_save(name)
|
169
|
-
|
173
|
+
snapshot_delete(name) # noops if the snapshot doesn't exist
|
174
|
+
operation = @lxd.create_snapshot(machine_id, name, sync: false)
|
175
|
+
wait_for_operation(operation)
|
170
176
|
end
|
171
177
|
|
172
178
|
def snapshot_restore(name)
|
173
|
-
@lxd.restore_snapshot(machine_id, name)
|
179
|
+
operation = @lxd.restore_snapshot(machine_id, name, sync: false)
|
180
|
+
wait_for_operation(operation)
|
181
|
+
rescue Hyperkit::BadRequest
|
182
|
+
@logger.warn 'Snapshot restoration failed: ' << name
|
183
|
+
fail SnapshotNotFound, machine: @machine.name, snapshot_name: name
|
174
184
|
end
|
175
185
|
|
176
186
|
def snapshot_delete(name)
|
177
187
|
@lxd.delete_snapshot(machine_id, name)
|
188
|
+
rescue Hyperkit::NotFound
|
189
|
+
@logger.warn 'No such snapshot: ' << name
|
178
190
|
end
|
179
191
|
|
180
192
|
def state
|
@@ -267,6 +279,10 @@ module VagrantLXD
|
|
267
279
|
|
268
280
|
private
|
269
281
|
|
282
|
+
def machine_id
|
283
|
+
@machine.id
|
284
|
+
end
|
285
|
+
|
270
286
|
def delete_container
|
271
287
|
@lxd.delete_container(machine_id)
|
272
288
|
rescue Hyperkit::NotFound
|
@@ -281,6 +297,15 @@ module VagrantLXD
|
|
281
297
|
@logger.error "Unable to delete image for '#{machine_id}'"
|
282
298
|
end
|
283
299
|
|
300
|
+
# Hyperkit doesn't handle socket read timeouts even when auto_sync
|
301
|
+
# is enabled or setting sync: true. TODO Upstream a better fix than
|
302
|
+
# this, so that `wait_for_operation` really does.
|
303
|
+
def wait_for_operation(operation)
|
304
|
+
@lxd.wait_for_operation(operation.id)
|
305
|
+
rescue Faraday::TimeoutError
|
306
|
+
retry
|
307
|
+
end
|
308
|
+
|
284
309
|
def container
|
285
310
|
@lxd.container(machine_id)
|
286
311
|
end
|
@@ -301,10 +326,6 @@ module VagrantLXD
|
|
301
326
|
true
|
302
327
|
end
|
303
328
|
|
304
|
-
def machine_id
|
305
|
-
@machine.id
|
306
|
-
end
|
307
|
-
|
308
329
|
def generate_machine_id
|
309
330
|
@name || begin
|
310
331
|
id = "vagrant-#{File.basename(Dir.pwd)}-#{@machine.name}-#{SecureRandom.hex(8)}"
|
data/lib/vagrant-lxd/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -12,6 +12,8 @@ en:
|
|
12
12
|
actions:
|
13
13
|
vm:
|
14
14
|
snapshot:
|
15
|
+
not_found: |-
|
16
|
+
The machine has no snapshot named '%{name}'.
|
15
17
|
restored: |-
|
16
18
|
The machine has been restored to snapshot '%{name}'!
|
17
19
|
errors:
|
@@ -96,15 +98,24 @@ en:
|
|
96
98
|
A machine can only be associated with one container at a time.
|
97
99
|
|
98
100
|
To attach '%{machine_name}' to '%{container}', you must first
|
99
|
-
detach it from its current container using `vagrant lxd detach
|
101
|
+
detach it from its current container using `vagrant lxd detach`
|
102
|
+
or pass `--force` to force attachment.
|
100
103
|
|
101
104
|
lxd_container_not_found: |-
|
102
105
|
The requested container '%{container}' doesn't exist.
|
103
106
|
|
107
|
+
You will need to create this container first, either by using the
|
108
|
+
`lxc launch` command or by setting the VM's `lxd.name` in its LXD
|
109
|
+
provider configuration and running `vagrant up %{machine_name}`.
|
110
|
+
|
104
111
|
You can list available containers with the `lxc list` command.
|
112
|
+
|
105
113
|
lxd_container_already_exists: |-
|
106
114
|
A container with the name '%{container}' already exists.
|
107
115
|
|
108
116
|
You will either need to delete this container and try again, or attach
|
109
117
|
the VM to it with `vagrant lxd attach %{machine_name} %{container}`.
|
110
118
|
|
119
|
+
snapshot_not_found: |-
|
120
|
+
The snapshot name `%{snapshot_name}` was not found for the
|
121
|
+
virtual machine `%{machine}`.
|
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.1.
|
4
|
+
version: 0.1.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: 2017-
|
11
|
+
date: 2017-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hyperkit
|
@@ -37,6 +37,7 @@ files:
|
|
37
37
|
- LICENSE.md
|
38
38
|
- README.md
|
39
39
|
- Rakefile
|
40
|
+
- doc/setting-up-lxd.md
|
40
41
|
- lib/vagrant-lxd.rb
|
41
42
|
- lib/vagrant-lxd/action.rb
|
42
43
|
- lib/vagrant-lxd/capability.rb
|