swarm_cluster_cli_ope 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 34f200277402278171b70e5a7c774b9476f265be5f9143afe76469d0966b4e4d
4
- data.tar.gz: 3db658617569310969711c33e7d36184a638f879e0a14d1c429edfae92b850b7
3
+ metadata.gz: aba2cb5ef2e4841d95dedbfcd147a2b48048ba625c6b85f5559c1fd6d59bf530
4
+ data.tar.gz: edcdb54c2423b0aef73bba9d098d0738eb89d907aae65203b8ec473e2a40464e
5
5
  SHA512:
6
- metadata.gz: 519b85c754553750633cdac09b9746b09ae77f37094ba09a7d45ce910b9597fabdbe3e2811f99f60ecb9f3eb8e4e54021c0418082b02f3b82e6ddc1ba4a6cf14
7
- data.tar.gz: 915902c0e034356f28025d7dbb576f28159b22280d2acf0dc9e30d46435e746941aeabd7e5eee021f37abc64285bbc996c83f2219a07abc68323d4fcb6cf60ac
6
+ metadata.gz: 71eb5c600a1615c5c292f439ca8afb6ca6ff43ef93fdf6d1b249617028351c9569a1c7c1cc7b56b75eb57fa6008a4b7682ed0b6d850e42929ce3c41678dba968
7
+ data.tar.gz: 23d553a4b9c64b0a39b5efd7358751bed3ff7944884b767efce7419ccdc23b1423cf369111795d501ee76fa1b6cbd2940963186753e2405b9d14c1b7367d4de0
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- swarm_cluster_cli_ope (0.4.1)
4
+ swarm_cluster_cli_ope (0.4.2)
5
5
  activesupport
6
6
  open4
7
7
  thor (~> 1.0)
@@ -28,11 +28,13 @@ module SwarmClusterCliOpe
28
28
  database_name: #{local.database_name}
29
29
  username: #{local.username}
30
30
  password: #{local.password}
31
+ version: #{local.database_version}
31
32
  remote:
32
33
  service_name: #{remote.service_name}
33
34
  database_name: #{remote.database_name}
34
35
  username: #{remote.username}
35
- password: #{remote.password}"
36
+ password: #{remote.password}
37
+ version: #{remote.database_version}"
36
38
 
37
39
  end
38
40
 
@@ -34,6 +34,8 @@ module SwarmClusterCliOpe
34
34
  define_cfgs :username, default_env: "MYSQL_USER", configuration_name: :mysql_user, default_value: 'root'
35
35
  define_cfgs :password, default_env: "MYSQL_PASSWORD", configuration_name: :mysql_password, default_value: 'root'
36
36
 
37
+ define_cfgs :database_version, default_env: "MYSQL_MAJOR", configuration_name: :mysql_version
38
+
37
39
  end
38
40
 
39
41
 
@@ -2,28 +2,27 @@ module SwarmClusterCliOpe
2
2
  module SyncConfigs
3
3
  class PostGres < BaseDatabase
4
4
 
5
- # @return [TrueClass, FalseClass]
5
+
6
6
  def pull
7
7
  resume('pull')
8
8
 
9
- dump_cmd = dump_cmd(remote.username, remote.password, remote.database_name)
10
- logger.info{ "DUMP COMMAND: #{dump_cmd.join(' ')}"}
11
9
  if yes?("Confermare il comando?[y,yes]")
10
+
12
11
  tmp_file = "/tmp/#{Time.now.to_i}.sql.gz"
13
- container.exec("bash -c '#{dump_cmd.join(' ')}' > #{tmp_file}")
14
- local_container.copy_in(tmp_file, tmp_file)
12
+ dump_cmd(remote, tmp_file)
13
+ local.container.copy_in(tmp_file, tmp_file)
15
14
 
16
15
  # drop old db and recreate
17
- drop_cmd = drop_cmd(local.username, local.password, local.database_name)
18
- logger.info{ "DROP COMMAND: #{drop_cmd.join(' ')}"}
19
- local_container.exec("bash -c '#{drop_cmd.join(' ')}'")
20
- create_cmd = create_cmd(local.username, local.password, local.database_name)
21
- logger.info{ "CREATE COMMAND: #{create_cmd.join(' ')}"}
22
- local_container.exec("bash -c '#{create_cmd.join(' ')}'")
23
-
24
- restore_cmd = restore_cmd(local.username, local.password, local.database_name, tmp_file)
25
- logger.info{ "RESTORE COMMAND: #{restore_cmd.join(' ')}"}
26
- local_container.exec("bash -c '#{restore_cmd.join(' ')}'")
16
+ if Gem::Version.new(local.database_version) <= Gem::Version.new("12")
17
+ close_connections_and_drop_cmd(local)
18
+ else
19
+ raise "DA ANALIZZARE QUANDO LA 13 disponibile....dropdb ha un force come parametro"
20
+ end
21
+
22
+ create_cmd(local)
23
+
24
+ restore_cmd(local, tmp_file)
25
+
27
26
  end
28
27
  true
29
28
  end
@@ -32,25 +31,22 @@ module SwarmClusterCliOpe
32
31
  def push
33
32
  resume('PUSH')
34
33
 
35
- dump_cmd = dump_cmd(local.username, local.password, local.database_name)
36
- say "DUMP COMMAND: #{dump_cmd.join(' ')}"
37
34
  if yes?("ATTENZIONE !!!!!!PUSH!!!!! - Confermare il comando?[y,yes]")
35
+
38
36
  tmp_file = "/tmp/#{Time.now.to_i}.sql.gz"
39
- local_container.exec("bash -c '#{dump_cmd.join(' ')}' > #{tmp_file}")
40
- container.copy_in(tmp_file, tmp_file)
37
+ dump_cmd(local, tmp_file)
38
+ remote.container.copy_in(tmp_file, tmp_file)
41
39
 
42
40
  # drop old db and recreate
43
- drop_cmd = drop_cmd(remote.username, remote.password, remote.database_name)
44
- logger.info{ "DROP COMMAND: #{drop_cmd.join(' ')}"}
45
- container.exec("bash -c '#{drop_cmd.join(' ')}'")
41
+ if Gem::Version.new(local.database_version) <= Gem::Version.new("12")
42
+ close_connections_and_drop_cmd(remote)
43
+ else
44
+ raise "DA ANALIZZARE QUANDO LA 13 disponibile....dropdb ha un force come parametro"
45
+ end
46
+ create_cmd(remote)
46
47
 
47
- create_cmd = create_cmd(remote.username, remote.password, remote.database_name)
48
- logger.info{ "CREATE COMMAND: #{create_cmd.join(' ')}"}
49
- container.exec("bash -c '#{create_cmd.join(' ')}'")
48
+ restore_cmd(remote, tmp_file)
50
49
 
51
- restore_cmd = restore_cmd(remote.username, remote.password, remote.database_name, tmp_file)
52
- say "RESTORE COMMAND: #{restore_cmd.join(' ')}"
53
- container.exec("bash -c '#{restore_cmd.join(' ')}'")
54
50
  end
55
51
  true
56
52
  end
@@ -63,53 +59,101 @@ module SwarmClusterCliOpe
63
59
  define_cfgs :username, default_env: "POSTGRES_USER", configuration_name: :pg_user, default_value: 'postgres'
64
60
  define_cfgs :password, default_env: "POSTGRES_PASSWORD", configuration_name: :pg_password
65
61
 
62
+ define_cfgs :database_version, default_env: "PG_MAJOR", configuration_name: :pg_version
63
+
66
64
  end
67
65
 
68
66
  private
69
67
 
70
- def create_cmd(username, password, database_name)
68
+ # @param [EnvConfigs] config
69
+ def create_cmd(config)
71
70
  create_cmd = []
72
- create_cmd << "PGPASSWORD=\"#{password}\""
71
+ create_cmd << "PGPASSWORD=\"#{config.password}\""
73
72
  create_cmd << 'createdb'
74
- create_cmd << "--username=#{username}"
75
- create_cmd << database_name
76
- end
73
+ create_cmd << "--username=#{config.username}"
74
+ create_cmd << config.database_name
77
75
 
78
- def drop_cmd(username, password, database_name)
79
- drop_cmd = []
80
- drop_cmd << "PGPASSWORD=\"#{password}\""
81
- drop_cmd << 'dropdb'
82
- drop_cmd << "--username=#{username}"
83
- drop_cmd << database_name
84
- drop_cmd
76
+ logger.info { "CREATE COMMAND: #{create_cmd.join(' ')}" }
77
+ config.container.exec("bash -c '#{create_cmd.join(' ')} || true'")
85
78
  end
86
79
 
87
- def restore_cmd(username, password, database_name, tmp_file)
80
+ # @param [EnvConfigs] config
81
+ # def drop_cmd(config)
82
+ # drop_cmd = []
83
+ # drop_cmd << "PGPASSWORD=\"#{config.password}\""
84
+ # drop_cmd << 'dropdb'
85
+ # drop_cmd << '--if-exists'
86
+ # drop_cmd << "--username=#{config.username}"
87
+ # drop_cmd << config.database_name
88
+ # drop_cmd
89
+ #
90
+ # logger.info { "DROP COMMAND: #{drop_cmd.join(' ')}" }
91
+ # config.container.exec("bash -c '#{drop_cmd.join(' ')}'")
92
+ # end
93
+
94
+ # @param [EnvConfigs] config
95
+ def restore_cmd(config, tmp_file)
88
96
  restore_cmd = []
89
- restore_cmd << "PGPASSWORD=\"#{password}\""
97
+ restore_cmd << "PGPASSWORD=\"#{config.password}\""
90
98
  restore_cmd << 'pg_restore'
91
99
  restore_cmd << '--no-acl'
92
100
  restore_cmd << '--no-owner'
93
- restore_cmd << "--username=#{username}"
94
- restore_cmd << "--dbname=#{database_name}"
101
+ restore_cmd << "--username=#{config.username}"
102
+ restore_cmd << "--dbname=#{config.database_name}"
95
103
  restore_cmd << tmp_file
96
104
  restore_cmd
105
+
106
+ logger.info { "RESTORE COMMAND: #{restore_cmd.join(' ')}" }
107
+ config.container.exec("bash -c '#{restore_cmd.join(' ')}'")
97
108
  end
98
109
 
99
- def dump_cmd(username, password, database_name)
110
+ # @param [EnvConfigs] config
111
+ def dump_cmd(config, file)
100
112
  dump_cmd = []
101
- dump_cmd << "PGPASSWORD=\"#{password}\""
113
+ dump_cmd << "PGPASSWORD=\"#{config.password}\""
102
114
  dump_cmd << 'pg_dump'
103
115
  dump_cmd << '--no-acl'
104
116
  dump_cmd << '--no-owner'
105
- dump_cmd << "--username=#{username}"
117
+ dump_cmd << "--username=#{config.username}"
106
118
  dump_cmd << '--format=custom'
107
119
  dump_cmd << '--compress=9'
108
- dump_cmd << database_name
120
+ dump_cmd << config.database_name
109
121
  dump_cmd
122
+
123
+ logger.info { "DUMP COMMAND: #{dump_cmd.join(' ')}" }
124
+ config.container.exec("bash -c '#{dump_cmd.join(' ')}' > #{file}")
125
+
110
126
  end
111
127
 
112
128
 
129
+ # @param [EnvConfigs] config
130
+ def close_connections_and_drop_cmd(config)
131
+ cmd = []
132
+ cmd << "PGPASSWORD=\"#{config.password}\""
133
+
134
+ sql = []
135
+ sql << "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '\"'\"'#{config.database_name}'\"'\"' AND pid <> pg_backend_pid();;"
136
+ sql << "DROP DATABASE IF EXISTS #{config.database_name};"
137
+
138
+ cmd << "echo \"#{sql.join(" ")}\" "
139
+ cmd << '|'
140
+ cmd << 'psql'
141
+ cmd << "-U #{config.username}"
142
+ cmd << "postgres"
143
+ cmd
144
+
145
+ logger.info { "CLOSE CONNECTIONS COMMAND: #{cmd.join(' ')}" }
146
+ config.container.exec("bash -c '#{cmd.join(' ')}'")
147
+ end
148
+
149
+ # quello che fa capistrano quando copia in locale - utenze inventate
150
+ # gzip -d cortobio_production_new_2020-09-10-171742.sql.gz &&
151
+ # PGPASSWORD='root' psql -c "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'development' AND pid <> pg_backend_pid();;" -U root -h 0.0.0.0 -p 32790 development;
152
+ # PGPASSWORD='root' dropdb -U root -h 0.0.0.0 -p 32790 development;
153
+ # PGPASSWORD='root' createdb -U root -h 0.0.0.0 -p 32790 development;
154
+ # PGPASSWORD='root' psql -U root -h 0.0.0.0 -p 32790 -d development < ./cortobio_production_new_2020-09-10-171742.sql
155
+
156
+
113
157
  end
114
158
  end
115
159
  end
@@ -1,3 +1,3 @@
1
1
  module SwarmClusterCliOpe
2
- VERSION = "0.4.1"
2
+ VERSION = "0.4.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swarm_cluster_cli_ope
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marino Bonetti