awx 0.6.10 → 0.6.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/aws/aws_profile.rb +1 -1
- data/lib/awx.rb +8 -8
- data/lib/core/{deployments.rb → stacks.rb} +10 -13
- data/lib/routes/cloudformation_create.rb +49 -49
- data/lib/routes/infrastructure.rb +2 -2
- data/lib/routes/upload.rb +9 -9
- data/lib/version.rb +1 -1
- data/opt/awx/{deployment-schema.yml → stacks-schema.yml} +3 -3
- data/opt/config/schema.yml +1 -1
- data/opt/config/template.yml +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 910e4c40a148fe59eec68a194f6e9b016a0b2309
|
4
|
+
data.tar.gz: 02cbf33f50a06df9da86d48b4a5e1c4d36e5ca4a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19037d3497e7350d631f551ae84bef6bf02350ea00144f137afe2f4358e6c8ca2e38b7f5b30f67e58749c638717b7d29e5b026ec5386650d337b075946803010
|
7
|
+
data.tar.gz: f7359136c6337d784079ac00bb42142ffbd8872fee46515612f746a6d44ee09697779b79f32d0e5165c4e86cb91004a1622516eaef9802f92832fe33e766c217
|
data/lib/aws/aws_profile.rb
CHANGED
data/lib/awx.rb
CHANGED
@@ -108,7 +108,7 @@ TEMPLATE
|
|
108
108
|
end
|
109
109
|
|
110
110
|
# i - INFRASTRUCTURE
|
111
|
-
if ARGV[0] != 'setup' && ARGV[0] != 'x' && (profile.has_key?(
|
111
|
+
if ARGV[0] != 'setup' && ARGV[0] != 'x' && (profile.has_key?(App::AWSProfile::PROJECTS)) && (profile.has_key?(App::AWSProfile::STACKS))
|
112
112
|
awx.command :infrastructure, :aliases => [:i] do |infrastructure|
|
113
113
|
infrastructure.summary 'View, modify & deploy application(s) to pre-defined infrastructure'
|
114
114
|
infrastructure.action do |opts, args|
|
@@ -159,17 +159,17 @@ TEMPLATE
|
|
159
159
|
|
160
160
|
# u - UPLOAD
|
161
161
|
if ARGV[0] != 'setup' && ARGV[0] != 'x' && (
|
162
|
-
(profile.has_key?(App::AWSProfile::
|
162
|
+
(profile.has_key?(App::AWSProfile::STACKS) && profile[App::AWSProfile::STACKS].has_key?('Local')) ||
|
163
163
|
(profile.has_key?(App::AWSProfile::PROJECTS) && profile[App::AWSProfile::PROJECTS].has_key?('Local')) ||
|
164
164
|
(profile.has_key?(App::AWSProfile::CLOUDFORMATION) && profile[App::AWSProfile::CLOUDFORMATION]['Templates'].has_key?('Local')))
|
165
165
|
awx.command :upload, :aliases => [:u] do |upload|
|
166
166
|
upload.summary 'Upload configuration(s) to S3'
|
167
|
-
# d - UPLOAD
|
168
|
-
if profile.has_key?(App::AWSProfile::
|
169
|
-
upload.command :
|
170
|
-
|
171
|
-
|
172
|
-
args = args.unshift(AppCommand::Upload::
|
167
|
+
# d - UPLOAD STACKS
|
168
|
+
if profile.has_key?(App::AWSProfile::STACKS) && profile[App::AWSProfile::STACKS].has_key?('Local')
|
169
|
+
upload.command :stacks, :aliases => [:s] do |upload_stacks|
|
170
|
+
upload_stacks.summary 'Upload Stacks'
|
171
|
+
upload_stacks.action do |opts, args|
|
172
|
+
args = args.unshift(AppCommand::Upload::STACKS)
|
173
173
|
AppCommand::Upload.new(opts, args).execute
|
174
174
|
end
|
175
175
|
end
|
@@ -1,25 +1,25 @@
|
|
1
1
|
module App
|
2
2
|
|
3
|
-
class
|
3
|
+
class Stacks
|
4
4
|
|
5
|
-
SCHEMA_FILE = "#{App::Opt::get_base_path}#{App::Opt::OPT_PATH}/awx/
|
5
|
+
SCHEMA_FILE = "#{App::Opt::get_base_path}#{App::Opt::OPT_PATH}/awx/stacks-schema.yml"
|
6
6
|
|
7
|
-
@@
|
7
|
+
@@stacks = nil
|
8
8
|
|
9
9
|
# Takes a Hash that will have all the deployment info.
|
10
10
|
# @return void
|
11
|
-
def self.init(
|
12
|
-
raise RuntimeError, 'Cannot run App::
|
13
|
-
raise RuntimeError, "Need either a Local or S3Bucket key, found neither: #{
|
14
|
-
@@
|
11
|
+
def self.init(stacks)
|
12
|
+
raise RuntimeError, 'Cannot run App::Stacks::init() more than once.' unless @@stacks.nil?
|
13
|
+
raise RuntimeError, "Need either a Local or S3Bucket key, found neither: #{stacks.keys}" unless stacks.has_key?('Local') || stacks.has_key?('S3Bucket')
|
14
|
+
@@stacks = {}
|
15
15
|
|
16
|
-
if
|
17
|
-
source_file = File.expand_path(
|
16
|
+
if stacks.has_key?('Local')
|
17
|
+
source_file = File.expand_path(stacks['Local']['File'])
|
18
18
|
# Throw error if source file doesn't exist.
|
19
19
|
Blufin::Terminal::error("Cannot find source file: #{Blufin::Terminal::format_directory(source_file)}") unless Blufin::Files::file_exists(source_file)
|
20
20
|
# Validate the source file against the expected schema.
|
21
21
|
process_source_file(source_file)
|
22
|
-
elsif
|
22
|
+
elsif stacks.has_key?('S3Bucket')
|
23
23
|
|
24
24
|
# TODO - Finish this once we start running this on an EC2 instance (build/deploy server).
|
25
25
|
# TODO - Whatever file we validate should be available on disk locally.
|
@@ -27,9 +27,6 @@ module App
|
|
27
27
|
|
28
28
|
end
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
30
|
end
|
34
31
|
|
35
32
|
private
|
@@ -5,34 +5,34 @@ module AppCommand
|
|
5
5
|
|
6
6
|
class CloudFormationCreate < ::Convoy::ActionCommand::Base
|
7
7
|
|
8
|
-
DEFAULT
|
9
|
-
PARAMETERS
|
10
|
-
SPECIAL_METHODS
|
11
|
-
AWS_TAGS
|
12
|
-
RESERVED_WORDS
|
13
|
-
OPTION_PROJECT_ID
|
14
|
-
|
15
|
-
OPTION_STACK_NAME
|
16
|
-
OPTION_TIMEOUT
|
17
|
-
OPTION_DESCRIPTION
|
18
|
-
OPTION_PROJECT
|
19
|
-
OPTION_ENVIRONMENT
|
20
|
-
OPTION_REGION
|
21
|
-
OPTION_CATEGORY
|
22
|
-
OPTION_TEMPLATE
|
23
|
-
OPTION_TERM_PROTECT
|
24
|
-
OPTION_OWNER
|
25
|
-
MATCHERS
|
26
|
-
OPTIONS
|
27
|
-
SPECIAL
|
28
|
-
CACHE_UUID
|
29
|
-
TEST
|
30
|
-
SPACER
|
31
|
-
CAPABILITIES
|
32
|
-
RETURN_VALUE
|
33
|
-
SYSTEM
|
34
|
-
NESTED
|
35
|
-
STACK
|
8
|
+
DEFAULT = 'Default'
|
9
|
+
PARAMETERS = 'Parameters'
|
10
|
+
SPECIAL_METHODS = [:before_create, :after_create, :before_teardown, :after_teardown]
|
11
|
+
AWS_TAGS = %w(Environment Project Region Category Template)
|
12
|
+
RESERVED_WORDS = %w(cache_uuid category description environment owner project projectid region resource stack stackname template terminationprotection timeout)
|
13
|
+
OPTION_PROJECT_ID = 'ProjectId'
|
14
|
+
OPTION_STACK_ID = 'StackId'
|
15
|
+
OPTION_STACK_NAME = 'StackName'
|
16
|
+
OPTION_TIMEOUT = 'Timeout'
|
17
|
+
OPTION_DESCRIPTION = 'Description'
|
18
|
+
OPTION_PROJECT = 'Project'
|
19
|
+
OPTION_ENVIRONMENT = 'Environment'
|
20
|
+
OPTION_REGION = 'Region'
|
21
|
+
OPTION_CATEGORY = 'Category'
|
22
|
+
OPTION_TEMPLATE = 'Template'
|
23
|
+
OPTION_TERM_PROTECT = 'TerminationProtection'
|
24
|
+
OPTION_OWNER = 'Owner'
|
25
|
+
MATCHERS = %w(CATEGORY TEMPLATE PROJECT ENVIRONMENT REGION UUID)
|
26
|
+
OPTIONS = 'Options'
|
27
|
+
SPECIAL = 'AWS-specific'
|
28
|
+
CACHE_UUID = 'cache_uuid'
|
29
|
+
TEST = 'test'
|
30
|
+
SPACER = '<<--Spacer-->>'
|
31
|
+
CAPABILITIES = 'Capabilities'
|
32
|
+
RETURN_VALUE = 'PjNkHK33EopWxCpzOQfuku3la'
|
33
|
+
SYSTEM = 'System'
|
34
|
+
NESTED = 'nested'
|
35
|
+
STACK = 'Stack'
|
36
36
|
|
37
37
|
def execute
|
38
38
|
|
@@ -131,7 +131,7 @@ module AppCommand
|
|
131
131
|
regions = nil
|
132
132
|
timeout = nil
|
133
133
|
single_serve = false
|
134
|
-
|
134
|
+
stack_id = nil
|
135
135
|
parameters = {}
|
136
136
|
parameters_no_sort = nil
|
137
137
|
warnings_count = @warnings.length
|
@@ -266,7 +266,7 @@ module AppCommand
|
|
266
266
|
environments = Template::ENVIRONMENTS if constant == 'ENVIRONMENTS'
|
267
267
|
regions = Template::REGIONS if constant == 'REGIONS'
|
268
268
|
timeout = Template::TIMEOUT if constant == 'TIMEOUT'
|
269
|
-
|
269
|
+
stack_id = Template::STACK_ID if constant == 'STACK_ID'
|
270
270
|
parameters_no_sort = Template::PARAMETERS_NO_SORT if constant == 'PARAMETERS_NO_SORT'
|
271
271
|
end
|
272
272
|
# Validate stack name.
|
@@ -276,8 +276,8 @@ module AppCommand
|
|
276
276
|
results = App::Replacer::scan_string(stack_name)
|
277
277
|
validate_matchers(file_cloudformation, results, template_name, parameters)
|
278
278
|
# Make sure deployment stack is not a reserved word.
|
279
|
-
if
|
280
|
-
@warnings << "\x1B[38;5;196m#{template_name}\x1B[38;5;240m \xe2\x80\x94 #{Blufin::Terminal::format_highlight('
|
279
|
+
if stack_id.is_a?(String) && %w(lambda).include?(stack_id.downcase)
|
280
|
+
@warnings << "\x1B[38;5;196m#{template_name}\x1B[38;5;240m \xe2\x80\x94 #{Blufin::Terminal::format_highlight('STACK_ID')} value is a reserved word: #{Blufin::Terminal::format_invalid(stack_id)}"
|
281
281
|
end
|
282
282
|
# If any constants are missing, this should catch it.
|
283
283
|
expected_constants.each { |missing_constant| @warnings << "\x1B[38;5;196m#{template_name}\x1B[38;5;240m \xe2\x80\x94 The #{Blufin::Terminal::format_highlight('template.rb')}\x1B[38;5;240m file is missing a constant: #{Blufin::Terminal::format_invalid(missing_constant)}" }
|
@@ -352,7 +352,7 @@ module AppCommand
|
|
352
352
|
:broken => 'Broken'
|
353
353
|
}
|
354
354
|
else
|
355
|
-
@templates[category][template]
|
355
|
+
@templates[category][template] = {
|
356
356
|
:name => template,
|
357
357
|
:path => template_path,
|
358
358
|
:broken => false,
|
@@ -373,7 +373,7 @@ module AppCommand
|
|
373
373
|
:timeout => timeout,
|
374
374
|
:single_serve => single_serve
|
375
375
|
}
|
376
|
-
@templates[category][template][:
|
376
|
+
@templates[category][template][:stack_id] = stack_id unless stack_id.nil?
|
377
377
|
end
|
378
378
|
end
|
379
379
|
end
|
@@ -413,14 +413,14 @@ module AppCommand
|
|
413
413
|
puts
|
414
414
|
end
|
415
415
|
|
416
|
-
# TODO NOW - REMOVE:
|
416
|
+
# TODO NOW - REMOVE:STACK_ID - This needs to be re-instated once we have the stacks.yml parsing.
|
417
417
|
# Deployment ID needs to be handled here because we need to know what the project/region/environment is before we can display the options.
|
418
418
|
# if param_name == OPTION_PROJECT_ID
|
419
419
|
# # Figure out which deployments are eligible for this stack.
|
420
|
-
# if @template.has_key?(:
|
420
|
+
# if @template.has_key?(:stack_id)
|
421
421
|
# @projects = Blufin::Projects::get_deployments(
|
422
422
|
# @params[OPTION_PROJECT],
|
423
|
-
# @template[:
|
423
|
+
# @template[:stack_id],
|
424
424
|
# @params[OPTION_REGION],
|
425
425
|
# @params[OPTION_ENVIRONMENT]
|
426
426
|
# )
|
@@ -529,9 +529,9 @@ module AppCommand
|
|
529
529
|
output[OPTION_DESCRIPTION] = @params[OPTION_DESCRIPTION]
|
530
530
|
output[SPACER] = true
|
531
531
|
|
532
|
-
# TODO NOW - REMOVE:
|
533
|
-
# if @template.has_key?(:
|
534
|
-
# output[
|
532
|
+
# TODO NOW - REMOVE:STACK_ID - This needs to be re-instated once we have the stacks.yml parsing.
|
533
|
+
# if @template.has_key?(:stack_id) && !@params[OPTION_PROJECT_ID].nil? && @params[OPTION_PROJECT_ID].length > 0
|
534
|
+
# output[OPTION_STACK_ID] = @template[:stack_id]
|
535
535
|
# output[OPTION_PROJECT_ID] = @params[OPTION_PROJECT_ID]
|
536
536
|
# end
|
537
537
|
|
@@ -548,7 +548,7 @@ module AppCommand
|
|
548
548
|
padding = output.keys.max_by(&:length).length
|
549
549
|
spacer_passed = false
|
550
550
|
output.each do |key, value|
|
551
|
-
next if [
|
551
|
+
next if [OPTION_STACK_ID, OPTION_PROJECT_ID, OPTION_TIMEOUT, OPTION_TERM_PROTECT, CAPABILITIES].include?(key)
|
552
552
|
if key == SPACER
|
553
553
|
spacer_passed = true
|
554
554
|
next
|
@@ -560,9 +560,9 @@ module AppCommand
|
|
560
560
|
end
|
561
561
|
end
|
562
562
|
|
563
|
-
if @template.has_key?(:
|
563
|
+
if @template.has_key?(:stack_id)
|
564
564
|
params_output << "\x1B[38;5;240m#{OPTION_PROJECT_ID.rjust(padding, ' ')} : \x1B[38;5;246m#{output[OPTION_PROJECT_ID]}" if output.has_key?(OPTION_PROJECT_ID)
|
565
|
-
params_output << "\x1B[38;5;240m#{
|
565
|
+
params_output << "\x1B[38;5;240m#{OPTION_STACK_ID.rjust(padding, ' ')} : \x1B[38;5;246m#{output[OPTION_STACK_ID]}" if output.has_key?(OPTION_STACK_ID)
|
566
566
|
end
|
567
567
|
params_output << "\x1B[38;5;240m#{OPTION_TIMEOUT.rjust(padding, ' ')} : \x1B[38;5;246m#{output[OPTION_TIMEOUT]} Minute(s)\x1B[0m"
|
568
568
|
params_output << "\x1B[38;5;240m#{OPTION_TERM_PROTECT.rjust(padding, ' ')} : #{output[OPTION_TERM_PROTECT] ? "\x1B[38;5;246mYES\x1B[0m" : "\x1B[38;5;246mNO\x1B[0m"}" unless @template[:single_serve]
|
@@ -706,8 +706,8 @@ module AppCommand
|
|
706
706
|
}
|
707
707
|
end
|
708
708
|
|
709
|
-
# TODO NOW - REMOVE:
|
710
|
-
# unless @template[:
|
709
|
+
# TODO NOW - REMOVE:STACK_ID - This needs to be re-instated once we have the stacks.yml parsing.
|
710
|
+
# unless @template[:stack_id].nil?
|
711
711
|
# @template[:parameters][OPTION_PROJECT_ID] = {
|
712
712
|
# 'Type' => 'String',
|
713
713
|
# OPTION_DESCRIPTION => 'Project ID (used for associating this Stack with an existing Project).'
|
@@ -1072,11 +1072,11 @@ module AppCommand
|
|
1072
1072
|
}
|
1073
1073
|
end
|
1074
1074
|
|
1075
|
-
# TODO NOW - REMOVE:
|
1076
|
-
# if @template.has_key?(:
|
1075
|
+
# TODO NOW - REMOVE:STACK_ID - This needs to be re-instated once we have the deployments.yml parsing.
|
1076
|
+
# if @template.has_key?(:stack_id) && params.has_key?(OPTION_PROJECT_ID)
|
1077
1077
|
# output << {
|
1078
|
-
# 'Key' =>
|
1079
|
-
# 'Value' => @template[:
|
1078
|
+
# 'Key' => OPTION_STACK_ID,
|
1079
|
+
# 'Value' => @template[:stack_id].to_s
|
1080
1080
|
# }
|
1081
1081
|
# output << {
|
1082
1082
|
# 'Key' => OPTION_PROJECT_ID,
|
@@ -11,8 +11,8 @@ module AppCommand
|
|
11
11
|
|
12
12
|
@profile = App::AWSProfile::get_profile
|
13
13
|
|
14
|
-
Blufin::Projects::init(@profile[
|
15
|
-
App::
|
14
|
+
Blufin::Projects::init(@profile[App::AWSProfile::PROJECTS])
|
15
|
+
App::Stacks::init(@profile[App::AWSProfile::STACKS])
|
16
16
|
|
17
17
|
opts_validate
|
18
18
|
opts_routing
|
data/lib/routes/upload.rb
CHANGED
@@ -2,9 +2,9 @@ module AppCommand
|
|
2
2
|
|
3
3
|
class Upload < ::Convoy::ActionCommand::Base
|
4
4
|
|
5
|
-
|
6
|
-
PROJECTS
|
7
|
-
TEMPLATES
|
5
|
+
STACKS = 'Stacks'
|
6
|
+
PROJECTS = 'Projects'
|
7
|
+
TEMPLATES = 'Templates'
|
8
8
|
|
9
9
|
def execute
|
10
10
|
|
@@ -35,11 +35,11 @@ module AppCommand
|
|
35
35
|
# Get the local path based on upload action.
|
36
36
|
# @profile keys DO NOT need to be validated because we already check them in the awx.rb routing code.
|
37
37
|
case @action
|
38
|
-
when
|
39
|
-
local_path = @profile[App::AWSProfile::
|
40
|
-
s3_bucket = @profile[App::AWSProfile::
|
41
|
-
s3_path = @profile[App::AWSProfile::
|
42
|
-
s3_region = @profile[App::AWSProfile::
|
38
|
+
when STACKS
|
39
|
+
local_path = @profile[App::AWSProfile::STACKS]['Local']['File']
|
40
|
+
s3_bucket = @profile[App::AWSProfile::STACKS]['S3Bucket']['Name']
|
41
|
+
s3_path = @profile[App::AWSProfile::STACKS]['S3Bucket']['File']
|
42
|
+
s3_region = @profile[App::AWSProfile::STACKS]['S3Bucket']['Region']
|
43
43
|
when PROJECTS
|
44
44
|
local_path = @profile[App::AWSProfile::PROJECTS]['Local']['File']
|
45
45
|
s3_bucket = @profile[App::AWSProfile::PROJECTS]['S3Bucket']['Name']
|
@@ -83,7 +83,7 @@ module AppCommand
|
|
83
83
|
# @return void
|
84
84
|
def determine_action
|
85
85
|
action = @args.shift
|
86
|
-
raise RuntimeError, "Invalid action: #{action}. This is an error with your code not your input." unless [
|
86
|
+
raise RuntimeError, "Invalid action: #{action}. This is an error with your code not your input." unless [STACKS, PROJECTS, TEMPLATES].include?(action)
|
87
87
|
action
|
88
88
|
end
|
89
89
|
|
data/lib/version.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
AWX_VERSION = '0.6.
|
1
|
+
AWX_VERSION = '0.6.11'
|
@@ -1,6 +1,6 @@
|
|
1
1
|
type: map
|
2
2
|
mapping:
|
3
|
-
|
3
|
+
DeploymentScripts:
|
4
4
|
type: seq
|
5
5
|
required: yes
|
6
6
|
sequence:
|
@@ -30,7 +30,7 @@ mapping:
|
|
30
30
|
Region:
|
31
31
|
required: yes
|
32
32
|
pattern: /^[a-z]{2}-[a-z]{2,20}-\d$/
|
33
|
-
|
33
|
+
Stacks:
|
34
34
|
type: seq
|
35
35
|
required: yes
|
36
36
|
sequence:
|
@@ -45,7 +45,7 @@ mapping:
|
|
45
45
|
- type: str
|
46
46
|
Script:
|
47
47
|
required: yes
|
48
|
-
|
48
|
+
StackId:
|
49
49
|
required: yes
|
50
50
|
StackParameters:
|
51
51
|
type: seq
|
data/opt/config/schema.yml
CHANGED
data/opt/config/template.yml
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Albert Rannetsperger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-09-
|
11
|
+
date: 2019-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: blufin-lib
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.7.
|
19
|
+
version: 1.7.6
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.7.
|
26
|
+
version: 1.7.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,9 +98,9 @@ files:
|
|
98
98
|
- lib/aws/aws_reports.rb
|
99
99
|
- lib/aws/aws_validator.rb
|
100
100
|
- lib/awx.rb
|
101
|
-
- lib/core/deployments.rb
|
102
101
|
- lib/core/opt.rb
|
103
102
|
- lib/core/replacer.rb
|
103
|
+
- lib/core/stacks.rb
|
104
104
|
- lib/routes/cloudformation_create.rb
|
105
105
|
- lib/routes/cloudformation_delete.rb
|
106
106
|
- lib/routes/cloudformation_detect_drift.rb
|
@@ -112,8 +112,8 @@ files:
|
|
112
112
|
- lib/routes/switch.rb
|
113
113
|
- lib/routes/upload.rb
|
114
114
|
- lib/version.rb
|
115
|
-
- opt/awx/deployment-schema.yml
|
116
115
|
- opt/awx/reports.yml
|
116
|
+
- opt/awx/stacks-schema.yml
|
117
117
|
- opt/config/schema.yml
|
118
118
|
- opt/config/template.yml
|
119
119
|
- opt/shell/ec2-check
|