vagrant-lxd 0.1.4 → 0.2.0

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
  SHA1:
3
- metadata.gz: 7a2ea2589b750536f634123b1deed2718c13151b
4
- data.tar.gz: 24d46b5fac9f49b1d3daed822653518c2cbff856
3
+ metadata.gz: ceae5ec31aecf1934e40466195849ad4f2152b7a
4
+ data.tar.gz: 6d8ba4edabdfa6bc4007c81eb6c41a12836c2b83
5
5
  SHA512:
6
- metadata.gz: f83fcd225dfd64d6792677de3678530753ac902f5eda4bdf3091d13f30b1b51e58b45b358fe0884364c884806a431778aa872bcf293d5382dc8bf89d94652b3c
7
- data.tar.gz: 912fb1cd29e3211aa42bceab0261f3831ca080625b8baba9fb428f8cc861accdfa9b69d9c065d16198b0029094c8d40e66df55bbc020563ac8b76b712aa7aba6
6
+ metadata.gz: 2bfef2ee6532fd17a6ef5a0816fb5452e128866ac66b5aeced12f4e8781d4ea1f3fae859b49fdae5552362089d645c569d7b3426a68f83f0a5536a6e4d2d583c
7
+ data.tar.gz: fc765c52de52976c39215bf5fd712c258a62ba07741735b95b7eb43497809337bcf14ba80b273abc4d02bf97b8a4c76f4389406987411bf145cd320a564ff280
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  GIT
2
2
  remote: https://github.com/mitchellh/vagrant.git
3
- revision: 1cc4a48371c5f0713a2d98ac446b80170b4b71f0
3
+ revision: f31a340499a13868e60b2e4649c13a167a0bf387
4
4
  specs:
5
- vagrant (2.0.3.dev)
5
+ vagrant (2.0.4.dev)
6
6
  childprocess (~> 0.6.0)
7
7
  erubis (~> 2.7.0)
8
8
  hashicorp-checkpoint (~> 0.1.5)
@@ -23,29 +23,30 @@ GIT
23
23
  PATH
24
24
  remote: .
25
25
  specs:
26
- vagrant-lxd (0.1.4)
26
+ vagrant-lxd (0.2.0)
27
27
  hyperkit (~> 1.1)
28
28
 
29
29
  GEM
30
30
  remote: https://rubygems.org/
31
31
  specs:
32
- activesupport (4.2.10)
33
- i18n (~> 0.7)
32
+ activesupport (5.2.0)
33
+ concurrent-ruby (~> 1.0, >= 1.0.2)
34
+ i18n (>= 0.7, < 2)
34
35
  minitest (~> 5.1)
35
- thread_safe (~> 0.3, >= 0.3.4)
36
36
  tzinfo (~> 1.1)
37
37
  addressable (2.5.2)
38
38
  public_suffix (>= 2.0.2, < 4.0)
39
39
  builder (3.2.3)
40
40
  childprocess (0.6.3)
41
41
  ffi (~> 1.0, >= 1.0.11)
42
+ concurrent-ruby (1.0.5)
42
43
  diff-lcs (1.3)
43
44
  domain_name (0.5.20170404)
44
45
  unf (>= 0.0.5, < 1.0.0)
45
46
  erubis (2.7.0)
46
47
  faraday (0.14.0)
47
48
  multipart-post (>= 1.2, < 3)
48
- ffi (1.9.21)
49
+ ffi (1.9.23)
49
50
  gssapi (1.2.0)
50
51
  ffi (>= 1.0.1)
51
52
  gyoku (1.3.1)
@@ -54,8 +55,8 @@ GEM
54
55
  http-cookie (1.0.3)
55
56
  domain_name (~> 0.5)
56
57
  httpclient (2.8.3)
57
- hyperkit (1.1.0)
58
- activesupport (~> 4.2.6)
58
+ hyperkit (1.2.0)
59
+ activesupport (>= 4.2.6)
59
60
  sawyer
60
61
  i18n (0.8.0)
61
62
  listen (3.1.5)
@@ -81,8 +82,8 @@ GEM
81
82
  netrc (0.11.0)
82
83
  nori (2.6.0)
83
84
  public_suffix (3.0.2)
84
- rake (12.0.0)
85
- rb-fsevent (0.10.2)
85
+ rake (12.3.1)
86
+ rb-fsevent (0.10.3)
86
87
  rb-inotify (0.9.10)
87
88
  ffi (>= 0.5.0, < 2)
88
89
  rb-kqueue (0.2.5)
@@ -91,22 +92,22 @@ GEM
91
92
  http-cookie (>= 1.0.2, < 2.0)
92
93
  mime-types (>= 1.16, < 4.0)
93
94
  netrc (~> 0.8)
94
- rspec (3.5.0)
95
- rspec-core (~> 3.5.0)
96
- rspec-expectations (~> 3.5.0)
97
- rspec-mocks (~> 3.5.0)
98
- rspec-core (3.5.4)
99
- rspec-support (~> 3.5.0)
100
- rspec-expectations (3.5.0)
95
+ rspec (3.7.0)
96
+ rspec-core (~> 3.7.0)
97
+ rspec-expectations (~> 3.7.0)
98
+ rspec-mocks (~> 3.7.0)
99
+ rspec-core (3.7.1)
100
+ rspec-support (~> 3.7.0)
101
+ rspec-expectations (3.7.0)
101
102
  diff-lcs (>= 1.2.0, < 2.0)
102
- rspec-support (~> 3.5.0)
103
+ rspec-support (~> 3.7.0)
103
104
  rspec-its (1.2.0)
104
105
  rspec-core (>= 3.0.0)
105
106
  rspec-expectations (>= 3.0.0)
106
- rspec-mocks (3.5.0)
107
+ rspec-mocks (3.7.0)
107
108
  diff-lcs (>= 1.2.0, < 2.0)
108
- rspec-support (~> 3.5.0)
109
- rspec-support (3.5.0)
109
+ rspec-support (~> 3.7.0)
110
+ rspec-support (3.7.1)
110
111
  ruby_dep (1.3.1)
111
112
  rubyntlm (0.6.2)
112
113
  rubyzip (1.2.1)
data/README.md CHANGED
@@ -84,6 +84,8 @@ Vagrant.configure('2') do |config|
84
84
  lxd.privileged = nil
85
85
  lxd.ephemeral = false
86
86
  lxd.profiles = ['default']
87
+ lxd.environment = {}
88
+ lxd.config = {}
87
89
  end
88
90
  end
89
91
  ```
data/lib/vagrant-lxd.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -23,15 +23,19 @@ module VagrantLXD
23
23
  class Config < Vagrant.plugin('2', :config)
24
24
  attr_accessor :api_endpoint
25
25
  attr_accessor :name
26
+ attr_accessor :timeout
27
+ attr_accessor :config
28
+ attr_accessor :environment
29
+ attr_accessor :ephemeral
26
30
  attr_accessor :nesting
27
31
  attr_accessor :privileged
28
- attr_accessor :ephemeral
29
32
  attr_accessor :profiles
30
- attr_accessor :timeout
31
33
 
32
34
  def initialize
33
35
  @name = UNSET_VALUE
34
36
  @timeout = UNSET_VALUE
37
+ @config = UNSET_VALUE
38
+ @environment = UNSET_VALUE
35
39
  @nesting = UNSET_VALUE
36
40
  @privileged = UNSET_VALUE
37
41
  @ephemeral = UNSET_VALUE
@@ -58,6 +62,20 @@ module VagrantLXD
58
62
  errors << "Invalid `timeout' (value must be positive): #{timeout.inspect}"
59
63
  end
60
64
 
65
+ if not config.is_a? Hash
66
+ errors << "Invalid `config' (value must be a hash): #{config.inspect}"
67
+ elsif not config.keys.all? { |x| x.is_a? Symbol }
68
+ errors << "Invalid `config' (hash keys must be symbols): #{config.inspect}"
69
+ end
70
+
71
+ if not environment.is_a? Hash
72
+ errors << "Invalid `environment' (value must be a hash): #{environment.inspect}"
73
+ elsif not environment.keys.all? { |x| x.is_a? String or x.is_a? Symbol }
74
+ errors << "Invalid `environment' (hash keys must be strings or symbols): #{environment.inspect}"
75
+ elsif not environment.values.all? { |x| x.is_a? String }
76
+ errors << "Invalid `environment' (hash values must be strings): #{environment.inspect}"
77
+ end
78
+
61
79
  begin
62
80
  URI(api_endpoint).scheme == 'https' or raise URI::InvalidURIError
63
81
  rescue URI::InvalidURIError
@@ -88,6 +106,14 @@ module VagrantLXD
88
106
  @name = nil
89
107
  end
90
108
 
109
+ if config == UNSET_VALUE
110
+ @config = {}
111
+ end
112
+
113
+ if environment == UNSET_VALUE
114
+ @environment = {}
115
+ end
116
+
91
117
  if nesting == UNSET_VALUE
92
118
  @nesting = nil
93
119
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -17,6 +17,7 @@
17
17
  # along with vagrant-lxd. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
19
 
20
+ require 'active_support/core_ext/object/deep_dup'
20
21
  require 'hyperkit'
21
22
  require 'securerandom'
22
23
  require 'tempfile'
@@ -88,17 +89,20 @@ module VagrantLXD
88
89
  NOT_CREATED = Vagrant::MachineState::NOT_CREATED_ID
89
90
 
90
91
  attr_reader :api_endpoint
91
- attr_reader :nesting
92
- attr_reader :privileged
93
- attr_reader :ephemeral
94
92
  attr_reader :name
95
93
  attr_reader :timeout
94
+ attr_reader :environment
95
+ attr_reader :ephemeral
96
+ attr_reader :nesting
97
+ attr_reader :privileged
96
98
  attr_reader :profiles
97
99
 
98
100
  def initialize(machine)
99
101
  @machine = machine
100
102
  @timeout = machine.provider_config.timeout
101
103
  @api_endpoint = machine.provider_config.api_endpoint
104
+ @config = @machine.provider_config.config
105
+ @environment = machine.provider_config.environment
102
106
  @nesting = machine.provider_config.nesting
103
107
  @privileged = machine.provider_config.privileged
104
108
  @ephemeral = machine.provider_config.ephemeral
@@ -289,6 +293,11 @@ module VagrantLXD
289
293
 
290
294
  private
291
295
 
296
+ #
297
+ # The remaining methods are just conveniences, not part of the API
298
+ # used by the rest of the plugin.
299
+ #
300
+
292
301
  def machine_id
293
302
  @machine.id
294
303
  end
@@ -371,25 +380,35 @@ module VagrantLXD
371
380
  end
372
381
 
373
382
  def config
374
- config = {}
383
+ # NOTE We reuse ActiveSupport for `#deep_dup` here, but if the Hyperkit
384
+ # dependency ever goes away, drop ActiveSupport and use some other
385
+ # method to get a deep copy of the config.
386
+ config = @config.deep_dup
375
387
 
376
388
  # Add security settings, if specified. If not, we omit them so
377
389
  # they can be configured by one of the container's profiles instead.
378
390
  config[:'security.nesting'] = nesting unless nesting.nil?
379
391
  config[:'security.privileged'] = privileged unless privileged.nil?
380
392
 
393
+ # Include user-specified environment variables.
394
+ config.merge! Hash[environment.map { |k, v| [:"environment.#{k}", v] }]
395
+
381
396
  # Set "raw.idmap" if the host's sub{u,g}id configuration allows it.
382
397
  # This allows sharing folders via LXD (see synced_folder.rb).
383
- begin
384
- %w(uid gid).each do |type|
385
- value = Process.send(type)
386
- if File.readlines("/etc/sub#{type}").grep(/^root:#{value}:[1-9]/).any?
387
- config[:'raw.idmap'] ||= ''
388
- config[:'raw.idmap'] << "#{type} #{value} #{VAGRANT_UID}\n"
398
+ # If the user has already specified a 'raw.idmap', leave it alone.
399
+ unless config.include?(:'raw.idmap')
400
+ begin
401
+ # Check for root mappings in /etc/sub{uid,gid}.
402
+ %w(uid gid).each do |type|
403
+ id = Process.send(type)
404
+ if File.readlines("/etc/sub#{type}").grep(/^root:#{id}:[1-9]/).any?
405
+ config[:'raw.idmap'] ||= ''
406
+ config[:'raw.idmap'] << "#{type} #{id} #{VAGRANT_UID}\n"
407
+ end
389
408
  end
409
+ rescue StandardError => e
410
+ @logger.warn "Cannot read subordinate permissions file: #{e.message}"
390
411
  end
391
- rescue StandardError => e
392
- @logger.warn "Cannot read subordinate permissions file: #{e.message}"
393
412
  end
394
413
 
395
414
  @logger.debug 'Resulting configuration: ' << config.inspect
@@ -397,6 +416,7 @@ module VagrantLXD
397
416
  config
398
417
  end
399
418
 
419
+ # TODO Image handling should be moved into its own class.
400
420
  def prepare_image_file
401
421
  tmpdir = Dir.mktmpdir
402
422
 
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
@@ -20,7 +20,7 @@
20
20
  module VagrantLXD
21
21
  module Version
22
22
  NAME = 'vagrant-lxd'
23
- VERSION = '0.1.4'
23
+ VERSION = '0.2.0'
24
24
  DESCRIPTION = 'Vagrant LXD provider'
25
25
  end
26
26
  end
data/vagrant-lxd.gemspec CHANGED
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2017 Catalyst.net Ltd
2
+ # Copyright (c) 2017-2018 Catalyst.net Ltd
3
3
  #
4
4
  # This file is part of vagrant-lxd.
5
5
  #
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
4
+ version: 0.2.0
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-02-20 00:00:00.000000000 Z
11
+ date: 2018-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hyperkit