swarm_cluster_cli_ope 0.3.2 → 0.4

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: f7a3de16030f365ec9757a6572223614b5765118ef45ddbcf9a86840d1fd0b69
4
- data.tar.gz: 2ab1028a809d3c9342be4f106617e50bfc50c09c40e86b1db20d2c3ed11f58bb
3
+ metadata.gz: dcf7eb87d7665ee32ead2dff9a05a3a7abb09587c6ffb0dcea8fa8c1dee8564b
4
+ data.tar.gz: f6f4716e71b2505d0b0e1928679ba92bc572c4382bb165f4ae3a77de5c01abcb
5
5
  SHA512:
6
- metadata.gz: 0d52ead2fd097d52550a792001b61d3de17ad0673cf5253f597793b1ed2d7ed5a8339318c98ca7159069af05efe7459829b55b677f9bd4823a81f415a0c64475
7
- data.tar.gz: 057f8c54285d6e1d439c50ebdd77f6c8bdc32a839dc53412c23fc389675612a5eaa5c01bfcd4464cd0213de2ff2892f7008a397622e5d0b03fb3806a24db58f3
6
+ metadata.gz: fbe56a69b398f32dfd2ba9ef1328fa3c10f6182f689b38089d8aa3a25e67130ee246459cf84e1b06e688172843b4b64c5aeaaec08fa9856fffd3ab5921625d59
7
+ data.tar.gz: bd0b42b2043c0462914cfe240c59c931554b675001781642674bc82425c4c5df10aeb782acdcdaac4b1727e3e948bda9f93646455e5eaeb80ad91263239ee71f
@@ -1,5 +1,9 @@
1
1
  ## Changelog
2
2
 
3
+ # 0.4
4
+ - implementazione push pull con il comando **stacksync** di pg
5
+ - controllo di versione sul file caricato rispeto a gemma, con conseguente warning
6
+
3
7
  # 0.3
4
8
  - implementazione push pull con il comando **stacksync** di mysql
5
9
 
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- swarm_cluster_cli_ope (0.3.2)
4
+ swarm_cluster_cli_ope (0.4)
5
5
  activesupport
6
6
  open4
7
7
  thor (~> 1.0)
data/README.md CHANGED
@@ -130,13 +130,36 @@ Possibili CFGS per tipologia:
130
130
  - local: -> hash di configurazioni per il DB locale
131
131
  - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
132
132
  - mysql_password_env: "MYSQL_PASSWORD" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: MYSQL_PASSWORD
133
+ - mysql_password: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
133
134
  - mysql_user_env: "MYSQL_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: MYSQL_USER
135
+ - mysql_user: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
136
+ - database_name_env: "MYSQL_DATABASE" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: MYSQL_DATABASE
137
+ - database_name: "nome_db" -> valore in chiaro, in sostituzione della variabile ambiente
138
+ - remote: -> hash di configurazioni per il DB remoto
139
+ - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
140
+ - mysql_password_env: "MYSQL_PASSWORD" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: MYSQL_PASSWORD
141
+ - mysql_password: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
142
+ - mysql_user_env: "MYSQL_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: MYSQL_USER
143
+ - mysql_user: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
134
144
  - database_name_env: "MYSQL_DATABASE" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: MYSQL_DATABASE
145
+ - database_name: "MYSQL_DATABASE" -> valore in chiaro, in sostituzione della variabile ambiente
146
+ - pg:
147
+ - local: -> hash di configurazioni per il DB locale
148
+ - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
149
+ - pg_password_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: POSTGRES_PASSWORD
150
+ - pg_password: "" -> valore in chiaro, in sostituzione della variabile ambiente
151
+ - pg_user_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: POSTGRES_USER
152
+ - pg_user: "postgres" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: postgres
153
+ - database_name_env: "POSTGRES_DB" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: POSTGRES_DB
154
+ - database_name: "nome_db" -> valore in chiaro, in sostituzione della variabile ambiente
135
155
  - remote: -> hash di configurazioni per il DB remoto
136
156
  - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
137
- - mysql_password_env: "MYSQL_PASSWORD" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: MYSQL_PASSWORD
138
- - mysql_user_env: "MYSQL_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: MYSQL_USER
139
- - database_name_env: "MYSQL_DATABASE" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: MYSQL_DATABASE
157
+ - pg_password_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: POSTGRES_PASSWORD
158
+ - pg_password: "" -> valore in chiaro, in sostituzione della variabile ambiente
159
+ - pg_user_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: POSTGRES_USER
160
+ - pg_user: "postgres" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: postgres
161
+ - database_name_env: "POSTGRES_DB" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: POSTGRES_DB
162
+ - database_name: "nome_db" -> valore in chiaro, in sostituzione della variabile ambiente
140
163
 
141
164
  #### EXAMPLE:
142
165
  Esempio di sincronizzazione di un file sqlite3 e una cartella
@@ -180,7 +203,7 @@ docker stack deploy -c test_folder/test_2/docker_compose.yml test2
180
203
  Per simulare una sincronizzazione fra locale e remoto di un mysql, lanciamo lo stesso stack anche come compose, in modo
181
204
  da trovarci sulla stessa macchina con tutte e due le situazioni
182
205
  ```shell script
183
- docker-compose up -f test_folder/test_1/docker-compose-local.yml -d
206
+ docker-compose -f test_folder/test_1/docker-compose-local.yml up -d
184
207
  ```
185
208
 
186
209
 
@@ -243,6 +243,11 @@ module SwarmClusterCliOpe
243
243
  end
244
244
  end
245
245
 
246
+ desc "version", "versione della cli"
247
+ def version
248
+ say VERSION
249
+ end
250
+
246
251
  desc "stacksync [DIRECTION:pull|push]", "Si occupa di scaricare|caricare,utilizzando le configurazioni presenti, i dati dallo stack remoto"
247
252
  long_desc <<-LONGDESC.gsub("\n", "\x5")
248
253
  le configurazioni sono contenute nell'array: sync_configs.
@@ -270,17 +275,40 @@ module SwarmClusterCliOpe
270
275
  --remote: -> path al file remoto (contesto del container)
271
276
 
272
277
  mysql:
273
- -- local: -> hash di configurazioni per il DB locale
274
- "service": "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
275
- "mysql_password_env": "MYSQL_PASSWORD" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: MYSQL_PASSWORD
276
- "mysql_user_env": "MYSQL_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: MYSQL_USER
277
- "database_name_env": "MYSQL_DATABASE" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: MYSQL_DATABASE
278
- -- remote: -> hash di configurazioni per il DB remoto
279
- "service": "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
280
- "mysql_password_env": "MYSQL_PASSWORD" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: MYSQL_PASSWORD
281
- "mysql_user_env": "MYSQL_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: MYSQL_USER
282
- "database_name_env": "MYSQL_DATABASE" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: MYSQL_DATABASE
283
-
278
+ --local: -> hash di configurazioni per il DB locale
279
+ - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
280
+ - mysql_password_env: "MYSQL_PASSWORD" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: MYSQL_PASSWORD
281
+ - mysql_password: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
282
+ - mysql_user_env: "MYSQL_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: MYSQL_USER
283
+ - mysql_user: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
284
+ - database_name_env: "MYSQL_DATABASE" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: MYSQL_DATABASE
285
+ - database_name: "nome_db" -> valore in chiaro, in sostituzione della variabile ambiente
286
+ --remote: -> hash di configurazioni per il DB remoto
287
+ - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
288
+ - mysql_password_env: "MYSQL_PASSWORD" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: MYSQL_PASSWORD
289
+ - mysql_password: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
290
+ - mysql_user_env: "MYSQL_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: MYSQL_USER
291
+ - mysql_user: "root" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: root
292
+ - database_name_env: "MYSQL_DATABASE" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: MYSQL_DATABASE
293
+ - database_name: "MYSQL_DATABASE" -> valore in chiaro, in sostituzione della variabile ambiente
294
+ pg:
295
+ --local: -> hash di configurazioni per il DB locale
296
+ - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
297
+ - pg_password_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: POSTGRES_PASSWORD
298
+ - pg_password: "" -> valore in chiaro, in sostituzione della variabile ambiente
299
+ - pg_user_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: POSTGRES_USER
300
+ - pg_user: "postgres" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: postgres
301
+ - database_name_env: "POSTGRES_DB" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: POSTGRES_DB
302
+ - database_name: "nome_db" -> valore in chiaro, in sostituzione della variabile ambiente
303
+ --remote: -> hash di configurazioni per il DB remoto
304
+ - service: "db" -> nome del servizio nel compose locale, DEFAULT: quello definito sopra
305
+ - pg_password_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente PASSWORD, DEFAULT: POSTGRES_PASSWORD
306
+ - pg_password: "" -> valore in chiaro, in sostituzione della variabile ambiente
307
+ - pg_user_env: "POSTGRES_USER" -> variabile ambiente interna al servizio contenente USERNAME, DEFAULT: POSTGRES_USER
308
+ - pg_user: "postgres" -> valore in chiaro, in sostituzione della variabile ambiente, DEFAULT: postgres
309
+ - database_name_env: "POSTGRES_DB" -> variabile ambiente interna al servizio contenente NOME DB, DEFAULT: POSTGRES_DB
310
+ - database_name: "nome_db" -> valore in chiaro, in sostituzione della variabile ambiente
311
+
284
312
 
285
313
  EXAMPLE:
286
314
  Esempio di sincronizzazione di un file sqlite3 e una cartella
@@ -325,6 +353,7 @@ module SwarmClusterCliOpe
325
353
  say "----------->>>>>>"
326
354
  say "[ #{sync.class.name} ]"
327
355
  sync.send(direction)
356
+ say "COMPLETE"
328
357
  say "<<<<<<-----------"
329
358
  end
330
359
  end
@@ -188,6 +188,8 @@ module SwarmClusterCliOpe
188
188
  SyncConfigs::Rsync.new(self, c)
189
189
  when 'mysql'
190
190
  SyncConfigs::Mysql.new(self, c)
191
+ when 'pg'
192
+ SyncConfigs::PostGres.new(self, c)
191
193
  else
192
194
  logger.error { "CONFIGURAIONE NON PREVISTA: #{c[:how]}" }
193
195
  nil
@@ -249,6 +251,13 @@ module SwarmClusterCliOpe
249
251
  hash[key] = self.class.read_base.merge(project_cfgs)
250
252
  end
251
253
 
254
+ configuration_version = @_merged_configurations[@environment][:version]
255
+ if Gem::Version.new(configuration_version) > Gem::Version.new(VERSION)
256
+ puts "WARNING: Versione del file di configurazione [#{configuration_version}] più aggiornata della gemma [#{VERSION}], eseguire upgrade
257
+ gem update swarm_cluster_cli_ope"
258
+ exit
259
+ end
260
+
252
261
  @_merged_configurations[@environment]
253
262
 
254
263
  end
@@ -0,0 +1,49 @@
1
+ module SwarmClusterCliOpe
2
+ module SyncConfigs
3
+ class BaseDatabase < Base
4
+
5
+ # @return [SwarmClusterCliOpe::SyncConfigs::EnvConfigs]
6
+ def remote
7
+ self.class::EnvConfigs.new(self, @configs[:configs][:remote] || {}, -> { container })
8
+ end
9
+
10
+ # @return [SwarmClusterCliOpe::SyncConfigs::EnvConfigs]
11
+ def local
12
+ self.class::EnvConfigs.new(self, @configs[:configs][:local] || {}, -> { local_container })
13
+ end
14
+
15
+ ##
16
+ # Classe interna che rappresenta le configurazioni del DB
17
+ class EnvConfigs < SwarmClusterCliOpe::SyncConfigs::EnvConfigs
18
+
19
+ end
20
+
21
+ ##
22
+ # Funzione che ricapitola le informazioni utilizzate per eseguire l'operazione
23
+ def resume(direction)
24
+ puts "RESUME - #{direction}
25
+ service: #{service}
26
+ local:
27
+ service_name: #{local.service_name}
28
+ database_name: #{local.database_name}
29
+ username: #{local.username}
30
+ password: #{local.password}
31
+ remote:
32
+ service_name: #{remote.service_name}
33
+ database_name: #{remote.database_name}
34
+ username: #{remote.username}
35
+ password: #{remote.password}"
36
+
37
+ end
38
+
39
+ private
40
+
41
+ def local_container
42
+ # il nome dello stack del compose usiamo come standard il nome della cartella, come lo fà già composer di default
43
+ Models::ComposeContainer.find_by_service_name(local.service_name, stack_name: @stack_cfgs.local_compose_project_name)
44
+ end
45
+
46
+
47
+ end
48
+ end
49
+ end
@@ -35,7 +35,8 @@ module SwarmClusterCliOpe
35
35
  # @param [String,Symbol] configuration_name -> nome della configurazione da utilizzare per estrapolare la configurazione
36
36
  # in automatico viene tenuto conto se cercare per la versione
37
37
  # con _env o senza....precedenza SENZA
38
- def self.define_cfgs(name, default_env:, configuration_name:)
38
+ # @param [nil,String] default_value se non è estrapolato nessun valore, viene utilizzato il valore di default
39
+ def self.define_cfgs(name, default_env:, configuration_name:,default_value:nil)
39
40
  configuration_name ||= name
40
41
 
41
42
  define_method(name) do
@@ -43,10 +44,10 @@ module SwarmClusterCliOpe
43
44
 
44
45
  #valore restituito direttamente dalla configurazione
45
46
  if @configs.key?(configuration_name)
46
- value = @configs["#{configuration_name}".to_sym]
47
+ value = @configs["#{configuration_name}".to_sym] || default_value
47
48
  else
48
49
  env_var = @configs["#{configuration_name}_env".to_sym] || default_env
49
- value = find_env_file_variable(env_var)
50
+ value = find_env_file_variable(env_var) || default_value
50
51
  end
51
52
  self.instance_variable_set("@#{name}", value)
52
53
  end
@@ -1,15 +1,15 @@
1
1
  module SwarmClusterCliOpe
2
2
  module SyncConfigs
3
- class Mysql < Base
3
+ class Mysql < BaseDatabase
4
4
 
5
5
  # @return [TrueClass, FalseClass]
6
6
  def pull
7
7
  resume('pull')
8
8
  if yes?("Confermare il comando?[y,yes]")
9
9
  tmp_file = "/tmp/#{Time.now.to_i}.sql.gz"
10
- container.exec("bash -c 'mysqldump -u #{remote.mysql_user} --password=#{remote.mysql_password} #{remote.database_name} | gzip -c -f' > #{tmp_file}")
10
+ container.exec("bash -c 'mysqldump -u #{remote.username} --password=#{remote.password} #{remote.database_name} | gzip -c -f' > #{tmp_file}")
11
11
  local_container.copy_in(tmp_file, tmp_file)
12
- local_container.exec("bash -c 'zcat #{tmp_file} | mysql -u #{local.mysql_user} --password=#{local.mysql_password} #{local.database_name}'")
12
+ local_container.exec("bash -c 'zcat #{tmp_file} | mysql -u #{local.username} --password=#{local.password} #{local.database_name}'")
13
13
  end
14
14
  true
15
15
  end
@@ -19,59 +19,23 @@ module SwarmClusterCliOpe
19
19
  resume('PUSH')
20
20
  if yes?("ATTENZIONE !!!!!!PUSH!!!!! - Confermare il comando?[y,yes]")
21
21
  tmp_file = "/tmp/#{Time.now.to_i}.sql.gz"
22
- local_container.exec("bash -c 'mysqldump -u #{local.mysql_user} --password=#{local.mysql_password} #{local.database_name} | gzip -c -f' > #{tmp_file}")
22
+ local_container.exec("bash -c 'mysqldump -u #{local.username} --password=#{local.password} #{local.database_name} | gzip -c -f' > #{tmp_file}")
23
23
  container.copy_in(tmp_file, tmp_file)
24
- container.exec("bash -c 'zcat #{tmp_file} | mysql -u #{remote.mysql_user} --password=#{remote.mysql_password} #{remote.database_name}'")
24
+ container.exec("bash -c 'zcat #{tmp_file} | mysql -u #{remote.username} --password=#{remote.password} #{remote.database_name}'")
25
25
  end
26
26
  true
27
27
  end
28
28
 
29
- # @return [SwarmClusterCliOpe::SyncConfigs::Mysql::EnvConfigs]
30
- def remote
31
- EnvConfigs.new(self, @configs[:configs][:remote] || {}, -> { container })
32
- end
33
-
34
- # @return [SwarmClusterCliOpe::SyncConfigs::Mysql::EnvConfigs]
35
- def local
36
- EnvConfigs.new(self, @configs[:configs][:local] || {}, -> { local_container })
37
- end
38
-
39
-
40
29
  ##
41
30
  # Classe interna che rappresenta le configurazioni del DB
42
- class EnvConfigs < SwarmClusterCliOpe::SyncConfigs::EnvConfigs
31
+ class EnvConfigs < BaseDatabase::EnvConfigs
43
32
 
44
33
  define_cfgs :database_name, default_env: "MYSQL_DATABASE", configuration_name: :database_name
45
- define_cfgs :mysql_user, default_env: "MYSQL_USER", configuration_name: :mysql_user
46
- define_cfgs :mysql_password, default_env: "MYSQL_PASSWORD", configuration_name: :mysql_password
47
-
48
- end
49
-
50
-
51
- ##
52
- # Funzione che ricapitola le informazioni utilizzate per eseguire l'operazione
53
- def resume(direction)
54
- puts "RESUME - #{direction}
55
- service: #{service}
56
- local:
57
- service_name: #{local.service_name}
58
- database_name: #{local.database_name}
59
- mysql_user: #{local.mysql_user}
60
- mysql_password: #{local.mysql_password}
61
- remote:
62
- service_name: #{remote.service_name}
63
- database_name: #{remote.database_name}
64
- mysql_user: #{remote.mysql_user}
65
- mysql_password: #{remote.mysql_password}"
34
+ define_cfgs :username, default_env: "MYSQL_USER", configuration_name: :mysql_user, default_value: 'root'
35
+ define_cfgs :password, default_env: "MYSQL_PASSWORD", configuration_name: :mysql_password, default_value: 'root'
66
36
 
67
37
  end
68
38
 
69
- private
70
-
71
- def local_container
72
- # il nome dello stack del compose usiamo come standard il nome della cartella, come lo fà già composer di default
73
- Models::ComposeContainer.find_by_service_name(local.service_name, stack_name: @stack_cfgs.local_compose_project_name)
74
- end
75
39
 
76
40
  end
77
41
  end
@@ -0,0 +1,115 @@
1
+ module SwarmClusterCliOpe
2
+ module SyncConfigs
3
+ class PostGres < BaseDatabase
4
+
5
+ # @return [TrueClass, FalseClass]
6
+ def pull
7
+ resume('pull')
8
+
9
+ dump_cmd = dump_cmd(remote.username, remote.password, remote.database_name)
10
+ logger.info{ "DUMP COMMAND: #{dump_cmd.join(' ')}"}
11
+ if yes?("Confermare il comando?[y,yes]")
12
+ 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)
15
+
16
+ # 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(' ')}'")
27
+ end
28
+ true
29
+ end
30
+
31
+ # @return [TrueClass, FalseClass]
32
+ def push
33
+ resume('PUSH')
34
+
35
+ dump_cmd = dump_cmd(local.username, local.password, local.database_name)
36
+ say "DUMP COMMAND: #{dump_cmd.join(' ')}"
37
+ if yes?("ATTENZIONE !!!!!!PUSH!!!!! - Confermare il comando?[y,yes]")
38
+ 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)
41
+
42
+ # 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(' ')}'")
46
+
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(' ')}'")
50
+
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
+ end
55
+ true
56
+ end
57
+
58
+ ##
59
+ # Classe interna che rappresenta le configurazioni del DB
60
+ class EnvConfigs < BaseDatabase::EnvConfigs
61
+
62
+ define_cfgs :database_name, default_env: "POSTGRES_DB", configuration_name: :database_name
63
+ define_cfgs :username, default_env: "POSTGRES_USER", configuration_name: :pg_user, default_value: 'postgres'
64
+ define_cfgs :password, default_env: "POSTGRES_PASSWORD", configuration_name: :pg_password
65
+
66
+ end
67
+
68
+ private
69
+
70
+ def create_cmd(username, password, database_name)
71
+ create_cmd = []
72
+ create_cmd << "PGPASSWORD=\"#{password}\""
73
+ create_cmd << 'createdb'
74
+ create_cmd << "--username=#{username}"
75
+ create_cmd << database_name
76
+ end
77
+
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
85
+ end
86
+
87
+ def restore_cmd(username, password, database_name, tmp_file)
88
+ restore_cmd = []
89
+ restore_cmd << "PGPASSWORD=\"#{password}\""
90
+ restore_cmd << 'pg_restore'
91
+ restore_cmd << '--no-acl'
92
+ restore_cmd << '--no-owner'
93
+ restore_cmd << "--username=#{username}"
94
+ restore_cmd << "--dbname=#{database_name}"
95
+ restore_cmd << tmp_file
96
+ restore_cmd
97
+ end
98
+
99
+ def dump_cmd(username, password, database_name)
100
+ dump_cmd = []
101
+ dump_cmd << "PGPASSWORD=\"#{password}\""
102
+ dump_cmd << 'pg_dump'
103
+ dump_cmd << '--no-acl'
104
+ dump_cmd << '--no-owner'
105
+ dump_cmd << "--username=#{username}"
106
+ dump_cmd << '--format=custom'
107
+ dump_cmd << '--compress=9'
108
+ dump_cmd << database_name
109
+ dump_cmd
110
+ end
111
+
112
+
113
+ end
114
+ end
115
+ end
@@ -1,3 +1,3 @@
1
1
  module SwarmClusterCliOpe
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4"
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.3.2
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marino Bonetti
@@ -110,9 +110,11 @@ files:
110
110
  - lib/swarm_cluster_cli_ope/shell_command_execution.rb
111
111
  - lib/swarm_cluster_cli_ope/shell_command_response.rb
112
112
  - lib/swarm_cluster_cli_ope/sync_configs/base.rb
113
+ - lib/swarm_cluster_cli_ope/sync_configs/base_database.rb
113
114
  - lib/swarm_cluster_cli_ope/sync_configs/copy.rb
114
115
  - lib/swarm_cluster_cli_ope/sync_configs/env_configs.rb
115
116
  - lib/swarm_cluster_cli_ope/sync_configs/mysql.rb
117
+ - lib/swarm_cluster_cli_ope/sync_configs/post_gres.rb
116
118
  - lib/swarm_cluster_cli_ope/sync_configs/rsync.rb
117
119
  - lib/swarm_cluster_cli_ope/sync_configs/sqlite3.rb
118
120
  - lib/swarm_cluster_cli_ope/version.rb