stax 0.1.9 → 0.1.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 184e068dc00c13a187864710303862b2049ec3f353cdf7bda094dc94fe711201
4
- data.tar.gz: a2fa06ab9dad658167b57cfbbaf7411a73cbfeccf1cb2eb4ab4c5a50beea9c97
3
+ metadata.gz: e06118c5b0a768644f923c855812c3002ffec3450c7721003845d2a176fb9f81
4
+ data.tar.gz: e4796b95cdee6858736d9661d095ce9965a66a8c6ec3e7a0aaa39de4d924421b
5
5
  SHA512:
6
- metadata.gz: 6491ccdb338d2883cc657eceab4255d14b6202bea65494f3a9ef71a6e459affa813252a5bdb766fb9e12a10d4d3a2121ebe39b80f7ef7803c0f0894b10eba326
7
- data.tar.gz: 76e87f6dc9e8569d025ab23fc6ac662e30bb00439b8f06c6e7cfb7a0cc42c7e12046a76627e7de3c6b0f493764ecef8f77e52a66fb7e68d98c0899266d6340fe
6
+ metadata.gz: c97786ca4626333936c74672410f84a78095b2346d9b0d1917acdffcd597f89c5ff57e022a2bf183414bd35bd0bfe19fa5a2d19a5cb3866744e24f0017ad918f
7
+ data.tar.gz: 46fc1bd32ba9debc7c56ce942dd6ee13fbfe7a73e19c1c87b57ba1a50481e90a9ca0d8f81fff35d169c52391657e9df3030ecb5f20ff3cfc38a2dbc32dcd3071
data/bin/stax CHANGED
@@ -5,6 +5,8 @@ require 'stax'
5
5
  Stax.load_staxfile
6
6
  begin
7
7
  Stax::Cli.start(ARGV)
8
- rescue Aws::CloudFormation::Errors::ExpiredToken => e
8
+ rescue Aws::CloudFormation::Errors::ExpiredToken,
9
+ Aws::CloudFormation::Errors::ValidationError,
10
+ Aws::Errors::MissingCredentialsError => e
9
11
  abort(e.message)
10
12
  end
data/lib/stax/base.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'thor'
2
2
  require 'stax/aws/sts'
3
+ require 'aws-sdk-ssm'
3
4
 
4
5
  ## clean exit on ctrl-c for all methods
5
6
  trap('SIGINT', 'EXIT')
@@ -28,6 +29,13 @@ module Stax
28
29
  @_aws_region ||= ENV['AWS_REGION']
29
30
  end
30
31
 
32
+ ## we commonly want to lookup SSM parameters to use as stack parameters
33
+ def aws_ssm_get(name, region: nil)
34
+ ::Aws::SSM::Client.new({region: region}.compact).get_parameter(name: name)&.parameter&.value
35
+ rescue ::Aws::SSM::Errors::ParameterNotFound
36
+ fail_task("#{name} not found in #{region||aws_region}")
37
+ end
38
+
31
39
  ## find or create a stack object
32
40
  def stack(id)
33
41
  c = id.to_s.split(/[_-]/).map(&:capitalize).join # convert symbol to class string
data/lib/stax/cli/ls.rb CHANGED
@@ -2,37 +2,43 @@ module Stax
2
2
  class Cli < Base
3
3
 
4
4
  no_commands do
5
+ ## fields to show in output
6
+ def ls_stack_fields(s)
7
+ [ s.stack_name, s.creation_time, color(s.stack_status, Aws::Cfn::COLORS) ]
8
+ end
9
+
10
+ ## list stacks from Staxfile in given order
5
11
  def ls_staxfile_stacks
6
- stacks = Aws::Cfn.stacks.each_with_object({}) { |s, h| h[s.stack_name] = s }
7
12
  print_table Stax.stack_list.map { |id|
8
13
  name = stack(id).stack_name
9
- if (s = stacks[name])
10
- [s.stack_name, s.creation_time, color(s.stack_status, Aws::Cfn::COLORS), s.template_description]
14
+ if (s = Aws::Cfn.describe(name))
15
+ ls_stack_fields(s)
11
16
  else
12
- options[:existing] ? nil : [name, '-']
17
+ [ name, '-' ]
13
18
  end
14
- }.compact
19
+ }
15
20
  end
16
21
 
22
+ ## list all extant stacks we think match our prefix
17
23
  def ls_stacks_with_prefix(prefix)
18
24
  print_table Aws::Cfn.stacks.select { |s|
19
25
  s.stack_name.start_with?(prefix || stack_prefix)
20
26
  }.map { |s|
21
- [s.stack_name, s.creation_time, color(s.stack_status, Aws::Cfn::COLORS), s.template_description]
27
+ ls_stack_fields(s)
22
28
  }.sort
23
29
  end
24
30
 
31
+ ## list all stacks in account
25
32
  def ls_account_stacks
26
33
  print_table Aws::Cfn.stacks.map { |s|
27
- [s.stack_name, s.creation_time, color(s.stack_status, Aws::Cfn::COLORS), s.template_description]
34
+ ls_stack_fields(s)
28
35
  }.sort
29
36
  end
30
37
  end
31
38
 
32
39
  desc 'ls [PREFIX]', 'list stacks'
33
- method_option :existing, aliases: '-e', type: :boolean, default: false, desc: 'list just existing stacks'
34
- method_option :all, aliases: '-a', type: :boolean, default: false, desc: 'list all running stacks with our prefix'
35
- method_option :account, aliases: '-A', type: :boolean, default: false, desc: 'list all running stacks in account'
40
+ method_option :all, aliases: '-a', type: :boolean, default: false, desc: 'list all running stacks with our prefix'
41
+ method_option :account, aliases: '-A', type: :boolean, default: false, desc: 'list all running stacks in account'
36
42
  def ls(prefix = nil)
37
43
  if options[:account]
38
44
  ls_account_stacks
@@ -44,4 +50,4 @@ module Stax
44
50
  end
45
51
 
46
52
  end
47
- end
53
+ end
data/lib/stax/cli.rb CHANGED
@@ -9,6 +9,7 @@ module Stax
9
9
  class Cli < Base
10
10
  class_option :branch, type: :string, default: Git.branch, desc: 'git branch to use'
11
11
  class_option :app, type: :string, default: File.basename(Git.toplevel), desc: 'application name'
12
+
12
13
  ## silence deprecation warning
13
14
  ## https://github.com/erikhuda/thor/blob/fb625b223465692a9d8a88cc2a483e126f1a8978/CHANGELOG.md#100
14
15
  def self.exit_on_failure?
@@ -62,6 +62,32 @@ module Stax
62
62
  }
63
63
  end
64
64
  end
65
+
66
+ ## https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/viewing-cloudfront-metrics.html#monitoring-console.distributions-additional
67
+ ## this is not supported by cfn, see:
68
+ ## https://github.com/aws-cloudformation/cloudformation-coverage-roadmap/issues/545
69
+ desc 'monitoring', 'control monitoring subscriptions'
70
+ method_option :enable, aliases: '-e', type: :boolean, description: 'enable additional metrics'
71
+ method_option :disable, aliases: '-d', type: :boolean, description: 'disable additional metrics'
72
+ def monitoring
73
+ client = Aws::Cloudfront.client
74
+ stack_cloudfront_ids.each do |id|
75
+ debug("Cloudfront monitoring for distribution #{id}")
76
+ if options[:enable]
77
+ sub = { realtime_metrics_subscription_config: { realtime_metrics_subscription_status: :Enabled } }
78
+ resp = client.create_monitoring_subscription(distribution_id: id, monitoring_subscription: sub)
79
+ puts resp.monitoring_subscription.realtime_metrics_subscription_config&.realtime_metrics_subscription_status
80
+ elsif options[:disable]
81
+ puts 'deleting subscription'
82
+ client.delete_monitoring_subscription(distribution_id: id)
83
+ else
84
+ cfg = client.get_monitoring_subscription(distribution_id: id)&.monitoring_subscription&.realtime_metrics_subscription_config
85
+ puts "current status: #{cfg&.realtime_metrics_subscription_status}"
86
+ end
87
+ end
88
+ end
89
+
65
90
  end
91
+
66
92
  end
67
93
  end
@@ -158,6 +158,25 @@ module Stax
158
158
  end
159
159
  end
160
160
 
161
+ desc 'write-forwarding', 'control write-forwarding'
162
+ method_option :disable, aliases: '-d', type: :boolean, desc: 'disable write-forwarding'
163
+ method_option :enable, aliases: '-e', type: :boolean, desc: 'enable write-forwarding'
164
+ def write_forwarding
165
+ stack_db_clusters.map(&:physical_resource_id).each do |cluster|
166
+ if options[:enable]
167
+ puts "#{cluster} enabling write-forwarding"
168
+ Aws::Rds.client.modify_db_cluster(db_cluster_identifier: cluster, enable_global_write_forwarding: true)
169
+ elsif options[:disable]
170
+ puts "#{cluster} disabling write-forwarding"
171
+ Aws::Rds.client.modify_db_cluster(db_cluster_identifier: cluster, enable_global_write_forwarding: false)
172
+ else
173
+ print_table Aws::Rds.client.describe_db_clusters(db_cluster_identifier: cluster).db_clusters.map { |c|
174
+ [ c.db_cluster_identifier, c.global_write_forwarding_status || '-' ]
175
+ }
176
+ end
177
+ end
178
+ end
179
+
161
180
  end
162
181
  end
163
182
  end
@@ -21,4 +21,4 @@ module Stax
21
21
  end
22
22
 
23
23
  end
24
- end
24
+ end
data/lib/stax/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Stax
2
- VERSION = '0.1.9'
2
+ VERSION = '0.1.12'
3
3
  end
data/lib/stax.rb CHANGED
@@ -20,26 +20,26 @@ require 'stax/stack/exports'
20
20
  require 'stax/stack/resources'
21
21
  require 'stax/stack/drift'
22
22
 
23
- require 'stax/mixin/ec2'
24
- require 'stax/mixin/alb'
25
- require 'stax/mixin/elb'
26
- require 'stax/mixin/sg'
23
+ # require 'stax/mixin/ec2'
24
+ # require 'stax/mixin/alb'
25
+ # require 'stax/mixin/elb'
26
+ # require 'stax/mixin/sg'
27
27
  require 'stax/mixin/s3'
28
- require 'stax/mixin/asg'
29
- require 'stax/mixin/ecs'
30
- require 'stax/mixin/ecr'
31
- require 'stax/mixin/sqs'
32
- require 'stax/mixin/kms'
33
- require 'stax/mixin/ssm'
34
- require 'stax/mixin/keypair'
35
- require 'stax/mixin/emr'
36
- require 'stax/mixin/ssh'
28
+ # require 'stax/mixin/asg'
29
+ # require 'stax/mixin/ecs'
30
+ # require 'stax/mixin/ecr'
31
+ # require 'stax/mixin/sqs'
32
+ # require 'stax/mixin/kms'
33
+ # require 'stax/mixin/ssm'
34
+ # require 'stax/mixin/keypair'
35
+ # require 'stax/mixin/emr'
36
+ # require 'stax/mixin/ssh'
37
37
  require 'stax/mixin/lambda'
38
38
  require 'stax/mixin/dynamodb'
39
39
  require 'stax/mixin/logs'
40
- require 'stax/mixin/apigw'
41
- require 'stax/mixin/firehose'
40
+ # require 'stax/mixin/apigw'
41
+ # require 'stax/mixin/firehose'
42
42
  require 'stax/mixin/codebuild'
43
43
  require 'stax/mixin/codepipeline'
44
- require 'stax/mixin/rds'
45
- require 'stax/mixin/cloudfront'
44
+ # require 'stax/mixin/rds'
45
+ # require 'stax/mixin/cloudfront'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Lister
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-25 00:00:00.000000000 Z
11
+ date: 2022-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -610,7 +610,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
610
610
  - !ruby/object:Gem::Version
611
611
  version: '0'
612
612
  requirements: []
613
- rubygems_version: 3.1.4
613
+ rubygems_version: 3.1.6
614
614
  signing_key:
615
615
  specification_version: 4
616
616
  summary: Control Cloudformation stack and other stuff.