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.
- data/README.md +1 -0
- data/bin/stackmate.rb +9 -5
- data/lib/stackmate/intrinsic_functions.rb +3 -3
- data/lib/stackmate/metadata.rb +44 -0
- data/lib/stackmate/participants/cloudstack.rb +51 -10
- data/lib/stackmate/participants/cloudstack_affinitygroup.rb +4 -1
- data/lib/stackmate/participants/cloudstack_autoscalepolicy.rb +4 -1
- data/lib/stackmate/participants/cloudstack_autoscalevmgroup.rb +4 -1
- data/lib/stackmate/participants/cloudstack_autoscalevmprofile.rb +4 -1
- data/lib/stackmate/participants/cloudstack_condition.rb +4 -1
- data/lib/stackmate/participants/cloudstack_egressfirewallrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_firewallrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_globalloadbalancerrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_instancegroup.rb +4 -1
- data/lib/stackmate/participants/cloudstack_ipaddress.rb +4 -1
- data/lib/stackmate/participants/cloudstack_ipforwardingrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_iptonic.rb +4 -1
- data/lib/stackmate/participants/cloudstack_iso.rb +4 -1
- data/lib/stackmate/participants/cloudstack_lbhealthcheckpolicy.rb +4 -1
- data/lib/stackmate/participants/cloudstack_lbstickinesspolicy.rb +4 -1
- data/lib/stackmate/participants/cloudstack_loadbalancer.rb +4 -1
- data/lib/stackmate/participants/cloudstack_loadbalancerrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_network.rb +4 -1
- data/lib/stackmate/participants/cloudstack_networkacl.rb +4 -1
- data/lib/stackmate/participants/cloudstack_networkacllist.rb +4 -1
- data/lib/stackmate/participants/cloudstack_nictovirtualmachine.rb +5 -2
- data/lib/stackmate/participants/cloudstack_portforwardingrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_project.rb +4 -1
- data/lib/stackmate/participants/cloudstack_remoteaccessvpn.rb +4 -1
- data/lib/stackmate/participants/cloudstack_securitygroup.rb +4 -1
- data/lib/stackmate/participants/cloudstack_securitygroupegress.rb +4 -1
- data/lib/stackmate/participants/cloudstack_securitygroupingress.rb +4 -1
- data/lib/stackmate/participants/cloudstack_snapshot.rb +4 -1
- data/lib/stackmate/participants/cloudstack_snapshotpolicy.rb +4 -1
- data/lib/stackmate/participants/cloudstack_sshkeypair.rb +4 -1
- data/lib/stackmate/participants/cloudstack_staticnat.rb +4 -1
- data/lib/stackmate/participants/cloudstack_staticroute.rb +4 -1
- data/lib/stackmate/participants/cloudstack_tags.rb +4 -1
- data/lib/stackmate/participants/cloudstack_template.rb +4 -1
- data/lib/stackmate/participants/cloudstack_togloballoadbalancerrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_toloadbalancerrule.rb +4 -1
- data/lib/stackmate/participants/cloudstack_virtualmachine.rb +257 -281
- data/lib/stackmate/participants/cloudstack_virtualmachineops.rb +5 -2
- data/lib/stackmate/participants/cloudstack_vmsnapshot.rb +4 -1
- data/lib/stackmate/participants/cloudstack_volume.rb +4 -1
- data/lib/stackmate/participants/cloudstack_volumeops.rb +86 -90
- data/lib/stackmate/participants/cloudstack_vpc.rb +4 -1
- data/lib/stackmate/participants/cloudstack_vpnconnection.rb +4 -1
- data/lib/stackmate/participants/cloudstack_vpncustomergateway.rb +4 -1
- data/lib/stackmate/participants/cloudstack_vpngateway.rb +4 -1
- data/lib/stackmate/participants/cloudstack_vpnuser.rb +4 -1
- data/lib/stackmate/participants/common.rb +4 -2
- data/lib/stackmate/resolver.rb +28 -1
- data/lib/stackmate/stack_executor.rb +9 -5
- data/lib/stackmate/stack_server.rb +60 -0
- data/lib/stackmate/stackpi.rb +2 -7
- data/lib/stackmate/version.rb +1 -1
- data/lib/stackmate/waitcondition_server.rb +4 -6
- metadata +4 -2
data/lib/stackmate/resolver.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/stackmate/stackpi.rb
CHANGED
@@ -1,10 +1,5 @@
|
|
1
|
-
require 'ruote'
|
2
|
-
require 'ruote/storage/hash_storage'
|
3
|
-
require 'optparse'
|
4
1
|
require 'stackmate'
|
5
|
-
|
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
|
data/lib/stackmate/version.rb
CHANGED
@@ -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.
|
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:
|
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
|