vagrant-hosts 0.0.2 → 1.0.0
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.
- data/README.markdown +61 -10
- data/lib/vagrant-hosts/config.rb +31 -4
- data/lib/vagrant-hosts/plugin.rb +26 -0
- data/lib/vagrant-hosts/provisioner.rb +90 -0
- data/lib/vagrant-hosts/version.rb +1 -1
- data/lib/vagrant-hosts.rb +1 -3
- metadata +4 -5
- data/lib/vagrant-hosts/provisioners/hosts.rb +0 -64
- data/lib/vagrant-hosts/ssh.rb +0 -27
- data/lib/vagrant_init.rb +0 -1
data/README.markdown
CHANGED
@@ -6,14 +6,18 @@ Manage vagrant guest local DNS resolution.
|
|
6
6
|
Synopsis
|
7
7
|
--------
|
8
8
|
|
9
|
-
|
9
|
+
Manually specify addresses:
|
10
|
+
|
11
|
+
Vagrant.configure('2') do |config|
|
10
12
|
config.vm.box = "ubuntu-12.04-server-i386"
|
11
13
|
|
12
14
|
config.vm.provision :hosts do |provisioner|
|
13
15
|
# Add a single hostname
|
14
16
|
provisioner.add_host '10.0.2.2', ['myhost.vagrantup.internal']
|
17
|
+
|
15
18
|
# Or a fqdn and a short hostname
|
16
|
-
provisioner.add_host '10.0.2.3', ['myotherhost.vagrantup.internal', 'myotherhost']
|
19
|
+
provisioner.add_host '10.0.2.3', ['myotherhost.vagrantup.internal', 'myotherhost']
|
20
|
+
|
17
21
|
# Or as many aliases as you like!
|
18
22
|
provisioner.add_host '10.0.2.5', [
|
19
23
|
'mypuppetmaster.vagrantup.internal',
|
@@ -24,17 +28,64 @@ Synopsis
|
|
24
28
|
end
|
25
29
|
end
|
26
30
|
|
27
|
-
|
28
|
-
|
31
|
+
- - -
|
32
|
+
|
33
|
+
Autodetect internal network addresses and autoconfigure hosts:
|
34
|
+
|
35
|
+
# Autoconfigure hosts. This will copy the private network addresses from
|
36
|
+
# each VM and update hosts entries on all other machines. No further
|
37
|
+
# configuration is needed.
|
38
|
+
Vagrant.configure('2') do |config|
|
39
|
+
|
40
|
+
config.vm.define :first do |node|
|
41
|
+
node.vm.box = "ubuntu-12.04-server-i386"
|
42
|
+
node.vm.network :private_network, :ip => '10.20.1.2'
|
43
|
+
node.vm.provision :hosts
|
44
|
+
end
|
45
|
+
|
46
|
+
config.vm.define :second do |node|
|
47
|
+
node.vm.box = "ubuntu-12.04-server-i386"
|
48
|
+
node.vm.network :private_network, :ip => '10.20.1.3'
|
49
|
+
node.vm.provision :hosts
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
- - -
|
54
|
+
|
55
|
+
Use autodetection with manual entries
|
56
|
+
|
57
|
+
Vagrant.configure('2') do |config|
|
58
|
+
|
59
|
+
config.vm.define :first do |node|
|
60
|
+
node.vm.box = "ubuntu-12.04-server-i386"
|
61
|
+
node.vm.network :private_network, :ip => '10.20.1.2'
|
62
|
+
node.vm.provision :hosts do |provisioner|
|
63
|
+
provisioner.autoconfigure = true
|
64
|
+
provisioner.add_host 172.16.3.10, ['yum.mirror.local']
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
config.vm.define :second do |node|
|
70
|
+
node.vm.box = "ubuntu-12.04-server-i386"
|
71
|
+
node.vm.network :private_network, :ip => '10.20.1.3'
|
72
|
+
node.vm.provision :hosts do |provisioner|
|
73
|
+
provisioner.autoconfigure = true
|
74
|
+
provisioner.add_host 172.16.3.11, ['apt.mirror.local']
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
Supported Platforms
|
80
|
+
-------------------
|
81
|
+
|
82
|
+
As of version 1.0.0 or later Vagrant 1.1 is required.
|
83
|
+
|
84
|
+
Supported guests:
|
29
85
|
|
30
86
|
* Linux
|
31
|
-
* (soon) Windows (As soon as I get a chance to incorporate the driver)
|
32
87
|
|
33
88
|
Installation
|
34
89
|
------------
|
35
90
|
|
36
|
-
|
37
|
-
gem install vagrant-hosts
|
38
|
-
# For pre releases
|
39
|
-
gem install --pre vagrant-hosts
|
40
|
-
# Vagrant hosts magic!
|
91
|
+
vagrant plugin install vagrant-hosts
|
data/lib/vagrant-hosts/config.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
require 'vagrant'
|
2
|
-
require 'vagrant-hosts'
|
3
2
|
|
4
|
-
|
3
|
+
module VagrantHosts
|
4
|
+
class Config < Vagrant.plugin('2', :config)
|
5
5
|
|
6
|
+
# @!attribute hosts
|
7
|
+
# @return [Array<Array<String, Array<String>>>] A list of IP addresses and their aliases
|
6
8
|
attr_reader :hosts
|
7
9
|
|
10
|
+
# @!attribute autoconfigure
|
11
|
+
# @return [TrueClass, FalseClass] If hosts should be generated from the
|
12
|
+
# other vagrant machines
|
13
|
+
attr_accessor :autoconfigure
|
14
|
+
|
8
15
|
def initialize
|
9
16
|
@hosts = []
|
17
|
+
@autoconfigure = UNSET_VALUE
|
10
18
|
end
|
11
19
|
|
12
20
|
# Register a host for entry
|
@@ -17,6 +25,7 @@ class VagrantHosts::Config < Vagrant::Config::Base
|
|
17
25
|
@hosts << [address, aliases]
|
18
26
|
end
|
19
27
|
|
28
|
+
# All IPv6 multicast addresses
|
20
29
|
def add_ipv6_multicast
|
21
30
|
add_host '::1', ['ip6-localhost', 'ip6-loopback']
|
22
31
|
add_host 'fe00::0', ['ip6-localnet']
|
@@ -25,11 +34,29 @@ class VagrantHosts::Config < Vagrant::Config::Base
|
|
25
34
|
add_host 'ff02::2', ['ip6-allrouters']
|
26
35
|
end
|
27
36
|
|
28
|
-
def
|
37
|
+
def finalize!
|
38
|
+
if @autoconfigure == UNSET_VALUE or @hosts.empty?
|
39
|
+
@autoconfigure = true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# @param other [VagrantHosts::Config]
|
44
|
+
# @return [VagrantHosts::Config] The merged results
|
45
|
+
def merge(other)
|
46
|
+
super.tap do |result|
|
47
|
+
result.hosts += other.hosts
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def validate(machine)
|
52
|
+
errors = []
|
29
53
|
@hosts.each do |(address, aliases)|
|
30
54
|
unless aliases.is_a? Array
|
31
|
-
errors
|
55
|
+
errors << "#{address} should have an array of aliases, got #{aliases.inspect}:#{aliases.class}"
|
32
56
|
end
|
33
57
|
end
|
58
|
+
|
59
|
+
{"Vagrant Hosts" => errors}
|
34
60
|
end
|
35
61
|
end
|
62
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require 'vagrant-hosts'
|
3
|
+
require 'vagrant-hosts/version'
|
4
|
+
|
5
|
+
if Vagrant::VERSION < "1.1.0"
|
6
|
+
raise "vagrant-hosts version #{VagrantHosts::VERSION} requires Vagrant 1.1 or later"
|
7
|
+
end
|
8
|
+
|
9
|
+
class VagrantHosts::Plugin < Vagrant.plugin(2)
|
10
|
+
name 'hosts'
|
11
|
+
|
12
|
+
description <<-DESC
|
13
|
+
This plugin adds commands and provisioners to manage static host entries on
|
14
|
+
Vagrant guests.
|
15
|
+
DESC
|
16
|
+
|
17
|
+
provisioner(:hosts) do
|
18
|
+
require_relative 'provisioner'
|
19
|
+
VagrantHosts::Provisioner
|
20
|
+
end
|
21
|
+
|
22
|
+
config(:hosts, :provisioner) do
|
23
|
+
require_relative 'config'
|
24
|
+
VagrantHosts::Config
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
|
5
|
+
module VagrantHosts
|
6
|
+
class Provisioner < Vagrant.plugin('2', :provisioner)
|
7
|
+
|
8
|
+
def initialize(machine, config)
|
9
|
+
@machine, @config = machine, config
|
10
|
+
p
|
11
|
+
end
|
12
|
+
|
13
|
+
def provision
|
14
|
+
# too tired to do this. detect target platform, select according provider,
|
15
|
+
# add entries that are specified in the config and are not on the client
|
16
|
+
|
17
|
+
driver = Linux.new(@machine, @config)
|
18
|
+
driver.sync!
|
19
|
+
end
|
20
|
+
|
21
|
+
class Linux
|
22
|
+
|
23
|
+
def initialize(machine, config)
|
24
|
+
@machine, @config = machine, config
|
25
|
+
end
|
26
|
+
|
27
|
+
def sync!
|
28
|
+
upload_tmphosts
|
29
|
+
update_hosts
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def upload_tmphosts
|
35
|
+
cache = Tempfile.new('tmp-hosts')
|
36
|
+
cache.write(format_hosts)
|
37
|
+
cache.flush
|
38
|
+
@machine.communicate.upload(cache.path, '/tmp/hosts')
|
39
|
+
end
|
40
|
+
|
41
|
+
def update_hosts
|
42
|
+
@machine.guest.change_host_name(@machine.name.to_s)
|
43
|
+
@machine.communicate.sudo('install -m 644 /tmp/hosts /etc/hosts')
|
44
|
+
end
|
45
|
+
|
46
|
+
# Generates content appropriate for a linux hosts file
|
47
|
+
#
|
48
|
+
# @return [String] All hosts in the config joined into hosts records
|
49
|
+
def format_hosts
|
50
|
+
all_hosts.inject('') do |str, (address, aliases)|
|
51
|
+
str << "#{address} #{aliases.join(' ')}\n"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def all_hosts
|
56
|
+
all_hosts = []
|
57
|
+
|
58
|
+
if @config.autoconfigure
|
59
|
+
all_hosts += vagrant_hosts
|
60
|
+
else
|
61
|
+
all_hosts += @config.hosts
|
62
|
+
end
|
63
|
+
|
64
|
+
all_hosts.unshift(['127.0.0.1', ['localhost']])
|
65
|
+
all_hosts.unshift(['127.0.1.1', [@machine.name]])
|
66
|
+
end
|
67
|
+
|
68
|
+
def vagrant_hosts
|
69
|
+
hosts = []
|
70
|
+
env = @machine.env
|
71
|
+
names = env.machine_names
|
72
|
+
|
73
|
+
# Assume that all VMs are using the current provider
|
74
|
+
provider = @machine.provider
|
75
|
+
|
76
|
+
names.each do |name|
|
77
|
+
network_settings = env.machine(name, :virtualbox).config.vm.networks
|
78
|
+
network_settings.each do |entry|
|
79
|
+
if entry[0] == :private_network
|
80
|
+
ipaddr = entry[1][:ip]
|
81
|
+
hosts << [ipaddr, [name]]
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
hosts
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/vagrant-hosts.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-hosts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: vagrant
|
@@ -39,10 +39,9 @@ files:
|
|
39
39
|
- README.markdown
|
40
40
|
- lib/vagrant-hosts.rb
|
41
41
|
- lib/vagrant-hosts/config.rb
|
42
|
-
- lib/vagrant-hosts/
|
43
|
-
- lib/vagrant-hosts/
|
42
|
+
- lib/vagrant-hosts/plugin.rb
|
43
|
+
- lib/vagrant-hosts/provisioner.rb
|
44
44
|
- lib/vagrant-hosts/version.rb
|
45
|
-
- lib/vagrant_init.rb
|
46
45
|
- vagrant-hosts.gemspec
|
47
46
|
homepage: https://github.com/adrienthebo/vagrant-hosts
|
48
47
|
licenses:
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'vagrant'
|
2
|
-
require 'vagrant-hosts'
|
3
|
-
require 'vagrant-hosts/ssh' # Guerrilla patch ssh download
|
4
|
-
require 'vagrant-hosts/config'
|
5
|
-
require 'tempfile'
|
6
|
-
|
7
|
-
|
8
|
-
class VagrantHosts::Provisioner < Vagrant::Provisioners::Base
|
9
|
-
|
10
|
-
def self.config_class
|
11
|
-
::VagrantHosts::Config
|
12
|
-
end
|
13
|
-
|
14
|
-
def provision!
|
15
|
-
# too tired to do this. detect target platform, select according provider,
|
16
|
-
# add entries that are specified in the config and are not on the client
|
17
|
-
|
18
|
-
driver = Linux.new(@env, config)
|
19
|
-
driver.sync!
|
20
|
-
end
|
21
|
-
|
22
|
-
class Linux
|
23
|
-
|
24
|
-
def initialize(env, config)
|
25
|
-
@env, @config = env, config
|
26
|
-
end
|
27
|
-
|
28
|
-
def sync!
|
29
|
-
upload_tmphosts
|
30
|
-
atomic_sync
|
31
|
-
end
|
32
|
-
|
33
|
-
def upload_tmphosts
|
34
|
-
cache = Tempfile.new('tmp-hosts')
|
35
|
-
cache.write(format_hosts)
|
36
|
-
cache.flush
|
37
|
-
@env[:vm].channel.upload(cache.path, '/tmp/hosts')
|
38
|
-
end
|
39
|
-
|
40
|
-
def atomic_sync
|
41
|
-
script = <<-ATOMIC
|
42
|
-
hostname #{@env[:vm].name}
|
43
|
-
domainname vagrantup.internal
|
44
|
-
install -m 644 /tmp/hosts /etc/hosts
|
45
|
-
ATOMIC
|
46
|
-
|
47
|
-
sync = Tempfile.new('sync')
|
48
|
-
sync.write(script)
|
49
|
-
sync.flush
|
50
|
-
@env[:vm].channel.upload(sync.path, '/tmp/sync')
|
51
|
-
|
52
|
-
@env[:vm].channel.sudo('bash /tmp/sync')
|
53
|
-
end
|
54
|
-
|
55
|
-
# Generates content appropriate for a linux hosts file
|
56
|
-
#
|
57
|
-
# @return [String] All hosts in the config joined into hosts records
|
58
|
-
def format_hosts
|
59
|
-
@config.hosts.inject('') do |str, (address, aliases)|
|
60
|
-
str << "#{address} #{aliases.join(' ')}\n"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
data/lib/vagrant-hosts/ssh.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'vagrant'
|
2
|
-
require 'vagrant/errors'
|
3
|
-
require 'vagrant/communication/ssh'
|
4
|
-
|
5
|
-
# Helloooooo monkey patching.
|
6
|
-
|
7
|
-
class Vagrant::Communication::SSH
|
8
|
-
|
9
|
-
# Download a remote file
|
10
|
-
#
|
11
|
-
# @param [String] from the path on the remote end
|
12
|
-
# @param [String] to the path on the local end
|
13
|
-
#
|
14
|
-
#
|
15
|
-
def download(from, to)
|
16
|
-
@logger.debug("Downlaoding: #{from} to #{to}")
|
17
|
-
|
18
|
-
connect do |connection|
|
19
|
-
scp = Net::SCP.new(connection)
|
20
|
-
scp.download!(from, to)
|
21
|
-
end
|
22
|
-
|
23
|
-
rescue Net::SCP::Error => e
|
24
|
-
raise Vagrant::Errors::SCPUnavailable if e.message =~ /\(127\)/
|
25
|
-
raise
|
26
|
-
end
|
27
|
-
end
|
data/lib/vagrant_init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'vagrant-hosts'
|