auser-poolparty 1.1.7 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/History.txt +3 -0
  2. data/README.txt +10 -7
  3. data/Rakefile +0 -1
  4. data/VERSION.yml +2 -2
  5. data/bin/cloud-osxcopy +1 -1
  6. data/bin/cloud-setup-dev +1 -1
  7. data/bin/cloud-spec +0 -1
  8. data/bin/cloud-terminate +7 -1
  9. data/bin/cloud-verify +30 -0
  10. data/examples/basic.rb +3 -6
  11. data/examples/fairchild.rb +17 -21
  12. data/examples/maize.rb +37 -0
  13. data/lib/poolparty/base_packages/haproxy.rb +6 -6
  14. data/lib/poolparty/base_packages/heartbeat.rb +1 -43
  15. data/lib/poolparty/base_packages/poolparty.rb +1 -3
  16. data/lib/poolparty/modules/cloud_dsl.rb +10 -2
  17. data/lib/poolparty/modules/cloud_resourcer.rb +0 -4
  18. data/lib/poolparty/net/init.rb +1 -1
  19. data/lib/poolparty/net/remote_instance.rb +0 -27
  20. data/lib/poolparty/net/remoter/cloud_control.rb +0 -177
  21. data/lib/poolparty/net/remoter/interactive.rb +5 -16
  22. data/lib/poolparty/net/remoter_bases/ec2/ec2.rb +1 -10
  23. data/lib/poolparty/plugins/apache2.rb +53 -0
  24. data/lib/poolparty/plugins/deploy_directory.rb +16 -14
  25. data/lib/poolparty/plugins/gem_package.rb +24 -0
  26. data/lib/poolparty/plugins/line_in_file.rb +16 -0
  27. data/lib/poolparty/poolparty/plugin.rb +8 -6
  28. data/lib/poolparty/provision/dr_configure.rb +1 -0
  29. data/lib/poolparty/resources.rb +42 -0
  30. data/lib/poolparty/resources/cron.rb +30 -1
  31. data/lib/poolparty/resources/directory.rb +23 -0
  32. data/lib/poolparty/resources/exec.rb +22 -0
  33. data/lib/poolparty/resources/file.rb +28 -0
  34. data/lib/poolparty/resources/host.rb +22 -1
  35. data/lib/poolparty/resources/mount.rb +24 -0
  36. data/lib/poolparty/resources/package.rb +29 -13
  37. data/lib/poolparty/resources/remote_file.rb +32 -0
  38. data/lib/poolparty/resources/service.rb +20 -0
  39. data/lib/poolparty/resources/sshkey.rb +22 -0
  40. data/lib/poolparty/resources/symlink.rb +30 -0
  41. data/lib/poolparty/resources/variable.rb +25 -0
  42. data/lib/poolparty/templates/php.ini.erb +1253 -0
  43. data/lib/poolparty/verification/verifiers/ping.rb +5 -0
  44. data/lib/poolparty/verification/verify.rb +2 -0
  45. data/spec/bin/fixtures/bin_cloud_for_test.rb +0 -6
  46. data/spec/poolparty/dependency_resolver/chef_resolver_spec.rb +0 -6
  47. data/spec/poolparty/net/remoter_bases/ec2_remote_instance_spec.rb +0 -10
  48. data/spec/poolparty/spec_helper.rb +0 -1
  49. data/tasks/spec.rake +2 -0
  50. data/test/poolparty/dependency_resolver/puppet_resolver_test.rb +0 -10
  51. data/test/poolparty/verification/verify_test.rb +3 -3
  52. data/vendor/chef/apache2/attributes/apache.rb +1 -1
  53. data/vendor/gems/parenting/Manifest.txt +2 -1
  54. data/vendor/gems/parenting/lib/parenting.rb +1 -1
  55. data/vendor/gems/parenting/parenting.gemspec +2 -2
  56. metadata +8 -70
  57. data/bin/messenger-get-current-nodes +0 -14
  58. data/bin/server-become-master +0 -24
  59. data/bin/server-build-messenger +0 -28
  60. data/bin/server-clean-cert-for +0 -15
  61. data/bin/server-provision +0 -32
  62. data/bin/server-start-agent +0 -15
  63. data/bin/server-start-client +0 -29
  64. data/bin/server-start-master +0 -26
  65. data/bin/server-start-node +0 -32
  66. data/bin/server-stop-client +0 -3
  67. data/bin/server-stop-master +0 -3
  68. data/bin/server-stop-node +0 -3
  69. data/bin/server-update-hosts +0 -49
  70. data/lib/poolparty/capistrano.rb +0 -54
  71. data/lib/poolparty/capistrano/cloud_tasks.rb +0 -10
  72. data/lib/poolparty/config/postlaunchmessage.txt +0 -5
  73. data/lib/poolparty/net/messenger.rb +0 -57
  74. data/lib/poolparty/plugins/rsyncmirror.rb +0 -28
  75. data/lib/poolparty/services/conditional.rb +0 -46
  76. data/lib/poolparty/spec.rb +0 -31
  77. data/lib/poolparty/spec/core/string.rb +0 -18
  78. data/lib/poolparty/spec/matchers/a_spec_extensions_base.rb +0 -26
  79. data/lib/poolparty/spec/matchers/have_cron.rb +0 -28
  80. data/lib/poolparty/spec/matchers/have_deploydirectory.rb +0 -15
  81. data/lib/poolparty/spec/matchers/have_directory.rb +0 -31
  82. data/lib/poolparty/spec/matchers/have_exec.rb +0 -28
  83. data/lib/poolparty/spec/matchers/have_file.rb +0 -28
  84. data/lib/poolparty/spec/matchers/have_gempackage.rb +0 -28
  85. data/lib/poolparty/spec/matchers/have_git.rb +0 -28
  86. data/lib/poolparty/spec/matchers/have_host.rb +0 -28
  87. data/lib/poolparty/spec/matchers/have_mount.rb +0 -28
  88. data/lib/poolparty/spec/matchers/have_package.rb +0 -28
  89. data/lib/poolparty/spec/matchers/have_remotefile.rb +0 -28
  90. data/lib/poolparty/spec/matchers/have_rsyncmirror.rb +0 -28
  91. data/lib/poolparty/spec/matchers/have_service.rb +0 -28
  92. data/lib/poolparty/spec/matchers/have_sshkey.rb +0 -28
  93. data/lib/poolparty/spec/matchers/have_symlink.rb +0 -28
  94. data/lib/poolparty/spec/matchers/have_variable.rb +0 -32
  95. data/lib/poolparty/spec/spec/dynamic_matchers.rb +0 -63
  96. data/lib/poolparty/spec/spec/ensure_matchers_exist.rb +0 -7
  97. data/lib/poolparty/spec/templates/have_base.rb +0 -28
  98. data/spec/poolparty/net/messenger_spec.rb +0 -16
  99. data/spec/poolparty/services/conditional_spec.rb +0 -52
  100. data/spec/poolparty/spec/core/string_spec.rb +0 -57
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
- require "poolparty"
4
- require "poolpartycl"
5
-
6
- o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
7
- opts.on('-n name', '--name name', 'For cloud name') { |c| optioner.cloudname c }
8
- opts.on('-f name', '--for name', 'Clear the cert for') { |f| optioner.for f }
9
- end
10
-
11
- o.loaded_clouds.each do |cloud|
12
- # @nodes = cloud.messenger_send!("get_current_nodes")
13
- # @nodes = @nodes.split(" ").map {|a| a.split(/@/)[-1] }
14
- PoolParty::Ruberl::Base.new(cloud.master, Default.messenger_client_port).messenger_send!("clear_cert_for #{cloud.for}")
15
- end
data/bin/server-provision DELETED
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
- require "poolparty"
4
- require "poolpartycl"
5
-
6
- o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
7
- opts.on('-n cloudname', '--name name', 'Start cloud by this name') { |c| optioner.cloudname c }
8
- opts.on('-p', '--slave', 'Provision slave (default: false)') { optioner.provision_slave true }
9
- opts.on('-i num', '--id num', 'Instance num to provision') { |i| optioner.instance_number i }
10
- end
11
-
12
- o.loaded_clouds.each do |cloud|
13
-
14
- with_cloud(cloud) do
15
- setup_dev
16
- instance_num = instance_number.to_i if instance_number
17
-
18
- if instance_num
19
- @instance = get_instance_by_number( instance_num )
20
- instance_num == 0 ? provisioner_for(master).install(testing) : provisioner_for(@instance).install(testing)
21
- else
22
- if provision_slave
23
- vputs "Provisioning slaves"
24
- verbose ? provisioner_for(nil).install(testing) : hide_output { provisioner_for(nil).install(testing) }
25
- else
26
- vputs "Provisioning master"
27
- verbose ? provisioner_for(master).install(testing) : hide_output { provisioner_for(master).install(testing) }
28
- end
29
- end
30
- end
31
-
32
- end
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
- require "poolparty"
4
- require "poolpartycl"
5
-
6
- o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
7
- opts.on('-n name', '--name name', 'Host name') { |h| optioner.hostname h }
8
- opts.on('-k', '--kill', 'Kill the server') { optioner.kill true }
9
- end
10
-
11
- o.loaded_clouds.each do |cloud|
12
-
13
- PoolParty::Agent.run_for cloud
14
-
15
- end
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
- require "poolparty"
4
- require "poolpartycl"
5
-
6
- o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
7
- opts.on('-n name', '--name name', 'Host name') { |h| optioner.hostname h }
8
- end
9
-
10
- o.loaded_clouds.each do |cloud|
11
-
12
- with_cloud(cloud) do
13
-
14
- # ruby /var/lib/gems/1.8/bin/server-start-client
15
- already_running = %x[ps aux | grep beam | grep -v grep | grep client]
16
- if already_running.chomp.empty?
17
-
18
- boot_file = "#{Messenger.append_dir}/pm_client_rel-0.1"
19
-
20
- Kernel.system "cd #{Messenger.append_dir} && rake build_boot_scripts" unless ::File.file?("#{boot_file}.boot") || testing
21
- command = Messenger.erl_command("client", "-boot #{boot_file} #{noshell ? "" : "-detached -heart -noshell"}", 7049, 7050)
22
- vputs "Running #{command}"
23
-
24
- Kernel.system "export HOME=/root && #{command}" unless testing
25
- end
26
- end
27
-
28
- end
29
-
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
- require "poolparty"
4
- require "poolpartycl"
5
-
6
- o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
7
- opts.on('-n name', '--name name', 'Host name') { |h| optioner.hostname h }
8
- end
9
-
10
- o.loaded_clouds.each do |cloud|
11
-
12
- with_cloud(cloud) do
13
-
14
- already_running = %x[ps aux | grep beam | grep -v grep | grep master]
15
- if already_running.chomp.empty?
16
-
17
- boot_file = "#{Messenger.append_dir}/pm_master_rel-0.1"
18
- Kernel.system ". /etc/profile && server-build-messenger" unless ::File.file?("#{boot_file}.boot") || testing
19
- command = Messenger.erl_command("master", "-boot #{boot_file} #{noshell ? "" : "-noshell -detached -heart"}")
20
- vputs "Running #{command}"
21
-
22
- Kernel.system "export HOME=/root && #{command}" unless testing
23
- end
24
- end
25
-
26
- end
@@ -1,32 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
- require "poolparty"
4
- require "poolpartycl"
5
-
6
- o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
7
- opts.on('-n name', '--name name', 'Host name') { |h| optioner.hostname h }
8
- opts.on('-l', '--no-shell', 'No shell') {optioner.noshell true}
9
- end
10
-
11
- available_monitors = PoolParty::Monitors.available_monitors
12
-
13
- @hostname = o.hostname ? o.hostname : `hostname`.chomp
14
- @hostname = "node0" if @hostname == "master" # Quick fix to make sure we have a node running on the master as well
15
-
16
- o.loaded_clouds.each do |cloud|
17
-
18
- with_cloud(cloud, {:hostname => @hostname}) do
19
- # TODO: Change this to be app specfic
20
- already_running = %x[ps aux | grep beam | grep -v grep | grep node]
21
- if already_running.chomp.empty?
22
- boot_file = "#{Messenger.append_dir}/pm_node_rel-0.1"
23
-
24
- Kernel.system ". /etc/profile && server-build-messenger" unless ::File.file?("#{boot_file}.boot") || testing
25
- command = Messenger.erl_command(hostname, "-boot #{boot_file} #{noshell ? "" : "-noshell -detached -heart"} -- #{available_monitors.join(" ")}")
26
- vputs "Running #{command}"
27
-
28
- Kernel.system "export HOME=/root && #{command}" unless testing
29
- end
30
- end
31
-
32
- end
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- ps aux | grep -v grep | grep client_service | awk '{print $2}' | xargs kill
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- ps aux | grep -v grep | grep pm_master | awk '{print $2}' | xargs kill
data/bin/server-stop-node DELETED
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- ps aux | grep -v grep | grep pm_node | awk '{print $2}' | xargs kill
@@ -1,49 +0,0 @@
1
- #!/usr/bin/env ruby
2
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
- require "poolparty"
4
- require "poolpartycl"
5
-
6
- o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
7
- opts.on('-n name', '--name name', 'Update hosts for local pool named [name]') { |p| optioner.cloudname p }
8
- end
9
-
10
- o.loaded_clouds.each do |cloud|
11
- with_cloud(cloud) do
12
- vputs "Cloud: #{name}"
13
-
14
- new_hosts_listing = returning Array.new do |arr|
15
-
16
- puts nodes(:status => "running")
17
-
18
- nodes(:status => "running").each do |ri|
19
- vputs ri.hosts_file_listing_for(self)
20
- arr << ri.hosts_file_listing_for(self)
21
- end
22
- other_clouds.each do |other|
23
- other.nodes(:status => "running").each do |ri|
24
- vputs ri.hosts_file_listing_for(self)
25
- arr << ri.hosts_file_listing_for(self)
26
- end
27
- end
28
- end.join("\n")
29
-
30
- if testing
31
- puts new_hosts_listing
32
- else
33
- new_hosts_file = "#{Default.manifest_path}/classes/hosts.pp"
34
-
35
- arr = returning Array.new do |arr|
36
- new_hosts_listing.split(/\n/).each do |line|
37
- parts = line.split(/\t/).map {|a| a.chomp }
38
- ip,hostname,aliases = parts[0], parts[1], parts[2..-1]
39
- vputs "ip: #{ip} for #{hostname} as #{aliases}"
40
- h = PoolParty::Resources::Host.new(:name => hostname, :ip => Resolv::DNS.new.getaddress(ip).to_s, :alias => aliases)
41
- arr << h.to_string
42
- end
43
- end
44
-
45
- ::File.open(new_hosts_file, "w+") {|f| f << arr.join("\n") }
46
- end
47
-
48
- end
49
- end
@@ -1,54 +0,0 @@
1
- $:.unshift(File.join(File.dirname(__FILE__)))
2
- require "poolparty"
3
- require "poolpartycl"
4
-
5
- module PoolParty
6
- module Capistrano
7
-
8
- $cap_clouds = {}
9
-
10
- def set_poolparty_file(file)
11
- load_pool file
12
- end
13
-
14
- def set_cloud(name)
15
- cld = PoolParty::Cloud.cloud(name)
16
- if cld && !cloud_retrieved_already?
17
- $cap_clouds[name] = cld
18
- @cloud = cld
19
- instance_eval <<-EOE
20
- ssh_options[:keys] = [ '#{cld.full_keypair_path}' ]
21
- set :user, '#{cld.user}'
22
- set :username, "#{cld.user}"
23
- ssh_options[:forward_agent] = true
24
- EOE
25
- end
26
- cld
27
- end
28
-
29
- def cloud_retrieved_already?
30
- $cap_clouds.key?(name)
31
- end
32
- def get_cloud(name)
33
- set_cloud(name)
34
- end
35
-
36
- # Get the master ip for the cloud to set in the deploy.rb file
37
- def cloud_master(name)
38
- get_cloud(name).ip
39
- end
40
-
41
- def set_role_for_all_instances(role, name)
42
- ips = get_cloud(name).nodes(:status => "running").map {|ri| ri.ip }
43
- ips.each {|ip| send :role, role.to_sym, "#{ip}"}
44
- end
45
- end
46
- end
47
-
48
- module Capistrano
49
- class Configuration
50
- include ::PoolParty::Capistrano
51
-
52
- # Dir["#{::File.dirname(__FILE__)}/capistrano/*.rb"].each {|f| pload f }
53
- end
54
- end
@@ -1,10 +0,0 @@
1
- Capistrano::Configuration.instance(:must_exist).load do
2
- namespace(:cloud_tasks) do
3
- desc "List running clouds"
4
- task :list do
5
- cmd = "cloud-list -n #{cloud.name}"
6
- puts cmd
7
- # %x[cmd]
8
- end
9
- end
10
- end
@@ -1,5 +0,0 @@
1
- Your cloud is launching
2
- -----------------------
3
- Your master's ip address is: :master_ip
4
-
5
- Depending on how your cloud is setup, this process may take a while.
@@ -1,57 +0,0 @@
1
- # TODO: Deprecate this file
2
-
3
- =begin rdoc
4
- The connection to the messenger from poolparty, the client.
5
-
6
- This class will setup a socket connection to the master's client
7
- at the messenger_client_port
8
- =end
9
- module PoolParty
10
- module Messenger
11
- def with_socket(testing=false, &block)
12
- host = testing ? "localhost" : (master.ip)
13
- vputs "Pinging #{host} with the messenger"
14
- socket = TCPSocket.open(host, Default.messenger_client_port)
15
- out = yield(socket)
16
- socket.close
17
- out
18
- end
19
- # TODO: Fix cookie setting
20
- def self.erl_command(hostname, extra="", min_ports=7000, max_ports=7050)
21
- command_line_opts = "-cookie -pa #{append_dir}/ebin -kernel inet_dist_listen_min #{min_ports} inet_dist_listen_max #{max_ports} -sname #{hostname}"
22
-
23
- "erl #{command_line_opts} #{extra}"
24
- end
25
-
26
- def self.append_dir
27
- ::File.expand_path(::File.join( ::File.dirname(__FILE__), "..", "..", "erlang/messenger" ))
28
- end
29
-
30
- def messenger_send!(msg="get_current_load cpu", testing=false)
31
- with_socket(testing) do |sock|
32
- sock.send(msg, 0)
33
- @str = sock.recv(2000)
34
- end
35
- vputs "Received #{@str} from #{msg}"
36
- @str
37
- end
38
-
39
- def messenger_cast!(msg="force_reconfig")
40
- with_socket do |sock|
41
- sock.send(msg, 0)
42
- end
43
- end
44
-
45
- def self.messenger_send!(cmd="", testing=false)
46
- command = Messenger.erl_command("client#{Time.now.to_i}", "-s pm_client -run pm_client #{cmd} -s erlang halt -noshell")
47
- testing ? command : %x[#{command}]
48
- end
49
-
50
- # Helper methods
51
- def self.startup_remote_messenger(hostname, testing=false)
52
- # messenger_send!("")
53
- # testing ? command : %x[#{command}]
54
- end
55
-
56
- end
57
- end
@@ -1,28 +0,0 @@
1
- module PoolParty
2
- class Rsyncmirror
3
-
4
- virtual_resource(:rsyncmirror) do
5
-
6
- def loaded(opts={})
7
- execute_on_node do
8
- @dir = dir || name
9
- has_exec(opts.merge({:command => "#{cloud.remote_rsync_command} --no-implied-dirs --delete-excluded #{Default.user}@master:#{@dir}/ #{@dir}/".safe_quote, :name => "rsync-#{name}"}))
10
- end
11
- end
12
-
13
- # Since git is not a native type, we have to say which core resource
14
- # it is using to be able to require it
15
- def class_type_name
16
- "exec"
17
- end
18
-
19
- # Because we are requiring an exec, instead of a built-in package of the git, we have to overload
20
- # the to_s method and prepend it with the same name as above
21
- def key
22
- "rsync-#{name}"
23
- end
24
-
25
- end
26
-
27
- end
28
- end
@@ -1,46 +0,0 @@
1
- module PoolParty
2
- def working_conditional
3
- @working_conditional ||= []
4
- end
5
-
6
- def case_of o, &block
7
- c = Conditional.new({:name => "case_of_#{o}", :attribute => o}, &block)
8
- add_service c
9
- c
10
- end
11
-
12
- class Conditional < PoolParty::Service
13
- default_options({})
14
-
15
- def initialize(opts={}, &block)
16
- super(opts, &block)
17
- dsl_options(opts)
18
- options.freeze
19
- end
20
-
21
- def when_is o, &block
22
- add(o, &block)
23
- end
24
- def otherwise &block
25
- add(nil, &block)
26
- end
27
-
28
- def add(o, &block)
29
- service = PoolParty::Service.new(&block)
30
- obj = (o ? o : :default).to_sym
31
- when_statements.merge!({obj => service})
32
- end
33
-
34
- def when_statements
35
- @when_statement ||= {}
36
- end
37
- def to_properties_hash
38
- {
39
- :options => {:variable => (dsl_options.attribute)},
40
- :resources => {},
41
- :services => {:control_statements => when_statements}
42
- }
43
- end
44
- end
45
-
46
- end
@@ -1,31 +0,0 @@
1
- ["core", "spec"].each do |dir|
2
- Dir[File.join(File.dirname(__FILE__), "spec", dir, "*.rb")].each {|f| require f}
3
- end
4
-
5
- class TestCloudClass < PoolParty::Cloud::Cloud
6
- def build_test_manifest
7
- returning Array.new do |arr|
8
-
9
- services.each do |service|
10
- service.options.merge!(:name => service.name)
11
- classpackage_with_self(service)
12
- end
13
-
14
- global_classpackages.each do |cls|
15
- arr << cls.to_string
16
- end
17
-
18
- end.join("\n")
19
- end
20
- end
21
-
22
- def new_test_cloud(&block)
23
- TestCloudClass.new(:test_cloud, &block)
24
- end
25
-
26
- def load_test_cloud(name, poolfile=nil)
27
- PoolParty::Script.inflate_file poolfile
28
- blk = cloud(name).stored_block.dup
29
- PoolParty::Pool.reset!
30
- new_test_cloud &blk
31
- end