buildhosts 0.0.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 +7 -0
- data/.gitignore +17 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.markdown +110 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/bin/buildhosts +54 -0
- data/buildhosts.gemspec +23 -0
- data/config +13 -0
- data/custom +0 -0
- data/header +11 -0
- data/lib/buildhosts/ConfigParser.rb +25 -0
- data/lib/buildhosts/manginx.rb +56 -0
- data/lib/buildhosts/version.rb +3 -0
- data/lib/buildhosts.rb +28 -0
- data/lib/old.buildhosts.rb +22 -0
- data/sample-config +15 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 221c73813e4781338e4a66d5ec3cce48b07559ea
|
4
|
+
data.tar.gz: 95df595ecfec9bc4db1685c86a50356a055ac205
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4c50b83175c36cfb7523898ef68d3bb01da46c48e72a0e04839f1f68fb0b4674871c7dfc8c44db9097f28ead0f1e81a44f5fc17215922775a43a668a9a2363aa
|
7
|
+
data.tar.gz: bf9b2a7c95d6ec818f9a2c9d6dca19f5b86f78dd2d67f9c47a53785c7d1e25fcbf1d201e72ff72d75dcf2f4aa316b7c37a35f1bd51a93929af14ecca4d0b209f
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
buildhosts
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p0
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Mike Anderson
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.markdown
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
Buildhosts
|
2
|
+
=========
|
3
|
+
|
4
|
+
This is just some info about this script. It will:
|
5
|
+
|
6
|
+
+ change your life
|
7
|
+
+ make you smarter
|
8
|
+
+ grant you three wishes, and
|
9
|
+
+ do none of the above.
|
10
|
+
|
11
|
+
But really, this is just a script I wrote to write my /etc/hosts file for me.
|
12
|
+
Configuring all the entries was a hassle, especially when using [xip.io](http://xip.io).
|
13
|
+
This script takes your local hostnames (and the various IP address you need to pass
|
14
|
+
to xip.io) and create all the necessary entries to access any of the hosts while
|
15
|
+
passing any of the IPs to xip.io.
|
16
|
+
|
17
|
+
### Manginx
|
18
|
+
|
19
|
+
Also included in `manginx`, a script that helps with using xip.io with nginx.
|
20
|
+
|
21
|
+
Installing & Running the Script
|
22
|
+
-------------------------------
|
23
|
+
|
24
|
+
+ BACK UP YOUR CURRENT HOSTS FILE!
|
25
|
+
+ To reiterate, **BACK UP YOUR CURRENT HOSTS FILE!**
|
26
|
+
+ Set shell variable `HOSTSPATH` to the script directory (i.e. ~/git/buildhosts)
|
27
|
+
+ Symlink the `buildhosts.sh` file to `~/bin/hosts` or something
|
28
|
+
+ Use `hosts -e` to edit your config file (explained below and in the `sample-config` file)
|
29
|
+
+ Any custom hosts can be put in a file named `custom`
|
30
|
+
+ Running `hosts` will recompile your `/etc/hosts` file
|
31
|
+
+ Running `hosts -l` will list the entries in your `/etc/hosts` file
|
32
|
+
|
33
|
+
### Example installation:
|
34
|
+
mkdir -p ~/git
|
35
|
+
cd ~/git
|
36
|
+
git clone https://github.com/athaeryn/buildhosts.git
|
37
|
+
sudo cp /etc/hosts /etc/hosts.bak
|
38
|
+
export HOSTSPATH=~/git/buildhosts
|
39
|
+
ln -s ~/git/buildhosts/buildhosts.sh ~/bin/hosts
|
40
|
+
cp sample-config config
|
41
|
+
|
42
|
+
|
43
|
+
About the IP Address Section
|
44
|
+
----------------------------
|
45
|
+
|
46
|
+
The IP section is for working with xip.io, a DNS server that makes testing local
|
47
|
+
websites on mobile devices much simpler. You can read more about it [here](http://xip.io).
|
48
|
+
If you don't want to work with xip.io, don't include IP addresses in your config file (the ampersand is also not necessary).
|
49
|
+
|
50
|
+
Configuring the Script
|
51
|
+
----------------------
|
52
|
+
|
53
|
+
If you run `hosts` with this `config` file:
|
54
|
+
|
55
|
+
### sample-config:
|
56
|
+
|
57
|
+
[hosts]
|
58
|
+
foobar.local
|
59
|
+
example.local
|
60
|
+
[ips]
|
61
|
+
192.168.1.1
|
62
|
+
192.168.0.1
|
63
|
+
10.0.1.1
|
64
|
+
|
65
|
+
it will produce this output:
|
66
|
+
|
67
|
+
### /etc/hosts
|
68
|
+
##
|
69
|
+
# Host Database
|
70
|
+
#
|
71
|
+
# localhost is used to configure the loopback interface
|
72
|
+
# when the system is booting. Do not change this entry.
|
73
|
+
##
|
74
|
+
127.0.0.1 localhost
|
75
|
+
255.255.255.255 broadcasthost
|
76
|
+
::1 localhost
|
77
|
+
fe80::1%lo0 localhost
|
78
|
+
|
79
|
+
::1 example.local
|
80
|
+
127.0.0.1 example.local
|
81
|
+
::1 example.local.10.0.1.1.xip.io
|
82
|
+
127.0.0.1 example.local.10.0.1.1.xip.io
|
83
|
+
::1 example.local.192.168.0.1.xip.io
|
84
|
+
127.0.0.1 example.local.192.168.0.1.xip.io
|
85
|
+
::1 example.local.192.168.1.1.xip.io
|
86
|
+
127.0.0.1 example.local.192.168.1.1.xip.io
|
87
|
+
::1 foobar.local
|
88
|
+
127.0.0.1 foobar.local
|
89
|
+
::1 foobar.local.10.0.1.1.xip.io
|
90
|
+
127.0.0.1 foobar.local.10.0.1.1.xip.io
|
91
|
+
::1 foobar.local.192.168.0.1.xip.io
|
92
|
+
127.0.0.1 foobar.local.192.168.0.1.xip.io
|
93
|
+
::1 foobar.local.192.168.1.1.xip.io
|
94
|
+
127.0.0.1 foobar.local.192.168.1.1.xip.io
|
95
|
+
|
96
|
+
Simple enough? I thought so.
|
97
|
+
|
98
|
+
Manginx
|
99
|
+
-------
|
100
|
+
|
101
|
+
To run manginx, just do `hosts --nginx`.
|
102
|
+
As far as configuring goes, just make sure you have an `xip` directory in the same directory as your `nginx.conf`.
|
103
|
+
Then just duplicate and server_name lines and alter them like so:
|
104
|
+
|
105
|
+
### Before:
|
106
|
+
server_name foobar.local;
|
107
|
+
|
108
|
+
### After:
|
109
|
+
server_name foobar.local;
|
110
|
+
include xip/foobar.local;
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# Buildhosts
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'buildhosts'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install buildhosts
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/buildhosts
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'buildhosts'
|
4
|
+
|
5
|
+
case ARGV[0]
|
6
|
+
when "-e"
|
7
|
+
system("vim config")
|
8
|
+
when "-c"
|
9
|
+
system("vim custom")
|
10
|
+
when "-ec"
|
11
|
+
system("vim config ; vim custom")
|
12
|
+
when "-ce"
|
13
|
+
system("vim custom ; vim config")
|
14
|
+
when "-l"
|
15
|
+
system("grep 127.0.0.1 /etc/hosts | grep -Ev 'xip.io|localhost' | awk '{print $2}'")
|
16
|
+
exit
|
17
|
+
when "--nginx", "-nginx"
|
18
|
+
puts "Will run manginx"
|
19
|
+
puts "Then reload nginx"
|
20
|
+
exit
|
21
|
+
else
|
22
|
+
puts "Usage: "
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
|
26
|
+
puts "Building..."
|
27
|
+
Buildhosts::Main.build
|
28
|
+
system("")
|
29
|
+
system("cat header custom newhosts > temp")
|
30
|
+
system("sudo cp temp /etc/hosts")
|
31
|
+
system("rm newhosts temp")
|
32
|
+
puts "Done!"
|
33
|
+
#if [ "$1" == "-e" ]; then
|
34
|
+
#vim config
|
35
|
+
#elif [ "$1" == "-c" ]; then
|
36
|
+
#vim custom
|
37
|
+
#elif [ "$1" == "-ec" ]; then
|
38
|
+
#vim config ; vim custom
|
39
|
+
#elif [ "$1" == "-ce" ]; then
|
40
|
+
#vim custom ; vim config
|
41
|
+
#elif [ "$1" == "-l" ]; then
|
42
|
+
#grep 127.0.0.1 /etc/hosts | grep -Ev 'xip.io|localhost' | awk '{print $2}'
|
43
|
+
#exit 0
|
44
|
+
#elif [ "$1" == "--nginx" ]; then
|
45
|
+
#ruby manginx.rb
|
46
|
+
#nginx -s reload
|
47
|
+
#exit 0
|
48
|
+
#fi
|
49
|
+
|
50
|
+
#ruby buildhosts.rb
|
51
|
+
|
52
|
+
#cat header custom newhosts > temp
|
53
|
+
#sudo cp temp /etc/hosts
|
54
|
+
#rm newhosts temp
|
data/buildhosts.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'buildhosts/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "buildhosts"
|
8
|
+
spec.version = Buildhosts::VERSION
|
9
|
+
spec.authors = ["Mike Anderson"]
|
10
|
+
spec.email = ["athaeryn@me.com"]
|
11
|
+
spec.description = "Buildhosts."
|
12
|
+
spec.summary = "A utiliy for managing hosts (and IPs for xip.io)."
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
data/config
ADDED
data/custom
ADDED
File without changes
|
data/header
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Buildhosts
|
2
|
+
class ConfigParser
|
3
|
+
def self.parse file
|
4
|
+
if !File.exists? file
|
5
|
+
puts "Error: File does not exist."
|
6
|
+
return false
|
7
|
+
end
|
8
|
+
conf = Hash.new
|
9
|
+
last_key = String.new
|
10
|
+
raw = File.open(file, "r")
|
11
|
+
raw.each_line do |line|
|
12
|
+
match = line.match(/\[(\w*)\]/)
|
13
|
+
if !match.nil?
|
14
|
+
key = match.to_a[1..-1][0]
|
15
|
+
conf [key] = Array.new
|
16
|
+
last_key = key
|
17
|
+
else
|
18
|
+
conf[last_key] << line.strip if (!line.strip.empty?)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
raw.close
|
22
|
+
return conf
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Start by load the config parser
|
2
|
+
require './ConfigParser.rb'
|
3
|
+
|
4
|
+
# Helper methods to print common messages
|
5
|
+
def configuring what
|
6
|
+
puts "Configuring: #{what}..."
|
7
|
+
end
|
8
|
+
|
9
|
+
def done next_step=''
|
10
|
+
puts "Done! #{next_step}"
|
11
|
+
end
|
12
|
+
|
13
|
+
# Set up teh parser and parse with it
|
14
|
+
parser = ConfigParser.new
|
15
|
+
conf = parser.parse 'config'
|
16
|
+
|
17
|
+
# If you don't have any IP addresses in your config, what are you doing here?
|
18
|
+
if conf['ips'].nil? || conf['ips'].empty?
|
19
|
+
puts 'What\'s the point?'
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
|
23
|
+
# Let's find out what nginx is expecting from us...
|
24
|
+
expected = Array.new
|
25
|
+
n = File.open('/usr/local/etc/nginx/nginx.conf', 'r')
|
26
|
+
n.each_line do |line|
|
27
|
+
# So basically, if the line goes "include xip/derp.local;", we want to
|
28
|
+
# set up a file with that name with the appropriate server_name directives.
|
29
|
+
match = line.match(/include\s+xip\/([\w\.]+);/)
|
30
|
+
if !match.nil? # We don't want to try to convert nil to an array...
|
31
|
+
expected << match.to_a[1..-1][0]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# This is where the files will be stored.
|
36
|
+
base_path = '/usr/local/etc/nginx/xip'
|
37
|
+
`rm #{base_path}/*`
|
38
|
+
|
39
|
+
# Le bread and buttere
|
40
|
+
expected.each do |file|
|
41
|
+
configuring file
|
42
|
+
out = File.open("#{base_path}/#{file}", 'w+')
|
43
|
+
conf['ips'].each do |ip|
|
44
|
+
# Simple. Just put a line in there for each IP in our config file.
|
45
|
+
out.write "server_name #{file}.#{ip}.xip.io;\n"
|
46
|
+
end
|
47
|
+
out.close
|
48
|
+
end
|
49
|
+
|
50
|
+
# Now we just reload nginx and apologize if something goes rotten.
|
51
|
+
done 'Reloading nginx...'
|
52
|
+
if system('nginx -s reload')
|
53
|
+
done
|
54
|
+
else
|
55
|
+
puts "Oops!\nSomething went wrong... Sorry."
|
56
|
+
end
|
data/lib/buildhosts.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require "buildhosts/version"
|
2
|
+
require "buildhosts/ConfigParser"
|
3
|
+
|
4
|
+
module Buildhosts
|
5
|
+
class Main
|
6
|
+
def self.build
|
7
|
+
# Prefixy strings
|
8
|
+
ipv6 = '::1 '
|
9
|
+
home = '127.0.0.1 '
|
10
|
+
|
11
|
+
# Grab that parser and parse
|
12
|
+
|
13
|
+
conf = Buildhosts::ConfigParser.parse 'config'
|
14
|
+
|
15
|
+
# Write the lines to a "newhosts" file
|
16
|
+
out = File.open('newhosts', 'w+')
|
17
|
+
conf['hosts'].each do |host|
|
18
|
+
out.write "#{ipv6}#{host}\n"
|
19
|
+
out.write "#{home}#{host}\n"
|
20
|
+
conf['ips'].each do |ip|
|
21
|
+
out.write "#{ipv6}#{host}.#{ip}.xip.io\n"
|
22
|
+
out.write "#{home}#{host}.#{ip}.xip.io\n"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
out.close
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require './ConfigParser.rb'
|
2
|
+
|
3
|
+
# Prefixy strings
|
4
|
+
ipv6 = '::1 '
|
5
|
+
home = '127.0.0.1 '
|
6
|
+
|
7
|
+
# Grab that parser and parse
|
8
|
+
p = ConfigParser.new
|
9
|
+
conf = p.parse 'config'
|
10
|
+
|
11
|
+
# Write the lines to a "newhosts" file
|
12
|
+
out = File.open('newhosts', 'w+')
|
13
|
+
conf['hosts'].each do |host|
|
14
|
+
out.write "#{ipv6}#{host}\n"
|
15
|
+
out.write "#{home}#{host}\n"
|
16
|
+
conf['ips'].each do |ip|
|
17
|
+
out.write "#{ipv6}#{host}.#{ip}.xip.io\n"
|
18
|
+
out.write "#{home}#{host}.#{ip}.xip.io\n"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
out.close
|
22
|
+
|
data/sample-config
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Hostnames go here, one per line
|
2
|
+
foobar.local
|
3
|
+
example.local
|
4
|
+
|
5
|
+
# Don't delete the ampersand
|
6
|
+
# (unless you also delete
|
7
|
+
# everything below it).
|
8
|
+
&
|
9
|
+
|
10
|
+
# IP addresses for xip.io.
|
11
|
+
# You can just leave this blank
|
12
|
+
# if you're not using it.
|
13
|
+
192.168.1.1
|
14
|
+
192.168.0.1
|
15
|
+
10.0.1.1
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: buildhosts
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mike Anderson
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-04-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: Buildhosts.
|
42
|
+
email:
|
43
|
+
- athaeryn@me.com
|
44
|
+
executables:
|
45
|
+
- buildhosts
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- .gitignore
|
50
|
+
- .ruby-gemset
|
51
|
+
- .ruby-version
|
52
|
+
- Gemfile
|
53
|
+
- LICENSE.txt
|
54
|
+
- README.markdown
|
55
|
+
- README.md
|
56
|
+
- Rakefile
|
57
|
+
- bin/buildhosts
|
58
|
+
- buildhosts.gemspec
|
59
|
+
- config
|
60
|
+
- custom
|
61
|
+
- header
|
62
|
+
- lib/buildhosts.rb
|
63
|
+
- lib/buildhosts/ConfigParser.rb
|
64
|
+
- lib/buildhosts/manginx.rb
|
65
|
+
- lib/buildhosts/version.rb
|
66
|
+
- lib/old.buildhosts.rb
|
67
|
+
- sample-config
|
68
|
+
homepage: ''
|
69
|
+
licenses:
|
70
|
+
- MIT
|
71
|
+
metadata: {}
|
72
|
+
post_install_message:
|
73
|
+
rdoc_options: []
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.0.3
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: A utiliy for managing hosts (and IPs for xip.io).
|
92
|
+
test_files: []
|