seira 0.5.3 → 0.5.5

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: 00d08df8b0745e2685212efae00e131197ce665fbf90afb3cd7a72b150450e20
4
- data.tar.gz: 4c81a2a27b8edbe069375535b4848ad17d38cf2b803679a939ff1f970d3a6d0b
3
+ metadata.gz: 16a43b30639713b47c035cd97dbfc2392dedd8ffd85dd3f8d188fbdef0d9efd9
4
+ data.tar.gz: c11ee4d7151e0ae9dc068c2b91bee0bc4c00d184d688e7ddcab6a7872420f0ee
5
5
  SHA512:
6
- metadata.gz: a0dc529337d4d8dc6f5826953d111a7f1d18d6c5558e262c01b7a50b4b064b1e4054edfee62c5127564b3aca1490bc4ccbcb3280f8bc065215ec39e4cd01c5f5
7
- data.tar.gz: ec8c5a215f0b0382bc55c1207055377a9bec7cffba0a2882783eb0b3619e704d7859d094ddafd0065ef88f16ebc854983a0702e3635783c635b60e476019c405
6
+ metadata.gz: 26069ed21b7f53110b877a372867497e308e58a7e7239108caf7473d4d42d07fe548bddc80032b8ffec3f35268b35f4a372f839a2d979a7107869b0fc87b4ce9
7
+ data.tar.gz: 6e58dc0e409d35ed00de7bd3950afd98300f303f0e78644dd83134a9cfbf8c8ec6e3b6c9db0cf06e80ae0666e2e75da6b96ca41893d81bb8ea536bb35806e829
data/lib/helpers.rb CHANGED
@@ -45,6 +45,14 @@ module Seira
45
45
  rescue
46
46
  'unknown'
47
47
  end
48
+
49
+ def sql_ips(name, context:)
50
+ describe_command = "sql instances describe #{name}"
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']
54
+ { private: private_ip, public: public_ip }
55
+ end
48
56
  end
49
57
  end
50
58
  end
data/lib/seira.rb CHANGED
@@ -56,6 +56,8 @@ module Seira
56
56
  # arg is not in the ARGV array and should be skipped over
57
57
  if ARGV[0] == 'help'
58
58
  @category = reversed_args.pop
59
+ elsif ARGV[0] == 'version'
60
+ @category = reversed_args.pop
59
61
  elsif ARGV[1] == 'cluster'
60
62
  cluster = reversed_args.pop
61
63
  @category = reversed_args.pop
@@ -100,6 +102,9 @@ module Seira
100
102
  if category == 'help'
101
103
  run_base_help
102
104
  exit(0)
105
+ elsif category == 'version'
106
+ puts "Seira version: #{Seira::VERSION}"
107
+ exit(0)
103
108
  elsif category == 'setup'
104
109
  Seira::Setup.new(target: cluster, args: args, settings: settings).run
105
110
  exit(0)
@@ -136,8 +141,8 @@ module Seira
136
141
  cluster: cluster,
137
142
  project: project,
138
143
  settings: settings,
139
- region: cluster['region'],
140
- zone: cluster['zone'],
144
+ region: settings.region_for_cluster(cluster),
145
+ zone: settings.zone_for_cluster(cluster),
141
146
  app: app,
142
147
  action: action,
143
148
  args: args
@@ -151,7 +156,7 @@ module Seira
151
156
  exit(1)
152
157
  end
153
158
 
154
- unless system("kubectl version > /dev/null 2>&1")
159
+ unless system("kubectl version -c > /dev/null 2>&1")
155
160
  puts "Kubectl library not installed properly. Please install `kubectl` before using seira.".red
156
161
  exit(1)
157
162
  end
data/lib/seira/db.rb CHANGED
@@ -245,7 +245,7 @@ module Seira
245
245
  end
246
246
 
247
247
  password = SecureRandom.urlsafe_base64(32)
248
- if gcloud("sql users create #{user_name} '' --instance=#{instance_name} --password=#{password}", context: context, format: :boolean)
248
+ if gcloud("sql users create #{user_name} --instance=#{instance_name} --password=#{password}", context: context, format: :boolean)
249
249
  puts "Created user '#{user_name}' with password #{password}"
250
250
  else
251
251
  puts "Failed to create user '#{user_name}'"
@@ -264,6 +264,8 @@ module Seira
264
264
  GRANT SELECT ON ALL TABLES IN SCHEMA public TO #{user_name};
265
265
  ALTER DEFAULT PRIVILEGES IN SCHEMA "public" GRANT SELECT ON TABLES TO #{user_name};
266
266
  SQL
267
+
268
+ puts "Connecting"
267
269
  execute_db_command(admin_commands, as_admin: true)
268
270
  execute_db_command(database_commands)
269
271
  end
@@ -412,6 +414,7 @@ module Seira
412
414
  def execute_db_command(sql_command, as_admin: false, interactive: false, print: true)
413
415
  # TODO(josh): move pgbouncer naming logic here and in Create to a common location
414
416
  instance_name = primary_instance
417
+ private_ip = Helpers.sql_ips(instance_name, context: context)[:private]
415
418
  tier = instance_name.gsub("#{app}-", '')
416
419
  matching_pods = Helpers.fetch_pods(context: context, filters: { tier: tier })
417
420
  if matching_pods.empty?
@@ -422,9 +425,9 @@ module Seira
422
425
  psql_command =
423
426
  if as_admin
424
427
  root_password = Helpers.get_secret(context: context, key: "#{instance_name.tr('-', '_').upcase}_ROOT_PASSWORD")
425
- "psql postgres://postgres:#{root_password}@127.0.0.1:5432"
428
+ "psql postgres://postgres:#{root_password}@#{private_ip}:5432"
426
429
  else
427
- 'psql'
430
+ "psql"
428
431
  end
429
432
  system_command = "kubectl exec #{pod_name} --namespace #{app}"
430
433
  system_command += ' -ti' if interactive
@@ -188,13 +188,7 @@ module Seira
188
188
  end
189
189
 
190
190
  def ips
191
- @_ips ||= begin
192
- describe_command = "sql instances describe #{name}"
193
- json = JSON.parse(gcloud(describe_command, context: context, format: :json))
194
- private_ip = json['ipAddresses'].find { |address| address['type'] == 'PRIVATE' }['ipAddress']
195
- public_ip = json['ipAddresses'].find { |address| address['type'] == 'PRIMARY' }['ipAddress']
196
- { private: private_ip, public: public_ip }
197
- end
191
+ @ips ||= Helpers.sql_ips(name, context: context)
198
192
  end
199
193
 
200
194
  def write_pgbouncer_yaml
@@ -58,7 +58,7 @@ module Seira
58
58
  # TODO: Info about what is running on it?
59
59
  # TODO: What information do we get in the json format we could include here?
60
60
  def run_list
61
- gcloud("container node-pools list --cluster #{context[:cluster]}", context: context, format: :boolean)
61
+ gcloud("container node-pools list --cluster #{context[:cluster]} --region=#{context[:region]}", context: context, format: :boolean)
62
62
  end
63
63
 
64
64
  def run_list_nodes
@@ -157,7 +157,7 @@ module Seira
157
157
 
158
158
  exit(1) unless HighLine.agree "Node pool has successfully been cordoned and drained, and should be safe to delete. Continue deleting node pool #{node_pool_name}?"
159
159
 
160
- if gcloud("container node-pools delete #{node_pool_name} --cluster #{context[:cluster]}", context: context, format: :boolean)
160
+ if gcloud("container node-pools delete #{node_pool_name} --cluster #{context[:cluster]} --region=#{context[:region]}", context: context, format: :boolean)
161
161
  puts 'Node pool deleted successfully'
162
162
  else
163
163
  puts 'Failed to delete old pool'
@@ -167,7 +167,7 @@ module Seira
167
167
 
168
168
  # TODO: Represent by a ruby object?
169
169
  def node_pools
170
- JSON.parse(gcloud("container node-pools list --cluster #{context[:cluster]}", context: context, format: :json))
170
+ JSON.parse(gcloud("container node-pools list --cluster #{context[:cluster]} --region=#{context[:region]}", context: context, format: :json))
171
171
  end
172
172
 
173
173
  def nodes_for_pool(pool_name)
@@ -56,6 +56,14 @@ module Seira
56
56
  settings['seira']['clusters'][cluster]['project']
57
57
  end
58
58
 
59
+ def region_for_cluster(cluster)
60
+ settings['seira']['clusters'][cluster]['region']
61
+ end
62
+
63
+ def zone_for_cluster(cluster)
64
+ settings['seira']['clusters'][cluster]['zone']
65
+ end
66
+
59
67
  def expected_environment_variable_during_deploys
60
68
  settings['seira']['expected_environment_variable_during_deploys']
61
69
  end
data/lib/seira/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Seira
2
- VERSION = "0.5.3".freeze
2
+ VERSION = "0.5.5".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.3
4
+ version: 0.5.5
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-01-24 00:00:00.000000000 Z
11
+ date: 2019-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline