crnixon-tap_provision_server 0.1.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 +0 -0
- data/Rakefile +86 -0
- data/lib/provision_base.rb +27 -0
- data/lib/provision_ubuntu.rb +102 -0
- data/lib/provision_vhost.rb +103 -0
- data/tap.yml +59 -0
- data/tap_provision_server.gemspec +37 -0
- data/test/provision_ubuntu_test.rb +19 -0
- data/test/provision_vhost_test.rb +19 -0
- data/test/tap_test_helper.rb +3 -0
- data/test/tap_test_suite.rb +5 -0
- metadata +102 -0
data/README
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'rake/gempackagetask'
|
5
|
+
|
6
|
+
require 'tap/constants'
|
7
|
+
|
8
|
+
#
|
9
|
+
# Gem specification
|
10
|
+
#
|
11
|
+
|
12
|
+
def gemspec
|
13
|
+
data = File.read('tap_provision_server.gemspec')
|
14
|
+
spec = nil
|
15
|
+
Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
|
16
|
+
spec
|
17
|
+
end
|
18
|
+
|
19
|
+
Rake::GemPackageTask.new(gemspec) do |pkg|
|
20
|
+
pkg.need_tar = true
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'Prints the gemspec manifest.'
|
24
|
+
task :print_manifest do
|
25
|
+
# collect files from the gemspec, labeling
|
26
|
+
# with true or false corresponding to the
|
27
|
+
# file existing or not
|
28
|
+
files = gemspec.files.inject({}) do |files, file|
|
29
|
+
files[File.expand_path(file)] = [File.exists?(file), file]
|
30
|
+
files
|
31
|
+
end
|
32
|
+
|
33
|
+
# gather non-rdoc/pkg files for the project
|
34
|
+
# and add to the files list if they are not
|
35
|
+
# included already (marking by the absence
|
36
|
+
# of a label)
|
37
|
+
Dir.glob("**/*").each do |file|
|
38
|
+
next if file =~ /^(rdoc|pkg|backup)/ || File.directory?(file)
|
39
|
+
|
40
|
+
path = File.expand_path(file)
|
41
|
+
files[path] = ["", file] unless files.has_key?(path)
|
42
|
+
end
|
43
|
+
|
44
|
+
# sort and output the results
|
45
|
+
files.values.sort_by {|exists, file| file }.each do |entry|
|
46
|
+
puts "%-5s %s" % entry
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Documentation tasks
|
52
|
+
#
|
53
|
+
|
54
|
+
desc 'Generate documentation.'
|
55
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
56
|
+
spec = gemspec
|
57
|
+
|
58
|
+
rdoc.rdoc_dir = 'rdoc'
|
59
|
+
rdoc.title = 'tap_provision_server'
|
60
|
+
rdoc.main = 'README'
|
61
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
62
|
+
rdoc.rdoc_files.include( spec.extra_rdoc_files )
|
63
|
+
rdoc.rdoc_files.include( spec.files.select {|file| file =~ /^lib.*\.rb$/} )
|
64
|
+
|
65
|
+
# Using Tdoc to template your Rdoc will result in configurations being
|
66
|
+
# listed with documentation in a subsection following attributes. Not
|
67
|
+
# necessary, but nice.
|
68
|
+
require 'tap/support/tdoc'
|
69
|
+
rdoc.template = 'tap/support/tdoc/tdoc_html_template'
|
70
|
+
rdoc.options << '--fmt' << 'tdoc'
|
71
|
+
end
|
72
|
+
|
73
|
+
#
|
74
|
+
# Test tasks
|
75
|
+
#
|
76
|
+
|
77
|
+
desc 'Default: Run tests.'
|
78
|
+
task :default => :test
|
79
|
+
|
80
|
+
desc 'Run tests.'
|
81
|
+
Rake::TestTask.new(:test) do |t|
|
82
|
+
t.test_files = Dir.glob( File.join('test', ENV['pattern'] || '**/*_test.rb') )
|
83
|
+
t.verbose = true
|
84
|
+
t.warning = true
|
85
|
+
end
|
86
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# module: provision_base
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'highline/import'
|
5
|
+
|
6
|
+
module ProvisionBase
|
7
|
+
|
8
|
+
class StringProc < Proc
|
9
|
+
def to_s(*args)
|
10
|
+
self.call(*args)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.get_user
|
15
|
+
StringProc.new do
|
16
|
+
ask("Enter your user name on the remote server: ") do
|
17
|
+
|q| q.default = ENV['USER']
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.get_password
|
23
|
+
StringProc.new do
|
24
|
+
ask("Enter your password on the remote server: ") { |q| q.echo = false }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
# ProvisionUbuntu::manifest Setup a new Ubuntu server.
|
2
|
+
# Setup a new Ubuntu server with Apache, MySQL, Ruby, and Passenger.
|
3
|
+
|
4
|
+
# ProvisionUbuntu Documentation
|
5
|
+
|
6
|
+
require 'provision_base'
|
7
|
+
require 'capistrano'
|
8
|
+
require 'capistrano/cli'
|
9
|
+
require 'hpricot'
|
10
|
+
require 'open-uri'
|
11
|
+
|
12
|
+
class ProvisionUbuntu < Tap::Task
|
13
|
+
# <config file documentation>
|
14
|
+
config :user, ProvisionBase.get_user
|
15
|
+
config :password, ProvisionBase.get_password
|
16
|
+
|
17
|
+
def process(server)
|
18
|
+
get_ubuntu_cap(server).provision
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_ubuntu_cap(server)
|
22
|
+
cap = Capistrano::Configuration.new
|
23
|
+
cap.logger.level = Capistrano::Logger::TRACE
|
24
|
+
cap.set :user, user.to_s
|
25
|
+
cap.set :password, password.to_s
|
26
|
+
|
27
|
+
cap.role :app, server
|
28
|
+
|
29
|
+
cap.task :provision do
|
30
|
+
install_ubuntu_env
|
31
|
+
install_ruby
|
32
|
+
install_apache
|
33
|
+
install_mysql
|
34
|
+
install_passenger
|
35
|
+
end
|
36
|
+
|
37
|
+
cap.task :install_ubuntu_env do
|
38
|
+
pkgs = %w(build-essential libssl-dev libreadline5-dev zlib1g-dev
|
39
|
+
curl git-core git-svn)
|
40
|
+
sudo 'aptitude update'
|
41
|
+
sudo 'aptitude -y -q full-upgrade'
|
42
|
+
sudo "aptitude -y -q install #{pkgs.join(' ')}"
|
43
|
+
end
|
44
|
+
|
45
|
+
cap.task :install_ruby do
|
46
|
+
# get latest Ruby Enterprise Edition
|
47
|
+
doc = open('http://rubyforge.org/frs/?group_id=5833') { |f| Hpricot(f) }
|
48
|
+
link = (doc/'a').detect { |link| link['href'] =~ /\.tar\.gz$/ }['href']
|
49
|
+
|
50
|
+
run "wget -nv http://rubyforge.org#{link}"
|
51
|
+
run "tar xfz ruby-enterprise-*.tar.gz"
|
52
|
+
|
53
|
+
sudo("./ruby-enterprise-*/installer", :pty => true) do |ch,stream,out|
|
54
|
+
next if out.chomp == ''
|
55
|
+
print out
|
56
|
+
ch.send_data(input = "\n") if out =~ /enter/i
|
57
|
+
end
|
58
|
+
|
59
|
+
sudo "ln -s /opt/ruby-enterprise-* /opt/ruby-enterprise"
|
60
|
+
sudo "ln -s /opt/ruby-enterprise/bin/* /usr/local/bin/"
|
61
|
+
end
|
62
|
+
|
63
|
+
cap.task :install_apache do
|
64
|
+
pkgs = %w(apache2-mpm-prefork apache2-prefork-dev)
|
65
|
+
sudo "aptitude -y -q install #{pkgs.join(' ')}"
|
66
|
+
sudo "a2enmod rewrite"
|
67
|
+
end
|
68
|
+
|
69
|
+
cap.task :install_mysql do
|
70
|
+
pkgs = %w(libmysql++-dev mysql-server)
|
71
|
+
sudo "aptitude -y -q install #{pkgs.join(' ')}"
|
72
|
+
end
|
73
|
+
|
74
|
+
cap.task :install_passenger do
|
75
|
+
sudo("/opt/ruby-enterprise/bin/passenger-install-apache2-module",
|
76
|
+
:pty => true) do |ch,stream,out|
|
77
|
+
next if out.chomp == ''
|
78
|
+
print out
|
79
|
+
ch.send_data(input = "\n") if out =~ /enter/i
|
80
|
+
end
|
81
|
+
passenger_root = capture('passenger-config --root').chomp
|
82
|
+
sudo "rm -f /tmp/passenger.*"
|
83
|
+
put PASSENGER_LOAD.gsub(/ROOT/, passenger_root), '/tmp/passenger.load'
|
84
|
+
put PASSENGER_CONF.gsub(/ROOT/, passenger_root), '/tmp/passenger.conf'
|
85
|
+
sudo "mv /tmp/passenger.* /etc/apache2/mods-available"
|
86
|
+
sudo "a2enmod passenger"
|
87
|
+
sudo "/etc/init.d/apache2 force-reload"
|
88
|
+
end
|
89
|
+
|
90
|
+
cap
|
91
|
+
end
|
92
|
+
|
93
|
+
PASSENGER_LOAD = <<EOF
|
94
|
+
LoadModule passenger_module ROOT/ext/apache2/mod_passenger.so
|
95
|
+
EOF
|
96
|
+
|
97
|
+
PASSENGER_CONF = <<EOF
|
98
|
+
PassengerRoot ROOT
|
99
|
+
PassengerRuby /opt/ruby-enterprise/bin/ruby
|
100
|
+
PassengerDefaultUser www-data
|
101
|
+
EOF
|
102
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# ProvisionVhost::manifest Create a new vhost configuration for Apache remotely.
|
2
|
+
# Create a new vhost configuration for Apache remotely.
|
3
|
+
|
4
|
+
require 'provision_base'
|
5
|
+
require 'capistrano'
|
6
|
+
require 'capistrano/cli'
|
7
|
+
|
8
|
+
# ProvisionVhost Documentation
|
9
|
+
class ProvisionVhost < Tap::Task
|
10
|
+
IP_REGEX = /\b(?:\d{1,3}\.){3}\d{1,3}$/ # not perfect, but works
|
11
|
+
|
12
|
+
config :user, nil
|
13
|
+
config :password, nil
|
14
|
+
config :ip, nil, &c.check(nil, IP_REGEX)
|
15
|
+
config :docroot, nil
|
16
|
+
config :ssl, false, &c.switch
|
17
|
+
|
18
|
+
def get_ip(server)
|
19
|
+
ask("Enter the IP address for the virtual host: ") {
|
20
|
+
|q| q.default = `host -t A #{server}`.scan(IP_REGEX)[0] || server
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_docroot(domain)
|
25
|
+
ask("Enter the docroot for the virtual host: ") {
|
26
|
+
|q| q.default = "/var/www/#{domain}"
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def process(server, domain)
|
31
|
+
self.user ||= ProvisionBase.get_user.call
|
32
|
+
self.password ||= ProvisionBase.get_password.call
|
33
|
+
self.ip ||= get_ip(server)
|
34
|
+
self.docroot ||= get_docroot(domain)
|
35
|
+
get_apache_cap(server, domain).provision
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_apache_cap(server, domain)
|
39
|
+
cap = Capistrano::Configuration.new
|
40
|
+
cap.logger.level = Capistrano::Logger::TRACE
|
41
|
+
|
42
|
+
cap.set :user, user.to_s
|
43
|
+
cap.set :password, password.to_s
|
44
|
+
|
45
|
+
cap.role :app, server
|
46
|
+
|
47
|
+
# fix for closure below
|
48
|
+
provision = self
|
49
|
+
|
50
|
+
cap.task :provision do
|
51
|
+
conf_text = APACHE_VHOST_CONF
|
52
|
+
conf_text += "\n\n#{APACHE_SSL_VHOST_CONF}" if provision.ssl
|
53
|
+
conf_text.gsub!('_IP_', provision.ip)
|
54
|
+
conf_text.gsub!('_DOCROOT_', provision.docroot)
|
55
|
+
|
56
|
+
apache_conf_dir = capture('apxs2 -q SYSCONFDIR')
|
57
|
+
put conf_text, "/tmp/#{domain}"
|
58
|
+
sudo "mv /tmp/#{domain} #{apache_conf_dir}/sites-available/"
|
59
|
+
sudo "a2dissite #{domain}"
|
60
|
+
sudo "a2ensite #{domain}"
|
61
|
+
sudo "apache2ctl graceful"
|
62
|
+
end
|
63
|
+
|
64
|
+
cap
|
65
|
+
end
|
66
|
+
|
67
|
+
APACHE_VHOST_CONF = <<EOF
|
68
|
+
NameVirtualHost _IP_:80
|
69
|
+
|
70
|
+
<VirtualHost _IP_:80>
|
71
|
+
ServerName _VHOST_
|
72
|
+
DocumentRoot _DOCROOT_/current/public
|
73
|
+
CustomLog _DOCROOT_/shared/log/access.log combined
|
74
|
+
ErrorLog _DOCROOT_/shared/log/error.log
|
75
|
+
|
76
|
+
RewriteEngine On
|
77
|
+
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
|
78
|
+
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
|
79
|
+
RewriteRule ^.*$ /system/maintenance.html [L]
|
80
|
+
</VirtualHost>
|
81
|
+
EOF
|
82
|
+
|
83
|
+
APACHE_SSL_VHOST_CONF = <<EOF
|
84
|
+
NameVirtualHost _IP_:80
|
85
|
+
|
86
|
+
<VirtualHost _IP_:443>
|
87
|
+
ServerName _VHOST_
|
88
|
+
DocumentRoot _DOCROOT_/current/public
|
89
|
+
CustomLog _DOCROOT_/shared/log/access.log combined
|
90
|
+
ErrorLog _DOCROOT_/shared/log/error.log
|
91
|
+
|
92
|
+
RewriteEngine On
|
93
|
+
RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
|
94
|
+
RewriteCond %{SCRIPT_FILENAME} !maintenance.html
|
95
|
+
RewriteRule ^.*$ /system/maintenance.html [L]
|
96
|
+
|
97
|
+
SSLEngine on
|
98
|
+
SSLCertificateFile /etc/apache2/certs/_VHOST_.crt
|
99
|
+
SSLCertificateKeyFile /etc/apache2/certs/_VHOST_.key
|
100
|
+
</VirtualHost>
|
101
|
+
EOF
|
102
|
+
|
103
|
+
end
|
data/tap.yml
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
###############################################################################
|
2
|
+
# Tap::Root configurations
|
3
|
+
###############################################################################
|
4
|
+
|
5
|
+
# The root directory.
|
6
|
+
#root:
|
7
|
+
|
8
|
+
# A hash of (alias, relative path) pairs for aliased
|
9
|
+
# subdirectories.
|
10
|
+
directories: {}
|
11
|
+
|
12
|
+
# A hash of (alias, relative path) pairs for aliased
|
13
|
+
# absolute paths.
|
14
|
+
absolute_paths: {}
|
15
|
+
|
16
|
+
###############################################################################
|
17
|
+
# Tap::App configurations
|
18
|
+
###############################################################################
|
19
|
+
|
20
|
+
debug: false
|
21
|
+
|
22
|
+
force: false
|
23
|
+
|
24
|
+
quiet: false
|
25
|
+
|
26
|
+
verbose: false
|
27
|
+
|
28
|
+
###############################################################################
|
29
|
+
# Tap::Env configurations
|
30
|
+
###############################################################################
|
31
|
+
|
32
|
+
# Specify files to require when self is activated.
|
33
|
+
requires: []
|
34
|
+
|
35
|
+
# Specify files to load when self is activated.
|
36
|
+
loads: []
|
37
|
+
|
38
|
+
# Specify gems to load as nested Envs. Gems may be
|
39
|
+
# specified by name and/or version, like 'gemname >=
|
40
|
+
# 1.2'; by default the latest version of the gem is
|
41
|
+
# selected.
|
42
|
+
#
|
43
|
+
# Gems are immediately loaded (via gem) through this
|
44
|
+
# method.
|
45
|
+
gems: []
|
46
|
+
|
47
|
+
# Specify configuration files to load as nested
|
48
|
+
# Envs.
|
49
|
+
env_paths: []
|
50
|
+
|
51
|
+
load_paths:
|
52
|
+
- lib
|
53
|
+
|
54
|
+
command_paths:
|
55
|
+
- cmd
|
56
|
+
|
57
|
+
generator_paths:
|
58
|
+
- lib
|
59
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "tap_provision_server"
|
3
|
+
s.version = "0.1.0"
|
4
|
+
s.author = "Clinton R. Nixon"
|
5
|
+
s.email = "clinton.nixon@viget.com"
|
6
|
+
#s.homepage = "http://rubyforge.org/projects/tap_provision_server/"
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.summary = "tap_provision_server"
|
9
|
+
s.require_path = "lib"
|
10
|
+
s.test_file = "test/tap_test_suite.rb"
|
11
|
+
#s.rubyforge_project = "tap_provision_server"
|
12
|
+
#s.has_rdoc = true
|
13
|
+
s.add_dependency("tap", ">= 0.11.1")
|
14
|
+
s.add_dependency('hpricot', '>= 0.6')
|
15
|
+
s.add_dependency('capistrano', '>= 2.5.2')
|
16
|
+
s.add_dependency('highline', '>= 1.5.0')
|
17
|
+
|
18
|
+
# list extra rdoc files here.
|
19
|
+
s.extra_rdoc_files = %W{
|
20
|
+
README
|
21
|
+
}
|
22
|
+
|
23
|
+
# list the files you want to include here. you can
|
24
|
+
# check this manifest using 'rake :print_manifest'
|
25
|
+
s.files = %W{
|
26
|
+
Rakefile
|
27
|
+
lib/provision_base.rb
|
28
|
+
lib/provision_ubuntu.rb
|
29
|
+
lib/provision_vhost.rb
|
30
|
+
tap.yml
|
31
|
+
tap_provision_server.gemspec
|
32
|
+
test/provision_ubuntu_test.rb
|
33
|
+
test/provision_vhost_test.rb
|
34
|
+
test/tap_test_helper.rb
|
35
|
+
test/tap_test_suite.rb
|
36
|
+
}
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'tap_test_helper.rb')
|
2
|
+
require 'provision_ubuntu'
|
3
|
+
|
4
|
+
class ProvisionUbuntuTest < Test::Unit::TestCase
|
5
|
+
acts_as_tap_test
|
6
|
+
|
7
|
+
def test_provision_ubuntu
|
8
|
+
# task = ProvisionUbuntu.new :message => "goodnight"
|
9
|
+
|
10
|
+
# # a simple test
|
11
|
+
# assert_equal({:message => 'goodnight'}, task.config)
|
12
|
+
# assert_equal "goodnight moon", task.process("moon")
|
13
|
+
|
14
|
+
# # a more complex test
|
15
|
+
# task.execute("moon")
|
16
|
+
# assert_equal ["goodnight moon"], app.results(task)
|
17
|
+
# assert_audit_equal ExpAudit[[nil, "moon"], [task, "goodnight moon"]], app._results(task)[0]
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'tap_test_helper.rb')
|
2
|
+
require 'provision_vhost'
|
3
|
+
|
4
|
+
class ProvisionVhostTest < Test::Unit::TestCase
|
5
|
+
acts_as_tap_test
|
6
|
+
|
7
|
+
def test_provision_vhost
|
8
|
+
# task = ProvisionVhost.new :message => "goodnight"
|
9
|
+
|
10
|
+
# # a simple test
|
11
|
+
# assert_equal({:message => 'goodnight'}, task.config)
|
12
|
+
# assert_equal "goodnight moon", task.process("moon")
|
13
|
+
|
14
|
+
# # a more complex test
|
15
|
+
# task.execute("moon")
|
16
|
+
# assert_equal ["goodnight moon"], app.results(task)
|
17
|
+
# assert_audit_equal ExpAudit[[nil, "moon"], [task, "goodnight moon"]], app._results(task)[0]
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crnixon-tap_provision_server
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Clinton R. Nixon
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-04-08 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: tap
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.11.1
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: hpricot
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0.6"
|
34
|
+
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: capistrano
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 2.5.2
|
44
|
+
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: highline
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.5.0
|
54
|
+
version:
|
55
|
+
description:
|
56
|
+
email: clinton.nixon@viget.com
|
57
|
+
executables: []
|
58
|
+
|
59
|
+
extensions: []
|
60
|
+
|
61
|
+
extra_rdoc_files:
|
62
|
+
- README
|
63
|
+
files:
|
64
|
+
- Rakefile
|
65
|
+
- lib/provision_base.rb
|
66
|
+
- lib/provision_ubuntu.rb
|
67
|
+
- lib/provision_vhost.rb
|
68
|
+
- tap.yml
|
69
|
+
- tap_provision_server.gemspec
|
70
|
+
- test/provision_ubuntu_test.rb
|
71
|
+
- test/provision_vhost_test.rb
|
72
|
+
- test/tap_test_helper.rb
|
73
|
+
- test/tap_test_suite.rb
|
74
|
+
- README
|
75
|
+
has_rdoc: false
|
76
|
+
homepage:
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
|
80
|
+
require_paths:
|
81
|
+
- lib
|
82
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: "0"
|
87
|
+
version:
|
88
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: "0"
|
93
|
+
version:
|
94
|
+
requirements: []
|
95
|
+
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 1.2.0
|
98
|
+
signing_key:
|
99
|
+
specification_version: 2
|
100
|
+
summary: tap_provision_server
|
101
|
+
test_files:
|
102
|
+
- test/tap_test_suite.rb
|