awx 0.5.1 → 0.6.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.
@@ -2,7 +2,7 @@ require 'digest'
2
2
 
3
3
  module AppCommand
4
4
 
5
- class AWSDeploy < ::Convoy::ActionCommand::Base
5
+ class DeployDeprecated < ::Convoy::ActionCommand::Base
6
6
 
7
7
  VALID_STACK_STATUSES = %w(CREATE_COMPLETE UPDATE_COMPLETE UPDATE_COMPLETE_CLEANUP_IN_PROGRESS)
8
8
  MATCHERS_KEY_MAP = {
@@ -23,7 +23,7 @@ module AppCommand
23
23
  @project = nil
24
24
  @profile = App::AWSProfile::get_profile
25
25
 
26
- Blufin::Projects::init(@profile, App::CONFIG_FILE)
26
+ Blufin::Projects::init(@profile['Projects'])
27
27
 
28
28
  opts_validate
29
29
  opts_routing
@@ -38,6 +38,9 @@ module AppCommand
38
38
 
39
39
  def opts_validate
40
40
 
41
+ # TODO - Remove this route once new deploy script is working.
42
+ raise RuntimeError, 'This route is deprecated and broken!'
43
+
41
44
  @projects = Blufin::Projects::get_projects
42
45
 
43
46
  # Throw Exception if there are no deployments. The script should never get this far.
@@ -100,7 +103,7 @@ module AppCommand
100
103
  # # @return void
101
104
  def deploy_lambda(project_name, project, profile)
102
105
 
103
- project_id = project[Blufin::Projects::DEPLOYMENT_ID]
106
+ project_id = project[Blufin::Projects::PROJECT_ID]
104
107
 
105
108
  deployment_options = []
106
109
  project[Blufin::Projects::TARGETS].each do |environment, data|
@@ -126,14 +129,14 @@ module AppCommand
126
129
  targets.each do |target|
127
130
  converted_commands = convert_commands(deploy_commands, target, profile, target[:region], Blufin::Projects::TYPE_LAMBDA)
128
131
  dcmd_final[Digest::SHA2.hexdigest(converted_commands.inspect.to_s)] = {
129
- :description => project[Blufin::Projects::DEPLOYMENT_ID],
132
+ :description => project[Blufin::Projects::PROJECT_ID],
130
133
  :commands => converted_commands
131
134
  }
132
135
  end
133
136
 
134
137
  # Build deploy-descriptions array (after targets are selected).
135
138
  deploy_descriptions = []
136
- targets.each { |x| deploy_descriptions << "#{project[Blufin::Projects::DEPLOYMENT_ID]} \xe2\x80\x94 #{Blufin::Terminal::format_highlight(x[:environment])}" }
139
+ targets.each { |x| deploy_descriptions << "#{project[Blufin::Projects::PROJECT_ID]} \xe2\x80\x94 #{Blufin::Terminal::format_highlight(x[:environment])}" }
137
140
 
138
141
  # Show prompt and perform deployment.
139
142
  perform_deployment({}, nil, dcmd_final, deploy_descriptions, deploy_script['Path'], project, project_id, project_name, verbose: true, async: false, pbl: false)
@@ -144,11 +147,11 @@ module AppCommand
144
147
  # # @return void
145
148
  def deploy_ui(project_name, project, profile)
146
149
 
147
- project_id = project[Blufin::Projects::DEPLOYMENT_ID]
150
+ project_id = project[Blufin::Projects::PROJECT_ID]
148
151
  has_valid_option = false
149
152
 
150
153
  # Make call to AWS to get available stacks.
151
- deployments = AppCommand::AWSDeploy::get_deployments(project, profile, silent: false)
154
+ deployments = get_deployments(project, profile, silent: false)
152
155
 
153
156
  # Build deployment option(s).
154
157
  deployment_options = []
@@ -337,7 +340,7 @@ module AppCommand
337
340
  def self.get_deployments(project, profile, silent: false)
338
341
  calls = {}
339
342
  deployments = {}
340
- project_id = project[Blufin::Projects::DEPLOYMENT_ID]
343
+ project_id = project[Blufin::Projects::PROJECT_ID]
341
344
  project_name = project[Blufin::Projects::PROJECT]
342
345
  project[Blufin::Projects::TARGETS].each do |environment, data|
343
346
  region = data[:region]
@@ -1,6 +1,6 @@
1
1
  module AppCommand
2
2
 
3
- class AWSDynamoDB < ::Convoy::ActionCommand::Base
3
+ class DynamoDB < ::Convoy::ActionCommand::Base
4
4
 
5
5
  JAR_FILE = 'DynamoDBLocal.jar'
6
6
 
@@ -0,0 +1,45 @@
1
+ module AppCommand
2
+
3
+ class Infrastructure < ::Convoy::ActionCommand::Base
4
+
5
+ def execute
6
+
7
+ begin
8
+
9
+ @opts = command_options
10
+ @args = arguments
11
+
12
+ @profile = App::AWSProfile::get_profile
13
+
14
+ Blufin::Projects::init(@profile['Projects'])
15
+ App::Deployments::init(@profile['Deployments'])
16
+
17
+ opts_validate
18
+ opts_routing
19
+
20
+ rescue => e
21
+
22
+ Blufin::Terminal::print_exception(e)
23
+
24
+ end
25
+
26
+ end
27
+
28
+ def opts_validate
29
+
30
+ @projects = Blufin::Projects::get_projects
31
+
32
+ # TODO - REMOVE
33
+ puts @projects.to_yaml
34
+
35
+ end
36
+
37
+ def opts_routing
38
+
39
+ raise RuntimeError, 'Not yet implemented!'
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -1,6 +1,6 @@
1
1
  module AppCommand
2
2
 
3
- class AWSList < ::Convoy::ActionCommand::Base
3
+ class List < ::Convoy::ActionCommand::Base
4
4
 
5
5
  def execute
6
6
 
@@ -44,10 +44,25 @@ module AppCommand
44
44
  # Throw error if -m is set with any other flas.
45
45
  Blufin::Terminal::error("When #{Blufin::Terminal::format_flag('m')} is set, no other flags can be set.", "Found: #{Blufin::Routes::flags_set(@opts).to_i - 1} other flag(s).", true) if @opts[:metadata] && Blufin::Routes::flags_set(@opts).to_i > 1
46
46
 
47
- # For resources with exports, this enables you to pass the -r flag as both AcmCertificates or AcmCertificateArn (and it will resolve to the same API call).
48
- if @export_map.has_key?(@opts[:resource])
49
- @export_id = @opts[:resource]
50
- @opts[:resource] = @export_map[@opts[:resource]]
47
+ if @opts[:json_prompt]
48
+ # For resources with exports, this enables you to pass the -r flag as both AcmCertificates or AcmCertificateArn (and it will resolve to the same API call).
49
+ if @export_map.has_key?(@opts[:resource])
50
+ if @export_map[@opts[:resource]].is_a?(Array) && @export_map[@opts[:resource]].length > 1
51
+ @export_id = Blufin::Terminal::prompt_select('Which resource would you like to export?', @export_map[@opts[:resource]])
52
+ else
53
+ @export_id = @export_map[@opts[:resource]][0]
54
+ end
55
+ else
56
+ @export_id = @opts[:resource]
57
+ @export_map.each do |k, v|
58
+ v.each do |resource|
59
+ if resource == @opts[:resource]
60
+ @opts[:resource] = k
61
+ break
62
+ end
63
+ end
64
+ end
65
+ end
51
66
  end
52
67
 
53
68
  # Validate that resource exists (if passed from command-line).
data/lib/routes/ssh.rb ADDED
@@ -0,0 +1,70 @@
1
+ require 'json'
2
+
3
+ module AppCommand
4
+
5
+ class SSH < ::Convoy::ActionCommand::Base
6
+
7
+ def execute
8
+
9
+ begin
10
+
11
+ @opts = command_options
12
+ @args = arguments
13
+
14
+ opts_validate
15
+ opts_routing
16
+
17
+ rescue => e
18
+
19
+ Blufin::Terminal::print_exception(e)
20
+
21
+ end
22
+
23
+ end
24
+
25
+ def opts_validate
26
+
27
+ end
28
+
29
+ def opts_routing
30
+
31
+ puts
32
+ result = Blufin::Terminal::execute('awx l -r EC2Instances -j', capture: true, text: 'Getting EC2 instance data...')
33
+ puts
34
+
35
+ begin
36
+ instances = JSON.parse(result)
37
+ rescue => e
38
+ puts
39
+ puts result
40
+ Blufin::Terminal::error('Failed to parse AWS response JSON.', e.message)
41
+ end
42
+
43
+ accessible_instances = []
44
+
45
+ instances.each do |instance|
46
+ if instance.has_key?('State') && instance['State']['Name'] == 'running'
47
+ accessible_instances << {
48
+ :instance_id => instance['InstanceId'],
49
+ :public_ip => instance['PublicIpAddress'],
50
+ :public_dns => instance['PublicDnsName'],
51
+ :key => instance.has_key?('KeyName') ? instance['KeyName'] : "\xe2\x80\x94",
52
+ :tags => instance['Tags'],
53
+ :region => instance['region'],
54
+ :availability_zone => instance['Placement']['AvailabilityZone']
55
+ }
56
+ end
57
+ end
58
+
59
+ # TODO - REMOVE
60
+ puts
61
+ puts "\x1B[38;5;198m#{accessible_instances.to_yaml}\x1B[0m"
62
+
63
+ # TODO - Need to take Hash and create a Select list to A) select instance and B) select SSH (public) Key.
64
+ # TODO - A pre-requisite for this is that EC2 available Keys need to be in the Tags somehow.
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -1,6 +1,6 @@
1
1
  module AppCommand
2
2
 
3
- class AWSSwitch < ::Convoy::ActionCommand::Base
3
+ class Switch < ::Convoy::ActionCommand::Base
4
4
 
5
5
  def execute
6
6
 
@@ -0,0 +1,49 @@
1
+ module AppCommand
2
+
3
+ class Upload < ::Convoy::ActionCommand::Base
4
+
5
+ PROJECTS = 'Projects'
6
+ TEMPLATES = 'Templates'
7
+
8
+ def execute
9
+
10
+ begin
11
+
12
+ @opts = command_options
13
+ @args = arguments
14
+ @action = determine_action
15
+
16
+ opts_validate
17
+ opts_routing
18
+
19
+ rescue => e
20
+
21
+ Blufin::Terminal::print_exception(e)
22
+
23
+ end
24
+
25
+ end
26
+
27
+ def opts_validate
28
+
29
+ end
30
+
31
+ def opts_routing
32
+
33
+ raise RuntimeError, "Not yet implemented! -> #{@action}"
34
+
35
+ end
36
+
37
+ private
38
+
39
+ # PROJECTS, TEMPLATES will be hard-coded from the route file (my.rb) and user has not control over this value.
40
+ # @return void
41
+ def determine_action
42
+ action = @args.shift
43
+ raise RuntimeError, "Invalid action: #{action}. This is an error with your code not your input." unless [PROJECTS, TEMPLATES].include?(action)
44
+ action
45
+ end
46
+
47
+ end
48
+
49
+ end
data/lib/version.rb CHANGED
@@ -1 +1 @@
1
- AWX_VERSION = '0.5.1'
1
+ AWX_VERSION = '0.6.0'
@@ -0,0 +1,57 @@
1
+ type: map
2
+ mapping:
3
+ Scripts:
4
+ type: seq
5
+ required: yes
6
+ sequence:
7
+ - type: map
8
+ mapping:
9
+ Id:
10
+ required: yes
11
+ Commands:
12
+ type: seq
13
+ required: yes
14
+ sequence:
15
+ - type: str
16
+ Projects:
17
+ type: seq
18
+ required: yes
19
+ sequence:
20
+ - type: map
21
+ mapping:
22
+ Id:
23
+ required: yes
24
+ S3Bucket:
25
+ type: map
26
+ required: yes
27
+ mapping:
28
+ Name:
29
+ required: yes
30
+ Region:
31
+ required: yes
32
+ pattern: /^[a-z]{2}-[a-z]{2,20}-\d$/
33
+ Deployments:
34
+ type: seq
35
+ required: yes
36
+ sequence:
37
+ - type: map
38
+ mapping:
39
+ Environment:
40
+ required: yes
41
+ Region:
42
+ type: seq
43
+ required: yes
44
+ sequence:
45
+ - type: str
46
+ Script:
47
+ required: yes
48
+ Stack:
49
+ required: yes
50
+ StackParameters:
51
+ type: seq
52
+ required: yes
53
+ sequence:
54
+ - type: seq
55
+ required: yes
56
+ sequence:
57
+ - type: str
data/opt/awx/reports.yml CHANGED
@@ -1,4 +1,4 @@
1
- # Try to order these with most frequently accessed at the top.
1
+ # TODO - Strategy when re-factoring this to look neat, have a few pre-defined column layouts (loose, detailed, etc.) and copy/paste them with the same width values.
2
2
  AcmCertificates:
3
3
  regions: [ us-east-1, us-east-2, us-west-1, us-west-2 ]
4
4
  regionsPreferred: [ us-east-1 ]
@@ -10,8 +10,8 @@ AcmCertificates:
10
10
  value: CertificateArn
11
11
  description: DomainName
12
12
  columns:
13
- - [ title: CertificateARN, key: CertificateArn, width: 90 ]
14
- - [ title: DomainName, key: DomainName, width: "*" ]
13
+ - { title: CertificateARN, key: CertificateArn, width: 90 }
14
+ - { title: DomainName, key: DomainName, width: "*" }
15
15
  APIs:
16
16
  regions: [ us-east-1, us-east-2, us-west-1, us-west-2 ]
17
17
  regionsPreferred: [ us-west-2 ]
@@ -23,9 +23,9 @@ APIs:
23
23
  value: id
24
24
  description: name
25
25
  columns:
26
- - [ title: Name, key: name, width: 90 ]
27
- - [ title: Id, key: id, width: 29 ]
28
- - [ title: Type(s), key: endpointConfiguration.types, width: "*" ]
26
+ - { title: Name, key: name, width: 90 }
27
+ - { title: Id, key: id, width: 29 }
28
+ - { title: Type(s), key: endpointConfiguration.types, width: "*" }
29
29
  CloudFormationStacks:
30
30
  regions: [ us-east-1, us-east-2, us-west-1, us-west-2 ]
31
31
  regionsPreferred: [ us-west-2 ]
@@ -33,9 +33,9 @@ CloudFormationStacks:
33
33
  command: cloudformation list-stacks --stack-status-filter CREATE_IN_PROGRESS CREATE_FAILED CREATE_COMPLETE ROLLBACK_IN_PROGRESS ROLLBACK_FAILED ROLLBACK_COMPLETE DELETE_IN_PROGRESS DELETE_FAILED UPDATE_IN_PROGRESS UPDATE_COMPLETE_CLEANUP_IN_PROGRESS UPDATE_COMPLETE UPDATE_ROLLBACK_IN_PROGRESS UPDATE_ROLLBACK_FAILED UPDATE_ROLLBACK_COMPLETE_CLEANUP_IN_PROGRESS UPDATE_ROLLBACK_COMPLETE REVIEW_IN_PROGRESS
34
34
  root: StackSummaries
35
35
  columns:
36
- - [ title: StackId, key: StackId, width: 169, formatter: cloudformation-stack ]
37
- - [ title: DriftStatus, key: DriftInformation.StackDriftStatus, width: 15 ]
38
- - [ title: Status, key: StackStatus, width: "*" ]
36
+ - { title: StackId, key: StackId, width: 169, formatter: cloudformation-stack }
37
+ - { title: DriftStatus, key: DriftInformation.StackDriftStatus, width: 15 }
38
+ - { title: Status, key: StackStatus, width: "*" }
39
39
  CloudFrontDistributions:
40
40
  regions: [ Global ]
41
41
  regionsPreferred: [ Global ]
@@ -43,11 +43,11 @@ CloudFrontDistributions:
43
43
  command: cloudfront list-distributions
44
44
  root: DistributionList.Items
45
45
  columns:
46
- - [ title: Origin, key: DefaultCacheBehavior.TargetOriginId, width: 90 ]
47
- - [ title: Id, key: Id, width: 29 ]
48
- - [ title: Public DNS, key: DomainName, width: 40 ]
49
- - [ title: ProtocolPolicy, key: DefaultCacheBehavior.ViewerProtocolPolicy, width: 30 ]
50
- - [ title: Status, key: Status, width: "*", formatter: cloudfront-status ]
46
+ - { title: Origin, key: DefaultCacheBehavior.TargetOriginId, width: 90 }
47
+ - { title: Id, key: Id, width: 29 }
48
+ - { title: Public DNS, key: DomainName, width: 40 }
49
+ - { title: ProtocolPolicy, key: DefaultCacheBehavior.ViewerProtocolPolicy, width: 30 }
50
+ - { title: Status, key: Status, width: "*", formatter: cloudfront-status }
51
51
  CognitoUserPools:
52
52
  regions: [ us-east-1, us-east-2, us-west-2 ]
53
53
  regionsPreferred: [ us-west-2 ]
@@ -55,10 +55,10 @@ CognitoUserPools:
55
55
  command: cognito-idp list-user-pools --max-results 60
56
56
  root: UserPools
57
57
  columns:
58
- - [ title: Id, key: Id, width: 90 ]
59
- - [ title: Name, key: Name, width: 46 ]
60
- - [ title: CreationDate, key: CreationDate, width: 31, formatter: epoch-date ]
61
- - [ title: LastModifiedDate, key: LastModifiedDate, width: "*", formatter: epoch-date ]
58
+ - { title: Id, key: Id, width: 90 }
59
+ - { title: Name, key: Name, width: 46 }
60
+ - { title: CreationDate, key: CreationDate, width: 31, formatter: epoch-date }
61
+ - { title: LastModifiedDate, key: LastModifiedDate, width: "*", formatter: epoch-date }
62
62
  EC2Instances:
63
63
  regions: [ us-east-1, us-east-2, us-west-1, us-west-2 ]
64
64
  regionsPreferred: [ us-west-2 ]
@@ -66,16 +66,33 @@ EC2Instances:
66
66
  command: ec2 describe-instances
67
67
  root: Reservations[].Instances
68
68
  columns:
69
- - [ title: InstanceID, key: InstanceId, width: 30 ]
70
- - [ title: PrivateIP, key: PrivateIpAddress, width: 29, color: light-grey ]
71
- - [ title: PublicIP, key: PublicIpAddress, width: 29, color: light-grey ]
72
- - [ title: ImageId, key: ImageId, width: 30 ]
73
- - [ title: Av/Zone, key: Placement.AvailabilityZone, width: 15 ]
74
- - [ title: SecurityGroup, key: SecurityGroups, width: 15, formatter: ec2-security-groups ]
75
- - [ title: VpcId, key: VpcId, width: 15 ]
76
- - [ title: KeyName, key: KeyName, width: 15 ]
77
- - [ title: Type, key: InstanceType, width: 15 ]
78
- - [ title: Status, key: State.Name, width: "*", formatter: ec2-status ]
69
+ - { title: InstanceID, key: InstanceId, width: 30 }
70
+ - { title: PrivateIP, key: PrivateIpAddress, width: 29, color: light-grey }
71
+ - { title: PublicIP, key: PublicIpAddress, width: 29, color: light-grey }
72
+ - { title: ImageId, key: ImageId, width: 30 }
73
+ - { title: Av/Zone, key: Placement.AvailabilityZone, width: 15 }
74
+ - { title: SecurityGroup, key: SecurityGroups, width: 15, formatter: ec2-security-groups }
75
+ - { title: VpcId, key: VpcId, width: 15 }
76
+ - { title: KeyName, key: KeyName, width: 15 }
77
+ - { title: Type, key: InstanceType, width: 15 }
78
+ - { title: Status, key: State.Name, width: "*", formatter: ec2-status }
79
+ EfsVolumes:
80
+ regions: [ us-east-1, us-east-2, us-west-1, us-west-2 ]
81
+ regionsPreferred: [ us-west-2 ]
82
+ cli:
83
+ command: efs describe-file-systems
84
+ root: FileSystems
85
+ export:
86
+ - id: EfsVolume
87
+ value: FileSystemId
88
+ description: Name
89
+ columns:
90
+ - { title: Name, key: Name, width: 90 }
91
+ - { title: FileSystemId, key: FileSystemId, width: 15 }
92
+ - { title: SizeInBytes, key: SizeInBytes.Value, width: 15 }
93
+ - { title: NumberOfMountTargets, key: NumberOfMountTargets, width: 20 }
94
+ - { title: CreationTime, key: CreationTime, width: 30, formatter: epoch-date }
95
+ - { title: PerformanceMode, key: PerformanceMode, width: "*" }
79
96
  Lambdas:
80
97
  regions: [ us-east-1, us-east-2, us-west-1, us-west-2 ]
81
98
  regionsPreferred: [ us-west-2 ]
@@ -83,10 +100,10 @@ Lambdas:
83
100
  command: lambda list-functions
84
101
  root: Functions
85
102
  columns:
86
- - [ title: FunctionArn, key: FunctionArn, width: 90 ]
87
- - [ title: FunctionName, key: FunctionName, width: 46 ]
88
- - [ title: Handler, key: Handler, width: 31 ]
89
- - [ title: LastModified, key: LastModified, width: "*" ]
103
+ - { title: FunctionArn, key: FunctionArn, width: 90 }
104
+ - { title: FunctionName, key: FunctionName, width: 46 }
105
+ - { title: Handler, key: Handler, width: 31 }
106
+ - { title: LastModified, key: LastModified, width: "*" }
90
107
  Route53HostedZones:
91
108
  regions: [ Global ]
92
109
  regionsPreferred: [ Global ]
@@ -102,8 +119,59 @@ Route53HostedZones:
102
119
  value: Name
103
120
  valueFormatter: route-53-domain-name
104
121
  columns:
105
- - [ title: HostedZoneId, key: Id, width: 90, formatter: route-53-hosted-zone-id ]
106
- - [ title: DomainName, key: Name, width: "*", formatter: route-53-domain-name ]
122
+ - { title: HostedZoneId, key: Id, width: 90, formatter: route-53-hosted-zone-id }
123
+ - { title: DomainName, key: Name, width: "*", formatter: route-53-domain-name }
124
+ SecurityGroups:
125
+ regions: [ us-west-2 ]
126
+ regionsPreferred: [ us-west-2 ]
127
+ cli:
128
+ command: ec2 describe-security-groups
129
+ root: SecurityGroups
130
+ export:
131
+ - id: SecurityGroup
132
+ value: GroupId
133
+ description: Description
134
+ columns:
135
+ - { title: Description, key: Description, width: 90 }
136
+ - { title: GroupId, key: GroupId, width: 30 }
137
+ - { title: VpcId, key: VpcId, width: 30 }
138
+ - { title: GroupName, key: GroupName, width: "*" }
139
+ Subnets:
140
+ regions: [ us-west-2 ]
141
+ regionsPreferred: [ us-west-2 ]
142
+ cli:
143
+ command: ec2 describe-subnets
144
+ root: Subnets
145
+ export:
146
+ - id: Subnet
147
+ value: SubnetId
148
+ description: Tags.Name
149
+ columns:
150
+ - { title: Name, key: Tags.Name, width: 30 }
151
+ - { title: SubnetId, key: SubnetId, width: 30 }
152
+ - { title: VpcId, key: VpcId, width: 22 }
153
+ - { title: AvailabilityZoneId, key: AvailabilityZoneId, width: 22 }
154
+ - { title: AvailabilityZone, key: AvailabilityZone, width: 22 }
155
+ - { title: CidrBlock, key: CidrBlock, width: 30 }
156
+ - { title: MapPublicIpOnLaunch, key: MapPublicIpOnLaunch, width: 19 }
157
+ - { title: DefaultForAz, key: DefaultForAz, width: 15 }
158
+ - { title: State, key: State, width: "*" }
159
+ Vpcs:
160
+ regions: [ us-west-2 ]
161
+ regionsPreferred: [ us-west-2 ]
162
+ cli:
163
+ command: ec2 describe-vpcs
164
+ root: Vpcs
165
+ export:
166
+ - id: Vpc
167
+ value: VpcId
168
+ description: Tags.Name
169
+ columns:
170
+ - { title: VpcId, key: VpcId, width: 90 }
171
+ - { title: CidrBlock, key: CidrBlock, width: 29 }
172
+ - { title: InstanceTenancy, key: InstanceTenancy, width: 29 }
173
+ - { title: State, key: State, width: 29 }
174
+ - { title: IsDefault, key: IsDefault, width: "*" }
107
175
  WorkMailOrganizations:
108
176
  regions: [ us-east-1, us-west-2 ]
109
177
  regionsPreferred: [ us-east-1 ]
@@ -111,6 +179,6 @@ WorkMailOrganizations:
111
179
  command: workmail list-organizations
112
180
  root: OrganizationSummaries
113
181
  columns:
114
- - [ title: OrganizationId, key: OrganizationId, width: 90 ]
115
- - [ title: Alias, key: Alias, width: 29 ]
116
- - [ title: State, key: State, width: "*" ]
182
+ - { title: OrganizationId, key: OrganizationId, width: 90 }
183
+ - { title: Alias, key: Alias, width: 29 }
184
+ - { title: State, key: State, width: "*" }
@@ -9,6 +9,8 @@ mapping:
9
9
  required: true
10
10
  DefaultProfile:
11
11
  required: yes
12
+ DeveloperName:
13
+ required: yes
12
14
  DynamoDBPath:
13
15
  Profiles:
14
16
  type: seq
@@ -33,6 +35,7 @@ mapping:
33
35
  required: yes
34
36
  S3Bucket:
35
37
  type: map
38
+ required: yes
36
39
  mapping:
37
40
  Name:
38
41
  required: yes
@@ -89,6 +92,25 @@ mapping:
89
92
  required: yes
90
93
  S3Bucket:
91
94
  type: map
95
+ required: yes
96
+ mapping:
97
+ Name:
98
+ required: yes
99
+ File:
100
+ required: yes
101
+ Region:
102
+ required: yes
103
+ Deployments:
104
+ type: map
105
+ mapping:
106
+ Local:
107
+ type: map
108
+ mapping:
109
+ File:
110
+ required: yes
111
+ S3Bucket:
112
+ type: map
113
+ required: yes
92
114
  mapping:
93
115
  Name:
94
116
  required: yes
@@ -1,4 +1,5 @@
1
1
  DefaultProfile: default
2
+ DeveloperName: <<-john-doe->>
2
3
  DynamoDBPath: <<-path/to/folder->>
3
4
  Profiles:
4
5
  - Profile: default
@@ -16,7 +17,7 @@ Profiles:
16
17
  Path: <<-S3-bucket-path->>
17
18
  Region: <<-S3-bucket-region->>
18
19
  Defaults:
19
- StackName: "{{CATEGORY}}-{{TEMPLATE}}-{{PROJECT}}-{{ENVIRONMENT}}-{{REGION}}-{{UUID}}"
20
+ StackName: "${{Parameters:Category}}-${{Parameters:Template}}-${{Parameters:Project}}-${{Parameters:Environment}}-${{Parameters:Region}}-${{System:UUID-AWX}}"
20
21
  Timeout: 60
21
22
  Regions:
22
23
  - us-west-2
@@ -26,6 +27,13 @@ Profiles:
26
27
  Path: <<-S3-bucket-path->>
27
28
  Region: <<-S3-bucket-region->>
28
29
  Projects:
30
+ Local:
31
+ File: <<-path/to/file->>
32
+ S3Bucket:
33
+ Name: <<-S3-bucket-name->>
34
+ File: <<-S3-bucket-path/to/file->>
35
+ Region: <<-S3-bucket-region->>
36
+ Deployments:
29
37
  Local:
30
38
  File: <<-path/to/file->>
31
39
  S3Bucket: