firespring_dev_commands 2.1.31.pre.alpha.2 → 2.1.32.pre.alpha.0

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: 3f8def75b65efe4ae6fa093c1454ebe33fab521fbf073d9de8aa95b240de76bd
4
- data.tar.gz: 44f8e25c71193439ae26d7c71bb7dd0beb3245a0727b79016322d753744e9e92
3
+ metadata.gz: 288c13e632766bcc695d3acc7991a25fa566d943d1297be1af0744daad47f827
4
+ data.tar.gz: aec2fcbe07d4e10ef2de90a7937a7b6c48d741e321c7f4b89926a4799400a4a9
5
5
  SHA512:
6
- metadata.gz: 710f2c34fc81e046453c53cd60474b0057f8f32ff073c7d8e54c1837d051307fa78bf8b2897f125ebffc476bde16f74c072222f3c034cd9095efa9df9a2557e3
7
- data.tar.gz: 56eb12f5c3fd36be619c8a9014a86a9a55fb868ba848ee5f25dff03436dee5f1070cebf95427be454ef86b1d85b1cc15319f2f51d0724be5b900a9428f74d8d5
6
+ metadata.gz: 67b9ed3827875c7607de46ad05e75d6b3d83036c413bb7545caff7cccd48f2a5e5a2204ae368f019be08dd9a01bc0a1b6829b15a12ab8926887fcf61671d12e7
7
+ data.tar.gz: 0dbeb26c9a792c84b74ef074cf12498b478089ed3933781193f77f479140810b167ef6450cdc252073de0dfe9877204e6c092796b320fb0add7db3b5dad088d7
data/README.md CHANGED
@@ -28,7 +28,7 @@ Dev::Template::Docker::Node::Application.new('foo')
28
28
  ```
29
29
  * If you run `rake -T` now, you should have base rake commands and application rake commands for an app called `foo`
30
30
 
31
- * (optinoal) Add AWS login template commands
31
+ * (optional) Add AWS login template commands
32
32
  ```
33
33
  # Configure AWS accounts and create tasks
34
34
  Dev::Aws::Account::configure do |c|
@@ -0,0 +1,72 @@
1
+ require 'aws-sdk-route53'
2
+
3
+ module Dev
4
+ class Aws
5
+ # Class for performing Route53 functions
6
+ class Route53
7
+ attr_reader :client, :zones
8
+
9
+ def initialize
10
+ @client = ::Aws::Route53::Client.new
11
+ @zones = []
12
+ end
13
+
14
+ def get_hosted_zones(domains)
15
+ if domains.empty?
16
+ response = client.list_hosted_zones
17
+ response.hosted_zones.each do |hosted_zone|
18
+ @zones << hosted_zone.id
19
+ end
20
+ else
21
+ domains.each do |domain_name|
22
+ zone = client.list_hosted_zones_by_name({dns_name: domain_name, max_items: 1})
23
+ target_name = zone.hosted_zones[0].name.chomp!('.') if zone.hosted_zones[0].name.end_with?('.')
24
+ @zones << zone.hosted_zones[0].id unless target_name != domain_name
25
+ end
26
+ end
27
+ raise 'Hosted zone(s) not found.' if @zones.empty?
28
+ end
29
+
30
+ def get_target_config_id(zone_id)
31
+ config = client.list_query_logging_configs(
32
+ hosted_zone_id: zone_id,
33
+ max_results: '1'
34
+ )
35
+ config.query_logging_configs[0].id unless config.query_logging_configs.empty? || config.query_logging_configs[0].hosted_zone_id == zone_id
36
+ end
37
+
38
+ def activate_query_logging(log_group)
39
+ output = {}
40
+
41
+ @zones.each do |zone|
42
+ response = client.create_query_logging_config(
43
+ hosted_zone_id: zone,
44
+ cloud_watch_logs_log_group_arn: log_group
45
+ )
46
+ output[zone] = response.location
47
+ rescue ::Aws::Route53::Errors::ServiceError => e
48
+ raise "Error: #{e.message}" unless e.instance_of?(::Aws::Route53::Errors::QueryLoggingConfigAlreadyExists)
49
+
50
+ output[zone] = e.message
51
+ end
52
+ pp output
53
+ end
54
+
55
+ def deactivate_query_logging
56
+ output = {}
57
+ @zones.each do |zone|
58
+ target_config_id = get_target_config_id(zone)
59
+ if target_config_id
60
+ client.delete_query_logging_config(
61
+ id: target_config_id
62
+ )
63
+ output[zone] = 'Query logging config removed.'
64
+ else
65
+ output[zone] = 'No query logging config assigned.'
66
+ end
67
+ end
68
+ pp output
69
+ end
70
+ end
71
+ end
72
+ end
@@ -113,15 +113,6 @@ module Dev
113
113
  end
114
114
  end
115
115
 
116
- def times(query, &)
117
- [].tap do |ary|
118
- get(Time::PATH, query) do |result|
119
- ary << Time.new(result)
120
- end
121
- ary.each(&)
122
- end
123
- end
124
-
125
116
  # Perform a get request to the given path using the given query
126
117
  # Call the given block (if present) with each piece of data
127
118
  # Return all pieces of data
@@ -120,6 +120,56 @@ module Dev
120
120
  end
121
121
  end
122
122
  end
123
+
124
+ # rubocop:disable Metrics/MethodLength
125
+ # Create the rake task for the hosted zone method
126
+ def create_hosted_zone_task!
127
+ # Have to set a local variable to be accessible inside of the instance_eval block
128
+ exclude = @exclude
129
+
130
+ DEV_COMMANDS_TOP_LEVEL.instance_eval do
131
+ namespace :aws do
132
+ return if exclude.include?(:hosted_zone)
133
+
134
+ namespace :hosted_zone do
135
+ namespace :dns_logging do
136
+ task :init do
137
+ @route53 = Dev::Aws::Route53.new
138
+
139
+ domains = ENV['DOMAINS'].to_s.strip.split(',')
140
+ domain = ENV['DOMAIN'].to_s.strip
141
+ domains << domain unless domain.empty?
142
+
143
+ # Set global zone id array
144
+ @route53.get_hosted_zones(domains)
145
+ end
146
+
147
+ desc 'Activates query logging for all hosted zones by default.' \
148
+ 'This command should be run from the account the hosted zone(s) reside.' \
149
+ "\n\toptionally specify DOMAIN='foo.com' to specify the hosted zone to activate." \
150
+ "\n\toptionally specify DOMAINS='foo.com,foobar.com' to specify the hosted zones to activate." \
151
+ "\n\t\tComma delimited list."
152
+ task activate: %w(init) do
153
+ # Use user defined log group. Otherwise, go get the default.
154
+ log_group = (ENV['HOSTED_ZONE_GROUP'] || Dev::Aws::Parameter.new.get_value('/Firespring/Internal/Route53/hosted-zone/log-group-arn'))
155
+
156
+ @route53.activate_query_logging(log_group)
157
+ end
158
+
159
+ desc 'Deactivates query logging for all hosted zones by default. ' \
160
+ 'This command should be run from the account the hosted zone(s) reside.' \
161
+ "\n\toptionally specify DOMAIN='foo.com' to specify the hosted zone to activate." \
162
+ "\n\toptionally specify DOMAINS='foo.com,foobar.com' to specify the hosted zones to activate." \
163
+ "\n\t\tComma delimited list."
164
+ task deactivate: %w(init) do
165
+ @route53.deactivate_query_logging
166
+ end
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end
172
+ # rubocop:enable Metrics/MethodLength
123
173
  end
124
174
  end
125
175
  end
@@ -6,6 +6,6 @@ module Dev
6
6
  # Use 'v.v.v.pre.alpha.v' for pre-release vesions
7
7
  # Use 'v.v.v.beta.v for beta versions
8
8
  # Use semantic versioning for any releases (https://semver.org/)
9
- VERSION = '2.1.31.pre.alpha.2'.freeze
9
+ VERSION = '2.1.32.pre.alpha.0'.freeze
10
10
  end
11
11
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firespring_dev_commands
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.31.pre.alpha.2
4
+ version: 2.1.32.pre.alpha.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Firespring
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-12 00:00:00.000000000 Z
11
+ date: 2024-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -122,6 +122,20 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 1.208.0
125
+ - !ruby/object:Gem::Dependency
126
+ name: aws-sdk-route53
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 1.87.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 1.87.0
125
139
  - !ruby/object:Gem::Dependency
126
140
  name: aws-sdk-s3
127
141
  requirement: !ruby/object:Gem::Requirement
@@ -326,6 +340,7 @@ files:
326
340
  - lib/firespring_dev_commands/aws/login.rb
327
341
  - lib/firespring_dev_commands/aws/parameter.rb
328
342
  - lib/firespring_dev_commands/aws/profile.rb
343
+ - lib/firespring_dev_commands/aws/route53.rb
329
344
  - lib/firespring_dev_commands/aws/s3.rb
330
345
  - lib/firespring_dev_commands/bloom_growth.rb
331
346
  - lib/firespring_dev_commands/bloom_growth/rock.rb
@@ -380,7 +395,6 @@ files:
380
395
  - lib/firespring_dev_commands/target_process/release.rb
381
396
  - lib/firespring_dev_commands/target_process/team.rb
382
397
  - lib/firespring_dev_commands/target_process/team_assignment.rb
383
- - lib/firespring_dev_commands/target_process/time.rb
384
398
  - lib/firespring_dev_commands/target_process/user.rb
385
399
  - lib/firespring_dev_commands/target_process/user_story.rb
386
400
  - lib/firespring_dev_commands/target_process/user_story_history.rb
@@ -1,31 +0,0 @@
1
- module Dev
2
- class TargetProcess
3
- class Time
4
- # The resource type for the api endpoint
5
- RESOURCE_TYPE = 'Time'.freeze
6
-
7
- # The api path for team assignment requests
8
- PATH = '/Time'.freeze
9
-
10
- attr_accessor :data, :id, :type, :description, :hours, :date, :story, :user
11
-
12
- def initialize(data)
13
- @data = data
14
- @id = data['Id']
15
- @type = data['ResourceType']
16
- @description = data['Description']
17
- @hours = data['Spent']
18
- @date = parse_time(data['Date'])
19
- @story = UserStory.new(data['Assignable']) if data['Assignable']
20
- @user = User.new(data['User']) if data['User']
21
- end
22
-
23
- # Parse the dot net time representation into something that ruby can use
24
- def parse_time(string)
25
- return nil unless string && !string.empty?
26
-
27
- ::Time.at(string.slice(6, 10).to_i)
28
- end
29
- end
30
- end
31
- end