auser-poolparty 0.2.81 → 0.2.84
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/Capfile +1 -0
- data/Manifest.txt +13 -6
- data/PostInstall.txt +1 -1
- data/bin/cloud-configure +2 -1
- data/bin/cloud-handle-load +3 -3
- data/bin/cloud-maintain +2 -2
- data/bin/cloud-provision +4 -4
- data/bin/cloud-setup-dev +25 -0
- data/bin/cloud-start +1 -0
- data/bin/server-start-client +1 -1
- data/bin/server-start-master +1 -1
- data/bin/server-start-node +1 -1
- data/bin/server-write-new-nodes +26 -0
- data/lib/poolparty/capistrano.rb +18 -0
- data/lib/poolparty/exceptions/ProvisionerException.rb +5 -0
- data/lib/poolparty/helpers/optioner.rb +2 -1
- data/lib/poolparty/modules/cloud_resourcer.rb +17 -0
- data/lib/poolparty/modules/file_writer.rb +2 -2
- data/lib/poolparty/net/messenger.rb +1 -1
- data/lib/poolparty/net/remote_bases/ec2.rb +3 -2
- data/lib/poolparty/net/remoter.rb +12 -8
- data/lib/poolparty/plugins/git.rb +5 -1
- data/lib/poolparty/poolparty/cloud.rb +3 -1
- data/lib/poolparty/provisioners/capistrano/capistrano.rb +129 -0
- data/lib/poolparty/provisioners/capistrano/capistrano_configurer.rb +58 -0
- data/lib/poolparty/provisioners/capistrano/recipies/base.rb +100 -0
- data/lib/poolparty/provisioners/capistrano/recipies/master.rb +120 -0
- data/lib/poolparty/provisioners/capistrano/recipies/slave.rb +12 -0
- data/lib/poolparty/provisioners/provisioner_base.rb +98 -274
- data/lib/poolparty/templates/gem +12 -10
- data/lib/poolparty/version.rb +1 -1
- data/lib/poolparty.rb +5 -3
- data/poolparty.gemspec +18 -9
- data/spec/poolparty/helpers/optioner_spec.rb +1 -1
- data/spec/poolparty/net/remote_spec.rb +13 -14
- data/spec/poolparty/net/remoter_spec.rb +11 -11
- data/spec/poolparty/plugins/git_spec.rb +1 -1
- data/spec/poolparty/poolparty_spec.rb +1 -1
- data/spec/poolparty/provisioners/capistrano/capistrano_spec.rb +27 -0
- data/spec/poolparty/provisioners/provisioner_base_spec.rb +120 -0
- data/spec/poolparty/spec_helper.rb +15 -1
- data/website/index.html +1 -1
- metadata +18 -9
- data/lib/poolparty/provisioners/provisioners/become_master.rb +0 -166
- data/lib/poolparty/provisioners/provisioners/master.rb +0 -196
- data/lib/poolparty/provisioners/provisioners/slave.rb +0 -65
- data/spec/poolparty/helpers/provisioner_base_spec.rb +0 -137
- data/spec/poolparty/helpers/provisioners/master_spec.rb +0 -53
- data/spec/poolparty/helpers/provisioners/slave_spec.rb +0 -27
@@ -0,0 +1,58 @@
|
|
1
|
+
=begin rdoc
|
2
|
+
This overwriting of the Capistrano method missing allows our capistrano
|
3
|
+
tasks to have access to the methods on the provisioner and options
|
4
|
+
set on the clouds. This saves us the responsibility of setting variables
|
5
|
+
in the dynamic cap file.
|
6
|
+
=end
|
7
|
+
#TODO# Clean up
|
8
|
+
module Capistrano
|
9
|
+
class Configuration
|
10
|
+
attr_accessor :cloud, :provisioner
|
11
|
+
|
12
|
+
def method_missing_without_variables(sym, *args, &block)
|
13
|
+
if parent.respond_to?(sym)
|
14
|
+
parent.send(sym, *args, &block)
|
15
|
+
elsif provisioner.respond_to?(sym)
|
16
|
+
provisioner.send(sym, *args, &block)
|
17
|
+
elsif cloud.respond_to?(sym)
|
18
|
+
cloud.send(sym, *args, &block)
|
19
|
+
elsif PoolParty::Base.options.has_key?(sym)
|
20
|
+
PoolParty::Base.options[sym]
|
21
|
+
elsif PoolParty::Base.respond_to?(sym)
|
22
|
+
PoolParty::Base.send(sym, *args, &block)
|
23
|
+
else
|
24
|
+
super
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
module Namespaces
|
30
|
+
class Namespace
|
31
|
+
|
32
|
+
def provisioner
|
33
|
+
parent.provisioner
|
34
|
+
end
|
35
|
+
|
36
|
+
def cloud
|
37
|
+
parent.cloud
|
38
|
+
end
|
39
|
+
|
40
|
+
def method_missing(sym, *args, &block)
|
41
|
+
if parent.respond_to?(sym)
|
42
|
+
parent.send(sym, *args, &block)
|
43
|
+
elsif provisioner.respond_to?(sym)
|
44
|
+
provisioner.send(sym, *args, &block)
|
45
|
+
elsif cloud.respond_to?(sym)
|
46
|
+
cloud.send(sym, *args, &block)
|
47
|
+
elsif PoolParty::Base.options.has_key?(sym)
|
48
|
+
PoolParty::Base.options[sym]
|
49
|
+
elsif PoolParty::Base.respond_to?(sym)
|
50
|
+
PoolParty::Base.send(sym, *args, &block)
|
51
|
+
else
|
52
|
+
super
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
=begin rdoc
|
2
|
+
Base provisioner capistrano tasks
|
3
|
+
=end
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
# namespace(:base) do
|
6
|
+
desc "Install rubygems"
|
7
|
+
task :install_rubygems do
|
8
|
+
run "#{installer_for} ruby rubygems"
|
9
|
+
end
|
10
|
+
desc "Install provisioner"
|
11
|
+
task :install_provisioner do
|
12
|
+
run "#{installer_for} #{puppet_packages}"
|
13
|
+
end
|
14
|
+
desc "Create poolparty commands"
|
15
|
+
task :create_poolparty_commands do
|
16
|
+
end
|
17
|
+
desc "Create poolparty runner command"
|
18
|
+
task :create_puppetrunner_command do
|
19
|
+
run <<-EOR
|
20
|
+
cp #{remote_storage_path}/templates/puppetrunner /usr/bin/puppetrunner &&
|
21
|
+
chmod +x /usr/bin/puppetrunner
|
22
|
+
EOR
|
23
|
+
end
|
24
|
+
desc "Create poolparty rerun command"
|
25
|
+
task :create_puppetrerun_command do
|
26
|
+
run <<-EOR
|
27
|
+
cp #{remote_storage_path}/templates/puppetrerun /usr/bin/puppetrerun &&
|
28
|
+
chmod +x /usr/bin/puppetrerun
|
29
|
+
EOR
|
30
|
+
end
|
31
|
+
desc "Add the proper configs for provisioner"
|
32
|
+
task :add_provisioner_configs do
|
33
|
+
run "cp #{remote_storage_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf"
|
34
|
+
end
|
35
|
+
desc "Setup config file for provisioner"
|
36
|
+
task :setup_provisioner_config do
|
37
|
+
run "mv #{remote_storage_path}/puppet.conf /etc/puppet/puppet.conf"
|
38
|
+
end
|
39
|
+
desc "Run the provisioner"
|
40
|
+
task :run_provisioner do
|
41
|
+
run "/usr/sbin/puppetd --onetime --daemonize --logdest syslog --server master"
|
42
|
+
end
|
43
|
+
desc "Rerun the provisioner"
|
44
|
+
task :rerun_provisioner do
|
45
|
+
run "/usr/bin/puppetrerun"
|
46
|
+
end
|
47
|
+
desc "Remove the certs"
|
48
|
+
task :remove_certs do
|
49
|
+
run "rm -rf /etc/puppet/ssl"
|
50
|
+
end
|
51
|
+
desc "Update rubygems"
|
52
|
+
task :update_rubygems do
|
53
|
+
run "/usr/bin/gem update --system 2>1 > /dev/null && /usr/bin/gem update --system"
|
54
|
+
end
|
55
|
+
desc "Fix rubygems"
|
56
|
+
task :fix_rubygems do
|
57
|
+
# echo '#{open(::File.join(template_directory, "gem")).read}' > /usr/bin/gem &&
|
58
|
+
run <<-EOR
|
59
|
+
/usr/bin/gem update --system 2>&1 > /dev/null;/usr/bin/gem update --system &&
|
60
|
+
cp -f #{remote_storage_path}/gem /usr/bin/gem
|
61
|
+
EOR
|
62
|
+
end
|
63
|
+
desc "Upgrade system"
|
64
|
+
task :upgrade_system do
|
65
|
+
str = case os
|
66
|
+
when :ubuntu
|
67
|
+
"
|
68
|
+
echo 'deb http://mirrors.kernel.org/ubuntu hardy main universe' >> /etc/apt/sources.list &&
|
69
|
+
aptitude update -y
|
70
|
+
"
|
71
|
+
else
|
72
|
+
"echo 'No system upgrade needed'"
|
73
|
+
end
|
74
|
+
run str
|
75
|
+
end
|
76
|
+
desc "Upgrade rubygems"
|
77
|
+
task :upgrade_rubygems do
|
78
|
+
|
79
|
+
end
|
80
|
+
desc "Make log directory"
|
81
|
+
task :make_log_directory do
|
82
|
+
run "mkdir -p /var/log/poolparty"
|
83
|
+
end
|
84
|
+
desc "Create ssl storage directories for poolparty"
|
85
|
+
task :create_poolparty_ssl_store do
|
86
|
+
run <<-EOR
|
87
|
+
mkdir -p #{poolparty_config_directory}/ssl/private_keys &&
|
88
|
+
mkdir -p #{poolparty_config_directory}/ssl/certs &&
|
89
|
+
mkdir -p #{poolparty_config_directory}/ssl/public_keys
|
90
|
+
EOR
|
91
|
+
end
|
92
|
+
desc "Add erlang cookie"
|
93
|
+
task :write_erlang_cookie do
|
94
|
+
run <<-EOR
|
95
|
+
mv #{remote_storage_path}/cookie ~/.erlang.cookie &&
|
96
|
+
chmod 400 ~/.erlang.cookie
|
97
|
+
EOR
|
98
|
+
end
|
99
|
+
# end
|
100
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# Cloud tasks
|
2
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
3
|
+
namespace(:master) do
|
4
|
+
desc "Provision master"
|
5
|
+
task :provision_master do
|
6
|
+
upgrade_system
|
7
|
+
set_hostname_to_master
|
8
|
+
create_local_hosts_entry
|
9
|
+
install_provisioner
|
10
|
+
start_provisioner_base
|
11
|
+
setup_basic_poolparty_structure
|
12
|
+
setup_provisioner_filestore
|
13
|
+
setup_provisioner_autosigning
|
14
|
+
install_rubygems
|
15
|
+
fix_rubygems
|
16
|
+
add_provisioner_configs
|
17
|
+
setup_provisioner_config
|
18
|
+
create_puppetrunner_command
|
19
|
+
create_puppetrerun_command
|
20
|
+
download_base_gems
|
21
|
+
install_base_gems
|
22
|
+
write_erlang_cookie
|
23
|
+
end
|
24
|
+
desc "Configure master"
|
25
|
+
task :configure_master do
|
26
|
+
master:move_provisioner_manifest
|
27
|
+
master:move_template_files
|
28
|
+
master:setup_poolparty_base_structure
|
29
|
+
run_provisioner
|
30
|
+
end
|
31
|
+
desc "Set hostname to master"
|
32
|
+
task :set_hostname_to_master do
|
33
|
+
run "hostname master"
|
34
|
+
end
|
35
|
+
desc "Add host entry into the master instance"
|
36
|
+
task :create_local_hosts_entry do
|
37
|
+
run "if [ -z \"$(grep -v '#' /etc/hosts | grep 'puppet')\" ]; then echo '#{cloud.master.ip} master puppet localhost' >> /etc/hosts; fi"
|
38
|
+
end
|
39
|
+
desc "Setup basic poolparty structure"
|
40
|
+
task :setup_basic_poolparty_structure do
|
41
|
+
run <<-EOR
|
42
|
+
echo "Creating basic structure for poolparty" &&
|
43
|
+
mkdir -p /etc/puppet/manifests/nodes &&
|
44
|
+
mkdir -p /etc/puppet/manifests/classes &&
|
45
|
+
echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp &&
|
46
|
+
echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
|
47
|
+
EOR
|
48
|
+
end
|
49
|
+
desc "Setup shareable file system for provisioner"
|
50
|
+
task :setup_provisioner_filestore do
|
51
|
+
run <<-EOR
|
52
|
+
echo '[files]' > /etc/puppet/fileserver.conf &&
|
53
|
+
echo ' path #{remote_storage_path}' >> /etc/puppet/fileserver.conf &&
|
54
|
+
echo ' allow *' >> /etc/puppet/fileserver.conf &&
|
55
|
+
mkdir -p /var/poolparty/facts &&
|
56
|
+
mkdir -p /var/poolparty/files &&
|
57
|
+
mkdir -p #{base_config_directory}
|
58
|
+
EOR
|
59
|
+
end
|
60
|
+
desc "Setup autosigning for provisioner"
|
61
|
+
task :setup_provisioner_autosigning do
|
62
|
+
run "echo \"*\" > /etc/puppet/autosign.conf"
|
63
|
+
end
|
64
|
+
desc "Setup poolparty structure"
|
65
|
+
task :setup_poolparty_base_structure do
|
66
|
+
run <<-EOR
|
67
|
+
cp #{remote_storage_path}/#{key_file_locations.first} "#{base_config_directory}/.ppkeys" &&
|
68
|
+
mv #{remote_storage_path}/#{default_specfile_name} #{base_config_directory}/
|
69
|
+
EOR
|
70
|
+
end
|
71
|
+
desc "Download base gems"
|
72
|
+
task :download_base_gems do
|
73
|
+
run download_base_gems_string
|
74
|
+
end
|
75
|
+
desc "Install base gems"
|
76
|
+
task :install_base_gems do
|
77
|
+
run(returning(Array.new) do |arr|
|
78
|
+
base_gems.each do |name, url|
|
79
|
+
arr << "/usr/bin/gem install --ignore-dependencies --no-ri --no-rdoc #{Base.remote_storage_path}/#{name}.gem"
|
80
|
+
end
|
81
|
+
end.join(" && "))
|
82
|
+
end
|
83
|
+
desc "Start provisioner base"
|
84
|
+
task :start_provisioner_base do
|
85
|
+
run "/etc/init.d/puppetmaster start"
|
86
|
+
end
|
87
|
+
desc "Restart provisioner base"
|
88
|
+
task :restart_provisioner_base do
|
89
|
+
run "/etc/init.d/puppetmaster stop;rm -rf /etc/poolparty/ssl;puppetmasterd --verbose;/etc/init.d/puppetmaster start"
|
90
|
+
end
|
91
|
+
desc "Create local node for puppet manifest"
|
92
|
+
task :create_local_node_entry_for_puppet do
|
93
|
+
# run ". /etc/profile && server-write-new-nodes"
|
94
|
+
str = returning Array.new do |arr|
|
95
|
+
arr << "node default { include poolparty }"
|
96
|
+
list_of_running_instances.each do |ri|
|
97
|
+
arr << "node \"#{ri.name}\" inherits default {}\n"
|
98
|
+
end
|
99
|
+
end.join("\n")
|
100
|
+
run "echo #{str} > #{manifest_path}/nodes/nodes.pp"
|
101
|
+
end
|
102
|
+
desc "Move template files into place"
|
103
|
+
task :move_template_files do
|
104
|
+
run <<-EOR
|
105
|
+
mkdir -p #{template_path} &&
|
106
|
+
cp -R #{remote_storage_path}/templates/* #{template_path}
|
107
|
+
EOR
|
108
|
+
end
|
109
|
+
desc "Move manifest into place"
|
110
|
+
task :move_provisioner_manifest do
|
111
|
+
run <<-EOR
|
112
|
+
cp #{remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
|
113
|
+
EOR
|
114
|
+
end
|
115
|
+
desc "Move poolparty keys"
|
116
|
+
task :move_poolparty_keys do
|
117
|
+
run "cp #{remote_storage_path}/#{@full_keypair_name} #{@remote_keypair_path}"
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
namespace(:slave) do
|
3
|
+
desc "Add master ip to hosts file"
|
4
|
+
task :add_master_to_hosts_file do
|
5
|
+
run "if [ -z \"$(grep -v '#' /etc/hosts | grep 'master')\" ]; then echo '#{master_ip} puppet master' >> /etc/hosts; else echo 'host already set'; fi"
|
6
|
+
end
|
7
|
+
desc "Stop provisioner daemon"
|
8
|
+
task :stop_provisioner_daemon do
|
9
|
+
run "/etc/init.d/puppetmaster stop"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|