vagrant-hosts 0.0.1rc1
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 +1 -0
- data/LICENSE +14 -0
- data/README.markdown +4 -0
- data/lib/vagrant-hosts.rb +7 -0
- data/lib/vagrant-hosts/provisioners/hosts.rb +77 -0
- data/lib/vagrant-hosts/ssh.rb +27 -0
- data/lib/vagrant-hosts/version.rb +3 -0
- data/lib/vagrant_init.rb +1 -0
- data/vagrant-hosts.gemspec +22 -0
- metadata +72 -0
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
vagrant-hosts-*.gem
|
data/LICENSE
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Copyright 2012 Adrien Thebo
|
2
|
+
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
6
|
+
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
14
|
+
|
data/README.markdown
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require 'vagrant-hosts'
|
3
|
+
require 'vagrant-hosts/ssh' # Guerrilla patch ssh download
|
4
|
+
require 'tempfile'
|
5
|
+
|
6
|
+
|
7
|
+
class VagrantHosts::Provisioner < Vagrant::Provisioners::Base
|
8
|
+
|
9
|
+
class Config < Vagrant::Config::Base
|
10
|
+
|
11
|
+
attr_reader :hosts
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@hosts = []
|
15
|
+
end
|
16
|
+
|
17
|
+
# Register a host for entry
|
18
|
+
#
|
19
|
+
# @param [String] address The IP address for aliases
|
20
|
+
# @param [Array] aliases An array of hostnames to assign to the IP address
|
21
|
+
def add_host(address, aliases)
|
22
|
+
@hosts << [address, aliases]
|
23
|
+
end
|
24
|
+
|
25
|
+
def validate(env, errors)
|
26
|
+
@hosts.each do |(address, aliases)|
|
27
|
+
unless aliases.is_a? Array
|
28
|
+
errors.add("#{address} should have an array of aliases, got #{aliases.inspect}:#{aliases.class}")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.config_class
|
35
|
+
Config
|
36
|
+
end
|
37
|
+
|
38
|
+
def provision!
|
39
|
+
# too tired to do this. detect target platform, select according provider,
|
40
|
+
# add entries that are specified in the config and are not on the client
|
41
|
+
|
42
|
+
driver = Linux.new(@env, config)
|
43
|
+
driver.sync!
|
44
|
+
end
|
45
|
+
|
46
|
+
class Linux
|
47
|
+
|
48
|
+
def initialize(env, config)
|
49
|
+
@env, @config = env, config
|
50
|
+
end
|
51
|
+
|
52
|
+
def sync!
|
53
|
+
cache = Tempfile.new('vagrant-hosts')
|
54
|
+
|
55
|
+
# It would be really cool to synchronize this file instead of blindly
|
56
|
+
# smashing the remote hosts file, but this is the quick and dirty solution.
|
57
|
+
#@env[:vm].channel.download('/etc/hosts', cache.path)
|
58
|
+
#cache.rewind
|
59
|
+
#cache.truncate(0)
|
60
|
+
|
61
|
+
cache.write hosts_format
|
62
|
+
cache.flush
|
63
|
+
|
64
|
+
@env[:vm].channel.upload(cache.path, '/tmp/hosts')
|
65
|
+
@env[:vm].channel.sudo('install -m 644 /tmp/hosts /etc/hosts')
|
66
|
+
end
|
67
|
+
|
68
|
+
# Generates content appropriate for a linux hosts file
|
69
|
+
#
|
70
|
+
# @return [String] All hosts in the config joined into hosts records
|
71
|
+
def hosts_format
|
72
|
+
@config.hosts.inject('') do |str, (address, aliases)|
|
73
|
+
str << "#{address} #{aliases.join(' ')}\n"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,27 @@
|
|
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
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'vagrant-hosts'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
$LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'lib'))
|
2
|
+
require 'vagrant-hosts/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = 'vagrant-hosts'
|
6
|
+
gem.version = VagrantHosts::VERSION
|
7
|
+
gem.date = Date.today.to_s
|
8
|
+
|
9
|
+
gem.summary = 'Manage static DNS on vagrant guests'
|
10
|
+
gem.description = <<-EOD
|
11
|
+
Manage static DNS entries and configuration for Vagrant guests.
|
12
|
+
EOD
|
13
|
+
|
14
|
+
gem.authors = 'Adrien Thebo'
|
15
|
+
gem.email = 'adrien@somethingsinistral.net'
|
16
|
+
gem.homepage = 'https://github.com/adrienthebo/vagrant-hosts'
|
17
|
+
|
18
|
+
gem.add_dependency 'vagrant', '~> 1.0'
|
19
|
+
|
20
|
+
gem.files = %x{git ls-files -z}.split("\0")
|
21
|
+
gem.require_path = 'lib'
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-hosts
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1rc1
|
5
|
+
prerelease: 5
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Adrien Thebo
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: vagrant
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.0'
|
30
|
+
description: ! ' Manage static DNS entries and configuration for Vagrant guests.
|
31
|
+
|
32
|
+
'
|
33
|
+
email: adrien@somethingsinistral.net
|
34
|
+
executables: []
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- .gitignore
|
39
|
+
- LICENSE
|
40
|
+
- README.markdown
|
41
|
+
- lib/vagrant-hosts.rb
|
42
|
+
- lib/vagrant-hosts/provisioners/hosts.rb
|
43
|
+
- lib/vagrant-hosts/ssh.rb
|
44
|
+
- lib/vagrant-hosts/version.rb
|
45
|
+
- lib/vagrant_init.rb
|
46
|
+
- vagrant-hosts.gemspec
|
47
|
+
homepage: https://github.com/adrienthebo/vagrant-hosts
|
48
|
+
licenses: []
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>'
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 1.3.1
|
65
|
+
requirements: []
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.8.24
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: Manage static DNS on vagrant guests
|
71
|
+
test_files: []
|
72
|
+
has_rdoc:
|