auser-poolparty 0.2.61 → 0.2.62

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.
@@ -37,17 +37,21 @@ module PoolParty
37
37
  has_gempackage(:name => "poolparty", :download_url => "http://github.com/auser/poolparty/tree/master%2Fpkg%2Fpoolparty.gem?raw=true", :requires => [get_gempackage("ruby2ruby"), get_gempackage("RubyInline"), get_gempackage("ParseTree")])
38
38
 
39
39
  # , :ifnot => "/bin/ps aux | /bin/grep -q pm_node"
40
- has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger")
41
- has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node")
42
- has_exec(:name => "update_hosts", :command => ". /etc/profile && server-update-hosts")
43
40
  # has_runit_service("pm_node", "pm_node", File.join(File.dirname(__FILE__), "..", "templates/messenger/node/"))
44
41
  end
45
42
 
43
+ has_exec(:name => "build_messenger", :command => ". /etc/profile && server-build-messenger")
44
+ has_exec(:name => "start_node", :command => ". /etc/profile && server-start-node")
45
+ has_exec(:name => "update_hosts", :command => ". /etc/profile && server-update-hosts")
46
+
46
47
  # execute_on_node do
47
48
  has_cron(:name => "puppetd runner", :user => Base.user, :minute => "*/5") do
48
49
  requires get_gempackage("poolparty")
49
50
  command "/usr/bin/puppetrunner"
50
51
  end
52
+ has_cron(:name => "update_hosts", :user => Base.user, :minute => "0") do
53
+ command ". /etc/profile && server-update-hosts"
54
+ end
51
55
  has_remotefile(:name => "/usr/bin/puppetrunner") do
52
56
  mode 744
53
57
  template File.join(File.dirname(__FILE__), "..", "templates/puppetrunner")
@@ -73,7 +77,7 @@ module PoolParty
73
77
  has_cron(:name => "Load handler", :user => Base.user, :minute => "*/4") do
74
78
  requires get_gempackage("poolparty")
75
79
  command(". /etc/profile && cloud-handle-load")
76
- end
80
+ end
77
81
  has_cron(:name => "provisioning ensurer", :user => Base.user, :minute => "*/2") do
78
82
  requires get_gempackage("poolparty")
79
83
  command ". /etc/profile && cloud-ensure-provisioning"
@@ -11,4 +11,7 @@ class Symbol
11
11
  def sanitize
12
12
  self.to_s.sanitize
13
13
  end
14
+ def <=>(b)
15
+ "#{self}" <=> "#{b}"
16
+ end
14
17
  end
@@ -21,18 +21,18 @@ module PoolParty
21
21
  returning Array.new do |output|
22
22
  unless cancelled?
23
23
  output << @prestring || ""
24
-
24
+
25
25
  if resources && !resources.empty?
26
- @cp = classpackage_with_self(self)
27
- output << @cp.to_string
28
- output << "include #{@cp.name.sanitize}"
26
+ # @cp = classpackage_with_self(self)
27
+ # output << @cp.to_string
28
+ # output << "include #{@cp.name.downcase.sanitize}"
29
+ output << resources_string_from_resources(resources, pre)
29
30
  end
30
31
 
31
32
  unless virtual_resource?
32
- output << "#{pre}#{class_type_name.downcase} {"
33
- output << "#{pre}\"#{self.key}\":"
33
+ output << "#{pre}#{class_type_name.downcase} { #{pre}\"#{self.key}\":"
34
34
  output << opts.flush_out("#{pre*2}").join(",\n")
35
- output << "#{pre}}"
35
+ output << "#{pre}}"
36
36
  end
37
37
 
38
38
  output << @poststring || ""
@@ -40,6 +40,22 @@ module PoolParty
40
40
  end.join("\n")
41
41
  end
42
42
 
43
+ def resources_string_from_resources(res, pre="\t")
44
+ @variables = res.extract! {|name,resource| name == :variable}
45
+ returning Array.new do |str|
46
+ unless @variables.empty?
47
+ str << "\n# Variables"
48
+ @variables.each do |name, variable|
49
+ str << variable.to_string("#{pre}")
50
+ end
51
+ end
52
+
53
+ res.each do |type, resource|
54
+ str << resource.to_string("#{pre*2}")
55
+ end
56
+ end.join("\n")
57
+ end
58
+
43
59
  def to_s
44
60
  "#{class_type_name.capitalize}['#{key}']"
45
61
  end
@@ -17,11 +17,11 @@ module PoolParty
17
17
  end
18
18
 
19
19
  def extract_cloud_from_options(o)
20
- o.cloudname ? [cloud(o.cloudname.downcase.to_sym)] : [clouds[clouds.keys.first]]
20
+ o.cloudname ? [cloud(o.cloudname.downcase.to_sym)] : [clouds[clouds.keys.sort.first]]
21
21
  end
22
22
 
23
23
  def extract_pool_from_options(o)
24
- o.poolname ? [pool(o.poolname.downcase.to_sym)] : [pools[pools.keys.first]]
24
+ o.poolname ? [pool(o.poolname.downcase.to_sym)] : [pools[pools.keys.sort.first]]
25
25
  end
26
26
 
27
27
  # Clear all the pools and reload the console
@@ -150,7 +150,6 @@ cp #{Base.remote_storage_path}/#{Base.template_directory}/puppetrerun /usr/bin/p
150
150
  cp #{Base.remote_storage_path}/#{Base.template_directory}/puppetrunner /usr/bin/puppetrunner
151
151
  chmod +x /usr/bin/puppetrerun
152
152
  chmod +x /usr/bin/puppetrunner
153
- /bin/sh /usr/bin/server-update-hosts
154
153
  EOE
155
154
  end
156
155
 
@@ -167,7 +166,7 @@ node default {
167
166
  node "#{ri.name}" inherits default {}
168
167
  EOS
169
168
  end
170
- "echo '#{str}' > #{Base.manifest_path}/../nodes/nodes.pp"
169
+ "echo '#{str}' > #{Base.manifest_path}/nodes/nodes.pp"
171
170
  end
172
171
 
173
172
  def move_templates
@@ -183,7 +183,7 @@ module PoolParty
183
183
  vputs ""
184
184
  vputs "Waiting for there to be no pending instances..."
185
185
  when_no_pending_instances do
186
- wait "20.seconds"
186
+ when_all_assigned_ips {wait "20.seconds"}
187
187
  vputs ""
188
188
  vputs "Provisioning master..."
189
189
 
@@ -73,7 +73,7 @@ module PoolParty
73
73
  def remote_instances_list
74
74
  # puts "> #{@containing_cloud.name} - #{@containing_cloud.class}"
75
75
  @containing_cloud = self
76
- @remote_instances_list ||= list_of_instances(keypair).collect {|h| PoolParty::Remote::RemoteInstance.new(h, @containing_cloud) }
76
+ list_of_instances(keypair).collect {|h| PoolParty::Remote::RemoteInstance.new(h, @containing_cloud) }
77
77
  end
78
78
  # List the instances for the current key pair, regardless of their states
79
79
  # If no keypair is passed, select them all
@@ -21,8 +21,8 @@ module PoolParty
21
21
  execute_on_master do
22
22
  has_exec({:name => "deploy-directory-#{name}", :requires => get_directory("#{cwd}"), :cwd => cwd}) do
23
23
  # && rm #{Base.tmp_path}/#{parent.name.dir_safe}.tar.gz
24
- command "cd #{parent.cwd}; tar -zxf #{Base.remote_storage_path}/#{parent.name.dir_safe}.tar.gz; rm #{Base.remote_storage_path}/#{parent.name.dir_safe}.tar.gz"
25
- onlyif "test -f #{Base.remote_storage_path}/#{parent.name.dir_safe}.tar.gz"
24
+ command "cd #{cwd}; tar -zxf #{Base.remote_storage_path}/#{name.dir_safe}.tar.gz; rm #{Base.remote_storage_path}/#{name.dir_safe}.tar.gz"
25
+ onlyif "test -f #{Base.remote_storage_path}/#{name.dir_safe}.tar.gz"
26
26
  end
27
27
  end
28
28
  end
@@ -8,17 +8,18 @@ module PoolParty
8
8
  end
9
9
 
10
10
  def has_git_repos
11
- has_package(:name => "git-core")
12
-
13
- has_exec({:name => "git-#{name}", :requires => get_package("git-core"), :requires => [get_directory("#{cwd}"), get_package("git-core")]}) do
14
- command parent.user ? "git clone #{parent.user}@#{parent.source} #{parent.path}" : "git clone #{parent.source} #{parent.to ? parent.to : ""}"
15
- cwd "#{parent.cwd if parent.cwd}"
16
- creates "#{::File.join( (parent.cwd ? parent.cwd : cwd), ::File.basename(parent.source, ::File.extname(parent.source)) )}/.git"
17
- end
18
- has_exec(:name => "update-#{name}", :requires => get_exec("git-#{name}")) do
19
- cwd ::File.dirname(get_exec("git-#{parent.name}").creates)
20
- command "git pull"
21
- end
11
+ has_package(:name => "git-core") do
12
+ has_exec({:requires => get_package("git-core"), :requires => [get_directory("#{cwd}")]}) do
13
+ name key
14
+ command user ? "git clone #{user}@#{source} #{path}" : "git clone #{source} #{to ? to : ""}"
15
+ cwd "#{cwd if cwd}"
16
+ creates "#{::File.join( (cwd), ::File.basename(source, ::File.extname(source)) )}/.git"
17
+ end
18
+ has_exec(:name => "update-#{name}") do
19
+ cwd ::File.dirname( get_exec(key).creates )
20
+ command "git pull"
21
+ end
22
+ end
22
23
  end
23
24
 
24
25
  def at(dir)
@@ -89,7 +89,7 @@ module PoolParty
89
89
  make_base_directory
90
90
  copy_misc_templates
91
91
  Base.store_keys_in_file
92
- Script.save!
92
+ Script.save!(self)
93
93
  copy_ssh_key # not my favorite...
94
94
  end
95
95
 
@@ -145,12 +145,18 @@ module PoolParty
145
145
  # Refactor this into the resources method
146
146
  # TODO
147
147
  services.each do |service|
148
- @cp = classpackage_with_self(service)
149
- str << @cp.to_string
150
- str << @cp.include_string
148
+ service.options.merge!(:name => service.name)
149
+ classpackage_with_self(service)
151
150
  end
152
151
 
153
- str << resources_string_from_resources(resources)
152
+ global_classpackages.each do |cls|
153
+ str << cls.to_string
154
+ end
155
+
156
+ resources.each do |type, res|
157
+ str << "# #{type.to_s.pluralize}"
158
+ str << res.to_string
159
+ end
154
160
 
155
161
  str << "# Custom functions"
156
162
  str << Resources::CustomResource.custom_functions_to_string
@@ -158,7 +164,7 @@ module PoolParty
158
164
  end
159
165
 
160
166
  def build_from_existing_file
161
- ::FileTest.file?("/etc/puppet/manifests/classes/poolparty.pp") ? open("/etc/puppet/manifests/classes/poolparty.pp").read : nil
167
+ ::FileTest.file?("#{Base.manifest_path}/classes/poolparty.pp") ? open("#{Base.manifest_path}/classes/poolparty.pp").read : nil
162
168
  end
163
169
 
164
170
  # To allow the remote instances to do their job,
@@ -19,13 +19,14 @@ module PoolParty
19
19
 
20
20
  def add_resource(type, opts={}, parent=self, &block)
21
21
  if in_resources?(type, opts[:name])
22
- get_resource(type, opts[:name], parent)
22
+ @res = get_resource(type, opts[:name], parent)
23
23
  else
24
- returning "PoolParty::Resources::#{type.to_s.camelize}".classify.constantize.new(opts, parent, &block) do |o|
24
+ @res = returning "PoolParty::Resources::#{type.to_s.camelize}".classify.constantize.new(opts, parent, &block) do |o|
25
25
  store_into_global_resource_store(o)
26
26
  resource(type) << o
27
27
  end
28
28
  end
29
+ @res
29
30
  end
30
31
  def get_resource(ty, key, parent=self)
31
32
  resource(ty).select {|r| r.key == key }.first || get_from_global_resource_store(ty, key)
@@ -47,7 +48,7 @@ module PoolParty
47
48
  end
48
49
  #:nodoc:
49
50
  def reset_resources!
50
- $global_resources = @resources = nil
51
+ $global_resources = $global_classpackage_store = @resources = nil
51
52
  end
52
53
 
53
54
  # def resources_string(pre="")
@@ -104,25 +105,31 @@ module PoolParty
104
105
  # Then it takes the value of the block and sets whatever is sent there as
105
106
  # the options
106
107
  # Finally, it uses the parent's options as the lowest priority
107
- def initialize(opts={}, parent=self, &block)
108
+ def initialize(opts={}, parent=self, &block)
109
+ run_setup(parent, &block)
108
110
  # Take the options of the parents
109
111
  set_vars_from_options(opts) unless opts.empty?
110
- set_resource_parent(parent)
111
112
 
112
- run_setup(parent, false, &block) if block
113
- # self.run_in_context &block if block
113
+ set_resource_parent
114
+
114
115
  loaded(opts, @parent)
115
116
  end
116
117
 
117
118
  # Helper to set the containing parent on the resource
118
- def set_resource_parent(parent=nil)
119
- if parent && parent != self
120
- @parent = parent
121
- if @parent.is_a?(PoolParty::Resources::Resource) && @parent.printable? && @parent.name != name
119
+ def set_resource_parent
120
+ if @parent && @parent != self
121
+ if can_set_requires_for_parent
122
122
  # requires @parent.to_s
123
123
  end
124
124
  end
125
125
  end
126
+
127
+ def can_set_requires_for_parent
128
+ @parent.is_a?(PoolParty::Resources::Resource) &&
129
+ @parent.printable? &&
130
+ @parent.name != name &&
131
+ !@parent.is_a?(PoolParty::Resources::Classpackage)
132
+ end
126
133
 
127
134
  # Stub, so you can create virtual resources
128
135
  # This is called after the resource is initialized
@@ -1,12 +1,51 @@
1
1
  module PoolParty
2
2
  module Resources
3
3
 
4
+ def global_classpackages
5
+ $global_classpackage_store ||= []
6
+ end
7
+
8
+ def in_global_classpackages?(name)
9
+ !get_from_global_classpackage_store(name).nil?
10
+ end
11
+
12
+ def get_from_global_classpackage_store(key)
13
+ global_classpackages.select {|a| a if key == a.name }.first
14
+ end
15
+
16
+ def store_into_global_classpackage_store(r)
17
+ arr = r.is_a?(Array) ? r : [r]
18
+ arr.each do |a|
19
+ global_classpackages << a unless in_global_classpackages?(a.name)
20
+ end
21
+ end
22
+
4
23
  # Wrap all the resources into a class package from
5
24
  def classpackage_with_self(parent=self, &block)
6
- @cp = PoolParty::Resources::Classpackage.new(parent.options, parent, &block)
7
- @cp.run_in_context {@resources = parent.resources}
8
- # parent.instance_eval {@resources = nil}
9
- @cp
25
+ name = (parent.options.name || Classpackage.name(parent).to_s).sanitize
26
+ if in_global_classpackages?(name)
27
+ puts "#{name} already a class in the global storage"
28
+ returning get_from_global_classpackage_store(name) do |cls|
29
+ cls.run_in_context(parent, &block) if block
30
+ end
31
+ else
32
+ @@parent_resources = parent.resources
33
+ @@cp = parent.add_resource(:classpackage, parent.options.merge(:name => name), parent, &block)
34
+ @@cp = @@cp.is_a?(Array) ? @@cp[-1] : @@cp
35
+
36
+ @@cp.run_in_context(parent) do
37
+ @@parent_resources.each do |ty, res|
38
+ resources[ty] = res unless ty == :classpackage
39
+ end
40
+ end
41
+ parent.instance_eval do
42
+ @resources = {:classpackage => [@@cp]}
43
+ end
44
+ @@cp.instance_eval &block if block
45
+
46
+ store_into_global_classpackage_store(@@cp)
47
+ end
48
+ return @@cp
10
49
  end
11
50
 
12
51
  class Classpackage < Resource
@@ -22,48 +61,36 @@ module PoolParty
22
61
  # self.instance_eval &block if block
23
62
  run_setup(parent, &block) if block
24
63
  # self.run_in_context &block if block
25
- # store_block(&block)
64
+ # store_block(&block)
26
65
  loaded
27
66
  end
28
67
 
29
- def to_string
30
- returning String.new do |output|
31
- output << "# #{name.sanitize}"
32
- output << "\nclass #{name.sanitize.downcase} {\n"
33
- output << resources_string_from_resources(resources)
34
- output << "\n}\n"
35
- end
68
+ def to_string(pre="")
69
+ "" unless resources.size > 0
70
+ returning Array.new do |output|
71
+ output << "#{pre}class #{name.sanitize.downcase} {"
72
+ output << "#{pre}#{resources_string_from_resources(resources)}"
73
+ output << "#{pre}}"
74
+ end.join("\n")
36
75
  end
37
76
 
38
77
  def include_string
39
78
  "include #{name.sanitize.downcase}"
40
79
  end
41
80
 
42
- def name(*args)
43
- args.empty? ? (@name || (!parent.nil? && parent.name) || "custom_#{Time.now.to_i}") : @name ||= args.first
81
+ def virtual_resource?
82
+ true
44
83
  end
84
+
45
85
  def printable?
46
86
  false
47
87
  end
88
+
89
+ def self.name(parent=nil)
90
+ "custom_#{parent ? parent.object_id.to_s : "parent"}"
91
+ end
48
92
 
49
93
  end
50
94
 
51
- def resources_string_from_resources(resources, pre="\t")
52
- @variables = resources.extract! {|name,resource| name == :variable}
53
- returning Array.new do |str|
54
- unless @variables.empty?
55
- str << "\n# Variables \n"
56
- @variables.each do |name, variable|
57
- str << variable.to_string("#{pre}")
58
- end
59
- end
60
-
61
- resources.each do |type, resource|
62
- str << "\n#{pre*2}# #{type}\n"
63
- str << resource.to_string("#{pre*2}")
64
- end
65
- end.join("\n")
66
- end
67
-
68
95
  end
69
96
  end
@@ -12,9 +12,10 @@ module PoolParty
12
12
  def execute_if(attr_s="$hostname", comparison="==", str="", cust_opts={}, parent=self, &block)
13
13
  # parent = parent.is_a?(PoolParty::Cloud::Cloud) ? parent : parent.parent
14
14
  opts = {:attribute => attr_s, :equal => str, :comparison => comparison}.merge(cust_opts)
15
- options = (parent.respond_to?(:options) && parent) ? parent.options.merge!(opts) : opts
15
+ options = (parent.respond_to?(:options) && parent && parent != self) ? parent.options.merge!(opts) : opts
16
16
  # @c = PoolParty::Resources::Conditional.new(options, parent, &block)
17
- conditional(options, parent, &block)
17
+ # conditional(options, parent, &block)
18
+ add_resource(:conditional, options, parent, &block)
18
19
  end
19
20
 
20
21
  class Conditional < Resource
@@ -20,22 +20,20 @@ module PoolParty
20
20
  blk.to_ruby(opts)
21
21
  end
22
22
 
23
- def self.for_save_string
23
+ def self.for_save_string(in_cloud=nil)
24
24
  returning Array.new do |out|
25
- clouds.each do |name, cl|
26
- with_cloud(cl) do
27
- out << <<-EOE
28
- cloud :#{name} do
25
+ (in_cloud ? [in_cloud] : clouds.collect {|n,cl| cl }).each do |cl|
26
+ out << <<-EOE
27
+ cloud :#{cl.name} do
29
28
  #{cl.minimum_runnable_options.map {|o| "\t#{o} #{cl.send(o).respec_string}"}.join("\n")}
30
29
  end
31
- EOE
32
- end
30
+ EOE
33
31
  end
34
32
  end.join("\n")
35
33
  end
36
34
 
37
- def self.save!(to_file=true)
38
- write_to_file_in_storage_directory(Base.default_specfile_name, for_save_string) if to_file
35
+ def self.save!(cl=nil,to_file=true)
36
+ write_to_file_in_storage_directory(Base.default_specfile_name, for_save_string(cl)) if to_file
39
37
  for_save_string
40
38
  end
41
39
 
@@ -3,7 +3,4 @@
3
3
  # /var/lib/puppet/state/puppetdlock
4
4
  . /etc/profile
5
5
  ps aux | grep puppetmaster | awk '{print $2}' | xargs kill
6
- /etc/init.d/puppetmaster stop
7
- rm -rf /etc/puppet/ssl
8
- /etc/init.d/puppetmaster start
9
- puppetmasterd --verbose
6
+ /etc/init.d/puppetmaster stop;rm -rf /etc/puppet/ssl;/etc/init.d/puppetmaster start;puppetmasterd --verbose
@@ -2,7 +2,7 @@ module PoolParty
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 61
5
+ TINY = 62
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/poolparty.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poolparty
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.61
4
+ version: 0.2.62
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-11-17 00:00:00 -08:00
12
+ date: 2008-11-18 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -102,9 +102,10 @@ describe "ProvisionerBase" do
102
102
  @cloud.stub!(:keypair_path).and_return "~/.ec2/fake_keypair"
103
103
  @cloud.stub!(:other_clouds).and_return []
104
104
  @cloud.stub!(:expand_when).and_return "cpu > 10"
105
- Provisioner::Master.stub!(:new).and_return @provisioner
106
105
  @cloud.stub!(:copy_file_to_storage_directory).and_return true
107
106
  @cloud.stub!(:rsync_storage_files_to).and_return true
107
+ @cloud.stub!(:minimum_runnable_options).and_return []
108
+ Provisioner::Master.stub!(:new).and_return @provisioner
108
109
  @provisioner.stub!(:build_and_store_new_config_file).and_return true
109
110
  @provisioner.stub!(:process_clean_reconfigure_for!).and_return true
110
111
  end
@@ -14,7 +14,7 @@ describe "Remote Instance" do
14
14
  @tc = TestClass.new
15
15
  end
16
16
  it "should be a string" do
17
- @tc.has_git(:name => "gitrepos.git", :source => "git://source.git").to_string.should =~ /exec \{/
17
+ @tc.has_git(:name => "gitrepos.git", :source => "git://source.git").to_string.should =~ /exec/
18
18
  end
19
19
  it "should included the flushed out options" do
20
20
  @tc.has_git({:name => "git.git", :source => "git://source.git", :user => "finger"}).to_string.should =~ /finger@git:/
@@ -25,7 +25,7 @@ describe "Remote Instance" do
25
25
  describe "in resource" do
26
26
  before(:each) do
27
27
  @tc.instance_eval do
28
- git(:name => "gittr") do
28
+ has_git(:name => "gittr") do
29
29
  source "git://source.git"
30
30
  path "/var/www/xnot.org"
31
31
  symlink "/var/www/xnot.org/public"
@@ -33,7 +33,7 @@ describe "Remote Instance" do
33
33
  end
34
34
  end
35
35
  it "should have the path set within the resource" do
36
- @tc.resource(:git).first.to_string.should =~ /exec \{/
36
+ @tc.resource(:git).first.to_string.should =~ /exec \{ "gittr"/
37
37
  end
38
38
  end
39
39
  end
@@ -290,7 +290,7 @@ describe "Cloud" do
290
290
  File.open("test_manifest.pp", "w+") {|f| f << @manifest}
291
291
  end
292
292
  it "should include the hosts for all the listed local instances" do
293
- @manifest.should =~ /master :/
293
+ @manifest.should =~ /master \{/
294
294
  end
295
295
  end
296
296
  describe "building with an existing manifest" do
@@ -1,8 +1,9 @@
1
1
  require File.dirname(__FILE__) + '/../spec_helper'
2
- require File.dirname(__FILE__) + '/test_plugins/webserver'
3
2
 
4
3
  include PoolParty::Resources
5
4
 
5
+ require File.dirname(__FILE__) + '/test_plugins/webserver'
6
+
6
7
  class MyResource < PoolParty::Resources::Resource
7
8
  # Just to give some options for the test class
8
9
  def options(h={})
@@ -30,28 +31,7 @@ describe "Resource" do
30
31
  end
31
32
  describe "to_s" do
32
33
  it "should be able to coalesce the instances" do
33
- @resource.to_string.should =~ /resource \{\n/
34
- end
35
- describe "with resources" do
36
- before(:each) do
37
- self.stub!(:options).and_return(:name => "cook")
38
-
39
- @obj = PoolParty::Resources::Resource.new
40
- @obj.stub!(:name).and_return "cook"
41
-
42
- @resource2 = MyResource.new do
43
- file(:name => "shulie")
44
- end
45
- end
46
- it "should call classpackage_with_self when it has resources" do
47
- @resource2.should_receive(:classpackage_with_self).and_return @obj
48
- @resource2.to_string
49
- end
50
- it "should call to_string on the class package" do
51
- @obj.should_receive(:to_string).and_return "wee"
52
- @resource2.should_receive(:classpackage_with_self).and_return @obj
53
- @resource2.to_string
54
- end
34
+ @resource.to_string.should =~ /resource \{/
55
35
  end
56
36
  end
57
37
  describe "class methods" do
@@ -138,10 +118,19 @@ describe "Resource" do
138
118
  before(:each) do
139
119
  @cloud = cloud :command_cloud do; end
140
120
  end
141
- it "should call add_resource when creating using the command: file" do
142
- @cloud.should_receive(:add_resource).with(:file, {:name => "frank"}, @cloud)
143
- @cloud.instance_eval do
121
+ describe "add_resource" do
122
+ it "should call add_resource when creating using the command: file" do
123
+ @cloud.should_receive(:add_resource).with(:file, {:name => "frank"}, @cloud)
124
+ @cloud.instance_eval do
125
+ file(:name => "frank")
126
+ end
127
+ end
128
+ it "should return a resource when the resource does not exist" do
129
+ file(:name => "/etc/frank.txt").class.should == PoolParty::Resources::File
130
+ end
131
+ it "should return a resource when the resource does exist" do
144
132
  file(:name => "frank")
133
+ file(:name => "frank").class.should == PoolParty::Resources::File
145
134
  end
146
135
  end
147
136
  it "should create the new 'resource' as a resource" do
@@ -346,6 +335,21 @@ describe "Resource" do
346
335
  it "should be able to get the resource from the global_resources_store by the name and type" do
347
336
  @cloud2.get_from_global_resource_store(:directory, "/var/www").key.should == "/var/www"
348
337
  end
338
+ describe "adding to global resource store" do
339
+ before(:each) do
340
+ @cloud3 = cloud :pumpkinpie do
341
+ file(:name => "/var/www/pumpkinfile.html")
342
+ file(:name => "/var/www/pumpkinfile.html")
343
+ apache do
344
+ file(:name => "/var/www/pumpkinfile.html")
345
+ end
346
+ end
347
+ @cloud3 = cloud(:pumpkinpie)
348
+ end
349
+ it "should not have 2 of the same resources" do
350
+ @cloud3.resource(:file).size.should == 1
351
+ end
352
+ end
349
353
  describe "grabbing after already instantiated" do
350
354
  before(:each) do
351
355
  @cloud2.instance_eval do
@@ -69,21 +69,52 @@ describe "File" do
69
69
  end
70
70
  end
71
71
  describe "from a collection of resources to another" do
72
- before(:each) do
73
- self.stub!(:options).and_return({:name => "cook"})
74
- file(:name => "franksfile")
75
- exec(:name => "get file", :command => "kill frank for file")
72
+ before(:each) do
73
+ reset_resources!
74
+ cloud :bunkers do
75
+ file(:name => "franksfile")
76
+ exec(:name => "get file", :command => "kill frank for file")
77
+ end
78
+ @cloud = cloud(:bunkers)
79
+ @class2 = classpackage_with_self(@cloud)
76
80
  end
77
81
  it "should have the method classpackage_with_self" do
78
82
  self.respond_to?(:classpackage_with_self).should == true
79
83
  end
80
84
  it "should transfer the resources to the class" do
81
- @class2 = classpackage_with_self(self)
82
- @class2.resources.should_not be_empty
85
+ @class2.resources.size.should == 2
86
+ end
87
+ it "should have the file resource in the classpackage" do
88
+ @class2.resource(:file).first.name.should == "franksfile"
89
+ end
90
+ it "should have the exec resource in the classpackage" do
91
+ @class2.resource(:exec).first.name.should == "get file"
92
+ end
93
+ it "should have the resources on the new classpackage" do
94
+ @cloud.resources.size.should == 1
95
+ end
96
+ it "should have the conditional classpackage on the resources" do
97
+ @cloud.resource(:classpackage).first.should == @class2
98
+ end
99
+ describe "to_string" do
100
+ before(:each) do
101
+ @output = @class2.to_string
102
+ end
103
+ it "should have the file in the string" do
104
+ @output.should =~ /franksfile/
105
+ end
106
+ it "should contain just the two resources in the string" do
107
+ @output.match(/(\w+) \{/).size.should == 2
108
+ end
109
+ describe "from within the cloud" do
110
+ before(:each) do
111
+ reset_resources!
112
+ @output = @cloud.build_short_manifest
113
+ end
114
+ it "should have one class" do
115
+ @output.match(/class (\w+) \{/).size.should == 2
116
+ end
117
+ end
83
118
  end
84
- # it "should leave zero resources on the parent" do
85
- # @class2 = classpackage_with_self(self)
86
- # resources.should be_empty
87
- # end
88
119
  end
89
120
  end
@@ -49,6 +49,22 @@ describe "Conditional" do
49
49
  it "should have a case statement for the hostname" do
50
50
  @string.should =~ /case \$hostname/
51
51
  end
52
+ describe "multiple" do
53
+ before(:each) do
54
+ reset!
55
+ @cloud = cloud :multiple_conditionals do
56
+ execute_on_master do
57
+ has_file(:name => "/etc/frank.txt")
58
+ end
59
+ execute_on_master do
60
+ has_exec(:name => "feed frank")
61
+ end
62
+ end
63
+ end
64
+ it "should have two conditional resources" do
65
+ @cloud.resource(:conditional).size.should == 2
66
+ end
67
+ end
52
68
  end
53
69
  end
54
70
  end
@@ -19,17 +19,18 @@ describe "Cron" do
19
19
  end
20
20
  describe "as included" do
21
21
  before(:each) do
22
+ reset_resources!
22
23
  @cron = cron({:rent => "low"}) do
23
24
  name "/www/conf/httpd.conf"
24
25
  hour 23
25
26
  minute 5
26
- weekday 1
27
+ weekday 1
27
28
  end
28
29
  end
29
30
  it "should use default values" do
30
31
  @cron.name.should == "/www/conf/httpd.conf"
31
32
  end
32
- it "should keep the default values for the file" do
33
+ it "should keep the default values for the cron" do
33
34
  @cron.user.should == "root"
34
35
  end
35
36
  it "should also set options through a hash" do
@@ -8,7 +8,7 @@ describe "Exec" do
8
8
  end
9
9
  describe "instances" do
10
10
  it "should turn the one hash instance into a string" do
11
- @exec.to_string.should =~ /exec \{\n"\/usr\/bin\/ifconfig"/
11
+ @exec.to_string.should =~ /exec \{ "\/usr\/bin\/ifconfig"/
12
12
  end
13
13
  it "should turn the two hash instance into a string" do
14
14
  @exec = exec({:name => "/usr/bin/ping 127.0.0.1"})
@@ -19,7 +19,7 @@ describe "Gem" do
19
19
  @gem.name.should == "activesupport"
20
20
  end
21
21
  it "should have the 'rails' gem in the packages" do
22
- @cloud.get_resource(:gempackage, "activesupport").to_string.should =~ /activesupport/
22
+ @gem.to_string.should =~ /activesupport/
23
23
  end
24
24
  describe "with parent options" do
25
25
  before(:each) do
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.61
4
+ version: 0.2.62
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-11-17 00:00:00 -08:00
12
+ date: 2008-11-18 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency