sfn 1.2.0 → 2.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/bin/sfn +4 -0
- data/docs/configuration.md +20 -0
- data/lib/sfn.rb +1 -0
- data/lib/sfn/command/conf.rb +40 -0
- data/lib/sfn/command/create.rb +5 -1
- data/lib/sfn/command/events.rb +3 -1
- data/lib/sfn/command/list.rb +4 -1
- data/lib/sfn/command/update.rb +6 -6
- data/lib/sfn/command_module/base.rb +2 -2
- data/lib/sfn/command_module/stack.rb +8 -2
- data/lib/sfn/command_module/template.rb +65 -18
- data/lib/sfn/config/validate.rb +5 -0
- data/lib/sfn/monkey_patch/stack.rb +2 -2
- data/lib/sfn/version.rb +1 -1
- data/sfn.gemspec +7 -18
- metadata +21 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1d4a0525d2165a404b2a131f9b1edb470fd2b5b3
|
4
|
+
data.tar.gz: c6640282596fb6f2770b05a3dd8e7a60f6e26312
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e30c1d2a4470fe271c4bcd6a8dc6affe57fd9d101b68bb19a27ce604f8b54c5515879a1b231c3e8504da639a347504b0c46ba5faa6f23624233840d86ae547e
|
7
|
+
data.tar.gz: 95995a16cc8cb71cae4dc732a9b13833d1c9e16b7d0a55a78e2c2fd660c7668de86c7ecdd1366f961e497e138d2371abae75c0a827fa4d89584fdae33d30a70f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# v2.0.0
|
2
|
+
* [enhancement] Move to SparkleFormation 2.0
|
3
|
+
* [enhancement] Add more credential content to configuration file generator
|
4
|
+
* [feature] Run Bundler.require if Bundler is detected (#97)
|
5
|
+
* [enhancement] Extract provider specific details for abstracts (#98)
|
6
|
+
* [enhancement] Add `nesting_prefix` to customize nested template storage path (#99)
|
7
|
+
* [fix] Properly display substack planning information
|
8
|
+
* [fix] Force minimum width on list columns to prevent bunching on no content
|
9
|
+
|
1
10
|
# v1.2.0
|
2
11
|
* [fix] Always require packs when loading
|
3
12
|
* [fix] Prevent stale output display on update
|
data/bin/sfn
CHANGED
data/docs/configuration.md
CHANGED
@@ -6,6 +6,8 @@ anchors:
|
|
6
6
|
url: "#sfn-based"
|
7
7
|
- title: "knife-based"
|
8
8
|
url: "#knife-based"
|
9
|
+
- title: "Generate sfn configuration"
|
10
|
+
url: "#generate-sfn-configuration"
|
9
11
|
- title: "configuration-options"
|
10
12
|
url: "#configuration-options"
|
11
13
|
---
|
@@ -34,6 +36,20 @@ Supported formats:
|
|
34
36
|
The configuration is contained within a file named
|
35
37
|
`.sfn`.
|
36
38
|
|
39
|
+
#### Generate sfn configuration
|
40
|
+
|
41
|
+
The `sfn` command provides a `conf` subcommand. By
|
42
|
+
default this command will display current local
|
43
|
+
configuration values. It can also be used to generate
|
44
|
+
an initial configuration file which can then be
|
45
|
+
customized:
|
46
|
+
|
47
|
+
~~~
|
48
|
+
$ sfn conf --generate
|
49
|
+
~~~
|
50
|
+
|
51
|
+
This will create a new `.sfn` file in the working directory.
|
52
|
+
|
37
53
|
### `knife`-based
|
38
54
|
|
39
55
|
The `sfn` application includes a plugin for the
|
@@ -73,6 +89,10 @@ $ knife sparkleformation --help
|
|
73
89
|
| | Valid | `String`
|
74
90
|
| | Default | none
|
75
91
|
|----------------------------|---------------|---------------------------------------------------------------
|
92
|
+
| `nesting_prefix` | Description | Prefix to prepend to template file name within object store
|
93
|
+
| | Valid | `String`
|
94
|
+
| | Default | none
|
95
|
+
|----------------------------|---------------|---------------------------------------------------------------
|
76
96
|
| `sparkle_pack` | Description | SparklePacks to load
|
77
97
|
| | Valid | `Array<String>`
|
78
98
|
| | Default | none
|
data/lib/sfn.rb
CHANGED
data/lib/sfn/command/conf.rb
CHANGED
@@ -59,8 +59,12 @@ module Sfn
|
|
59
59
|
# options, please see:
|
60
60
|
# http://www.sparkleformation.io/docs/sfn/configuration.html
|
61
61
|
Configuration.new do
|
62
|
+
# Set style of stack nesting
|
62
63
|
apply_nesting 'deep'
|
64
|
+
# Enable processing of SparkleFormation templates
|
63
65
|
processing true
|
66
|
+
# Provider specific options used when creating
|
67
|
+
# new stacks. Options defined here are AWS specific.
|
64
68
|
options do
|
65
69
|
on_failure 'nothing'
|
66
70
|
notification_topics []
|
@@ -69,14 +73,50 @@ Configuration.new do
|
|
69
73
|
creator ENV['USER']
|
70
74
|
end
|
71
75
|
end
|
76
|
+
# Name of bucket in object store to hold nested
|
77
|
+
# stack templates
|
72
78
|
# nesting_bucket 'BUCKET_NAME'
|
79
|
+
# Prefix used on generated template path prior to storage
|
80
|
+
# in the object store
|
81
|
+
# nesting_prefix 'nested-templates'
|
82
|
+
# Remote provider credentials
|
73
83
|
credentials do
|
84
|
+
# Remote provider name (:aws, :azure, :open_stack, :rackspace)
|
74
85
|
provider :aws
|
86
|
+
# AWS credentials information
|
75
87
|
aws_access_key_id ENV['AWS_ACCESS_KEY_ID']
|
76
88
|
aws_secret_access_key ENV['AWS_SECRET_ACCESS_KEY']
|
77
89
|
aws_region ENV['AWS_REGION']
|
78
90
|
aws_bucket_region ENV['AWS_REGION']
|
79
91
|
# aws_sts_role_arn ENV['AWS_STS_ROLE_ARN']
|
92
|
+
# Eucalyptus related additions
|
93
|
+
# api_endpoint ENV['EUCA_ENDPOINT']
|
94
|
+
# euca_compat 'path'
|
95
|
+
# ssl_enabled false
|
96
|
+
# Azure credentials information
|
97
|
+
azure_tenant_id ENV['AZURE_TENANT_ID']
|
98
|
+
azure_client_id ENV['AZURE_CLIENT_ID']
|
99
|
+
azure_subscription_id ENV['AZURE_SUBSCRIPTION_ID']
|
100
|
+
azure_client_secret ENV['AZURE_CLIENT_ID']
|
101
|
+
azure_region ENV['AZURE_REGION']
|
102
|
+
azure_blob_account_name ENV['AZURE_BLOB_ACCOUNT_NAME']
|
103
|
+
azure_blob_secret_key ENV['AZURE_BLOB_SECRET_KEY']
|
104
|
+
# Defaults to "miasma-orchestration-templates"
|
105
|
+
azure_root_orchestration_container ENV['AZURE_ROOT_ORCHESTRATION_CONTAINER']
|
106
|
+
# OpenStack credentials information
|
107
|
+
open_stack_identity_url ENV['OPENSTACK_IDENTITY_URL']
|
108
|
+
open_stack_username ENV['OPENSTACK_USERNAME']
|
109
|
+
open_stack_user_id ENV['OPENSTACK_USER_ID']
|
110
|
+
open_stack_password ENV['OPENSTACK_PASSWORD']
|
111
|
+
open_stack_token ENV['OPENSTACK_TOKEN']
|
112
|
+
open_stack_region ENV['OPENSTACK_REGION']
|
113
|
+
open_stack_tenant_name ENV['OPENSTACK_TENANT_NAME']
|
114
|
+
open_stack_domain ENV['OPENSTACK_DOMAIN']
|
115
|
+
open_stack_project ENV['OPENSTACK_PROJECT']
|
116
|
+
# Rackspace credentials information
|
117
|
+
rackspace_api_key ENV['RACKSPACE_API_KEY']
|
118
|
+
rackspace_username ENV['RACKSPACE_USERNAME']
|
119
|
+
rackspace_region ENV['RACKSPACE_REGION']
|
80
120
|
end
|
81
121
|
end
|
82
122
|
EOF
|
data/lib/sfn/command/create.rb
CHANGED
@@ -14,6 +14,10 @@ module Sfn
|
|
14
14
|
def execute!
|
15
15
|
name_required!
|
16
16
|
name = name_args.first
|
17
|
+
|
18
|
+
# NOTE: Always disable plans on create
|
19
|
+
config[:plan] = false
|
20
|
+
|
17
21
|
if(config[:template])
|
18
22
|
file = config[:template]
|
19
23
|
else
|
@@ -78,7 +82,7 @@ module Sfn
|
|
78
82
|
namespace.const_get(:Describe).new({:outputs => true}, [name]).execute!
|
79
83
|
else
|
80
84
|
ui.fatal "Create of new stack #{ui.color(name, :bold)}: #{ui.color('FAILED', :red, :bold)}"
|
81
|
-
raise
|
85
|
+
raise 'Stack did not reach a successful completion state.'
|
82
86
|
end
|
83
87
|
else
|
84
88
|
ui.warn 'Stack state polling has been disabled.'
|
data/lib/sfn/command/events.rb
CHANGED
@@ -26,7 +26,9 @@ module Sfn
|
|
26
26
|
events = get_events
|
27
27
|
row(:header => true) do
|
28
28
|
allowed_attributes.each do |attr|
|
29
|
-
|
29
|
+
width_val = events.map{|e| e[attr].to_s.length}.push(attr.length).max + 2
|
30
|
+
width_val = width_val > 70 ? 70 : width_val < 20 ? 20 : width_val
|
31
|
+
column attr.split('_').map(&:capitalize).join(' '), :width => width_val
|
30
32
|
end
|
31
33
|
end
|
32
34
|
events.each do |event|
|
data/lib/sfn/command/list.rb
CHANGED
@@ -13,8 +13,11 @@ module Sfn
|
|
13
13
|
table(:border => false) do
|
14
14
|
stacks = get_stacks
|
15
15
|
row(:header => true) do
|
16
|
+
|
16
17
|
allowed_attributes.each do |attr|
|
17
|
-
|
18
|
+
width_val = stacks.map{|e| e[attr].to_s.length}.push(attr.length).max + 2
|
19
|
+
width_val = width_val > 70 ? 70 : width_val < 20 ? 20 : width_val
|
20
|
+
column attr.split('_').map(&:capitalize).join(' '), :width => width_val
|
18
21
|
end
|
19
22
|
end
|
20
23
|
get_stacks.each do |stack|
|
data/lib/sfn/command/update.rb
CHANGED
@@ -106,7 +106,7 @@ module Sfn
|
|
106
106
|
|
107
107
|
if(config[:plan])
|
108
108
|
stack.parameters = original_parameters
|
109
|
-
plan =
|
109
|
+
plan = build_planner(stack)
|
110
110
|
if(plan)
|
111
111
|
result = plan.generate_plan(stack.template, config_root_parameters)
|
112
112
|
display_plan_information(result)
|
@@ -126,7 +126,7 @@ module Sfn
|
|
126
126
|
namespace.const_get(:Describe).new({:outputs => true}, [name]).execute!
|
127
127
|
else
|
128
128
|
ui.fatal "Update of stack #{ui.color(name, :bold)}: #{ui.color('FAILED', :red, :bold)}"
|
129
|
-
raise
|
129
|
+
raise 'Stack did not reach a successful update completion state.'
|
130
130
|
end
|
131
131
|
else
|
132
132
|
ui.warn 'Stack state polling has been disabled.'
|
@@ -146,9 +146,8 @@ module Sfn
|
|
146
146
|
|
147
147
|
def build_planner(stack)
|
148
148
|
klass_name = stack.api.class.to_s.split('::').last
|
149
|
-
|
150
|
-
|
151
|
-
klass.new(ui, config, arguments, stack)
|
149
|
+
if(Planner.const_defined?(klass_name))
|
150
|
+
Planner.const_get(klass_name).new(ui, config, arguments, stack)
|
152
151
|
else
|
153
152
|
warn "Failed to build planner for current provider. No provider implemented. (`#{klass_name}`)"
|
154
153
|
nil
|
@@ -168,7 +167,8 @@ module Sfn
|
|
168
167
|
said_any_things = false
|
169
168
|
unless(info[:stacks].empty?)
|
170
169
|
info[:stacks].each do |s_name, s_info|
|
171
|
-
|
170
|
+
result = print_plan_result(s_info, [*names, s_name].compact)
|
171
|
+
said_any_things ||= result
|
172
172
|
end
|
173
173
|
end
|
174
174
|
unless(names.flatten.compact.empty?)
|
@@ -29,9 +29,9 @@ module Sfn
|
|
29
29
|
)
|
30
30
|
result.connection.data[:stack_types] = (
|
31
31
|
[
|
32
|
-
result.connection.class.const_get(:RESOURCE_MAPPING).detect do |klass, info|
|
32
|
+
(result.connection.class.const_get(:RESOURCE_MAPPING).detect do |klass, info|
|
33
33
|
info[:api] == :orchestration
|
34
|
-
end.first
|
34
|
+
end || []).first
|
35
35
|
] + custom_stack_types
|
36
36
|
).compact.uniq
|
37
37
|
retry_config = config.fetch(:retry,
|
@@ -12,6 +12,10 @@ module Sfn
|
|
12
12
|
UNPACK_NAME_JOINER = '-sfn-'
|
13
13
|
# maximum number of attempts to get valid parameter value
|
14
14
|
MAX_PARAMETER_ATTEMPTS = 5
|
15
|
+
# Template parameter locations
|
16
|
+
TEMPLATE_PARAMETER_LOCATIONS = ['Parameters', 'parameters']
|
17
|
+
# Template parameter default value locations
|
18
|
+
TEMPLATE_PARAMETER_DEFAULTS = ['Default', 'defaultValue', 'default']
|
15
19
|
|
16
20
|
# Apply any defined remote stacks
|
17
21
|
#
|
@@ -120,7 +124,9 @@ module Sfn
|
|
120
124
|
stack_parameters = stack_parameters.nil? ? Smash.new : stack_parameters._dump
|
121
125
|
else
|
122
126
|
parameter_prefix = []
|
123
|
-
stack_parameters =
|
127
|
+
stack_parameters = TEMPLATE_PARAMETER_LOCATIONS.map do |loc_key|
|
128
|
+
sparkle[loc_key]
|
129
|
+
end.compact.first || Smash.new
|
124
130
|
end
|
125
131
|
unless(stack_parameters.empty?)
|
126
132
|
if(config.get(:parameter).is_a?(Array))
|
@@ -175,7 +181,7 @@ module Sfn
|
|
175
181
|
attempt += 1
|
176
182
|
default = config[:parameters].fetch(
|
177
183
|
ns_k, current_parameters.fetch(
|
178
|
-
k, v[
|
184
|
+
k, TEMPLATE_PARAMETER_DEFAULTS.map{|loc_key| v[loc_key]}.compact.first
|
179
185
|
)
|
180
186
|
)
|
181
187
|
if(config[:interactive_parameters])
|
@@ -90,7 +90,7 @@ module Sfn
|
|
90
90
|
begin
|
91
91
|
SparkleFormation::Sparkle.new(:name => sparkle_name)
|
92
92
|
rescue ArgumentError
|
93
|
-
ui.fatal "Failed to properly setup sparkle pack `#{
|
93
|
+
ui.fatal "Failed to properly setup sparkle pack `#{sparkle_name}`. Check implementation."
|
94
94
|
raise
|
95
95
|
end
|
96
96
|
end
|
@@ -236,34 +236,41 @@ module Sfn
|
|
236
236
|
def process_nested_stack_deep(sf, c_stack=nil)
|
237
237
|
sf.apply_nesting(:deep) do |stack_name, stack, resource|
|
238
238
|
run_callbacks_for(:template, :stack_name => stack_name, :sparkle_stack => stack)
|
239
|
-
|
239
|
+
|
240
240
|
stack_resource = resource._dump
|
241
241
|
|
242
242
|
if(stack.parent)
|
243
|
-
current_parameters = stack.parent.compile.
|
243
|
+
current_parameters = stack.parent.compile.resources.set!(stack_name).properties.parameters
|
244
|
+
current_parameters = current_parameters.nil? ? Smash.new : current_parameters._dump
|
244
245
|
else
|
245
246
|
current_parameters = Smash.new
|
246
247
|
end
|
247
248
|
current_stack = c_stack ? c_stack.nested_stacks.detect{|s| s.data[:logical_id] == stack_name} : nil
|
248
249
|
if(current_stack && current_stack.data[:parent_stack])
|
249
|
-
current_parameters.merge!(
|
250
|
+
current_parameters.merge!(
|
251
|
+
current_stack.data[:parent_stack].template.fetch(
|
252
|
+
'Resources', stack_name, 'Properties', 'Parameters', current_stack.data[:parent_stack].template.fetch(
|
253
|
+
'resources', stack_name, 'properties', 'parameters', Smash.new
|
254
|
+
)
|
255
|
+
)
|
256
|
+
)
|
250
257
|
end
|
251
|
-
full_stack_name =
|
258
|
+
full_stack_name = [
|
259
|
+
config[:nesting_prefix],
|
260
|
+
stack.root_path.map(&:name).map(&:to_s).join('_')
|
261
|
+
].compact.join('/')
|
252
262
|
unless(config[:print_only])
|
253
263
|
result = Smash.new(
|
254
|
-
|
264
|
+
:parameters => populate_parameters!(stack,
|
255
265
|
:stack => current_stack,
|
256
266
|
:current_parameters => current_parameters
|
257
267
|
)
|
258
268
|
)
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
info['Properties'].delete('Stack')
|
265
|
-
end
|
266
|
-
end
|
269
|
+
hold_stack = resource.properties.delete!(:stack)
|
270
|
+
stack_definition = stack.compile.dump!
|
271
|
+
|
272
|
+
if(config[:plan])
|
273
|
+
resource.properties.stack hold_stack
|
267
274
|
end
|
268
275
|
bucket = provider.connection.api_for(:storage).buckets.get(
|
269
276
|
config[:nesting_bucket]
|
@@ -276,21 +283,61 @@ module Sfn
|
|
276
283
|
file.content_type = 'text/json'
|
277
284
|
file.body = MultiJson.dump(Sfn::Utils::StackParameterScrubber.scrub!(stack_definition))
|
278
285
|
file.save
|
279
|
-
url = URI.parse(file.url)
|
280
286
|
result.merge!(
|
281
|
-
|
287
|
+
:url => file.url
|
282
288
|
)
|
283
289
|
else
|
284
290
|
result = Smash.new(
|
285
|
-
|
291
|
+
:url => "http://example.com/bucket/#{full_stack_name}.json"
|
286
292
|
)
|
287
293
|
end
|
288
|
-
result.each do |k,v|
|
294
|
+
format_nested_stack_results(resource._self.provider, result).each do |k,v|
|
289
295
|
resource.properties.set!(k, v)
|
290
296
|
end
|
291
297
|
end
|
292
298
|
end
|
293
299
|
|
300
|
+
# Update the nested stack information for specific provider
|
301
|
+
#
|
302
|
+
# @param provider [Symbol]
|
303
|
+
# @param results [Hash]
|
304
|
+
# @return [Hash]
|
305
|
+
def format_nested_stack_results(provider, results)
|
306
|
+
case provider
|
307
|
+
when :aws
|
308
|
+
if(results[:parameters])
|
309
|
+
results['Parameters'] = results.delete(:parameters)
|
310
|
+
end
|
311
|
+
if(results[:url])
|
312
|
+
url = URI.parse(results.delete(:url))
|
313
|
+
results['TemplateURL'] = "#{url.scheme}://#{url.host}#{url.path}"
|
314
|
+
end
|
315
|
+
results
|
316
|
+
when :heat, :rackspace
|
317
|
+
results[:template] = results.delete(:url)
|
318
|
+
results
|
319
|
+
when :azure
|
320
|
+
if(results[:parameters])
|
321
|
+
results[:parameters] = Smash[
|
322
|
+
results[:parameters].map do |key, value|
|
323
|
+
[key,
|
324
|
+
value.is_a?(Hash) ? value : Smash.new(:value => value)]
|
325
|
+
end
|
326
|
+
]
|
327
|
+
end
|
328
|
+
if(results[:url])
|
329
|
+
results[:templateLink] = Smash.new(
|
330
|
+
:uri => results.delete(:url),
|
331
|
+
:contentVersion => '1.0.0.0'
|
332
|
+
)
|
333
|
+
end
|
334
|
+
results[:mode] = 'Incremental'
|
335
|
+
results
|
336
|
+
else
|
337
|
+
raise "Unknown stack provider value given! `#{provider}`"
|
338
|
+
end
|
339
|
+
end
|
340
|
+
|
294
341
|
# Apply template translation
|
295
342
|
#
|
296
343
|
# @param template [Hash]
|
data/lib/sfn/config/validate.rb
CHANGED
@@ -55,6 +55,11 @@ module Sfn
|
|
55
55
|
:description => 'Bucket to use for storing nested stack templates',
|
56
56
|
:short_flag => 'N'
|
57
57
|
)
|
58
|
+
attribute(
|
59
|
+
:nesting_prefix, String,
|
60
|
+
:description => 'File name prefix for storing template in bucket',
|
61
|
+
:short_flag => 'Y'
|
62
|
+
)
|
58
63
|
attribute(
|
59
64
|
:print_only, [TrueClass, FalseClass],
|
60
65
|
:description => 'Print the resulting stack template',
|
@@ -18,7 +18,7 @@ module Sfn
|
|
18
18
|
def status_ends_with?(*args)
|
19
19
|
stat = status.to_s.downcase
|
20
20
|
!!args.map(&:to_s).map(&:downcase).detect do |suffix|
|
21
|
-
stat.end_with?(suffix)
|
21
|
+
stat.end_with?(suffix) || state.to_s.end_with?(suffix)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
@@ -29,7 +29,7 @@ module Sfn
|
|
29
29
|
def status_starts_with?(*args)
|
30
30
|
stat = status.to_s.downcase
|
31
31
|
!!args.map(&:to_s).map(&:downcase).detect do |prefix|
|
32
|
-
stat.start_with?(prefix)
|
32
|
+
stat.start_with?(prefix) || state.to_s.start_with?(prefix)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
data/lib/sfn/version.rb
CHANGED
data/sfn.gemspec
CHANGED
@@ -10,27 +10,16 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = 'SparkleFormation CLI'
|
11
11
|
s.license = 'Apache-2.0'
|
12
12
|
s.require_path = 'lib'
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.
|
16
|
-
s.
|
17
|
-
s.
|
18
|
-
s.
|
13
|
+
s.add_runtime_dependency 'bogo-cli', '~> 0.1.21'
|
14
|
+
s.add_runtime_dependency 'miasma', '~> 0.2.27'
|
15
|
+
s.add_runtime_dependency 'miasma-aws', '~> 0.2.0'
|
16
|
+
s.add_runtime_dependency 'miasma-azure', '~> 0.1.0'
|
17
|
+
s.add_runtime_dependency 'net-ssh'
|
18
|
+
s.add_runtime_dependency 'sparkle_formation', '~> 2.0'
|
19
|
+
s.add_runtime_dependency 'hashdiff', '~> 0.2.2'
|
19
20
|
s.add_development_dependency 'rake'
|
20
21
|
s.add_development_dependency 'minitest'
|
21
22
|
s.add_development_dependency 'mocha'
|
22
23
|
s.executables << 'sfn'
|
23
24
|
s.files = Dir['{lib,bin,docs}/**/*'] + %w(sfn.gemspec README.md CHANGELOG.md LICENSE)
|
24
|
-
s.post_install_message = <<-EOF
|
25
|
-
|
26
|
-
This is an install of the sfn gem from the 1.0 release tree. If you
|
27
|
-
are upgrading from a pre-1.0 version, please review the CHANGELOG and
|
28
|
-
test your environment _before_ continuing on!
|
29
|
-
|
30
|
-
* https://github.com/sparkleformation/sfn/blob/master/CHANGELOG.md
|
31
|
-
|
32
|
-
Happy stacking!
|
33
|
-
|
34
|
-
EOF
|
35
|
-
|
36
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sfn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Roberts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bogo-cli
|
@@ -44,14 +44,28 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.2.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.2.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: miasma-azure
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.1.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.1.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: net-ssh
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +86,14 @@ dependencies:
|
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '2.0'
|
76
90
|
type: :runtime
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '2.0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: hashdiff
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -233,16 +247,7 @@ homepage: http://github.com/sparkleformation/sfn
|
|
233
247
|
licenses:
|
234
248
|
- Apache-2.0
|
235
249
|
metadata: {}
|
236
|
-
post_install_message:
|
237
|
-
|
238
|
-
This is an install of the sfn gem from the 1.0 release tree. If you
|
239
|
-
are upgrading from a pre-1.0 version, please review the CHANGELOG and
|
240
|
-
test your environment _before_ continuing on!
|
241
|
-
|
242
|
-
* https://github.com/sparkleformation/sfn/blob/master/CHANGELOG.md
|
243
|
-
|
244
|
-
Happy stacking!
|
245
|
-
|
250
|
+
post_install_message:
|
246
251
|
rdoc_options: []
|
247
252
|
require_paths:
|
248
253
|
- lib
|