stack_master 1.5.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/lib/stack_master/commands/terminal_helper.rb +14 -1
- data/lib/stack_master/parameter_resolvers/secret.rb +7 -2
- data/lib/stack_master/version.rb +1 -1
- metadata +21 -216
- data/.gitignore +0 -18
- data/.rspec +0 -2
- data/.travis.yml +0 -12
- data/CODE_OF_CONDUCT.md +0 -73
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -22
- data/Rakefile +0 -27
- data/apply_demo.gif +0 -0
- data/example/simple/Gemfile +0 -3
- data/example/simple/parameters/myapp_vpc.yml +0 -1
- data/example/simple/parameters/myapp_web.yml +0 -2
- data/example/simple/stack_master.yml +0 -13
- data/example/simple/templates/myapp_vpc.rb +0 -39
- data/example/simple/templates/myapp_web.rb +0 -16
- data/features/apply.feature +0 -392
- data/features/apply_with_compile_time_parameters.feature +0 -93
- data/features/apply_with_env_parameters.feature +0 -49
- data/features/apply_with_parameter_store_parameters.feature +0 -47
- data/features/apply_with_s3.feature +0 -106
- data/features/delete.feature +0 -29
- data/features/diff.feature +0 -179
- data/features/events.feature +0 -33
- data/features/init.feature +0 -6
- data/features/outputs.feature +0 -45
- data/features/region_aliases.feature +0 -62
- data/features/resources.feature +0 -42
- data/features/stack_defaults.feature +0 -82
- data/features/status.feature +0 -118
- data/features/step_definitions/parameter_store_steps.rb +0 -14
- data/features/step_definitions/stack_steps.rb +0 -71
- data/features/support/env.rb +0 -16
- data/features/validate.feature +0 -46
- data/logo.png +0 -0
- data/script/buildkite/bundle.sh +0 -5
- data/script/buildkite/clean.sh +0 -3
- data/script/buildkite_rspec.sh +0 -27
- data/spec/fixtures/parameters/myapp_vpc.yml +0 -1
- data/spec/fixtures/parameters/myapp_vpc_with_secrets.yml +0 -3
- data/spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/my_sparkle_pack.rb +0 -1
- data/spec/fixtures/sparkle_pack_integration/my_sparkle_pack/lib/sparkleformation/dynamics/my_dynamic.rb +0 -5
- data/spec/fixtures/sparkle_pack_integration/templates/dynamics/local_dynamic.rb +0 -5
- data/spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic.rb +0 -3
- data/spec/fixtures/sparkle_pack_integration/templates/template_with_dynamic_from_pack.rb +0 -3
- data/spec/fixtures/stack_master.yml +0 -49
- data/spec/fixtures/templates/json/valid_myapp_vpc.json +0 -53
- data/spec/fixtures/templates/myapp_vpc.json +0 -1
- data/spec/fixtures/templates/rb/cfndsl/sample.json +0 -28
- data/spec/fixtures/templates/rb/cfndsl/sample.rb +0 -16
- data/spec/fixtures/templates/yml/valid_myapp_vpc.yml +0 -35
- data/spec/fixtures/test/.gitkeep +0 -0
- data/spec/spec_helper.rb +0 -102
- data/spec/stack_master/aws_driver/s3_spec.rb +0 -130
- data/spec/stack_master/change_set_spec.rb +0 -70
- data/spec/stack_master/command_spec.rb +0 -66
- data/spec/stack_master/commands/apply_spec.rb +0 -259
- data/spec/stack_master/commands/delete_spec.rb +0 -40
- data/spec/stack_master/commands/init_spec.rb +0 -17
- data/spec/stack_master/commands/status_spec.rb +0 -44
- data/spec/stack_master/commands/validate_spec.rb +0 -27
- data/spec/stack_master/config_spec.rb +0 -153
- data/spec/stack_master/paged_response_accumulator_spec.rb +0 -39
- data/spec/stack_master/parameter_loader_spec.rb +0 -110
- data/spec/stack_master/parameter_resolver_spec.rb +0 -148
- data/spec/stack_master/parameter_resolvers/ami_finder_spec.rb +0 -68
- data/spec/stack_master/parameter_resolvers/env_spec.rb +0 -35
- data/spec/stack_master/parameter_resolvers/latest_ami_by_tags_spec.rb +0 -33
- data/spec/stack_master/parameter_resolvers/latest_ami_spec.rb +0 -46
- data/spec/stack_master/parameter_resolvers/parameter_store_spec.rb +0 -50
- data/spec/stack_master/parameter_resolvers/secret_spec.rb +0 -66
- data/spec/stack_master/parameter_resolvers/security_group_spec.rb +0 -19
- data/spec/stack_master/parameter_resolvers/security_groups_spec.rb +0 -32
- data/spec/stack_master/parameter_resolvers/sns_topic_name_spec.rb +0 -43
- data/spec/stack_master/parameter_resolvers/stack_output_spec.rb +0 -127
- data/spec/stack_master/prompter_spec.rb +0 -23
- data/spec/stack_master/resolver_array_spec.rb +0 -42
- data/spec/stack_master/security_group_finder_spec.rb +0 -49
- data/spec/stack_master/sns_topic_finder_spec.rb +0 -25
- data/spec/stack_master/sparkle_formation/compile_time/allowed_pattern_validator_spec.rb +0 -47
- data/spec/stack_master/sparkle_formation/compile_time/allowed_values_validator_spec.rb +0 -47
- data/spec/stack_master/sparkle_formation/compile_time/definitions_validator_spec.rb +0 -36
- data/spec/stack_master/sparkle_formation/compile_time/empty_validator_spec.rb +0 -47
- data/spec/stack_master/sparkle_formation/compile_time/max_length_validator_spec.rb +0 -37
- data/spec/stack_master/sparkle_formation/compile_time/max_size_validator_spec.rb +0 -27
- data/spec/stack_master/sparkle_formation/compile_time/min_length_validator_spec.rb +0 -36
- data/spec/stack_master/sparkle_formation/compile_time/min_size_validator_spec.rb +0 -28
- data/spec/stack_master/sparkle_formation/compile_time/number_validator_spec.rb +0 -41
- data/spec/stack_master/sparkle_formation/compile_time/parameters_validator_spec.rb +0 -65
- data/spec/stack_master/sparkle_formation/compile_time/state_builder_spec.rb +0 -28
- data/spec/stack_master/sparkle_formation/compile_time/string_validator_spec.rb +0 -35
- data/spec/stack_master/sparkle_formation/compile_time/value_build_spec.rb +0 -52
- data/spec/stack_master/sparkle_formation/compile_time/value_validator_factory_spec.rb +0 -40
- data/spec/stack_master/sparkle_formation/template_file_spec.rb +0 -147
- data/spec/stack_master/stack_definition_spec.rb +0 -70
- data/spec/stack_master/stack_differ_spec.rb +0 -46
- data/spec/stack_master/stack_events/fetcher_spec.rb +0 -40
- data/spec/stack_master/stack_events/presenter_spec.rb +0 -18
- data/spec/stack_master/stack_events/streamer_spec.rb +0 -47
- data/spec/stack_master/stack_spec.rb +0 -184
- data/spec/stack_master/template_compiler_spec.rb +0 -39
- data/spec/stack_master/template_compilers/cfndsl_spec.rb +0 -22
- data/spec/stack_master/template_compilers/json_spec.rb +0 -32
- data/spec/stack_master/template_compilers/sparkle_formation_spec.rb +0 -116
- data/spec/stack_master/template_compilers/yaml_spec.rb +0 -20
- data/spec/stack_master/template_utils_spec.rb +0 -21
- data/spec/stack_master/test_driver/cloud_formation_spec.rb +0 -64
- data/spec/stack_master/test_driver/s3_spec.rb +0 -17
- data/spec/stack_master/utils_spec.rb +0 -30
- data/spec/stack_master/validator_spec.rb +0 -56
- data/spec/stack_master_spec.rb +0 -81
- data/spec/support/gemfiles/Gemfile.activesupport-4.0.0 +0 -5
- data/spec/support/validator_spec.rb +0 -23
- data/stack_master.gemspec +0 -46
- data/stacktemplates/parameter_region.yml +0 -3
- data/stacktemplates/parameter_stack_name.yml +0 -3
- data/stacktemplates/stack.json.erb +0 -20
- data/stacktemplates/stack_master.yml.erb +0 -6
@@ -1,20 +0,0 @@
|
|
1
|
-
RSpec.describe StackMaster::TemplateCompilers::Yaml do
|
2
|
-
describe '.compile' do
|
3
|
-
|
4
|
-
let(:compile_time_parameters) { {'InstanceType' => 't2.medium'} }
|
5
|
-
|
6
|
-
def compile
|
7
|
-
described_class.compile(template_file_path, compile_time_parameters)
|
8
|
-
end
|
9
|
-
|
10
|
-
context 'valid YAML template' do
|
11
|
-
let(:template_file_path) { 'spec/fixtures/templates/yml/valid_myapp_vpc.yml' }
|
12
|
-
|
13
|
-
it 'produces valid YAML' do
|
14
|
-
valid_myapp_vpc_yaml = File.read('spec/fixtures/templates/yml/valid_myapp_vpc.yml')
|
15
|
-
|
16
|
-
expect(compile).to eq(valid_myapp_vpc_yaml)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
RSpec.describe StackMaster::TemplateUtils do
|
2
|
-
describe "#maybe_compressed_template_body" do
|
3
|
-
subject(:maybe_compressed_template_body) do
|
4
|
-
described_class.maybe_compressed_template_body(template_body)
|
5
|
-
end
|
6
|
-
context "undersized json" do
|
7
|
-
let(:template_body) { '{ }' }
|
8
|
-
|
9
|
-
it "leaves the json alone if it's not too large" do
|
10
|
-
expect(maybe_compressed_template_body).to eq('{ }')
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "oversized json" do
|
15
|
-
let(:template_body) { "{#{' ' * 60000}}" }
|
16
|
-
it "compresses the json when it's overly bulbous" do
|
17
|
-
expect(maybe_compressed_template_body).to eq('{}')
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'stack_master/test_driver/cloud_formation'
|
2
|
-
|
3
|
-
RSpec.describe StackMaster::TestDriver::CloudFormation do
|
4
|
-
subject(:test_cf_driver) { described_class.new }
|
5
|
-
|
6
|
-
context 'stacks' do
|
7
|
-
it 'creates and describes stacks' do
|
8
|
-
test_cf_driver.create_stack(stack_id: "1", stack_name: 'stack-1')
|
9
|
-
test_cf_driver.create_stack(stack_id: "2", stack_name: 'stack-2')
|
10
|
-
expect(test_cf_driver.describe_stacks.stacks.map(&:stack_id)).to eq(["1", "2"])
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'adds and gets stack events' do
|
14
|
-
test_cf_driver.add_stack_event(stack_name: 'stack-1', resource_status: "UPDATE_COMPLETE")
|
15
|
-
test_cf_driver.add_stack_event(stack_name: 'stack-1', resource_status: "UPDATE_COMPLETE")
|
16
|
-
test_cf_driver.add_stack_event(stack_name: 'stack-2')
|
17
|
-
expect(test_cf_driver.describe_stack_events(stack_name: 'stack-1').stack_events.map(&:stack_name)).to eq ['stack-1', 'stack-1']
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'sets and gets templates' do
|
21
|
-
test_cf_driver.set_template('stack-1', 'blah')
|
22
|
-
expect(test_cf_driver.get_template(stack_name: 'stack-1').template_body).to eq 'blah'
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'sets and gets stack policies' do
|
26
|
-
stack_policy_body = '{}'
|
27
|
-
test_cf_driver.set_stack_policy(stack_name: 'stack-1', stack_policy_body: stack_policy_body)
|
28
|
-
expect(test_cf_driver.get_stack_policy(stack_name: 'stack-1').stack_policy_body).to eq(stack_policy_body)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'change sets' do
|
33
|
-
it 'creates and describes change sets' do
|
34
|
-
change_set_id = test_cf_driver.create_change_set(
|
35
|
-
stack_name: 'stack-1',
|
36
|
-
change_set_name: 'change-set-1',
|
37
|
-
template_body: '{}',
|
38
|
-
parameters: [{ paramater_key: 'param_1', parameter_value: 'value_1'}]
|
39
|
-
).id
|
40
|
-
change_set = test_cf_driver.describe_change_set(change_set_name: change_set_id)
|
41
|
-
expect(change_set.change_set_id).to eq change_set_id
|
42
|
-
expect(change_set.change_set_name).to eq 'change-set-1'
|
43
|
-
change_set = test_cf_driver.describe_change_set(change_set_name: 'change-set-1')
|
44
|
-
expect(change_set.change_set_id).to eq change_set_id
|
45
|
-
expect(change_set.change_set_name).to eq 'change-set-1'
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'creates stacks using change sets and describes stacks' do
|
49
|
-
change_set1 = test_cf_driver.create_change_set(change_set_name: 'change-set-1', stack_name: 'stack-1', change_set_type: 'CREATE')
|
50
|
-
change_set2 = test_cf_driver.create_change_set(change_set_name: 'change-set-2', stack_name: 'stack-2', change_set_type: 'CREATE')
|
51
|
-
test_cf_driver.execute_change_set(change_set_name: change_set1.id)
|
52
|
-
test_cf_driver.execute_change_set(change_set_name: change_set2.id)
|
53
|
-
expect(test_cf_driver.describe_stacks.stacks.map(&:stack_name)).to eq(['stack-1', 'stack-2'])
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'deletes change sets' do
|
58
|
-
change_set_id = test_cf_driver.create_change_set(stack_name: '1', change_set_name: '2').id
|
59
|
-
test_cf_driver.delete_change_set(change_set_name: change_set_id)
|
60
|
-
expect {
|
61
|
-
test_cf_driver.describe_change_set(change_set_name: change_set_id)
|
62
|
-
}.to raise_error(KeyError)
|
63
|
-
end
|
64
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
RSpec.describe StackMaster::TestDriver::S3 do
|
2
|
-
subject(:s3_driver) { described_class.new }
|
3
|
-
let(:bucket) { 'test-bucket' }
|
4
|
-
let(:prefix) { 'test-prefix' }
|
5
|
-
let(:files) { { 'test-file' => { path: 'path', body: 'body' } } }
|
6
|
-
let(:region) { 'us-east-1' }
|
7
|
-
|
8
|
-
it 'uploads and finds files' do
|
9
|
-
s3_driver.upload_files(bucket: bucket,
|
10
|
-
prefix: prefix,
|
11
|
-
region: region,
|
12
|
-
files: files)
|
13
|
-
file = s3_driver.find_file(bucket: bucket,
|
14
|
-
object_key: [prefix, 'test-file'].compact.join('/'))
|
15
|
-
expect(file).to be
|
16
|
-
end
|
17
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
RSpec.describe StackMaster::Utils do
|
2
|
-
describe ".hash_to_aws_tags" do
|
3
|
-
let(:tags) { {'environment' => 'production'} }
|
4
|
-
subject(:aws_tags) { StackMaster::Utils.hash_to_aws_tags(tags) }
|
5
|
-
|
6
|
-
it "converts the tags attribute to aws format" do
|
7
|
-
expect(aws_tags).to eq([{key: 'environment', value: 'production'}])
|
8
|
-
end
|
9
|
-
|
10
|
-
context "tags is nil" do
|
11
|
-
let(:tags) { nil }
|
12
|
-
|
13
|
-
it "returns nil" do
|
14
|
-
expect(aws_tags).to eq([])
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe ".hash_to_aws_parameters" do
|
20
|
-
let(:params) { { 'param1' => 'value1', 'param2' => 'value2' } }
|
21
|
-
subject(:aws_params) { StackMaster::Utils.hash_to_aws_parameters(params) }
|
22
|
-
|
23
|
-
it "converts to aws parameters" do
|
24
|
-
expect(aws_params).to eq([
|
25
|
-
{ parameter_key: 'param1', parameter_value: 'value1' },
|
26
|
-
{ parameter_key: 'param2', parameter_value: 'value2' }
|
27
|
-
])
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,56 +0,0 @@
|
|
1
|
-
RSpec.describe StackMaster::Validator do
|
2
|
-
|
3
|
-
subject(:validator) { described_class.new(stack_definition, config) }
|
4
|
-
let(:config) { StackMaster::Config.new({'stacks' => {}}, '/base_dir') }
|
5
|
-
let(:stack_name) { 'myapp_vpc' }
|
6
|
-
let(:stack_definition) do
|
7
|
-
StackMaster::StackDefinition.new(
|
8
|
-
region: 'us-east-1',
|
9
|
-
stack_name: stack_name,
|
10
|
-
template: 'myapp_vpc.json',
|
11
|
-
tags: {'environment' => 'production'},
|
12
|
-
base_dir: File.expand_path('spec/fixtures'),
|
13
|
-
)
|
14
|
-
end
|
15
|
-
let(:cf) { Aws::CloudFormation::Client.new(region: "us-east-1") }
|
16
|
-
let(:parameter_hash) { {template_parameters: {}, compile_time_parameters: {'DbPassword' => {'secret' => 'db_password'}}} }
|
17
|
-
let(:resolved_parameters) { {'DbPassword' => 'sdfgjkdhlfjkghdflkjghdflkjg', 'InstanceType' => 't2.medium'} }
|
18
|
-
before do
|
19
|
-
allow(Aws::CloudFormation::Client).to receive(:new).and_return cf
|
20
|
-
allow(StackMaster::ParameterLoader).to receive(:load).and_return(parameter_hash)
|
21
|
-
allow(StackMaster::ParameterResolver).to receive(:resolve).and_return(resolved_parameters)
|
22
|
-
end
|
23
|
-
|
24
|
-
describe "#perform" do
|
25
|
-
context "template body is valid" do
|
26
|
-
before do
|
27
|
-
cf.stub_responses(:validate_template, nil)
|
28
|
-
end
|
29
|
-
it "tells the user everything will be fine" do
|
30
|
-
expect { validator.perform }.to output(/myapp_vpc: valid/).to_stdout
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
context "invalid template body" do
|
35
|
-
before do
|
36
|
-
cf.stub_responses(:validate_template, Aws::CloudFormation::Errors::ValidationError.new('a', 'Problem'))
|
37
|
-
end
|
38
|
-
it "informs the user of their stupdity" do
|
39
|
-
expect { validator.perform }.to output(/myapp_vpc: invalid/).to_stdout
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context "validate is called from from a continuous integration system with no access to secrets" do
|
44
|
-
let(:stack_name) { 'myapp_vpc_with_secrets' }
|
45
|
-
let(:secret) { instance_double(StackMaster::ParameterResolvers::Secret) }
|
46
|
-
before do
|
47
|
-
allow(StackMaster::ParameterResolvers::Secret).to receive(:new).and_return(secret)
|
48
|
-
end
|
49
|
-
it "does not prompt for the secret key" do
|
50
|
-
expect(secret).not_to receive(:resolve)
|
51
|
-
validator.perform
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
data/spec/stack_master_spec.rb
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
RSpec.describe StackMaster do
|
2
|
-
describe '.debug' do
|
3
|
-
let(:message) { "Doing some stuff" }
|
4
|
-
|
5
|
-
context 'when debugging' do
|
6
|
-
before { allow(StackMaster).to receive(:debug?).and_return(true) }
|
7
|
-
|
8
|
-
it 'outputs the message to STDERR' do
|
9
|
-
expect { StackMaster.debug(message) }.to output(/\[DEBUG\] #{message}/).to_stderr
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
context 'when not debugging' do
|
14
|
-
before { allow(StackMaster).to receive(:debug?).and_return(false) }
|
15
|
-
|
16
|
-
it "doesn't output the message to STDERR" do
|
17
|
-
expect { StackMaster.debug(message) }.to output("").to_stderr
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe '.debug?' do
|
23
|
-
subject { StackMaster.debug? }
|
24
|
-
|
25
|
-
context "when debug! isn't called" do
|
26
|
-
it { should eq false }
|
27
|
-
end
|
28
|
-
|
29
|
-
context 'when debug! is called' do
|
30
|
-
before { StackMaster.debug! }
|
31
|
-
|
32
|
-
it { should eq true }
|
33
|
-
|
34
|
-
after { StackMaster.instance_variable_set('@debug', false) }
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
describe '.interactive?' do
|
39
|
-
subject { StackMaster.interactive? }
|
40
|
-
|
41
|
-
context "when non_interactive! isn't called" do
|
42
|
-
it { should eq true }
|
43
|
-
end
|
44
|
-
|
45
|
-
context 'when non_interactive! is called' do
|
46
|
-
before { StackMaster.non_interactive! }
|
47
|
-
|
48
|
-
it { should eq false }
|
49
|
-
|
50
|
-
after { StackMaster.instance_variable_set('@non_interactive', false) }
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe '.non_interactive?' do
|
55
|
-
subject { StackMaster.non_interactive? }
|
56
|
-
|
57
|
-
context "when non_interactive! isn't called" do
|
58
|
-
it { should eq false }
|
59
|
-
end
|
60
|
-
|
61
|
-
context 'when non_interactive! is called' do
|
62
|
-
before { StackMaster.non_interactive! }
|
63
|
-
|
64
|
-
it { should eq true }
|
65
|
-
|
66
|
-
after { StackMaster.instance_variable_set('@non_interactive', false) }
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe '.non_interactive_answer' do
|
71
|
-
it 'defaults to y' do
|
72
|
-
expect(StackMaster.non_interactive_answer).to eq 'y'
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'can be overridden' do
|
76
|
-
StackMaster.non_interactive_answer = 'n'
|
77
|
-
expect(StackMaster.non_interactive_answer).to eq 'n'
|
78
|
-
StackMaster.instance_variable_set('@non_interactive_answer', 'y')
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
def validate_valid_parameter(parameter)
|
2
|
-
context "with parameter #{parameter}" do
|
3
|
-
subject { described_class.new('name', definition, parameter).tap { |validator| validator.validate } }
|
4
|
-
|
5
|
-
it 'is valid' do
|
6
|
-
expect(subject.is_valid).to be_truthy
|
7
|
-
end
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def validate_invalid_parameter(parameter, errors)
|
12
|
-
context "with parameter #{parameter}" do
|
13
|
-
subject { described_class.new(name, definition, parameter).tap { |validator| validator.validate } }
|
14
|
-
|
15
|
-
it 'is not valid' do
|
16
|
-
expect(subject.is_valid).to be_falsey
|
17
|
-
end
|
18
|
-
|
19
|
-
it 'has an error' do
|
20
|
-
expect(subject.error).to eql error_message.call(errors, definition)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
data/stack_master.gemspec
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'stack_master/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |spec|
|
7
|
-
spec.name = "stack_master"
|
8
|
-
spec.version = StackMaster::VERSION
|
9
|
-
spec.authors = ["Steve Hodgkiss", "Glen Stampoultzis"]
|
10
|
-
spec.email = ["steve@hodgkiss.me", "gstamp@gmail.com"]
|
11
|
-
spec.summary = %q{StackMaster is a sure-footed way of creating, updating and keeping track of Amazon (AWS) CloudFormation stacks.}
|
12
|
-
spec.description = %q{}
|
13
|
-
spec.homepage = "https://github.com/envato/stack_master"
|
14
|
-
spec.license = "MIT"
|
15
|
-
|
16
|
-
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
-
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = ["lib"]
|
20
|
-
spec.required_ruby_version = ">= 2.1.0"
|
21
|
-
|
22
|
-
spec.add_development_dependency "bundler", "~> 1.5"
|
23
|
-
spec.add_development_dependency "rake"
|
24
|
-
spec.add_development_dependency "rspec"
|
25
|
-
spec.add_development_dependency "pry"
|
26
|
-
spec.add_development_dependency "cucumber"
|
27
|
-
spec.add_development_dependency "aruba"
|
28
|
-
spec.add_development_dependency "timecop"
|
29
|
-
spec.add_dependency "ruby-progressbar"
|
30
|
-
spec.add_dependency "commander"
|
31
|
-
spec.add_dependency "aws-sdk-cloudformation", "~> 1"
|
32
|
-
spec.add_dependency "aws-sdk-ec2", "~> 1"
|
33
|
-
spec.add_dependency "aws-sdk-s3", "~> 1"
|
34
|
-
spec.add_dependency "aws-sdk-sns", "~> 1"
|
35
|
-
spec.add_dependency "aws-sdk-ssm", "~> 1"
|
36
|
-
spec.add_dependency "diffy"
|
37
|
-
spec.add_dependency "erubis"
|
38
|
-
spec.add_dependency "colorize"
|
39
|
-
spec.add_dependency "activesupport", '>= 4'
|
40
|
-
spec.add_dependency "sparkle_formation"
|
41
|
-
spec.add_dependency "table_print"
|
42
|
-
spec.add_dependency "dotgpg"
|
43
|
-
spec.add_dependency "deep_merge"
|
44
|
-
spec.add_dependency "cfndsl"
|
45
|
-
spec.add_dependency "multi_json"
|
46
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"AWSTemplateFormatVersion" : "2010-09-09",
|
3
|
-
"Description" : "Cloudformation stack for <%= stack_name %>",
|
4
|
-
|
5
|
-
"Parameters" : {
|
6
|
-
"InstanceType" : {
|
7
|
-
"Description" : "EC2 instance type",
|
8
|
-
"Type" : "String"
|
9
|
-
}
|
10
|
-
},
|
11
|
-
|
12
|
-
"Mappings" : {
|
13
|
-
},
|
14
|
-
|
15
|
-
"Resources" : {
|
16
|
-
},
|
17
|
-
|
18
|
-
"Outputs" : {
|
19
|
-
}
|
20
|
-
}
|