auser-poolparty 0.2.6 → 0.2.8

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/Manifest.txt CHANGED
@@ -103,6 +103,7 @@ lib/poolparty/pool/resources/package.rb
103
103
  lib/poolparty/pool/resources/remote_file.rb
104
104
  lib/poolparty/pool/resources/service.rb
105
105
  lib/poolparty/pool/resources/sshkey.rb
106
+ lib/poolparty/pool/resources/symlink.rb
106
107
  lib/poolparty/pool/resources/variable.rb
107
108
  lib/poolparty/pool/script.rb
108
109
  lib/poolparty/templates/authkeys
@@ -174,6 +175,7 @@ spec/poolparty/pool/resources/package_spec.rb
174
175
  spec/poolparty/pool/resources/remote_file_spec.rb
175
176
  spec/poolparty/pool/resources/service_spec.rb
176
177
  spec/poolparty/pool/resources/sshkey_spec.rb
178
+ spec/poolparty/pool/resources/symlink_spec.rb
177
179
  spec/poolparty/pool/resources/variable_spec.rb
178
180
  spec/poolparty/pool/script_spec.rb
179
181
  spec/poolparty/pool/test_plugins/sshkey_test
data/bin/cloud CHANGED
@@ -3,18 +3,27 @@ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
3
  require "poolparty"
4
4
  require "poolpartycl"
5
5
 
6
- # Get the git-style program action
6
+ # # Get the git-style program action
7
7
  # o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
8
8
  # opts.on('-n [name]','--name [name]', 'Binary to run') { |o| optioner.name o }
9
+ #
10
+ # opts.banner = <<-EOB
11
+ # Usage: cloud <specfile> <action> <options>
12
+ # Cloud actions:
13
+ # #{Binary.list_binaries_for("cloud")}
14
+ # EOB
9
15
  # end
10
16
 
11
17
  name = ARGV.shift
12
18
 
13
19
  # If there was no program action given
14
20
  if !name || name == "-h" || name == "--help"
15
- puts "Usage: cloud <specfile> <action> <options>"
16
- puts "Cloud actions:"
17
- puts Binary.list_binaries_for("cloud")
21
+ puts "Binary required"
22
+ puts <<-EOB
23
+ Usage: cloud <specfile> <action> <options>
24
+ Cloud actions:
25
+ #{Binary.list_binaries_for("cloud")}
26
+ EOB
18
27
  exit
19
28
  end
20
29
 
data/bin/cloud-ssh CHANGED
@@ -8,11 +8,6 @@ o = PoolParty::Optioner.new(ARGV) do |opts, optioner|
8
8
  end
9
9
  load_pool(o.spec || Binary.get_existing_spec_location)
10
10
 
11
- unless o.cloudname && clouds.keys.size > 1
12
- @cloud = cloud(o.cloudname.downcase.to_sym)
13
- else
14
- puts "Error: You must indicate a cloud from which your instance is from"
15
- exit(0)
16
- end
11
+ @cloud = o.cloudname ? cloud(o.cloudname.downcase.to_sym) : cloud(clouds.keys.first)
17
12
 
18
- instance = @cloud.ssh_into_instance_number( o.num.to_i || 0 )
13
+ instance = @cloud.ssh_into_instance_number( o.num.to_i || 0 ) if @cloud
data/bin/cloud-start CHANGED
@@ -23,7 +23,6 @@ load_pool(o.spec || Binary.get_existing_spec_location)
23
23
  puts("\tNot launching while in testing mode")
24
24
  else
25
25
  launch_and_configure_master!
26
- # run_command_on("puppetd --test", master)
27
26
  end
28
27
  end
29
28
  clear_base_directory unless testing
@@ -14,8 +14,9 @@ module PoolParty
14
14
  # variables for the templates
15
15
  has_variable({:name => "ha_nodenames", :value => list_of_node_names})
16
16
  has_variable({:name => "ha_node_ips", :value => list_of_node_ips})
17
+ has_variable({:name => "ha_timeout", :value => (self.respond_to?(:timeout) ? timeout : "5s")})
17
18
  has_variable({:name => "ha_port", :value => (self.respond_to?(:port) ? port : Base.port)})
18
-
19
+
19
20
  # These can also be passed in via hash
20
21
  has_remotefile(:name => "/etc/ha.d/ha.cf") do
21
22
  mode 444
@@ -5,10 +5,10 @@ module PoolParty
5
5
  def enable
6
6
  has_package(:name => "erlang")
7
7
  # These should be installed automagically by poolparty, but just in case
8
- has_gempackage(:name => "activesupport")
9
- has_gempackage(:name => "logging")
10
- has_gempackage(:name => "hoe")
11
- has_gempackage(:name => "xml-simple")
8
+ has_gempackage(:name => "activesupport", :requires => package(:name => "rubygems"))
9
+ has_gempackage(:name => "logging", :requires => package(:name => "rubygems"))
10
+ has_gempackage(:name => "hoe", :requires => package(:name => "rubygems"))
11
+ has_gempackage(:name => "xml-simple", :requires => package(:name => "rubygems"))
12
12
  has_gempackage(:name => "ParseTree", :version => "2.2.0", :requires => gempackage(:name => "hoe"))
13
13
 
14
14
  has_gempackage(:name => "RubyInline", :requires => gempackage(:name => "ParseTree"))
@@ -24,8 +24,9 @@ module PoolParty
24
24
  has_host({:name => "#{ri.name}", :ip => ri.ip })
25
25
  end
26
26
 
27
- has_cron({:command => "cloud-maintain"}) do
28
- minute "*/5"
27
+ # -n #{parent.name}
28
+ has_cron({:command => ". /etc/profile && which cloud-maintain | /bin/sh"}) do
29
+ minute "*/2"
29
30
  end
30
31
  # has_host(:name => "puppet", :ip => (self.respond_to?(:master) ? self : parent).master.ip)
31
32
  end
@@ -11,7 +11,7 @@ module PoolParty
11
11
  has_package(:name => "libruby1.8")
12
12
  has_package(:name => "ruby1.8-dev")
13
13
  has_package(:name => "ruby1.8")
14
- has_package(:name => "rubygems")
14
+ # has_package(:name => "rubygems")
15
15
 
16
16
  has_line_in_file("export PATH=$PATH:/var/lib/gems/1.8/bin/", "/etc/profile")
17
17
 
@@ -30,6 +30,8 @@ class String
30
30
  def nice_runnable(quite=true)
31
31
  self.split(/ && /).join("\n")
32
32
  end
33
+ # This is the method we use to turn the options into a string to build the main
34
+ # manifests
33
35
  def to_option_string(ns=[])
34
36
  a_template = (self =~ /template/) == 0
35
37
  a_service = self =~ /^[A-Z][a-zA-Z]*\[[a-zA-Z0-9\-\.\"\'_\$\{\}\/]*\]/
@@ -74,7 +74,7 @@ module PoolParty
74
74
  puts "Logging on to #{@instance.ip}"
75
75
  @cloud.rsync_storage_files_to(@instance)
76
76
 
77
- cmd = "cd #{Base.remote_storage_path}/#{Base.tmp_path} && chmod +x install_#{name}.sh && /bin/sh install_#{name}.sh && rm -rf *"
77
+ cmd = "cd #{Base.remote_storage_path}/#{Base.tmp_path} && chmod +x install_#{name}.sh && /bin/sh install_#{name}.sh && rm install_#{name}.sh"
78
78
  hide_output do
79
79
  @cloud.run_command_on(cmd, @instance)
80
80
  end
@@ -96,7 +96,7 @@ module PoolParty
96
96
  unless testing
97
97
  @cloud.rsync_storage_files_to(@instance)
98
98
 
99
- cmd = "cd #{Base.remote_storage_path}/#{Base.tmp_path} && chmod +x configure_#{name}.sh && /bin/sh configure_#{name}.sh && rm -rf *"
99
+ cmd = "cd #{Base.remote_storage_path}/#{Base.tmp_path} && chmod +x configure_#{name}.sh && /bin/sh configure_#{name}.sh && rm configure_#{name}.sh"
100
100
  @cloud.run_command_on(cmd, @instance)
101
101
  end
102
102
  end
@@ -136,6 +136,7 @@ module PoolParty
136
136
  def default_install_tasks
137
137
  [
138
138
  upgrade_system,
139
+ fix_rubygems,
139
140
  install_puppet_master,
140
141
  custom_install_tasks
141
142
  ] << install_tasks
@@ -203,6 +204,10 @@ module PoolParty
203
204
  def template_directory
204
205
  File.join(File.dirname(__FILE__), "..", "templates")
205
206
  end
207
+
208
+ def fix_rubygems
209
+ "echo '#{open(::File.join(template_directory, "gem")).read}' > /usr/bin/gem"
210
+ end
206
211
 
207
212
  def create_local_node
208
213
  str = <<-EOS
@@ -238,7 +243,7 @@ module PoolParty
238
243
 
239
244
  def create_poolparty_manifest
240
245
  <<-EOS
241
- mv #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes
246
+ cp #{Base.remote_storage_path}/poolparty.pp /etc/puppet/manifests/classes
242
247
  EOS
243
248
  end
244
249
  end
@@ -59,7 +59,7 @@ echo "import 'nodes/*.pp'" > /etc/puppet/manifests/site.pp
59
59
  echo "import 'classes/*.pp'" >> /etc/puppet/manifests/site.pp
60
60
  mkdir -p /etc/puppet/manifests/nodes
61
61
  mkdir -p /etc/puppet/manifests/classes
62
- mv #{Base.remote_storage_path}/#{Base.tmp_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
62
+ cp #{Base.remote_storage_path}/#{Base.tmp_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
63
63
  EOS
64
64
  end
65
65
 
@@ -104,16 +104,16 @@ node "#{ri.name}" inherits default {}
104
104
  def move_templates
105
105
  <<-EOS
106
106
  mkdir -p #{Base.template_path}
107
- mv #{Base.remote_storage_path}/#{Base.template_directory}/* #{Base.template_path}
107
+ cp #{Base.remote_storage_path}/#{Base.template_directory}/* #{Base.template_path}
108
108
  EOS
109
109
  end
110
110
 
111
111
  def create_poolparty_manifest
112
112
  <<-EOS
113
- mv #{Base.remote_storage_path}/#{Base.tmp_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
114
- mv #{Base.remote_storage_path}/#{Base.tmp_path}/#{Base.key_file_locations.first} "#{Base.base_config_directory}/.ppkeys"
115
- mv #{Base.remote_storage_path}/#{Base.tmp_path}/#{Base.default_specfile_name} #{Base.base_config_directory}/#{Base.default_specfile_name}
116
- mv #{Base.remote_storage_path}/#{Base.tmp_path}/#{@cloud.full_keypair_name} #{@cloud.remote_keypair_path}
113
+ cp #{Base.remote_storage_path}/#{Base.tmp_path}/poolparty.pp /etc/puppet/manifests/classes/poolparty.pp
114
+ cp #{Base.remote_storage_path}/#{Base.tmp_path}/#{Base.key_file_locations.first} "#{Base.base_config_directory}/.ppkeys"
115
+ cp #{Base.remote_storage_path}/#{Base.tmp_path}/#{Base.default_specfile_name} #{Base.base_config_directory}/#{Base.default_specfile_name}
116
+ cp #{Base.remote_storage_path}/#{Base.tmp_path}/#{@cloud.full_keypair_name} #{@cloud.remote_keypair_path}
117
117
  EOS
118
118
  end
119
119
 
@@ -127,8 +127,7 @@ puppetmasterd --verbose
127
127
 
128
128
  def restart_puppetd
129
129
  <<-EOS
130
- puppetd --test
131
- puppetd --listen --fqdn=#{@instance.name}
130
+ puppetd --listen --fqdn #{@instance.name}
132
131
  EOS
133
132
  end
134
133
  end
@@ -17,7 +17,6 @@ module PoolParty
17
17
 
18
18
  def setup_puppet
19
19
  <<-EOE
20
- puppetd --mkusers
21
20
  if [ -z "$(grep -v '#' /etc/hosts | grep 'master')" ]; then echo "#{master_ip} puppet master" >> /etc/hosts; else echo "host already set"; fi
22
21
  mv #{Base.remote_storage_path}/#{Base.tmp_path}/namespaceauth.conf /etc/puppet/namespaceauth.conf
23
22
  EOE
@@ -25,13 +24,14 @@ module PoolParty
25
24
 
26
25
  def setup_configs
27
26
  <<-EOS
27
+ /etc/init.d/puppetmasterd stop
28
28
  echo "#{open(File.join(template_directory, "puppet.conf")).read}" > /etc/puppet/puppet.conf
29
29
  EOS
30
30
  end
31
31
 
32
32
  def start_puppet
33
33
  <<-EOS
34
- puppetd --listen --fqdn=#{@instance.name}
34
+ puppetd --listen --fqdn #{@instance.name}
35
35
  EOS
36
36
  end
37
37
 
@@ -14,12 +14,12 @@ module PoolParty
14
14
 
15
15
  def has_git_repos
16
16
  with_options(:requires => 'Package["git-core"]') do
17
- has_directory(:name => "#{path}")
18
-
17
+ # has_directory(:name => "#{path}")
18
+
19
19
  exec({:name => "git-#{name}"}) do
20
20
  command @parent.user ? "git clone #{@parent.user}@#{@parent.source} #{@parent.path}" : "git clone #{@parent.source} #{@parent.path}"
21
21
  cwd "#{::File.dirname(@parent.path) if @parent.path}"
22
- creates "#{@parent.path}"
22
+ creates "#{@parent.path}/.git"
23
23
  end
24
24
 
25
25
  exec(:name => "git-update-#{name}", :cwd => "#{path}") do
@@ -27,11 +27,6 @@ module PoolParty
27
27
  requires "Exec['git-#{@parent.name}']"
28
28
  end
29
29
 
30
- if symlink
31
- has_file(:name => "#{symlink}") do
32
- ensures @parent.path
33
- end
34
- end
35
30
  end
36
31
  end
37
32
 
@@ -23,8 +23,7 @@ module PoolParty
23
23
  :default_specfile_name => "pool.spec",
24
24
  :port => "80",
25
25
  :forwarding_port => "8080",
26
- :proxy_mode => "http",
27
- :pool_logger_location => File.join(Dir.pwd, "logs"),
26
+ :proxy_mode => "http",
28
27
  # EC2 Options
29
28
  :ami => "ami-1cd73375"
30
29
  })
@@ -70,6 +69,10 @@ module PoolParty
70
69
  ]
71
70
  end
72
71
 
72
+ def pool_logger_location
73
+ File.join(Dir.pwd, "logs")
74
+ end
75
+
73
76
  end
74
77
  end
75
78
  end
@@ -107,10 +107,11 @@ module PoolParty
107
107
 
108
108
  # Configuration files
109
109
  def build_manifest
110
+ @build_manifest ||= build_from_existing_file
110
111
  unless @build_manifest
111
112
  reset_resources!
112
113
  add_poolparty_base_requirements
113
-
114
+
114
115
  @build_manifest = returning Array.new do |str|
115
116
 
116
117
  str << resources_string_from_resources(resources)
@@ -130,6 +131,14 @@ module PoolParty
130
131
  @build_manifest
131
132
  end
132
133
 
134
+ def build_from_existing_file
135
+ if ::FileTest.file?("/etc/puppet/manifests/classes/poolparty.pp")
136
+ open("/etc/puppet/manifests/classes/poolparty.pp").read
137
+ else
138
+ nil
139
+ end
140
+ end
141
+
133
142
  # To allow the remote instances to do their job,
134
143
  # they need a few options to run, these are the required options
135
144
  # to be saved on the remote "master" machine
@@ -134,6 +134,12 @@ module PoolParty
134
134
  def absent
135
135
  "absent"
136
136
  end
137
+ def cancel(*args)
138
+ options[:cancelled] = args.empty? ? true : args[0]
139
+ end
140
+ def cancelled?
141
+ options[:cancelled] || false
142
+ end
137
143
 
138
144
  # Give us a template to work with on the resource
139
145
  # Make sure this template is moved to the tmp directory as well
@@ -206,24 +212,24 @@ module PoolParty
206
212
  def to_string(prev="")
207
213
  opts = get_modified_options
208
214
  returning Array.new do |output|
215
+ unless cancelled?
216
+ output << @prestring || ""
209
217
 
210
- output << @prestring || ""
218
+ if resources && !resources.empty?
219
+ @cp = classpackage_with_self(self)
220
+ output << @cp.to_string
221
+ output << "include #{@cp.name.sanitize}"
222
+ end
211
223
 
212
- if resources && !resources.empty?
213
- @cp = classpackage_with_self(self)
214
- output << @cp.to_string
215
- output << "include #{@cp.name.sanitize}"
216
- end
224
+ unless virtual_resource?
225
+ output << "#{prev}#{class_type_name} {"
226
+ output << "#{prev}\"#{self.key}\":"
227
+ output << opts.flush_out("#{prev*2}").join(",\n")
228
+ output << "#{prev}}"
229
+ end
217
230
 
218
- unless virtual_resource?
219
- output << "#{prev}#{class_type_name} {"
220
- output << "#{prev}\"#{self.key}\":"
221
- output << opts.flush_out("#{prev*2}").join(",\n")
222
- output << "#{prev}}"
231
+ output << @poststring || ""
223
232
  end
224
-
225
- output << @poststring || ""
226
-
227
233
  end.join("\n")
228
234
  end
229
235
 
@@ -1,7 +1,7 @@
1
1
  module PoolParty
2
2
  module Resources
3
3
 
4
- class Remotefile < File
4
+ class Remotefile < Resource
5
5
  # Not really my favorite of lines
6
6
  include PoolParty::Configurable
7
7
 
@@ -16,6 +16,10 @@ module PoolParty
16
16
  "file"
17
17
  end
18
18
 
19
+ def source(arg=nil)
20
+ arg ? options[:source] = arg : "#{Base.fileserver_base}/#{::File.basename(name)}"
21
+ end
22
+
19
23
  end
20
24
 
21
25
  end
@@ -0,0 +1,21 @@
1
+ module PoolParty
2
+ module Resources
3
+
4
+ class Symlink < Resource
5
+
6
+ def from(*args)
7
+ options.merge!(:ensure => args[0])
8
+ end
9
+
10
+ def class_type_name
11
+ "file"
12
+ end
13
+
14
+ def disallowed_options
15
+ [:name]
16
+ end
17
+
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,54 @@
1
+ <?xml version="1.0" ?>
2
+ <cib admin_epoch="0" epoch="0" num_updates="0">
3
+ <configuration>
4
+ <crm_config>
5
+ <cluster_property_set id="cib-bootstrap-options">
6
+ <attributes>
7
+ <nvpair id="cib-bootstrap-options-symmetric-cluster" name="symmetric-cluster" value="true"/>
8
+ <nvpair id="cib-bootstrap-options-no-quorum-policy" name="no-quorum-policy" value="stop"/>
9
+ <nvpair id="cib-bootstrap-options-default-resource-stickiness" name="default-resource-stickiness" value="0"/>
10
+ <nvpair id="cib-bootstrap-options-default-resource-failure-stickiness" name="default-resource-failure-stickiness" value="0"/>
11
+ <nvpair id="cib-bootstrap-options-stonith-enabled" name="stonith-enabled" value="false"/>
12
+ <nvpair id="cib-bootstrap-options-stonith-action" name="stonith-action" value="reboot"/>
13
+ <nvpair id="cib-bootstrap-options-startup-fencing" name="startup-fencing" value="true"/>
14
+ <nvpair id="cib-bootstrap-options-stop-orphan-resources" name="stop-orphan-resources" value="true"/>
15
+ <nvpair id="cib-bootstrap-options-stop-orphan-actions" name="stop-orphan-actions" value="true"/>
16
+ <nvpair id="cib-bootstrap-options-remove-after-stop" name="remove-after-stop" value="false"/>
17
+ <nvpair id="cib-bootstrap-options-short-resource-names" name="short-resource-names" value="true"/>
18
+ <nvpair id="cib-bootstrap-options-transition-idle-timeout" name="transition-idle-timeout" value="5min"/>
19
+ <nvpair id="cib-bootstrap-options-default-action-timeout" name="default-action-timeout" value="20s"/>
20
+ <nvpair id="cib-bootstrap-options-is-managed-default" name="is-managed-default" value="true"/>
21
+ <nvpair id="cib-bootstrap-options-cluster-delay" name="cluster-delay" value="60s"/>
22
+ <nvpair id="cib-bootstrap-options-pe-error-series-max" name="pe-error-series-max" value="-1"/>
23
+ <nvpair id="cib-bootstrap-options-pe-warn-series-max" name="pe-warn-series-max" value="-1"/>
24
+ <nvpair id="cib-bootstrap-options-pe-input-series-max" name="pe-input-series-max" value="-1"/>
25
+ </attributes>
26
+ </cluster_property_set>
27
+ </crm_config>
28
+ <nodes/>
29
+ <resources>
30
+ <% ha_nodenames.each_with_index do |name, index| %>
31
+ <primitive class="ocf" id="IPaddr_<%= name %>" provider="heartbeat" type="IPaddr">
32
+ <operations>
33
+ <op id="IPaddr_<%= name %>_mon" interval="5s" name="monitor" timeout="<%= ha_timeout %>"/>
34
+ </operations>
35
+ <instance_attributes id="IPaddr_<%= name %>_inst_attr">
36
+ <attributes>
37
+ <nvpair id="IPaddr_<%= name %>_attr_0" name="ip" value="<%= ha_node_ips[index] %>"/>
38
+ </attributes>
39
+ </instance_attributes>
40
+ </primitive>
41
+ <% end %>
42
+ </resources>
43
+ <constraints>
44
+ <% ha_nodenames.each_with_index do |name, index| %>
45
+ <rsc_location id="rsc_location_IPaddr_<%= name %>" rsc="IPaddr_<%= name %>">
46
+ <rule id="prefered_location_IPaddr_<%= name %>" score="100">
47
+ <expression attribute="#uname" id="prefered_location_IPaddr_<%= name %>_expr" operation="eq" value="<%= name %>"/>
48
+ </rule>
49
+ </rsc_location>
50
+ <% end %>
51
+ </constraints>
52
+ </configuration>
53
+ <status/>
54
+ </cib>
@@ -3,8 +3,10 @@ keepalive 2 # Time inbetween heartbeats
3
3
  deadtime 32 # wait 32 seconds before declaring dead
4
4
  warntime 16 # issue a warning halfway through
5
5
  initdead 60 # Don't boot instances between 60 seconds of each other
6
- auto_failback on
6
+ logfacility daemon # Log to syslog as facility "daemon"
7
+ auto_failback off
7
8
  use_logd yes
8
- crm on
9
+ bcast eth0
10
+ crm respawn
9
11
 
10
12
  node <%= ha_nodenames.join(" ") %>
@@ -2,7 +2,7 @@ module PoolParty
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 6
5
+ TINY = 8
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/poolparty.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{poolparty}
3
- s.version = "0.2.6"
3
+ s.version = "0.2.8"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
6
  s.authors = ["Ari Lerner"]
7
- s.date = %q{2008-10-14}
7
+ s.date = %q{2008-10-15}
8
8
  s.description = %q{Self-healing, auto-scaling cloud computing tool}
9
9
  s.email = ["ari.lerner@citrusbyte.com"]
10
10
  s.executables = ["cloud", "cloud-add-keypair", "cloud-configure", "cloud-contract", "cloud-expand", "cloud-list", "cloud-maintain", "cloud-osxcopy", "cloud-provision", "cloud-refresh", "cloud-ssh", "cloud-start", "cloud-terminate", "pool", "pool-console", "pool-describe", "pool-list", "pool-provision", "pool-spec", "pool-start", "pool-start-monitor"]
11
11
  s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "website/index.txt"]
12
- s.files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "bin/cloud", "bin/cloud-add-keypair", "bin/cloud-configure", "bin/cloud-contract", "bin/cloud-expand", "bin/cloud-list", "bin/cloud-maintain", "bin/cloud-osxcopy", "bin/cloud-provision", "bin/cloud-refresh", "bin/cloud-ssh", "bin/cloud-start", "bin/cloud-terminate", "bin/pool", "bin/pool-console", "bin/pool-describe", "bin/pool-list", "bin/pool-provision", "bin/pool-spec", "bin/pool-start", "bin/pool-start-monitor", "config/hoe.rb", "config/requirements.rb", "examples/basic.rb", "examples/plugin_without_plugin_directory.rb", "examples/poolparty.rb", "examples/with_apache_plugin.rb", "generators/poolspec/USAGE", "generators/poolspec/poolspec_generator.rb", "generators/poolspec/templates/pool_spec_template.erb", "lib/erlang/eb_server.erl", "lib/poolparty.rb", "lib/poolparty/base_packages/haproxy.rb", "lib/poolparty/base_packages/heartbeat.rb", "lib/poolparty/base_packages/poolparty.rb", "lib/poolparty/base_packages/ruby.rb", "lib/poolparty/core/array.rb", "lib/poolparty/core/exception.rb", "lib/poolparty/core/float.rb", "lib/poolparty/core/hash.rb", "lib/poolparty/core/kernel.rb", "lib/poolparty/core/module.rb", "lib/poolparty/core/my_open_struct.rb", "lib/poolparty/core/object.rb", "lib/poolparty/core/proc.rb", "lib/poolparty/core/string.rb", "lib/poolparty/core/symbol.rb", "lib/poolparty/core/time.rb", "lib/poolparty/exceptions/RemoteException.rb", "lib/poolparty/exceptions/ResourceException.rb", "lib/poolparty/exceptions/RuntimeException.rb", "lib/poolparty/exceptions/SpecException.rb", "lib/poolparty/exceptions/TemplateNotFound.rb", "lib/poolparty/helpers/binary.rb", "lib/poolparty/helpers/console.rb", "lib/poolparty/helpers/display.rb", "lib/poolparty/helpers/optioner.rb", "lib/poolparty/helpers/provisioner_base.rb", "lib/poolparty/helpers/provisioners/master.rb", "lib/poolparty/helpers/provisioners/slave.rb", "lib/poolparty/modules/cloud_resourcer.rb", "lib/poolparty/modules/configurable.rb", "lib/poolparty/modules/definable_resource.rb", "lib/poolparty/modules/file_writer.rb", "lib/poolparty/modules/method_missing_sugar.rb", "lib/poolparty/modules/output.rb", "lib/poolparty/modules/pretty_printer.rb", "lib/poolparty/modules/s3_string.rb", "lib/poolparty/modules/safe_instance.rb", "lib/poolparty/monitors/base_monitor.rb", "lib/poolparty/net/remote.rb", "lib/poolparty/net/remote_bases/ec2.rb", "lib/poolparty/net/remote_instance.rb", "lib/poolparty/net/remoter.rb", "lib/poolparty/net/remoter_base.rb", "lib/poolparty/plugins/gem_package.rb", "lib/poolparty/plugins/git.rb", "lib/poolparty/plugins/line.rb", "lib/poolparty/plugins/svn.rb", "lib/poolparty/pool/base.rb", "lib/poolparty/pool/cloud.rb", "lib/poolparty/pool/custom_resource.rb", "lib/poolparty/pool/loggable.rb", "lib/poolparty/pool/plugin.rb", "lib/poolparty/pool/plugin_model.rb", "lib/poolparty/pool/pool.rb", "lib/poolparty/pool/resource.rb", "lib/poolparty/pool/resources/class_package.rb", "lib/poolparty/pool/resources/conditional.rb", "lib/poolparty/pool/resources/cron.rb", "lib/poolparty/pool/resources/directory.rb", "lib/poolparty/pool/resources/exec.rb", "lib/poolparty/pool/resources/file.rb", "lib/poolparty/pool/resources/gem.rb", "lib/poolparty/pool/resources/host.rb", "lib/poolparty/pool/resources/package.rb", "lib/poolparty/pool/resources/remote_file.rb", "lib/poolparty/pool/resources/service.rb", "lib/poolparty/pool/resources/sshkey.rb", "lib/poolparty/pool/resources/variable.rb", "lib/poolparty/pool/script.rb", "lib/poolparty/templates/authkeys", "lib/poolparty/templates/cib.xml", "lib/poolparty/templates/fileserver.conf", "lib/poolparty/templates/gem", "lib/poolparty/templates/ha.cf", "lib/poolparty/templates/haproxy.conf", "lib/poolparty/templates/namespaceauth.conf", "lib/poolparty/templates/puppet.conf", "lib/poolparty/version.rb", "lib/poolpartycl.rb", "poolparty.gemspec", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "spec/poolparty/base_packages/haproxy_spec.rb", "spec/poolparty/base_packages/heartbeat_spec.rb", "spec/poolparty/bin/console_spec.rb", "spec/poolparty/core/array_spec.rb", "spec/poolparty/core/float.rb", "spec/poolparty/core/hash_spec.rb", "spec/poolparty/core/kernel_spec.rb", "spec/poolparty/core/module_spec.rb", "spec/poolparty/core/object_spec.rb", "spec/poolparty/core/string_spec.rb", "spec/poolparty/core/time_spec.rb", "spec/poolparty/helpers/binary_spec.rb", "spec/poolparty/helpers/display_spec.rb", "spec/poolparty/helpers/optioner_spec.rb", "spec/poolparty/helpers/provisioner_base_spec.rb", "spec/poolparty/helpers/provisioners/master_spec.rb", "spec/poolparty/helpers/provisioners/slave_spec.rb", "spec/poolparty/modules/cloud_resourcer_spec.rb", "spec/poolparty/modules/configurable_spec.rb", "spec/poolparty/modules/definable_resource.rb", "spec/poolparty/modules/file_writer_spec.rb", "spec/poolparty/modules/s3_string_spec.rb", "spec/poolparty/modules/tmp/willy/nilly.rb", "spec/poolparty/net/remote_bases/ec2_spec.rb", "spec/poolparty/net/remote_instance_spec.rb", "spec/poolparty/net/remote_spec.rb", "spec/poolparty/net/remoter_base_spec.rb", "spec/poolparty/net/remoter_spec.rb", "spec/poolparty/plugins/git_spec.rb", "spec/poolparty/plugins/line_spec.rb", "spec/poolparty/plugins/svn_spec.rb", "spec/poolparty/pool/base_spec.rb", "spec/poolparty/pool/cloud_spec.rb", "spec/poolparty/pool/configurers/files/ruby_basic.rb", "spec/poolparty/pool/configurers/files/ruby_plugins.rb", "spec/poolparty/pool/configurers/ruby_spec.rb", "spec/poolparty/pool/custom_resource_spec.rb", "spec/poolparty/pool/example_spec.rb", "spec/poolparty/pool/plugin_model_spec.rb", "spec/poolparty/pool/plugin_spec.rb", "spec/poolparty/pool/pool_spec.rb", "spec/poolparty/pool/resource_spec.rb", "spec/poolparty/pool/resources/class_package_spec.rb", "spec/poolparty/pool/resources/conditional_spec.rb", "spec/poolparty/pool/resources/cron_spec.rb", "spec/poolparty/pool/resources/directory_spec.rb", "spec/poolparty/pool/resources/exec_spec.rb", "spec/poolparty/pool/resources/file_spec.rb", "spec/poolparty/pool/resources/gem_spec.rb", "spec/poolparty/pool/resources/host_spec.rb", "spec/poolparty/pool/resources/package_spec.rb", "spec/poolparty/pool/resources/remote_file_spec.rb", "spec/poolparty/pool/resources/service_spec.rb", "spec/poolparty/pool/resources/sshkey_spec.rb", "spec/poolparty/pool/resources/variable_spec.rb", "spec/poolparty/pool/script_spec.rb", "spec/poolparty/pool/test_plugins/sshkey_test", "spec/poolparty/pool/test_plugins/virtual_host_template.erb", "spec/poolparty/pool/test_plugins/webserver.rb", "spec/poolparty/poolparty_spec.rb", "spec/poolparty/spec_helper.rb", "tasks/cloud.rake", "tasks/deployment.rake", "tasks/development.rake", "tasks/ec2.rake", "tasks/environment.rake", "tasks/instance.rake", "tasks/server.rake", "tasks/spec.rake", "tasks/website.rake", "test/test_generator_helper.rb", "test/test_helper.rb", "test/test_pool_spec_generator.rb", "test/test_poolparty.rb", "test_manifest.pp", "website/index.html", "website/index.txt", "website/javascripts/rounded_corners_lite.inc.js", "website/stylesheets/code.css", "website/stylesheets/screen.css", "website/template.html.erb"]
12
+ s.files = ["History.txt", "License.txt", "Manifest.txt", "PostInstall.txt", "README.txt", "Rakefile", "bin/cloud", "bin/cloud-add-keypair", "bin/cloud-configure", "bin/cloud-contract", "bin/cloud-expand", "bin/cloud-list", "bin/cloud-maintain", "bin/cloud-osxcopy", "bin/cloud-provision", "bin/cloud-refresh", "bin/cloud-ssh", "bin/cloud-start", "bin/cloud-terminate", "bin/pool", "bin/pool-console", "bin/pool-describe", "bin/pool-list", "bin/pool-provision", "bin/pool-spec", "bin/pool-start", "bin/pool-start-monitor", "config/hoe.rb", "config/requirements.rb", "examples/basic.rb", "examples/plugin_without_plugin_directory.rb", "examples/poolparty.rb", "examples/with_apache_plugin.rb", "generators/poolspec/USAGE", "generators/poolspec/poolspec_generator.rb", "generators/poolspec/templates/pool_spec_template.erb", "lib/erlang/eb_server.erl", "lib/poolparty.rb", "lib/poolparty/base_packages/haproxy.rb", "lib/poolparty/base_packages/heartbeat.rb", "lib/poolparty/base_packages/poolparty.rb", "lib/poolparty/base_packages/ruby.rb", "lib/poolparty/core/array.rb", "lib/poolparty/core/exception.rb", "lib/poolparty/core/float.rb", "lib/poolparty/core/hash.rb", "lib/poolparty/core/kernel.rb", "lib/poolparty/core/module.rb", "lib/poolparty/core/my_open_struct.rb", "lib/poolparty/core/object.rb", "lib/poolparty/core/proc.rb", "lib/poolparty/core/string.rb", "lib/poolparty/core/symbol.rb", "lib/poolparty/core/time.rb", "lib/poolparty/exceptions/RemoteException.rb", "lib/poolparty/exceptions/ResourceException.rb", "lib/poolparty/exceptions/RuntimeException.rb", "lib/poolparty/exceptions/SpecException.rb", "lib/poolparty/exceptions/TemplateNotFound.rb", "lib/poolparty/helpers/binary.rb", "lib/poolparty/helpers/console.rb", "lib/poolparty/helpers/display.rb", "lib/poolparty/helpers/optioner.rb", "lib/poolparty/helpers/provisioner_base.rb", "lib/poolparty/helpers/provisioners/master.rb", "lib/poolparty/helpers/provisioners/slave.rb", "lib/poolparty/modules/cloud_resourcer.rb", "lib/poolparty/modules/configurable.rb", "lib/poolparty/modules/definable_resource.rb", "lib/poolparty/modules/file_writer.rb", "lib/poolparty/modules/method_missing_sugar.rb", "lib/poolparty/modules/output.rb", "lib/poolparty/modules/pretty_printer.rb", "lib/poolparty/modules/s3_string.rb", "lib/poolparty/modules/safe_instance.rb", "lib/poolparty/monitors/base_monitor.rb", "lib/poolparty/net/remote.rb", "lib/poolparty/net/remote_bases/ec2.rb", "lib/poolparty/net/remote_instance.rb", "lib/poolparty/net/remoter.rb", "lib/poolparty/net/remoter_base.rb", "lib/poolparty/plugins/gem_package.rb", "lib/poolparty/plugins/git.rb", "lib/poolparty/plugins/line.rb", "lib/poolparty/plugins/svn.rb", "lib/poolparty/pool/base.rb", "lib/poolparty/pool/cloud.rb", "lib/poolparty/pool/custom_resource.rb", "lib/poolparty/pool/loggable.rb", "lib/poolparty/pool/plugin.rb", "lib/poolparty/pool/plugin_model.rb", "lib/poolparty/pool/pool.rb", "lib/poolparty/pool/resource.rb", "lib/poolparty/pool/resources/class_package.rb", "lib/poolparty/pool/resources/conditional.rb", "lib/poolparty/pool/resources/cron.rb", "lib/poolparty/pool/resources/directory.rb", "lib/poolparty/pool/resources/exec.rb", "lib/poolparty/pool/resources/file.rb", "lib/poolparty/pool/resources/gem.rb", "lib/poolparty/pool/resources/host.rb", "lib/poolparty/pool/resources/package.rb", "lib/poolparty/pool/resources/remote_file.rb", "lib/poolparty/pool/resources/service.rb", "lib/poolparty/pool/resources/sshkey.rb", "lib/poolparty/pool/resources/symlink.rb", "lib/poolparty/pool/resources/variable.rb", "lib/poolparty/pool/script.rb", "lib/poolparty/templates/authkeys", "lib/poolparty/templates/cib.xml", "lib/poolparty/templates/fileserver.conf", "lib/poolparty/templates/gem", "lib/poolparty/templates/ha.cf", "lib/poolparty/templates/haproxy.conf", "lib/poolparty/templates/namespaceauth.conf", "lib/poolparty/templates/puppet.conf", "lib/poolparty/version.rb", "lib/poolpartycl.rb", "poolparty.gemspec", "script/destroy", "script/generate", "script/txt2html", "setup.rb", "spec/poolparty/base_packages/haproxy_spec.rb", "spec/poolparty/base_packages/heartbeat_spec.rb", "spec/poolparty/bin/console_spec.rb", "spec/poolparty/core/array_spec.rb", "spec/poolparty/core/float.rb", "spec/poolparty/core/hash_spec.rb", "spec/poolparty/core/kernel_spec.rb", "spec/poolparty/core/module_spec.rb", "spec/poolparty/core/object_spec.rb", "spec/poolparty/core/string_spec.rb", "spec/poolparty/core/time_spec.rb", "spec/poolparty/helpers/binary_spec.rb", "spec/poolparty/helpers/display_spec.rb", "spec/poolparty/helpers/optioner_spec.rb", "spec/poolparty/helpers/provisioner_base_spec.rb", "spec/poolparty/helpers/provisioners/master_spec.rb", "spec/poolparty/helpers/provisioners/slave_spec.rb", "spec/poolparty/modules/cloud_resourcer_spec.rb", "spec/poolparty/modules/configurable_spec.rb", "spec/poolparty/modules/definable_resource.rb", "spec/poolparty/modules/file_writer_spec.rb", "spec/poolparty/modules/s3_string_spec.rb", "spec/poolparty/modules/tmp/willy/nilly.rb", "spec/poolparty/net/remote_bases/ec2_spec.rb", "spec/poolparty/net/remote_instance_spec.rb", "spec/poolparty/net/remote_spec.rb", "spec/poolparty/net/remoter_base_spec.rb", "spec/poolparty/net/remoter_spec.rb", "spec/poolparty/plugins/git_spec.rb", "spec/poolparty/plugins/line_spec.rb", "spec/poolparty/plugins/svn_spec.rb", "spec/poolparty/pool/base_spec.rb", "spec/poolparty/pool/cloud_spec.rb", "spec/poolparty/pool/configurers/files/ruby_basic.rb", "spec/poolparty/pool/configurers/files/ruby_plugins.rb", "spec/poolparty/pool/configurers/ruby_spec.rb", "spec/poolparty/pool/custom_resource_spec.rb", "spec/poolparty/pool/example_spec.rb", "spec/poolparty/pool/plugin_model_spec.rb", "spec/poolparty/pool/plugin_spec.rb", "spec/poolparty/pool/pool_spec.rb", "spec/poolparty/pool/resource_spec.rb", "spec/poolparty/pool/resources/class_package_spec.rb", "spec/poolparty/pool/resources/conditional_spec.rb", "spec/poolparty/pool/resources/cron_spec.rb", "spec/poolparty/pool/resources/directory_spec.rb", "spec/poolparty/pool/resources/exec_spec.rb", "spec/poolparty/pool/resources/file_spec.rb", "spec/poolparty/pool/resources/gem_spec.rb", "spec/poolparty/pool/resources/host_spec.rb", "spec/poolparty/pool/resources/package_spec.rb", "spec/poolparty/pool/resources/remote_file_spec.rb", "spec/poolparty/pool/resources/service_spec.rb", "spec/poolparty/pool/resources/sshkey_spec.rb", "spec/poolparty/pool/resources/symlink_spec.rb", "spec/poolparty/pool/resources/variable_spec.rb", "spec/poolparty/pool/script_spec.rb", "spec/poolparty/pool/test_plugins/sshkey_test", "spec/poolparty/pool/test_plugins/virtual_host_template.erb", "spec/poolparty/pool/test_plugins/webserver.rb", "spec/poolparty/poolparty_spec.rb", "spec/poolparty/spec_helper.rb", "tasks/cloud.rake", "tasks/deployment.rake", "tasks/development.rake", "tasks/ec2.rake", "tasks/environment.rake", "tasks/instance.rake", "tasks/server.rake", "tasks/spec.rake", "tasks/website.rake", "test/test_generator_helper.rb", "test/test_helper.rb", "test/test_pool_spec_generator.rb", "test/test_poolparty.rb", "test_manifest.pp", "website/index.html", "website/index.txt", "website/javascripts/rounded_corners_lite.inc.js", "website/stylesheets/code.css", "website/stylesheets/screen.css", "website/template.html.erb"]
13
13
  s.has_rdoc = true
14
14
  s.homepage = %q{http://poolparty.rubyforge.org}
15
15
  s.post_install_message = %q{Get ready to jump in the pool, you just installed poolpartyrb!
@@ -22,7 +22,7 @@ describe "Slave provisioner" do
22
22
  @slave.install
23
23
  end
24
24
  end
25
- it "should return install_puppet as apt-get install puppet factor" do
26
- @slave.setup_puppet.should =~ /puppetd/
25
+ it "should return setup_puppet with the master" do
26
+ @slave.setup_puppet.should =~ /master/
27
27
  end
28
28
  end
@@ -8,7 +8,7 @@ describe "Remote Instance" do
8
8
  @tc = TestClass.new
9
9
  end
10
10
  it "should be a string" do
11
- @tc.has_git(:name => "gitrepos.git", :source => "git://source.git").to_string.should =~ /file \{/
11
+ @tc.has_git(:name => "gitrepos.git", :source => "git://source.git").to_string.should =~ /exec \{/
12
12
  end
13
13
  it "should included the flushed out options" do
14
14
  @tc.has_git({:name => "git.git", :source => "git://source.git", :user => "finger"}).to_string.should =~ /finger@git:/
@@ -27,7 +27,7 @@ describe "Remote Instance" do
27
27
  end
28
28
  end
29
29
  it "should have the path set within the resource" do
30
- @tc.resource(:git).first.to_string.should =~ /file \{/
30
+ @tc.resource(:git).first.to_string.should =~ /exec \{/
31
31
  end
32
32
  end
33
33
  end
@@ -279,6 +279,21 @@ describe "Cloud" do
279
279
  @manifest.should =~ /host \{\n\t\t"master":/
280
280
  end
281
281
  end
282
+ describe "building with an existing manifest" do
283
+ before(:each) do
284
+ @file = "/etc/puppet/manifests/nodes/nodes.pp"
285
+ @file.stub!(:read).and_return "nodes"
286
+ ::FileTest.stub!(:file?).with("/etc/puppet/manifests/classes/poolparty.pp").and_return true
287
+ @cloud.stub!(:open).with("/etc/puppet/manifests/classes/poolparty.pp").and_return @file
288
+ end
289
+ it "should not call resources_string_from_resources if the file /etc/puppet/manifests/nodes/nodes.pp exists" do
290
+ @cloud.should_not_receive(:add_poolparty_base_requirements)
291
+ @cloud.build_manifest
292
+ end
293
+ it "should build from the existing file" do
294
+ @cloud.build_manifest.should == "nodes"
295
+ end
296
+ end
282
297
  end
283
298
  end
284
299
 
@@ -238,6 +238,15 @@ describe "Resource" do
238
238
  it "should turn the resource into a string" do
239
239
  @file.to_s.should == "File['pancakes']"
240
240
  end
241
+ describe "cancelled" do
242
+ it "should make a resource not cancelled by default" do
243
+ @file.cancelled?.should == false
244
+ end
245
+ it "should say cancelled? is true if it has been cancelled" do
246
+ @file.cancel
247
+ @file.cancelled?.should == true
248
+ end
249
+ end
241
250
  end
242
251
  end
243
252
  end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ include PoolParty::Resources
4
+
5
+ describe "Symlink" do
6
+ before(:each) do
7
+ reset_resources!
8
+ @cloud = cloud :symlink_test do
9
+ has_symlink(:name => "/etc/apache2/puppetmaster.conf", :from => "/etc/http/puppetmaster.conf")
10
+ end
11
+ @symlink = @cloud.resource(:symlink).first
12
+ end
13
+ it "should create a file" do
14
+ @cloud.resource(:symlink).empty?.should == false
15
+ end
16
+ it "should create a file { resource" do
17
+ @symlink.to_string.should =~ /file \{/
18
+ end
19
+ end
data/website/index.html CHANGED
@@ -34,7 +34,7 @@
34
34
  <h1>PoolParty</h1>
35
35
  <div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/poolparty"; return false'>
36
36
  <p>Get Version</p>
37
- <a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.6</a>
37
+ <a href="http://rubyforge.org/projects/poolparty" class="numbers">0.2.8</a>
38
38
  </div>
39
39
  <h1>&#8216;Easy cloud computing&#8217;</h1>
40
40
  <h2>What</h2>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auser-poolparty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ari Lerner
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-10-14 00:00:00 -07:00
12
+ date: 2008-10-15 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -197,6 +197,7 @@ files:
197
197
  - lib/poolparty/pool/resources/remote_file.rb
198
198
  - lib/poolparty/pool/resources/service.rb
199
199
  - lib/poolparty/pool/resources/sshkey.rb
200
+ - lib/poolparty/pool/resources/symlink.rb
200
201
  - lib/poolparty/pool/resources/variable.rb
201
202
  - lib/poolparty/pool/script.rb
202
203
  - lib/poolparty/templates/authkeys
@@ -268,6 +269,7 @@ files:
268
269
  - spec/poolparty/pool/resources/remote_file_spec.rb
269
270
  - spec/poolparty/pool/resources/service_spec.rb
270
271
  - spec/poolparty/pool/resources/sshkey_spec.rb
272
+ - spec/poolparty/pool/resources/symlink_spec.rb
271
273
  - spec/poolparty/pool/resources/variable_spec.rb
272
274
  - spec/poolparty/pool/script_spec.rb
273
275
  - spec/poolparty/pool/test_plugins/sshkey_test