seira 0.1.6 → 0.1.7

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2139b5d967293724e307e500bd87c3a77998f563
4
- data.tar.gz: 5eb1767a8f7c23a6dad5357823fd651d5089e21d
3
+ metadata.gz: ff2eb0fe8f04aa7734da72c7f0542c7d5b556b84
4
+ data.tar.gz: 662cee51d65fc44ad8010b4dd3dfdc29b644de6b
5
5
  SHA512:
6
- metadata.gz: 38121663c35640ef9a8f6c2180965197f088b46ed609a0ea122b301907653b69ae93c7e13d164868f1d4c21ac71964e4f281323a916352f34a3186e63950c63b
7
- data.tar.gz: d167aa0f6e90e6130e42721b0240867ed03d9cdcbaa13c245eb86ca29a45e4baf3dc7845e076152a178238b43e5d4e74cc408ad8674c506f51685f61040c720b
6
+ metadata.gz: dc8e4d479761c4c4f3e09b2b56d0d2e70aca3295fceab18316f56751030b0cee4291a26c5dc9eeec00fcf1d2d1abdba5f47e945c06fdd440e3f861f069eacd14
7
+ data.tar.gz: 47e734d06b5456df2f54497fb9efe7f02f44f02c7f54de12dc7ce2e8287c69a512cda8f3c96d3c68ea92fd4042149736292a650faafec4bb5c45ededd4ab7995
@@ -1,5 +1,6 @@
1
1
  require 'json'
2
2
  require 'highline/import'
3
+ require 'colorize'
3
4
 
4
5
  require "seira/version"
5
6
  require 'seira/app'
@@ -1,10 +1,10 @@
1
1
  require 'securerandom'
2
2
 
3
- require_relative 'db/create.rb'
3
+ require_relative 'db/create'
4
4
 
5
5
  module Seira
6
6
  class Db
7
- VALID_ACTIONS = %w[help create delete list].freeze
7
+ VALID_ACTIONS = %w[help create delete list restart connect].freeze
8
8
  SUMMARY = "Manage your Cloud SQL Postgres databases.".freeze
9
9
 
10
10
  attr_reader :app, :action, :args, :context
@@ -26,11 +26,27 @@ module Seira
26
26
  run_delete
27
27
  when 'list'
28
28
  run_list
29
+ when 'restart'
30
+ run_restart
31
+ when 'connect'
32
+ run_connect
29
33
  else
30
34
  fail "Unknown command encountered"
31
35
  end
32
36
  end
33
37
 
38
+ # NOTE: Relies on the pgbouncer instance being named based on the db name, as is done in create command
39
+ def primary_instance
40
+ database_url = Secrets.new(app: app, action: 'get', args: [], context: context).get('DATABASE_URL')
41
+ return nil unless database_url
42
+
43
+ primary_uri = URI.parse(database_url)
44
+ host = primary_uri.host
45
+
46
+ # Convert handshake-onyx-burmese-pgbouncer-service to handshake-onyx-burmese
47
+ host.gsub('-pgbouncer-service', '')
48
+ end
49
+
34
50
  private
35
51
 
36
52
  def run_help
@@ -39,6 +55,8 @@ module Seira
39
55
  puts "create: Create a new postgres instance in cloud sql. Supports creating replicas and other numerous flags."
40
56
  puts "delete: Delete a postgres instance from cloud sql. Use with caution, and remove all kubernetes configs first."
41
57
  puts "list: List all postgres instances."
58
+ puts "restart: Fully restart the database."
59
+ puts "connect: Open a psql command prompt. You will be shown the password needed before the prompt opens."
42
60
  end
43
61
 
44
62
  def run_create
@@ -61,6 +79,23 @@ module Seira
61
79
  puts existing_instances
62
80
  end
63
81
 
82
+ def run_restart
83
+ name = "#{app}-#{args[0]}"
84
+ if system("gcloud sql instances restart #{name}")
85
+ puts "Successfully restarted sql instance #{name}"
86
+ else
87
+ puts "Failed to restart sql instance #{name}"
88
+ end
89
+ end
90
+
91
+ def run_connect
92
+ name = args[0] || primary_instance
93
+ puts "Connecting to #{name}..."
94
+ root_password = Secrets.new(app: app, action: 'get', args: [], context: context).get("#{name.tr('-', '_').upcase}_ROOT_PASSWORD") || "Not found in secrets"
95
+ puts "Your root password for 'postgres' user is: #{root_password}"
96
+ system("gcloud sql connect #{name}")
97
+ end
98
+
64
99
  def existing_instances
65
100
  `gcloud sql instances list --uri`.split("\n").map { |uri| uri.split('/').last }.select { |name| name.start_with? "#{app}-" }.map { |name| name.gsub(/^#{app}-/, '') }
66
101
  end
@@ -58,7 +58,7 @@ module Seira
58
58
  elsif arg.start_with? '--storage='
59
59
  @storage = arg.split('=')[1]
60
60
  elsif arg.start_with? '--primary='
61
- @replica_for = arg.split('=')[1] # TODO: Read secret to get it automatically
61
+ @replica_for = arg.split('=')[1] # TODO: Read secret to get it automatically, but allow for fallback
62
62
  elsif arg.start_with? '--highly-available'
63
63
  @make_highly_available = true
64
64
  elsif /^--[\w\-]+=.+$/.match? arg
@@ -103,7 +103,7 @@ module Seira
103
103
  if value.nil?
104
104
  puts "Secret '#{key}' not found"
105
105
  else
106
- puts "#{key}: #{value}"
106
+ puts "#{key.green}: #{value}"
107
107
  end
108
108
  end
109
109
 
@@ -123,7 +123,7 @@ module Seira
123
123
  secrets = fetch_current_secrets
124
124
  puts "Base64 encoded keys for #{app}:"
125
125
  secrets['data'].each do |k, v|
126
- puts "#{k}: #{v}"
126
+ puts "#{k.green}: #{v}"
127
127
  end
128
128
  end
129
129
 
@@ -131,7 +131,7 @@ module Seira
131
131
  secrets = fetch_current_secrets
132
132
  puts "Decoded (raw) keys for #{app}:"
133
133
  secrets['data'].each do |k, v|
134
- puts "#{k}: #{Base64.decode64(v)}"
134
+ puts "#{k.green}: #{Base64.decode64(v)}"
135
135
  end
136
136
  end
137
137
 
@@ -1,3 +1,3 @@
1
1
  module Seira
2
- VERSION = "0.1.6".freeze
2
+ VERSION = "0.1.7".freeze
3
3
  end
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ["lib"]
22
22
 
23
23
  spec.add_runtime_dependency "highline"
24
+ spec.add_runtime_dependency "colorize"
24
25
 
25
26
  spec.add_development_dependency "bundler", "~> 1.14"
26
27
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seira
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Ringwelski
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: colorize
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement