seira 0.1.6 → 0.1.7

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
  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