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 +4 -4
- data/lib/seira.rb +1 -0
- data/lib/seira/db.rb +37 -2
- data/lib/seira/db/create.rb +1 -1
- data/lib/seira/secrets.rb +3 -3
- data/lib/seira/version.rb +1 -1
- data/seira.gemspec +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff2eb0fe8f04aa7734da72c7f0542c7d5b556b84
|
4
|
+
data.tar.gz: 662cee51d65fc44ad8010b4dd3dfdc29b644de6b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc8e4d479761c4c4f3e09b2b56d0d2e70aca3295fceab18316f56751030b0cee4291a26c5dc9eeec00fcf1d2d1abdba5f47e945c06fdd440e3f861f069eacd14
|
7
|
+
data.tar.gz: 47e734d06b5456df2f54497fb9efe7f02f44f02c7f54de12dc7ce2e8287c69a512cda8f3c96d3c68ea92fd4042149736292a650faafec4bb5c45ededd4ab7995
|
data/lib/seira.rb
CHANGED
data/lib/seira/db.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'securerandom'
|
2
2
|
|
3
|
-
require_relative 'db/create
|
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
|
data/lib/seira/db/create.rb
CHANGED
@@ -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
|
data/lib/seira/secrets.rb
CHANGED
@@ -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
|
|
data/lib/seira/version.rb
CHANGED
data/seira.gemspec
CHANGED
@@ -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.
|
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
|