vagrant-etchosts 0.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/.gitignore +2 -0
- data/README.md +27 -0
- data/Rakefile +3 -0
- data/lib/vagrant-etchosts/action/add_etc_hosts_entry.rb +42 -0
- data/lib/vagrant-etchosts/action/remove_etc_hosts_entry.rb +29 -0
- data/lib/vagrant-etchosts/plugin.rb +19 -0
- data/lib/vagrant-etchosts/version.rb +9 -0
- data/lib/vagrant-etchosts.rb +7 -0
- data/vagrant-etchosts.gemspec +24 -0
- metadata +88 -0
data/.gitignore
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# vagrant-etchosts
|
|
2
|
+
|
|
3
|
+
This is a Vagrant 1.4+ (at least, that's all I've tested it on) plugin to
|
|
4
|
+
add and remove entries from `/etc/hosts` on the machine on which Vagrant is
|
|
5
|
+
running.
|
|
6
|
+
|
|
7
|
+
It differs from the other plugins available to do this job in several ways:
|
|
8
|
+
|
|
9
|
+
* It can detect and use dynamic IP addresses (DHCP FTW);
|
|
10
|
+
|
|
11
|
+
* It doesn't *require* any plugin-specific configuration (it uses
|
|
12
|
+
`config.vm.hostname` and the IP address assigned dynamically), although
|
|
13
|
+
you can specify additional aliases if you choose;
|
|
14
|
+
|
|
15
|
+
* It works on modern versions of Vagrant.
|
|
16
|
+
|
|
17
|
+
Its limitations are:
|
|
18
|
+
|
|
19
|
+
* **It *only* updates the *host's* `hosts` file**: I'm using
|
|
20
|
+
`vagrant-libvirt`, and libvirt provides a `dnsmasq` setup that will
|
|
21
|
+
respond to DNS requests with entries from `/etc/hosts`. If you need to
|
|
22
|
+
have your guests `/etc/hosts` played with, patches are welcome.
|
|
23
|
+
|
|
24
|
+
* **It doesn't handle statically-assigned addresses or multiple networks**:
|
|
25
|
+
I haven't yet had a need for other addressing schemes, so I haven't added
|
|
26
|
+
them yet. If you want it, send me a patch or wait until I've found a
|
|
27
|
+
need for multiple networks and/or statically assigned addresses.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
require 'tempfile'
|
|
2
|
+
|
|
3
|
+
module VagrantPlugins::EtcHosts
|
|
4
|
+
class AddEtcHostsEntry
|
|
5
|
+
ETC_HOSTS = '/etc/hosts'
|
|
6
|
+
|
|
7
|
+
def initialize(app, env)
|
|
8
|
+
@app = app
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def call(env)
|
|
12
|
+
@app.call(env)
|
|
13
|
+
|
|
14
|
+
# Best place to find the network config? In the SSH config.
|
|
15
|
+
addr = env[:machine].ssh_info[:host]
|
|
16
|
+
fqdn = env[:machine].config.vm.hostname
|
|
17
|
+
id = env[:machine].id
|
|
18
|
+
|
|
19
|
+
if fqdn.nil?
|
|
20
|
+
fqdn = env[:machine].name.to_s
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
shortname = fqdn.split('.').first
|
|
24
|
+
shortname = "" if shortname == fqdn
|
|
25
|
+
|
|
26
|
+
tmp = Tempfile.open('vagrant-etchosts', env[:tmp_path], 'w')
|
|
27
|
+
|
|
28
|
+
begin
|
|
29
|
+
# Dump existing /etc/hosts content into our temp file
|
|
30
|
+
tmp.write(File.read(ETC_HOSTS))
|
|
31
|
+
tmp << "#{addr} #{fqdn} #{shortname} # VAGRANT ID: #{id}\n"
|
|
32
|
+
|
|
33
|
+
tmp.close
|
|
34
|
+
`sudo cp #{tmp.path} /etc/hosts`
|
|
35
|
+
`sudo pkill -HUP dnsmasq`
|
|
36
|
+
ensure
|
|
37
|
+
tmp.close rescue nil
|
|
38
|
+
tmp.unlink rescue nil
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module VagrantPlugins::EtcHosts
|
|
2
|
+
class RemoveEtcHostsEntry
|
|
3
|
+
ETC_HOSTS = '/etc/hosts'
|
|
4
|
+
|
|
5
|
+
def initialize(app, env)
|
|
6
|
+
@app = app
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def call(env)
|
|
10
|
+
id = env[:machine].id
|
|
11
|
+
return if id.nil? or id.empty?
|
|
12
|
+
|
|
13
|
+
tmp = Tempfile.open('vagrant-etchosts', env[:tmp_path], 'w')
|
|
14
|
+
|
|
15
|
+
begin
|
|
16
|
+
tmp.write(File.readlines(ETC_HOSTS).reject { |l| l =~ /# VAGRANT ID: #{id}$/ }.join(""))
|
|
17
|
+
|
|
18
|
+
tmp.close
|
|
19
|
+
`sudo cp #{tmp.path} /etc/hosts`
|
|
20
|
+
`sudo pkill -HUP dnsmasq`
|
|
21
|
+
ensure
|
|
22
|
+
tmp.close rescue nil
|
|
23
|
+
tmp.unlink rescue nil
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
@app.call(env)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
require 'vagrant-etchosts/action/add_etc_hosts_entry'
|
|
2
|
+
require 'vagrant-etchosts/action/remove_etc_hosts_entry'
|
|
3
|
+
|
|
4
|
+
module VagrantPlugins::EtcHosts
|
|
5
|
+
class Plugin < Vagrant.plugin("2")
|
|
6
|
+
name 'EtcHosts'
|
|
7
|
+
description <<-DESC.gsub(/^\t\t\t/, '')
|
|
8
|
+
This plugin manages the /etc/hosts file on the host machine.
|
|
9
|
+
DESC
|
|
10
|
+
|
|
11
|
+
action_hook(:etchosts, :machine_action_up) do |hook|
|
|
12
|
+
hook.after ::Vagrant::Action::Builtin::SetHostname, ::VagrantPlugins::EtcHosts::AddEtcHostsEntry
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
action_hook(:etchosts, :machine_action_destroy) do |hook|
|
|
16
|
+
hook.prepend VagrantPlugins::EtcHosts::RemoveEtcHostsEntry
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
4
|
+
$: << File.expand_path('../lib', __FILE__)
|
|
5
|
+
|
|
6
|
+
require 'vagrant-etchosts/version'
|
|
7
|
+
|
|
8
|
+
Gem::Specification.new do |gem|
|
|
9
|
+
gem.name = 'vagrant-etchosts'
|
|
10
|
+
gem.version = VagrantPlugins::EtcHosts::VERSION
|
|
11
|
+
gem.authors = ['Matt Palmer']
|
|
12
|
+
gem.email = ['theshed+vagrant-etchosts@hezmatt.org']
|
|
13
|
+
gem.description = %q{A Vagrant plugin that manages the /etc/hosts file on the host}
|
|
14
|
+
gem.summary = gem.description
|
|
15
|
+
gem.license = 'GPLv3'
|
|
16
|
+
|
|
17
|
+
gem.files = `git ls-files`.split($/)
|
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
19
|
+
gem.require_paths = ['lib']
|
|
20
|
+
|
|
21
|
+
gem.add_development_dependency 'bundler', '~> 1.3'
|
|
22
|
+
gem.add_development_dependency 'rake'
|
|
23
|
+
end
|
|
24
|
+
|
metadata
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: vagrant-etchosts
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.0
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Matt Palmer
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2014-01-23 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: bundler
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
18
|
+
requirements:
|
|
19
|
+
- - ~>
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
21
|
+
version: '1.3'
|
|
22
|
+
type: :development
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ~>
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '1.3'
|
|
30
|
+
- !ruby/object:Gem::Dependency
|
|
31
|
+
name: rake
|
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
34
|
+
requirements:
|
|
35
|
+
- - ! '>='
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '0'
|
|
38
|
+
type: :development
|
|
39
|
+
prerelease: false
|
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
42
|
+
requirements:
|
|
43
|
+
- - ! '>='
|
|
44
|
+
- !ruby/object:Gem::Version
|
|
45
|
+
version: '0'
|
|
46
|
+
description: A Vagrant plugin that manages the /etc/hosts file on the host
|
|
47
|
+
email:
|
|
48
|
+
- theshed+vagrant-etchosts@hezmatt.org
|
|
49
|
+
executables: []
|
|
50
|
+
extensions: []
|
|
51
|
+
extra_rdoc_files: []
|
|
52
|
+
files:
|
|
53
|
+
- .gitignore
|
|
54
|
+
- README.md
|
|
55
|
+
- Rakefile
|
|
56
|
+
- lib/vagrant-etchosts.rb
|
|
57
|
+
- lib/vagrant-etchosts/action/add_etc_hosts_entry.rb
|
|
58
|
+
- lib/vagrant-etchosts/action/remove_etc_hosts_entry.rb
|
|
59
|
+
- lib/vagrant-etchosts/plugin.rb
|
|
60
|
+
- lib/vagrant-etchosts/version.rb
|
|
61
|
+
- vagrant-etchosts.gemspec
|
|
62
|
+
homepage:
|
|
63
|
+
licenses:
|
|
64
|
+
- GPLv3
|
|
65
|
+
post_install_message:
|
|
66
|
+
rdoc_options: []
|
|
67
|
+
require_paths:
|
|
68
|
+
- lib
|
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
70
|
+
none: false
|
|
71
|
+
requirements:
|
|
72
|
+
- - ! '>='
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
|
+
none: false
|
|
77
|
+
requirements:
|
|
78
|
+
- - ! '>='
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '0'
|
|
81
|
+
requirements: []
|
|
82
|
+
rubyforge_project:
|
|
83
|
+
rubygems_version: 1.8.23
|
|
84
|
+
signing_key:
|
|
85
|
+
specification_version: 3
|
|
86
|
+
summary: A Vagrant plugin that manages the /etc/hosts file on the host
|
|
87
|
+
test_files: []
|
|
88
|
+
has_rdoc:
|