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