seira 0.5.7 → 0.5.9

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
  SHA256:
3
- metadata.gz: 71b3471104a2d2635ebd3a15c88f1fb07cf95bb9d7c230c5b88d9305baabe175
4
- data.tar.gz: '09e0a3d5247ca115c10a41a96d645b59079558e3087203fcf53b78c79dc34fce'
3
+ metadata.gz: 00e2bc628518db4932766efa514535604cffe9983b4d5ebb949fa6c932388da9
4
+ data.tar.gz: affbd9c3db26d811993872d7cfabf71606c3e5cf3f2562a1513c55eec15525c8
5
5
  SHA512:
6
- metadata.gz: 2cb60153ff12c3b0f17ca650460c9ecb6e874e1620da389ab491289609d25e4c279f040007b473facfaada905e1ab2f828327ae45a9ca966bfae43e5a1e074a0
7
- data.tar.gz: c6f14cd0f516d281cbe81f1e0139c821a5e0299777a00b0896025a17c37bc718d6d825db30ebfcc1ba0580f3b92b774ee685483ea04bb1ee44bcfbcc6a3edf9b
6
+ metadata.gz: 59e85f167e6d0c2930d90d440d21a5afe23041b09228371c2f4db6726b86da91fe0695e149837439681dc5bcf3a5d9d15071d9d3fa7606955e882bc8e50b1d62
7
+ data.tar.gz: df264bd54d20926b5fe00bc3d4059006e4f813ff1a3a318b567e45b413c7cf81688eac79e8f973d300892e55fb34f480b054872da4d1b3b1a54ed8c95ab55aaf
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.3
1
+ 2.6.3
data/lib/helpers.rb CHANGED
@@ -49,10 +49,16 @@ module Seira
49
49
  def sql_ips(name, context:)
50
50
  describe_command = "sql instances describe #{name}"
51
51
  json = JSON.parse(Seira::Commands.gcloud(describe_command, context: context, format: :json))
52
- private_ip = json['ipAddresses'].find { |address| address['type'] == 'PRIVATE' }['ipAddress']
53
- public_ip = json['ipAddresses'].find { |address| address['type'] == 'PRIMARY' }['ipAddress']
52
+ private_ip = extract_ip_if_present(json['ipAddresses'].find { |address| address['type'] == 'PRIVATE' })
53
+ public_ip = extract_ip_if_present(json['ipAddresses'].find { |address| address['type'] == 'PRIMARY' })
54
54
  { private: private_ip, public: public_ip }
55
55
  end
56
+
57
+ def extract_ip_if_present(ip_address)
58
+ return nil if ip_address.nil?
59
+
60
+ ip_address['ipAddress']
61
+ end
56
62
  end
57
63
  end
58
64
  end
@@ -7,6 +7,7 @@ module Seira
7
7
 
8
8
  attr_reader :name, :version, :cpu, :memory, :storage, :replica_for, :make_highly_available
9
9
  attr_reader :root_password, :proxyuser_password
10
+ attr_reader :prefix
10
11
 
11
12
  def initialize(app:, action:, args:, context:)
12
13
  @app = app
@@ -46,6 +47,31 @@ module Seira
46
47
  puts "To make this database the primary, promote it using the CLI and update the DATABASE_URL."
47
48
  end
48
49
 
50
+ def add(existing_instances)
51
+ if !args.empty? && (args[0].start_with? '--prefix=')
52
+ @prefix = args[0].split('=')[1]
53
+ end
54
+
55
+ if prefix.nil?
56
+ puts "missing --prefix= for add command. Must be the first argument."
57
+ exit(1)
58
+ end
59
+
60
+ # remove prefix from the head of the list since we don't want to pass it to gcloud
61
+ args.pop
62
+
63
+ @name = "#{app}-#{prefix}-#{Seira::Random.unique_name(existing_instances)}"
64
+ puts "Attempting to create #{name}"
65
+ run_create_command
66
+
67
+ update_root_password
68
+ create_proxy_user
69
+
70
+ secrets_name = "#{name}-credentials"
71
+ kubectl("create secret generic #{secrets_name} --from-literal=ROOT_PASSWORD=#{root_password} --from-literal=PROXYUSER_PASSWORD=#{proxyuser_password}", context: context)
72
+ puts "Credentials were saved in #{secrets_name}"
73
+ end
74
+
49
75
  private
50
76
 
51
77
  def run_create_command
@@ -82,6 +108,7 @@ module Seira
82
108
  # Basic configs
83
109
  create_command += " --database-version=#{version}"
84
110
  create_command += " --network=default" # allow network to be configurable?
111
+ create_command += " --no-assign-ip" # don't assign public ip
85
112
 
86
113
  # A read replica cannot have HA, inherits the cpu, mem and storage of its primary
87
114
  if replica_for.nil?
data/lib/seira/db.rb CHANGED
@@ -8,7 +8,7 @@ module Seira
8
8
  class Db
9
9
  include Seira::Commands
10
10
 
11
- VALID_ACTIONS = %w[help create delete list restart connect ps kill analyze create-readonly-user psql table-sizes index-sizes vacuum unused-indexes unused-indices user-connections info alter-proxyuser-roles].freeze
11
+ VALID_ACTIONS = %w[help create delete list restart connect ps kill analyze create-readonly-user psql table-sizes index-sizes vacuum unused-indexes unused-indices user-connections info alter-proxyuser-roles add].freeze
12
12
  SUMMARY = "Manage your Cloud SQL Postgres databases.".freeze
13
13
 
14
14
  attr_reader :app, :action, :args, :context
@@ -26,6 +26,8 @@ module Seira
26
26
  run_help
27
27
  when 'create'
28
28
  run_create
29
+ when 'add'
30
+ run_add
29
31
  when 'delete'
30
32
  run_delete
31
33
  when 'list'
@@ -84,6 +86,7 @@ module Seira
84
86
  analyze: Display database performance information
85
87
  connect: Open a psql command prompt via gcloud connect. You will be shown the password needed before the prompt opens.
86
88
  create: Create a new postgres instance in cloud sql. Supports creating replicas and other numerous flags.
89
+ add: Adds a new database to the given project. Requires --prefix=my-prefix to prefix the random name
87
90
  create-readonly-user: Create a database user named by --username=<name> with only SELECT access privileges
88
91
  delete: Delete a postgres instance from cloud sql. Use with caution, and remove all kubernetes configs first.
89
92
  index-sizes: List sizes of all indexes in the database
@@ -105,6 +108,10 @@ module Seira
105
108
  Seira::Db::Create.new(app: app, action: action, args: args, context: context).run(existing_instances)
106
109
  end
107
110
 
111
+ def run_add
112
+ Seira::Db::Create.new(app: app, action: action, args: args, context: context).add(existing_instances)
113
+ end
114
+
108
115
  def run_alter_proxyuser_roles
109
116
  Seira::Db::AlterProxyuserRoles.new(app: app, action: action, args: args, context: context).run
110
117
  end
data/lib/seira/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Seira
2
- VERSION = "0.5.7".freeze
2
+ VERSION = "0.5.9".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seira
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Ringwelski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-17 00:00:00.000000000 Z
11
+ date: 2019-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -157,8 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
159
  requirements: []
160
- rubyforge_project:
161
- rubygems_version: 2.7.6
160
+ rubygems_version: 3.0.3
162
161
  signing_key:
163
162
  specification_version: 4
164
163
  summary: An opinionated library for building applications on Kubernetes.