simple_deploy 0.7.6.beta.1 → 0.7.6.beta.3
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.
- checksums.yaml +7 -0
- data/.gitignore +1 -2
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +2 -0
- data/lib/simple_deploy/aws/cloud_formation/error.rb +2 -1
- data/lib/simple_deploy/aws/simpledb.rb +4 -0
- data/lib/simple_deploy/cli/clone.rb +20 -3
- data/lib/simple_deploy/cli/deploy.rb +2 -2
- data/lib/simple_deploy/entry.rb +18 -11
- data/lib/simple_deploy/stack/output_mapper.rb +0 -1
- data/lib/simple_deploy/stack/stack_updater.rb +4 -0
- data/lib/simple_deploy/version.rb +1 -1
- data/spec/aws/simpledb_spec.rb +8 -0
- data/spec/cli/clone_spec.rb +40 -0
- data/spec/entry_spec.rb +31 -0
- data/spec/stack/stack_updater_spec.rb +2 -2
- metadata +11 -31
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 05edf27f77f29c8d99c992b7736ba3393543e8a2
|
4
|
+
data.tar.gz: 51710aa5eac62c1943b959f4929962d53150c027
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 38ecf0947147ad91ef5ba62d1ed7c8c077b14a10395e82f902e5817b07b5cf8eeb1bea171a90b71268a45059f98445b3216758faf12a93810796640c70b4a448
|
7
|
+
data.tar.gz: 21e5b0507a33b06b84d3a8ea21d50402c28d6f6c5ca8f062bd206b0c4a22b27e62c58433da27e579a1a0e5e0bbd29dd5d9e5009d2917787c5c184f6bc81cbd32
|
data/.gitignore
CHANGED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
simple_deploy
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.0.0-p247
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
## HEAD:
|
2
2
|
|
3
|
+
* Added feature for issue 169 to remove values which are set to nil
|
4
|
+
* Added feature for issue 191 to read in input stack for clone command
|
3
5
|
* Fixed issue 176 where multiple deploys did not exit if first deploy failed
|
4
6
|
* Fixed find_xml_file error when a blank exception is thrown from cloudformation.
|
5
7
|
|
@@ -20,7 +20,8 @@ module SimpleDeploy
|
|
20
20
|
when 'No updates are to be performed.'
|
21
21
|
@logger.info msg
|
22
22
|
when /Template requires parameter(.*)/
|
23
|
-
@logger.
|
23
|
+
@logger.error msg
|
24
|
+
raise Exceptions::CloudFormationError.new msg
|
24
25
|
when /^Stack:(.*) does not exist$/
|
25
26
|
@logger.error msg
|
26
27
|
raise Exceptions::UnknownStack.new msg
|
@@ -19,6 +19,10 @@ simple_deploy clone -s SOURCE_STACK_NAME -n NEW_STACK_NAME -e ENVIRONMENT -a ATT
|
|
19
19
|
EOS
|
20
20
|
opt :help, "Display Help"
|
21
21
|
opt :environment, "Set the target environment", :type => :string
|
22
|
+
opt :input_stack, "Read outputs from given stack(s) and map them \
|
23
|
+
to parameter inputs in the new stack. These will be passed to inputs with \
|
24
|
+
matching or pluralized names. Can be specified multiple times.", :type => :string,
|
25
|
+
:multi => true
|
22
26
|
opt :log_level, "Log level: debug, info, warn, error", :type => :string,
|
23
27
|
:default => 'info'
|
24
28
|
opt :source_name, "Stack name for the stack to clone", :type => :string
|
@@ -35,10 +39,7 @@ EOS
|
|
35
39
|
SimpleDeploy.logger @opts[:log_level]
|
36
40
|
|
37
41
|
override_attributes = parse_attributes :attributes => @opts[:attributes]
|
38
|
-
|
39
42
|
cloned_attributes = filter_attributes source_stack.attributes
|
40
|
-
new_attributes = merge_attributes cloned_attributes, override_attributes
|
41
|
-
new_attributes += add_attributes cloned_attributes, override_attributes
|
42
43
|
|
43
44
|
template_file = Tempfile.new("#{@opts[:new_name]}_template.json")
|
44
45
|
template_file_path = template_file.path
|
@@ -49,6 +50,18 @@ EOS
|
|
49
50
|
template_file.write source_stack.template
|
50
51
|
end
|
51
52
|
|
53
|
+
if @opts[:input_stack]
|
54
|
+
input_attributes = mapper.map_outputs_from_stacks :stacks => @opts[:input_stack],
|
55
|
+
:template => template_file_path
|
56
|
+
new_overrides = merge_attributes input_attributes, override_attributes
|
57
|
+
new_overrides += add_attributes input_attributes, override_attributes
|
58
|
+
else
|
59
|
+
new_overrides = override_attributes
|
60
|
+
end
|
61
|
+
|
62
|
+
new_attributes = merge_attributes cloned_attributes, new_overrides
|
63
|
+
new_attributes += add_attributes cloned_attributes, new_overrides
|
64
|
+
|
52
65
|
rescue_exceptions_and_exit do
|
53
66
|
new_stack.create :attributes => new_attributes,
|
54
67
|
:template => template_file_path
|
@@ -83,6 +96,10 @@ EOS
|
|
83
96
|
end.compact
|
84
97
|
end
|
85
98
|
|
99
|
+
def mapper
|
100
|
+
@om ||= Stack::OutputMapper.new :environment => @opts[:environment]
|
101
|
+
end
|
102
|
+
|
86
103
|
def source_stack
|
87
104
|
@source_stack = Stack.new :name => @opts[:source_name],
|
88
105
|
:environment => @opts[:environment]
|
@@ -86,11 +86,11 @@ EOS
|
|
86
86
|
if result
|
87
87
|
notifier.send_deployment_complete_message unless @opts[:quiet]
|
88
88
|
else
|
89
|
-
logger.error "Deployment to #{name} did not complete
|
89
|
+
logger.error "Deployment to #{name} did not complete successfully."
|
90
90
|
exit 1
|
91
91
|
end
|
92
92
|
else
|
93
|
-
logger.error "Update of #{name} did not complete
|
93
|
+
logger.error "Update of #{name} did not complete successfully."
|
94
94
|
exit 1
|
95
95
|
end
|
96
96
|
|
data/lib/simple_deploy/entry.rb
CHANGED
@@ -28,26 +28,33 @@ module SimpleDeploy
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def set_attributes(a)
|
31
|
-
a.each
|
31
|
+
a.each do |attribute|
|
32
|
+
@custom_attributes.merge! attribute
|
33
|
+
end
|
32
34
|
end
|
33
35
|
|
34
36
|
def save
|
35
|
-
@custom_attributes.merge! 'Name'
|
37
|
+
@custom_attributes.merge! 'Name' => name,
|
36
38
|
'CreatedAt' => Time.now.utc.to_s
|
37
39
|
|
38
|
-
current_attributes = attributes
|
39
|
-
|
40
|
-
|
40
|
+
current_attributes = attributes.reject do |key,value|
|
41
|
+
if value == 'nil'
|
42
|
+
@logger.info "Removing attribute set to nil '#{key}'."
|
43
|
+
sdb_connect.delete_items 'stacks', name, key => nil
|
44
|
+
true
|
45
|
+
end
|
41
46
|
end
|
42
47
|
|
43
|
-
|
44
|
-
name,
|
45
|
-
current_attributes,
|
46
|
-
:replace => current_attributes.keys )
|
48
|
+
current_attributes.each_pair {|k,v| @logger.debug "Setting attribute #{k}=#{v}"}
|
47
49
|
|
48
|
-
|
49
|
-
|
50
|
+
sdb_connect.put_attributes 'stacks',
|
51
|
+
name,
|
52
|
+
current_attributes,
|
53
|
+
:replace => current_attributes.keys
|
50
54
|
|
55
|
+
@logger.debug "Save to SimpleDB successful."
|
56
|
+
end
|
57
|
+
|
51
58
|
def delete_attributes
|
52
59
|
sdb_connect.delete('stacks', name)
|
53
60
|
@logger.info "Delete from SimpleDB successful."
|
@@ -51,6 +51,10 @@ module SimpleDeploy
|
|
51
51
|
h = {}
|
52
52
|
entry_attributes = @entry.attributes
|
53
53
|
template_parameters.each do |p|
|
54
|
+
if entry_attributes[p] == 'nil'
|
55
|
+
@logger.debug "Skipping attribute #{p}"
|
56
|
+
next
|
57
|
+
end
|
54
58
|
h[p] = entry_attributes[p] if entry_attributes[p]
|
55
59
|
end
|
56
60
|
h
|
data/spec/aws/simpledb_spec.rb
CHANGED
@@ -85,5 +85,13 @@ describe SimpleDeploy::AWS::SimpleDB do
|
|
85
85
|
|
86
86
|
@db.delete('domain1', 'item1').body['RequestId'].should == 'rid'
|
87
87
|
end
|
88
|
+
end
|
89
|
+
|
90
|
+
describe 'delete_items' do
|
91
|
+
it 'should delete the specific attributes passed associated with domain and key' do
|
92
|
+
@db_mock.should_receive(:delete_attributes).with('domain1', 'item1', {'value'=>nil}).and_return(@response_stub)
|
93
|
+
|
94
|
+
@db.delete_items('domain1', 'item1', {'value'=>nil}).body['RequestId'].should == 'rid'
|
95
|
+
end
|
88
96
|
end
|
89
97
|
end
|
data/spec/cli/clone_spec.rb
CHANGED
@@ -186,6 +186,46 @@ describe SimpleDeploy::CLI::Clone do
|
|
186
186
|
|
187
187
|
subject.clone
|
188
188
|
end
|
189
|
+
|
190
|
+
it 'should create the new stack using existing input stack, but cmd line args win' do
|
191
|
+
options = { :environment => 'my_env',
|
192
|
+
:input_stack => 'input_stack',
|
193
|
+
:template => 'brand_new_template.json',
|
194
|
+
:log_level => 'debug',
|
195
|
+
:source_name => 'source_stack',
|
196
|
+
:new_name => 'new_stack',
|
197
|
+
:attributes => ['chef_repo_bucket_prefix=updated-intu-lc',
|
198
|
+
'chef_repo_domain=updated_community_chef_repo',
|
199
|
+
'SolrClientTrafficContainer=solr-client-traffic-container',
|
200
|
+
'InputStackOutputs=cmdline_value'] }
|
201
|
+
|
202
|
+
input_attributes = [{'InputStackOutputs' => 'inputvalue'}, {'OutputValue' => 'outputs'}]
|
203
|
+
input_stub = stub 'input', :map_outputs_from_stacks => input_attributes
|
204
|
+
SimpleDeploy::Stack::OutputMapper.stub :new => input_stub
|
205
|
+
|
206
|
+
subject.should_receive(:valid_options?).
|
207
|
+
with(:provided => options,
|
208
|
+
:required => [:environment, :source_name, :new_name])
|
209
|
+
Trollop.stub(:options).and_return(options)
|
210
|
+
|
211
|
+
@new_stack_mock.stub(:template).and_return('foo' => 'bah')
|
212
|
+
@new_stack_mock.should_receive(:create) do |options|
|
213
|
+
options[:attributes].should == [{ 'AmiId' => 'ami-7b6a4e3e' },
|
214
|
+
{ 'AppEnv' => 'pod-2-cd-1' },
|
215
|
+
{ 'MaximumAppInstances' => 1 },
|
216
|
+
{ 'MinimumAppInstances' => 1 },
|
217
|
+
{ 'chef_repo_bucket_prefix' => 'updated-intu-lc' },
|
218
|
+
{ 'chef_repo_domain' => 'updated_community_chef_repo' },
|
219
|
+
{ 'InputStackOutputs' => 'cmdline_value' },
|
220
|
+
{ 'OutputValue' => 'outputs'},
|
221
|
+
{ 'SolrClientTrafficContainer' => 'solr-client-traffic-container' }]
|
222
|
+
|
223
|
+
options[:template].should match /brand_new_template.json/
|
224
|
+
end
|
225
|
+
|
226
|
+
subject.clone
|
227
|
+
end
|
228
|
+
|
189
229
|
end
|
190
230
|
end
|
191
231
|
end
|
data/spec/entry_spec.rb
CHANGED
@@ -73,6 +73,37 @@ describe SimpleDeploy::Entry do
|
|
73
73
|
@entry.save
|
74
74
|
end
|
75
75
|
|
76
|
+
it "should remove attributes set to nil" do
|
77
|
+
Timecop.travel Time.utc(2012, 10, 22, 13, 30)
|
78
|
+
|
79
|
+
@simple_db_mock.should_receive(:select).
|
80
|
+
with("select * from stacks where itemName() = 'test-stack-us-west-1'").
|
81
|
+
and_return('test-stack-us-west-1' => { 'key1' => ['value1'] })
|
82
|
+
|
83
|
+
@simple_db_mock.should_receive(:delete_items).
|
84
|
+
with("stacks",
|
85
|
+
"test-stack-us-west-1",
|
86
|
+
{'key2' => nil})
|
87
|
+
|
88
|
+
@simple_db_mock.should_receive(:delete_items).
|
89
|
+
with("stacks",
|
90
|
+
"test-stack-us-west-1",
|
91
|
+
{'key3' => nil})
|
92
|
+
|
93
|
+
|
94
|
+
@simple_db_mock.should_receive(:put_attributes).
|
95
|
+
with("stacks",
|
96
|
+
"test-stack-us-west-1",
|
97
|
+
{ "key" => "value",
|
98
|
+
"key1" => "value1",
|
99
|
+
"Name" => "test-stack-us-west-1",
|
100
|
+
"CreatedAt" => "2012-10-22 13:30:00 UTC" },
|
101
|
+
{ :replace => ["key1", "key", "Name", "CreatedAt"] } )
|
102
|
+
@entry.set_attributes(['key' => 'value', 'key2' => 'nil', 'key3' => 'nil'])
|
103
|
+
|
104
|
+
@entry.save
|
105
|
+
end
|
106
|
+
|
76
107
|
it "should merge custom attributes" do
|
77
108
|
@simple_db_mock.should_receive(:select).
|
78
109
|
with("select * from stacks where itemName() = 'test-stack-us-west-1'").
|
@@ -38,7 +38,7 @@ describe SimpleDeploy::StackUpdater do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "should update the stack when parameters change and stack is stable" do
|
41
|
-
attributes = { "param1" => "value1", "param3" => "value3" }
|
41
|
+
attributes = { "param1" => "value1", "param3" => "value3" , "paramremove" => "nil" }
|
42
42
|
entry_mock = mock 'entry mock'
|
43
43
|
status_mock = mock 'status mock'
|
44
44
|
cloud_formation_mock = mock 'cloud formation mock'
|
@@ -63,7 +63,7 @@ describe SimpleDeploy::StackUpdater do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it "should update the stack when only the template body changes and stack is stable" do
|
66
|
-
attributes = { "param1" => "value1", "param3" => "value3" }
|
66
|
+
attributes = { "param1" => "value1", "param3" => "value3" , "paramremove" => "nil" }
|
67
67
|
entry_mock = mock 'entry mock'
|
68
68
|
status_mock = mock 'status mock'
|
69
69
|
cloud_formation_mock = mock 'cloud formation mock'
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.6.beta.
|
5
|
-
prerelease: 6
|
4
|
+
version: 0.7.6.beta.3
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Brett Weaver
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-09-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: fakefs
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,23 +27,20 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ~>
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: simplecov
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ~>
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ~>
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: timecop
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ~>
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ~>
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: capistrano
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - '='
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - '='
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -110,7 +97,6 @@ dependencies:
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: esbit
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - ~>
|
116
102
|
- !ruby/object:Gem::Version
|
@@ -118,7 +104,6 @@ dependencies:
|
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - ~>
|
124
109
|
- !ruby/object:Gem::Version
|
@@ -126,7 +111,6 @@ dependencies:
|
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: trollop
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
115
|
- - '='
|
132
116
|
- !ruby/object:Gem::Version
|
@@ -134,7 +118,6 @@ dependencies:
|
|
134
118
|
type: :runtime
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
122
|
- - '='
|
140
123
|
- !ruby/object:Gem::Version
|
@@ -142,7 +125,6 @@ dependencies:
|
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: fog
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
129
|
- - '='
|
148
130
|
- !ruby/object:Gem::Version
|
@@ -150,7 +132,6 @@ dependencies:
|
|
150
132
|
type: :runtime
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
136
|
- - '='
|
156
137
|
- !ruby/object:Gem::Version
|
@@ -158,7 +139,6 @@ dependencies:
|
|
158
139
|
- !ruby/object:Gem::Dependency
|
159
140
|
name: xml-simple
|
160
141
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
142
|
requirements:
|
163
143
|
- - '='
|
164
144
|
- !ruby/object:Gem::Version
|
@@ -166,7 +146,6 @@ dependencies:
|
|
166
146
|
type: :runtime
|
167
147
|
prerelease: false
|
168
148
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
149
|
requirements:
|
171
150
|
- - '='
|
172
151
|
- !ruby/object:Gem::Version
|
@@ -181,6 +160,8 @@ extensions: []
|
|
181
160
|
extra_rdoc_files: []
|
182
161
|
files:
|
183
162
|
- .gitignore
|
163
|
+
- .ruby-gemset
|
164
|
+
- .ruby-version
|
184
165
|
- .travis.yml
|
185
166
|
- CHANGELOG.md
|
186
167
|
- Gemfile
|
@@ -286,27 +267,26 @@ files:
|
|
286
267
|
- spec/template_spec.rb
|
287
268
|
homepage: ''
|
288
269
|
licenses: []
|
270
|
+
metadata: {}
|
289
271
|
post_install_message:
|
290
272
|
rdoc_options: []
|
291
273
|
require_paths:
|
292
274
|
- lib
|
293
275
|
required_ruby_version: !ruby/object:Gem::Requirement
|
294
|
-
none: false
|
295
276
|
requirements:
|
296
|
-
- -
|
277
|
+
- - '>='
|
297
278
|
- !ruby/object:Gem::Version
|
298
279
|
version: '0'
|
299
280
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
300
|
-
none: false
|
301
281
|
requirements:
|
302
|
-
- -
|
282
|
+
- - '>'
|
303
283
|
- !ruby/object:Gem::Version
|
304
284
|
version: 1.3.1
|
305
285
|
requirements: []
|
306
286
|
rubyforge_project: simple_deploy
|
307
|
-
rubygems_version:
|
287
|
+
rubygems_version: 2.0.6
|
308
288
|
signing_key:
|
309
|
-
specification_version:
|
289
|
+
specification_version: 4
|
310
290
|
summary: Opinionated gem for AWS resource management.
|
311
291
|
test_files:
|
312
292
|
- spec/artifact_spec.rb
|