firespring_dev_commands 2.1.31 → 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: 0eee4b21d3098e76567bcc444c62b11d56963e638bbbc0d3cd02966fefb0d409
4
- data.tar.gz: ae4c8e59b6e01b26aa6e205dc63b6edff11d1b6746c3111baeddaf74c4d97173
3
+ metadata.gz: 288c13e632766bcc695d3acc7991a25fa566d943d1297be1af0744daad47f827
4
+ data.tar.gz: aec2fcbe07d4e10ef2de90a7937a7b6c48d741e321c7f4b89926a4799400a4a9
5
5
  SHA512:
6
- metadata.gz: 7968d613f3aa93a274205f92253888bb02d619a825ea025f1b6c15db0b3717f6e74e4f3bed91487f8ed6df3018fbd772dbb09dbd50bc6d9c0e895411b316555e
7
- data.tar.gz: c67717d0593624bfaf84757d4c6d7af54f85a3d2088c5850740fce64313884a4629263a0d76bdfbc13945deb1c998f332fa9c5163be62a01d5eb940eb8ced31f
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|
@@ -21,10 +21,9 @@ module Dev
21
21
  # Finished status
22
22
  FINISHED = :finished
23
23
 
24
- attr_accessor :client, :name, :template_filename, :parameters, :capabilities, :failure_behavior, :preserve_parameters_on_update, :state
24
+ attr_accessor :client, :name, :template_filename, :parameters, :capabilities, :failure_behavior, :state
25
25
 
26
- def initialize(name, template_filename, parameters: Dev::Aws::Cloudformation::Parameters.new, capabilities: [], failure_behavior: 'ROLLBACK',
27
- preserve_parameters_on_update: false)
26
+ def initialize(name, template_filename, parameters: Dev::Aws::Cloudformation::Parameters.new, capabilities: [], failure_behavior: 'ROLLBACK')
28
27
  raise 'parameters must be an intsance of parameters' unless parameters.is_a?(Dev::Aws::Cloudformation::Parameters)
29
28
 
30
29
  @client = nil
@@ -33,7 +32,6 @@ module Dev
33
32
  @parameters = parameters
34
33
  @capabilities = capabilities
35
34
  @failure_behavior = failure_behavior
36
- @preserve_parameters_on_update = preserve_parameters_on_update
37
35
  @state = NOT_STARTED
38
36
  end
39
37
 
@@ -83,16 +81,11 @@ module Dev
83
81
  # Call upload function to get the s3 url
84
82
  template_url = upload(template_filename)
85
83
 
86
- update_parameters = if preserve_parameters_on_update
87
- parameters.preserve
88
- else
89
- parameters.default
90
- end
91
84
  # Update the cloudformation stack
92
85
  client.update_stack(
93
86
  stack_name: name,
94
87
  template_url:,
95
- parameters: update_parameters,
88
+ parameters: parameters.preserve,
96
89
  capabilities:
97
90
  )
98
91
  @state = STARTED
@@ -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
@@ -24,7 +24,7 @@ module Dev
24
24
  def parse_time(string)
25
25
  return nil unless string && !string.empty?
26
26
 
27
- ::Time.at(string.slice(6, 10).to_i)
27
+ Time.at(string.slice(6, 10).to_i)
28
28
  end
29
29
  end
30
30
  end
@@ -24,7 +24,7 @@ module Dev
24
24
  def parse_time(string)
25
25
  return nil unless string && !string.empty?
26
26
 
27
- ::Time.at(string.slice(6, 10).to_i)
27
+ Time.at(string.slice(6, 10).to_i)
28
28
  end
29
29
 
30
30
  # Calculate the cycle time as the amount of time the story was open
@@ -2,13 +2,7 @@ module Dev
2
2
  class TargetProcess
3
3
  # Class containing user information
4
4
  class User
5
- # The resource type for the api endpoint
6
- RESOURCE_TYPE = 'User'.freeze
7
-
8
- # The api path for user requests
9
- PATH = '/User'.freeze
10
-
11
- attr_accessor :data, :id, :type, :name, :login, :email
5
+ attr_accessor :data, :id, :type, :name, :login
12
6
 
13
7
  def initialize(data)
14
8
  @data = data
@@ -16,12 +10,6 @@ module Dev
16
10
  @type = data['ResourceType']
17
11
  @name = data['FullName']
18
12
  @login = data['Login']
19
- @email = data['Email']
20
- end
21
-
22
- # Get the user with the given id and return that object
23
- def self.get(id)
24
- new(TargetProcess.new.get("#{User::PATH}/#{id}", Query.new))
25
13
  end
26
14
  end
27
15
  end
@@ -37,7 +37,7 @@ module Dev
37
37
  def parse_time(string)
38
38
  return nil unless string && !string.empty?
39
39
 
40
- ::Time.at(string.slice(6, 10).to_i)
40
+ Time.at(string.slice(6, 10).to_i)
41
41
  end
42
42
 
43
43
  # Calculate the cycle time as the amount of time the story was open
@@ -38,7 +38,7 @@ module Dev
38
38
  def parse_time(string)
39
39
  return nil unless string && !string.empty?
40
40
 
41
- ::Time.at(string.slice(6, 10).to_i)
41
+ Time.at(string.slice(6, 10).to_i)
42
42
  end
43
43
  end
44
44
  end
@@ -72,8 +72,8 @@ module Dev
72
72
  [].tap do |ary|
73
73
  get(Release::PATH, query) do |result|
74
74
  ary << Release.new(result)
75
- yield ary.last if block_given?
76
75
  end
76
+ ary.each(&)
77
77
  end
78
78
  end
79
79
 
@@ -84,8 +84,8 @@ module Dev
84
84
  [].tap do |ary|
85
85
  get(UserStory::PATH, query) do |result|
86
86
  ary << UserStory.new(result)
87
- yield ary.last if block_given?
88
87
  end
88
+ ary.each(&)
89
89
  end
90
90
  end
91
91
 
@@ -96,8 +96,8 @@ module Dev
96
96
  [].tap do |ary|
97
97
  get(UserStoryHistory::PATH, query) do |result|
98
98
  ary << UserStoryHistory.new(result)
99
- yield ary.last if block_given?
100
99
  end
100
+ ary.each(&)
101
101
  end
102
102
  end
103
103
 
@@ -108,20 +108,8 @@ module Dev
108
108
  [].tap do |ary|
109
109
  get(TeamAssignment::PATH, query) do |result|
110
110
  ary << TeamAssignment.new(result)
111
- yield ary.last if block_given?
112
- end
113
- end
114
- end
115
-
116
- # Perform a query to the time api path
117
- # Call the given block (if present) with each time
118
- # Return all times
119
- def times(query, &)
120
- [].tap do |ary|
121
- get(Time::PATH, query) do |result|
122
- ary << Time.new(result)
123
- yield ary.last if block_given?
124
111
  end
112
+ ary.each(&)
125
113
  end
126
114
  end
127
115
 
@@ -144,11 +132,8 @@ module Dev
144
132
  parsed_response['Items'].each(&)
145
133
 
146
134
  while parsed_response['Next']
147
- next_query_string = URI(parsed_response['Next']).query
148
- next_url = "/api/v1/#{path}"
149
- next_url << "?#{next_query_string}" unless query_string.empty?
150
- response = client.request_get(next_url, headers)
151
- raise "Error querying #{next_url} [#{next_query_string}]: #{response.inspect}" unless response.response.is_a?(Net::HTTPSuccess)
135
+ response = client.request_get(parsed_response['Next'], headers)
136
+ raise "Error querying #{parsed_response['Next']} [#{query_string}]: #{response.inspect}" unless response.response.is_a?(Net::HTTPSuccess)
152
137
 
153
138
  parsed_response = JSON.parse(response.body)
154
139
  return parsed_response unless parsed_response.key?('Items')
@@ -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'.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
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-24 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
@@ -413,9 +427,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
413
427
  version: '3.1'
414
428
  required_rubygems_version: !ruby/object:Gem::Requirement
415
429
  requirements:
416
- - - ">="
430
+ - - ">"
417
431
  - !ruby/object:Gem::Version
418
- version: '0'
432
+ version: 1.3.1
419
433
  requirements: []
420
434
  rubygems_version: 3.4.10
421
435
  signing_key:
@@ -1,32 +0,0 @@
1
- module Dev
2
- class TargetProcess
3
- # The class to query time information from Target Process
4
- class Time
5
- # The resource type for the api endpoint
6
- RESOURCE_TYPE = 'Time'.freeze
7
-
8
- # The api path for time requests
9
- PATH = '/Time'.freeze
10
-
11
- attr_accessor :data, :id, :type, :description, :hours, :date, :story, :user
12
-
13
- def initialize(data)
14
- @data = data
15
- @id = data['Id']
16
- @type = data['ResourceType']
17
- @description = data['Description']
18
- @hours = data['Spent']
19
- @date = parse_time(data['Date'])
20
- @story = UserStory.new(data['Assignable']) if data['Assignable']
21
- @user = User.new(data['User']) if data['User']
22
- end
23
-
24
- # Parse the dot net time representation into something that ruby can use
25
- def parse_time(string)
26
- return nil unless string && !string.empty?
27
-
28
- ::Time.at(string.slice(6, 10).to_i)
29
- end
30
- end
31
- end
32
- end