stackmate 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. data/README.md +1 -0
  2. data/bin/stackmate.rb +9 -5
  3. data/lib/stackmate/intrinsic_functions.rb +3 -3
  4. data/lib/stackmate/metadata.rb +44 -0
  5. data/lib/stackmate/participants/cloudstack.rb +51 -10
  6. data/lib/stackmate/participants/cloudstack_affinitygroup.rb +4 -1
  7. data/lib/stackmate/participants/cloudstack_autoscalepolicy.rb +4 -1
  8. data/lib/stackmate/participants/cloudstack_autoscalevmgroup.rb +4 -1
  9. data/lib/stackmate/participants/cloudstack_autoscalevmprofile.rb +4 -1
  10. data/lib/stackmate/participants/cloudstack_condition.rb +4 -1
  11. data/lib/stackmate/participants/cloudstack_egressfirewallrule.rb +4 -1
  12. data/lib/stackmate/participants/cloudstack_firewallrule.rb +4 -1
  13. data/lib/stackmate/participants/cloudstack_globalloadbalancerrule.rb +4 -1
  14. data/lib/stackmate/participants/cloudstack_instancegroup.rb +4 -1
  15. data/lib/stackmate/participants/cloudstack_ipaddress.rb +4 -1
  16. data/lib/stackmate/participants/cloudstack_ipforwardingrule.rb +4 -1
  17. data/lib/stackmate/participants/cloudstack_iptonic.rb +4 -1
  18. data/lib/stackmate/participants/cloudstack_iso.rb +4 -1
  19. data/lib/stackmate/participants/cloudstack_lbhealthcheckpolicy.rb +4 -1
  20. data/lib/stackmate/participants/cloudstack_lbstickinesspolicy.rb +4 -1
  21. data/lib/stackmate/participants/cloudstack_loadbalancer.rb +4 -1
  22. data/lib/stackmate/participants/cloudstack_loadbalancerrule.rb +4 -1
  23. data/lib/stackmate/participants/cloudstack_network.rb +4 -1
  24. data/lib/stackmate/participants/cloudstack_networkacl.rb +4 -1
  25. data/lib/stackmate/participants/cloudstack_networkacllist.rb +4 -1
  26. data/lib/stackmate/participants/cloudstack_nictovirtualmachine.rb +5 -2
  27. data/lib/stackmate/participants/cloudstack_portforwardingrule.rb +4 -1
  28. data/lib/stackmate/participants/cloudstack_project.rb +4 -1
  29. data/lib/stackmate/participants/cloudstack_remoteaccessvpn.rb +4 -1
  30. data/lib/stackmate/participants/cloudstack_securitygroup.rb +4 -1
  31. data/lib/stackmate/participants/cloudstack_securitygroupegress.rb +4 -1
  32. data/lib/stackmate/participants/cloudstack_securitygroupingress.rb +4 -1
  33. data/lib/stackmate/participants/cloudstack_snapshot.rb +4 -1
  34. data/lib/stackmate/participants/cloudstack_snapshotpolicy.rb +4 -1
  35. data/lib/stackmate/participants/cloudstack_sshkeypair.rb +4 -1
  36. data/lib/stackmate/participants/cloudstack_staticnat.rb +4 -1
  37. data/lib/stackmate/participants/cloudstack_staticroute.rb +4 -1
  38. data/lib/stackmate/participants/cloudstack_tags.rb +4 -1
  39. data/lib/stackmate/participants/cloudstack_template.rb +4 -1
  40. data/lib/stackmate/participants/cloudstack_togloballoadbalancerrule.rb +4 -1
  41. data/lib/stackmate/participants/cloudstack_toloadbalancerrule.rb +4 -1
  42. data/lib/stackmate/participants/cloudstack_virtualmachine.rb +257 -281
  43. data/lib/stackmate/participants/cloudstack_virtualmachineops.rb +5 -2
  44. data/lib/stackmate/participants/cloudstack_vmsnapshot.rb +4 -1
  45. data/lib/stackmate/participants/cloudstack_volume.rb +4 -1
  46. data/lib/stackmate/participants/cloudstack_volumeops.rb +86 -90
  47. data/lib/stackmate/participants/cloudstack_vpc.rb +4 -1
  48. data/lib/stackmate/participants/cloudstack_vpnconnection.rb +4 -1
  49. data/lib/stackmate/participants/cloudstack_vpncustomergateway.rb +4 -1
  50. data/lib/stackmate/participants/cloudstack_vpngateway.rb +4 -1
  51. data/lib/stackmate/participants/cloudstack_vpnuser.rb +4 -1
  52. data/lib/stackmate/participants/common.rb +4 -2
  53. data/lib/stackmate/resolver.rb +28 -1
  54. data/lib/stackmate/stack_executor.rb +9 -5
  55. data/lib/stackmate/stack_server.rb +60 -0
  56. data/lib/stackmate/stackpi.rb +2 -7
  57. data/lib/stackmate/version.rb +1 -1
  58. data/lib/stackmate/waitcondition_server.rb +4 -6
  59. metadata +4 -2
@@ -37,7 +37,7 @@ module StackMate
37
37
  STRINGEXP = /.+/
38
38
  INTEXP = /[0-9]+/
39
39
  UUIDEXP = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/
40
-
40
+ @@intrinsics = ["Ref","Fn::Join","Fn::GetAtt","Fn::Select","Fn::FindInMap","Fn::Base64"]
41
41
  def get_resolved(lookup_data,workitem)
42
42
  case lookup_data
43
43
  when String
@@ -118,5 +118,32 @@ module StackMate
118
118
  def resolve_to_deviceid(devicename)
119
119
  @devicename_map[devicename.downcase]
120
120
  end
121
+
122
+ def recursive_resolve(lookup_data,workitem)
123
+ case lookup_data
124
+ when String
125
+ lookup_data
126
+ when Array
127
+ return_array = []
128
+ lookup_data.each do |data|
129
+ return_array.push(recursive_resolve(data,workitem))
130
+ end
131
+ return_array
132
+ when Hash
133
+ return_hash = {}
134
+ #key = lookup_data.keys[0]
135
+ #p lookup_data.keys
136
+ lookup_data.keys.each do |key|
137
+ val = lookup_data[key]
138
+ if(@@intrinsics.include?(key))
139
+ #Intrinsic functions work without nesting and so return
140
+ return intrinsic(lookup_data,workitem)
141
+ else
142
+ return_hash[key] = recursive_resolve(val,workitem)
143
+ end
144
+ end
145
+ return return_hash
146
+ end
147
+ end
121
148
  end
122
149
  end
@@ -17,7 +17,7 @@ module StackMate
17
17
  class StackExecutor < StackMate::Stacker
18
18
  include Logging
19
19
 
20
- def initialize(templatefile, stackname, params, engine, create_wait_conditions, api_opts, timeout, plugins=nil)
20
+ def initialize(templatefile, stackname, params, engine, create_wait_conditions, api_opts, timeout, plugins=nil, no_rollback=false)
21
21
  stackstr = File.read(templatefile)
22
22
  super(stackstr, stackname, resolve_param_refs(params, stackname))
23
23
  @engine = engine
@@ -25,6 +25,7 @@ module StackMate
25
25
  @api_opts = api_opts
26
26
  @timeout = timeout
27
27
  load_plugins(plugins)
28
+ @rollback = !no_rollback
28
29
  end
29
30
 
30
31
  def load_plugins(plugins)
@@ -85,6 +86,7 @@ module StackMate
85
86
  resolved_params['AWS::StackId'] = stackname
86
87
  resolved_params['CloudStack::StackName'] = stackname
87
88
  resolved_params['CloudStack::StackId'] = stackname
89
+ resolved_params['CloudStack::StackMateApiURL'] = ENV['WAIT_COND_URL_BASE']?ENV['WAIT_COND_URL_BASE']:StackMate::WAIT_COND_URL_BASE_DEFAULT
88
90
  resolved_params
89
91
  end
90
92
 
@@ -116,18 +118,20 @@ module StackMate
116
118
  __send__('Output')
117
119
  end
118
120
  define 'rollback', :timeout => timeout do
119
- __send__('Notify')
120
- participants.reverse_each.collect {|name| __send__(name, :operation => :rollback) }
121
+ __send__('Notify', :if => '${v:do_rollback}')
122
+ participants.reverse_each.collect {|name| __send__(name, :operation => :rollback, :if => '${v:do_rollback}') }
121
123
  end
122
124
  end
123
125
  end
124
126
 
125
127
  def launch
126
- wfid = @engine.launch( pdef, @templ)
128
+ p @rollback
129
+ wfid = @engine.launch(pdef, @templ, {'do_rollback' => @rollback})
130
+ #wfid = @engine.launch(pdef, @templ)
127
131
  timeout = @timeout.to_i * 2
128
132
  @engine.wait_for(wfid, :timeout => timeout)
129
133
  logger.error { "engine error : #{@engine.errors.first.message}"} if @engine.errors.first
130
134
  end
131
135
  end
132
136
 
133
- end
137
+ end
@@ -0,0 +1,60 @@
1
+ require 'json'
2
+ require 'sinatra/base'
3
+ require 'stackmate/participants/common'
4
+ require 'stackmate/metadata'
5
+
6
+ module StackMate
7
+
8
+ class StackServer < Sinatra::Base
9
+ @@url_base = ENV['WAIT_COND_URL_BASE']?ENV['WAIT_COND_URL_BASE']:StackMate::WAIT_COND_URL_BASE_DEFAULT
10
+ set :static, false
11
+ set :run, true
12
+ set :bind, Proc.new { URI.parse(@@url_base).host}
13
+ set :port, Proc.new { URI.parse(@@url_base).port}
14
+
15
+
16
+ def initialize()
17
+ super
18
+ end
19
+
20
+ put '/waitcondition/:wfeid/:waithandle' do
21
+ #print "Got PUT of " , params[:wfeid], ", name = ", params[:waithandle], "\n"
22
+ WaitCondition.get_conditions.each do |w|
23
+ w.set_handle(params[:waithandle].to_s)
24
+ end
25
+ 'success
26
+ '
27
+ end
28
+
29
+ get '/metadata/:stack_id/:logical_id' do
30
+ content_type :json
31
+ Metadata.get_metadata(params[:stack_id],params[:logical_id]).to_json
32
+ end
33
+
34
+ #AWS style actions
35
+ get '/' do
36
+ if "DescribeStackResource".eql?(params[:Action])
37
+ content_type :json
38
+ Metadata.get_metadata(params[:StackName],params[:LogicalResourceId]).to_json
39
+ end
40
+ end
41
+
42
+ run! if app_file == $0
43
+ end
44
+
45
+ # class MetadataServer < Sinatra::Base
46
+ # set :static, false
47
+ # set :run, true
48
+
49
+ # def initialize()
50
+ # super
51
+ # end
52
+
53
+ # get '/api/stacks/:stack_id/resource/:logical_id' do
54
+ # print "Got GET of ", params[:stack_id], ", resource = ", params[:logical_id], "\n"
55
+ # end
56
+ # end
57
+
58
+ #run! if app_file == $0
59
+
60
+ end
@@ -1,10 +1,5 @@
1
- require 'ruote'
2
- require 'ruote/storage/hash_storage'
3
- require 'optparse'
4
1
  require 'stackmate'
5
- require 'stackmate/classmap'
6
- require 'stackmate/waitcondition_server'
7
- #require 'stackmate/logging'
2
+
8
3
  #API for creating stack
9
4
  #TODO clean up repeated code
10
5
 
@@ -43,4 +38,4 @@ module StackMate
43
38
  end
44
39
  #end
45
40
  end
46
- end
41
+ end
@@ -1,3 +1,3 @@
1
1
  module StackMate
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -1,15 +1,14 @@
1
- require 'rufus-json/automatic'
2
- require 'ruote'
3
- require 'ruote/storage/fs_storage'
4
- require 'json'
5
1
  require 'sinatra/base'
6
2
  require 'stackmate/participants/common'
7
3
 
8
4
  module StackMate
9
5
 
10
6
  class WaitConditionServer < Sinatra::Base
7
+ @@url_base = ENV['WAIT_COND_URL_BASE']?ENV['WAIT_COND_URL_BASE']:StackMate::WAIT_COND_URL_BASE_DEFAULT
11
8
  set :static, false
12
9
  set :run, true
10
+ set :bind, Proc.new { URI.parse(@@url_base).host}
11
+ set :port, Proc.new { URI.parse(@@url_base).port}
13
12
 
14
13
  def initialize()
15
14
  super
@@ -24,9 +23,8 @@ module StackMate
24
23
  '
25
24
  end
26
25
 
27
-
28
26
  run! if app_file == $0
29
27
 
30
28
  end
31
29
 
32
- end
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackmate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-18 00:00:00.000000000 Z
12
+ date: 2014-01-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -119,6 +119,7 @@ files:
119
119
  - lib/stackmate/client.rb
120
120
  - lib/stackmate/intrinsic_functions.rb
121
121
  - lib/stackmate/logging.rb
122
+ - lib/stackmate/metadata.rb
122
123
  - lib/stackmate/participants/cloudstack.rb
123
124
  - lib/stackmate/participants/cloudstack_affinitygroup.rb
124
125
  - lib/stackmate/participants/cloudstack_autoscalepolicy.rb
@@ -171,6 +172,7 @@ files:
171
172
  - lib/stackmate/resolver.rb
172
173
  - lib/stackmate/stack.rb
173
174
  - lib/stackmate/stack_executor.rb
175
+ - lib/stackmate/stack_server.rb
174
176
  - lib/stackmate/stackpi.rb
175
177
  - lib/stackmate/version.rb
176
178
  - lib/stackmate/waitcondition_server.rb