postgresinator 0.0.2 → 0.0.3

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/postgresinator/pg.rb +39 -36
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2bd99cf1afd9813a1132d894170183c1746de081
4
- data.tar.gz: 215d325c16685da3da2f1c5c6e379da050599f50
3
+ metadata.gz: 67dc7fc295b063ab6ed315426cf30f5b2d5d9735
4
+ data.tar.gz: 9d23816e865134f11596cc1a4f84ac46b61bacbf
5
5
  SHA512:
6
- metadata.gz: 68699734a9f6d16299318e55103c9eb4274dc01caea0255a015071010fd22a93960952508aae3ab22b8447b70723fc55dbbc76c8e1012b8a6296ebc3b31d5981
7
- data.tar.gz: 28b0ad2497af5e377660d3cf6055a08304b66069d2f3c82a04d97b3aa18dedd4a6aed5cc4938c9443314af5ec30fc422c7674fe150315f067d71cbb71ff83310
6
+ metadata.gz: 0f813adf14fdce2ff7216d7dbdc21145f5120c9a643ab329a7af992d1f275e1a72b561a939d2b33bbe12f5c1f71ccbe3a52e9f0d7b1103852b044bc81fbc1d89
7
+ data.tar.gz: 8a740ce1afe9a1abec656ad566f8b9eda2c5d2f524178b25743d266f2db9e0e31757b66101baa8d74e867ea41bceccee5749c6cd556c5040def3d84c8827ea3d
@@ -23,7 +23,7 @@ namespace :pg do
23
23
  desc "Idempotently setup one or more PostgreSQL instances using values in ./postgresinator.rb"
24
24
  task :setup => :ensure_setup do
25
25
  # instance variables are lost inside SSHKit's 'on' block, so
26
- # at the beginning of each task we assign @cluster to cluster.
26
+ # at the beginning of each task we assign cluster to @cluster.
27
27
  cluster = @cluster
28
28
  cluster.servers.each do |server|
29
29
  Rake::Task['pg:ensure_access_docker'].invoke(server.domain)
@@ -35,21 +35,21 @@ namespace :pg do
35
35
  config_file_changed = false
36
36
  cluster.image.config_files.each do |config_file|
37
37
  next if config_file == "recovery.conf"
38
- if config_file_differs?(cluster, server, config_file)
38
+ if pg_config_file_differs?(cluster, server, config_file)
39
39
  warn "Config file #{config_file} on #{server.domain} is being updated."
40
40
  Rake::Task['pg:install_config_file'].invoke(server.domain, config_file)
41
41
  Rake::Task['pg:install_config_file'].reenable
42
42
  config_file_changed = true
43
43
  end
44
44
  end
45
- unless container_exists?(server)
45
+ unless pg_container_exists?(server)
46
46
  # the create_container task's prerequisite task :ensure_config_files is
47
47
  # for manual use of create_container, so here we clear_prerequisites.
48
48
  Rake::Task['pg:create_container'].clear_prerequisites
49
49
  Rake::Task['pg:create_container'].invoke(server.domain)
50
50
  Rake::Task['pg:create_container'].reenable
51
51
  else
52
- unless container_is_running?(server)
52
+ unless pg_container_is_running?(server)
53
53
  Rake::Task['pg:start_container'].invoke(server.domain)
54
54
  Rake::Task['pg:start_container'].reenable
55
55
  else
@@ -64,18 +64,18 @@ namespace :pg do
64
64
  # sleep to allow postgres to start up before running subsequent commands against it
65
65
  sleep 3
66
66
  if server.master
67
- unless role_exists?(cluster, server, "replicator")
67
+ unless pg_role_exists?(cluster, server, "replicator")
68
68
  info "Creating role 'replicator' #{server.domain}"
69
69
  Rake::Task['pg:create_role'].invoke(server.domain, "replicator")
70
70
  Rake::Task['pg:create_role'].reenable
71
71
  end
72
72
  cluster.databases.each do |database|
73
- unless role_exists?(cluster, server, database.role)
73
+ unless pg_role_exists?(cluster, server, database.role)
74
74
  info "Creating role #{database.role} on #{server.domain}"
75
75
  Rake::Task['pg:create_role'].invoke(server.domain, database.role)
76
76
  Rake::Task['pg:create_role'].reenable
77
77
  end
78
- unless database_exists?(cluster, server, database)
78
+ unless pg_database_exists?(cluster, server, database)
79
79
  info "Creating database #{database.name} on #{server.domain}"
80
80
  Rake::Task['pg:create_database'].invoke(server.domain, database.name)
81
81
  Rake::Task['pg:create_database'].reenable
@@ -102,9 +102,9 @@ namespace :pg do
102
102
  cluster = @cluster
103
103
  server = cluster.servers.select { |s| s.domain == args.domain }.first
104
104
  on "#{cluster.ssh_user}@#{server.domain}" do
105
- if container_exists?(server)
105
+ if pg_container_exists?(server)
106
106
  info "#{server.container_name} exists on #{server.domain}"
107
- if container_is_running?(server)
107
+ if pg_container_is_running?(server)
108
108
  info ""
109
109
  info "#{server.container_name} is running on #{server.domain}"
110
110
  info ""
@@ -134,8 +134,8 @@ namespace :pg do
134
134
  on "#{cluster.ssh_user}@#{server.domain}" do
135
135
  if server.master
136
136
  clean = ""
137
- unless database_empty?(cluster, server, database)
138
- if confirm_database_overwrite?(server, database); clean = "--clean"; else exit(0); end
137
+ unless pg_database_empty?(cluster, server, database)
138
+ if pg_confirm_database_overwrite?(server, database); clean = "--clean"; else exit(0); end
139
139
  end
140
140
  execute("docker", "run", "--rm",
141
141
  "--volume", "/tmp:/tmp:rw",
@@ -157,7 +157,7 @@ namespace :pg do
157
157
  server = cluster.servers.select { |s| s.master }.first
158
158
  on "#{cluster.ssh_user}@#{server.domain}" do
159
159
  if server.master
160
- confirm_file_overwrite?(server, args.dump_file) if file_exists?("/tmp/#{args.dump_file}")
160
+ pg_confirm_file_overwrite?(server, args.dump_file) if pg_file_exists?("/tmp/#{args.dump_file}")
161
161
  execute("docker", "run", "--rm",
162
162
  "--volume", "/tmp:/tmp:rw",
163
163
  "--entrypoint", "/bin/bash",
@@ -186,7 +186,7 @@ namespace :pg do
186
186
  on "#{cluster.ssh_user}@#{server.domain}" do
187
187
  cluster.image.config_files.each do |config_file|
188
188
  next if config_file == "recovery.conf"
189
- if config_file_differs?(cluster, server, config_file)
189
+ if pg_config_file_differs?(cluster, server, config_file)
190
190
  Rake::Task['pg:install_config_file'].invoke(server.domain, config_file)
191
191
  Rake::Task['pg:install_config_file'].reenable
192
192
  end
@@ -200,7 +200,7 @@ namespace :pg do
200
200
  master_server = cluster.servers.select { |s| s.master }.first
201
201
  unless server.master
202
202
  on "#{cluster.ssh_user}@#{master_server.domain}" do
203
- fatal "Master must be running before creating a slave" and raise unless container_is_running?(master_server)
203
+ fatal "Master must be running before creating a slave" and raise unless pg_container_is_running?(master_server)
204
204
  end
205
205
  end
206
206
  on "#{cluster.ssh_user}@#{server.domain}" do
@@ -208,7 +208,7 @@ namespace :pg do
208
208
  as 'root' do
209
209
  fatal_message = "#{server.data_path} on #{server.domain} is not empty, cannot continue! " +
210
210
  "You'll need to delete those files by hand. Be sure you are not deleting important data!"
211
- fatal fatal_message and raise if files_in_data_path?(server)
211
+ fatal fatal_message and raise if pg_files_in_data_path?(server)
212
212
  execute("mkdir", "-p", server.data_path) unless test("test", "-d", server.data_path)
213
213
  execute("chown", "-R", "#{cluster.image.postgres_uid}:#{cluster.image.postgres_gid}", server.data_path)
214
214
  execute("chmod", "700", server.data_path)
@@ -233,7 +233,7 @@ namespace :pg do
233
233
  warn "Restarting a running container named #{server.container_name}"
234
234
  execute("docker", "restart", server.container_name)
235
235
  sleep 2
236
- fatal stay_running_message(server) and raise unless container_is_running?(server)
236
+ fatal pg_stay_running_message(server) and raise unless pg_container_is_running?(server)
237
237
  end
238
238
  end
239
239
 
@@ -244,7 +244,7 @@ namespace :pg do
244
244
  warn "Starting an existing but non-running container named #{server.container_name}"
245
245
  execute("docker", "start", server.container_name)
246
246
  sleep 2
247
- fatal stay_running_message(server) and raise unless container_is_running?(server)
247
+ fatal pg_stay_running_message(server) and raise unless pg_container_is_running?(server)
248
248
  end
249
249
  end
250
250
 
@@ -268,7 +268,7 @@ namespace :pg do
268
268
  # TODO: get this recovery.conf dependancy out of here?
269
269
  path = args.config_file == "recovery.conf" ? server.data_path : server.conf_path
270
270
  execute("mkdir", "-p", path) unless test("test", "-d", path)
271
- generated_config_file = generate_config_file(cluster, server, args.config_file)
271
+ generated_config_file = pg_generate_config_file(cluster, server, args.config_file)
272
272
  upload! StringIO.new(generated_config_file), "/tmp/#{args.config_file}"
273
273
  execute("mv", "/tmp/#{args.config_file}", "#{path}/#{args.config_file}")
274
274
  execute("chown", "-R", "#{cluster.image.postgres_uid}:#{cluster.image.postgres_gid}", path)
@@ -383,7 +383,7 @@ namespace :pg do
383
383
  as "root" do
384
384
  inner_server_crt = "#{cluster.image.data_path}/server.crt"
385
385
  outer_server_crt = "#{server.data_path}/server.crt"
386
- unless file_exists?(outer_server_crt)
386
+ unless pg_file_exists?(outer_server_crt)
387
387
  execute("docker", "run",
388
388
  "--rm", "--user", "root", "--entrypoint", "/bin/ln",
389
389
  "--volume", "#{server.data_path}:#{cluster.image.data_path}:rw",
@@ -393,7 +393,7 @@ namespace :pg do
393
393
  end
394
394
  inner_server_key = "#{cluster.image.data_path}/server.key"
395
395
  outer_server_key = "#{server.data_path}/server.key"
396
- unless file_exists?(outer_server_key)
396
+ unless pg_file_exists?(outer_server_key)
397
397
  execute("docker", "run",
398
398
  "--rm", "--user", "root", "--entrypoint", "/bin/ln",
399
399
  "--volume", "#{server.data_path}:#{cluster.image.data_path}:rw",
@@ -419,18 +419,21 @@ namespace :pg do
419
419
 
420
420
  private
421
421
 
422
- def stay_running_message(server)
422
+ # Temporarily added 'pg_' to the beginning of each of these methods to avoid
423
+ # getting them overwritten by other gems with methods with the same names, (E.G. nginxinator.)
424
+ ## TODO Figure out how to do this the right or better way.
425
+ def pg_stay_running_message(server)
423
426
  "Container #{server.container_name} on #{server.domain} did not stay running more than 2 seconds"
424
427
  end
425
428
 
426
- def files_in_data_path?(server)
429
+ def pg_files_in_data_path?(server)
427
430
  test("[", "\"$(ls", "-A", "#{server.data_path})\"", "]")
428
431
  end
429
432
 
430
- def config_file_differs?(cluster, server, config_file)
431
- generated_config_file = generate_config_file(cluster, server, config_file)
433
+ def pg_config_file_differs?(cluster, server, config_file)
434
+ generated_config_file = pg_generate_config_file(cluster, server, config_file)
432
435
  as 'root' do
433
- if file_exists?("#{server.conf_path}/#{config_file}")
436
+ if pg_file_exists?("#{server.conf_path}/#{config_file}")
434
437
  capture("cat", "#{server.conf_path}/#{config_file}").chomp != generated_config_file.chomp
435
438
  else
436
439
  true
@@ -438,14 +441,14 @@ namespace :pg do
438
441
  end
439
442
  end
440
443
 
441
- def generate_config_file(cluster, server, config_file)
444
+ def pg_generate_config_file(cluster, server, config_file)
442
445
  @cluster = cluster # needed for ERB
443
446
  @server = server # needed for ERB
444
447
  template_path = File.expand_path("templates/#{config_file}.erb")
445
448
  ERB.new(File.new(template_path).read).result(binding)
446
449
  end
447
450
 
448
- def role_exists?(cluster, server, role)
451
+ def pg_role_exists?(cluster, server, role)
449
452
  test("echo", "\"SELECT", "*", "FROM", "pg_user", "WHERE", "usename", "=", "'#{role}';\"", "|",
450
453
  "docker", "run", "--rm", "--interactive",
451
454
  "--entrypoint", "/bin/bash",
@@ -455,7 +458,7 @@ namespace :pg do
455
458
  "grep", "-q", "'#{role}'")
456
459
  end
457
460
 
458
- def database_exists?(cluster, server, database)
461
+ def pg_database_exists?(cluster, server, database)
459
462
  test "docker", "run", "--rm",
460
463
  "--entrypoint", "/bin/bash",
461
464
  "--volumes-from", server.container_name,
@@ -464,21 +467,21 @@ namespace :pg do
464
467
  "cut", "-d\\|", "-f1", "|", "grep", "-w", "#{database.name}'"
465
468
  end
466
469
 
467
- def container_exists?(server)
470
+ def pg_container_exists?(server)
468
471
  test "docker", "inspect", server.container_name, ">", "/dev/null"
469
472
  end
470
473
 
471
- def container_is_running?(server)
474
+ def pg_container_is_running?(server)
472
475
  (capture "docker", "inspect",
473
476
  "--format='{{.State.Running}}'",
474
477
  server.container_name).strip == "true"
475
478
  end
476
479
 
477
- def file_exists?(file_name_path)
480
+ def pg_file_exists?(file_name_path)
478
481
  test "[", "-f", file_name_path, "]"
479
482
  end
480
483
 
481
- def confirm_file_overwrite?(server, dump_file)
484
+ def pg_confirm_file_overwrite?(server, dump_file)
482
485
  warn "A file named #{dump_file} already exists on #{server.domain} in /tmp. If you continue, you will overwrite it."
483
486
  warn "Are you positive(Y/N)?"
484
487
  STDOUT.flush
@@ -489,11 +492,11 @@ namespace :pg do
489
492
  false
490
493
  else
491
494
  warn "Please enter Y or N"
492
- confirm_file_overwrite?(server, dump_file)
495
+ pg_confirm_file_overwrite?(server, dump_file)
493
496
  end
494
497
  end
495
498
 
496
- def confirm_database_overwrite?(server, database)
499
+ def pg_confirm_database_overwrite?(server, database)
497
500
  warn "There is already data in #{database.name} on #{server.domain} in the container " +
498
501
  "#{server.container_name} which stores it's data in #{server.data_path} on the host."
499
502
  warn "If you continue, you must be positive you want to overwrite the existing data."
@@ -506,11 +509,11 @@ namespace :pg do
506
509
  false
507
510
  else
508
511
  warn "Please enter Y or N"
509
- confirm_database_overwrite?(server, database)
512
+ pg_confirm_database_overwrite?(server, database)
510
513
  end
511
514
  end
512
515
 
513
- def database_empty?(cluster, server, database)
516
+ def pg_database_empty?(cluster, server, database)
514
517
  test("docker", "run", "--rm", "--volumes-from", server.container_name,
515
518
  "--entrypoint", "/bin/bash", cluster.image.name, "-lc",
516
519
  "'/usr/bin/psql", "-U", "postgres", "-d", database.name,
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: postgresinator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - david amick
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-04 00:00:00.000000000 Z
11
+ date: 2014-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake