capistrano-former03 0.0.5 → 0.0.8

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
  SHA1:
3
- metadata.gz: 9826b5d4e73dfdac22b474e4bb8bbbd6e875fe6d
4
- data.tar.gz: 7f32d7bdc321264751b5cc5b34943b6100a0a615
3
+ metadata.gz: e7e688555bcf42485402c20d0a3c89bb813a45a3
4
+ data.tar.gz: 6aeef974c3e5075c76bc0a0dfe47174480cb396f
5
5
  SHA512:
6
- metadata.gz: cf00abf2fdbc8797c71903c1498bd8ac965365d5a82d9e6b072675fbd0080b6aa6957578a31485f345afbd9921698c42bb0c79139d154843d9166c06c0905f6f
7
- data.tar.gz: 8c254a94b18da059f25237de1f6046e6a9eb6c04279ad946c8efd68032878e74c407043fb096c1a4b6a84dee3a1ece7c739d14f7de69ed217460941d8d1556bf
6
+ metadata.gz: 734d81dd507eaed0f99b735a599bed5527a77c2025190623cd03e507d6c1de1a7cdd23306af083ddfcea70b68f9c28e17671ab4202ed71296339d58a1d8058f9
7
+ data.tar.gz: 3c557b096bc734435c4f3d9847e7816c2adf6fd6e710b77f2e8ece7f3e3f59e9cd3101b891e3ed1cbda9001637c3e8092581d62f1836329110485abdcc07d748
data/.gitignore CHANGED
@@ -16,3 +16,5 @@ test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
18
  vendor
19
+ .idea
20
+ *.iml
@@ -24,4 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "capistrano-spec"
26
26
  spec.add_development_dependency "rspec", ">= 2.5.0"
27
+ spec.add_development_dependency "sshkit", "1.7.1"
28
+ spec.add_development_dependency "net-ssh", "2.8.0"
27
29
  end
@@ -34,49 +34,64 @@ module Capistrano
34
34
  fail "Source stage (#{src_stage}) is equal to destination stage (#{dst_stage})"
35
35
  end
36
36
 
37
- src_database = config(src_stage)[:database]
38
- dst_database = config(dst_stage)[:database]
39
- src_cnf = mysql_cnf_upload(:src, src_stage)
40
- dst_cnf = mysql_cnf_upload(:dst, dst_stage)
37
+ get_mysql_connections.each_with_index do |c, index|
41
38
 
42
- @task.on release_roles :all do
39
+ src_database = config(src_stage, index)[:database]
40
+ dst_database = config(dst_stage, index)[:database]
41
+ src_cnf = mysql_cnf_upload(:src, src_stage, index)
42
+ dst_cnf = mysql_cnf_upload(:dst, dst_stage, index)
43
43
 
44
- # remove all tables on dest
45
- tables = capture "mysql --defaults-file=#{dst_cnf} -e'SHOW TABLES;' #{dst_database}"
46
- tables = tables.split
47
- if tables.length > 1
48
- tables = tables[1..-1].map{|name| "`#{name}`"}.join(',')
49
- execute "mysql --defaults-file=#{dst_cnf} -e'DROP TABLES #{tables};' #{dst_database}"
50
- end
44
+ @task.on release_roles :all do
45
+
46
+ # remove all tables on dest
47
+ tables = capture "mysql --defaults-file=#{dst_cnf} -e'SHOW TABLES;' #{dst_database}"
48
+ tables = tables.split
49
+ if tables.length > 1
50
+ tables = tables[1..-1].map { |name| "`#{name}`" }.join(',')
51
+ execute "mysql --defaults-file=#{dst_cnf} -e'DROP TABLES #{tables};' #{dst_database}"
52
+ end
51
53
 
52
- # sync production to stage
53
- execute "mysqldump --defaults-file=#{src_cnf} #{src_database} | mysql --defaults-file=#{dst_cnf} #{dst_database}"
54
+ # sync production to stage
55
+ execute "mysqldump --defaults-file=#{src_cnf} #{src_database} | mysql --defaults-file=#{dst_cnf} #{dst_database}"
56
+
57
+ # remove credentials
58
+ execute "rm #{src_cnf}"
59
+ execute "rm #{dst_cnf}"
60
+ end
54
61
 
55
- # remove credentials
56
- execute "rm #{src_cnf}"
57
- execute "rm #{dst_cnf}"
58
62
  end
59
63
  end
60
64
 
61
- def config(stage=nil)
62
- @config ||= task.fetch(:mysql_connections)
65
+ def get_mysql_connections()
66
+ mysql_connections = fetch(:mysql_connections)
67
+
68
+ # make sure mysql_connections is an array
69
+ mysql_connections = [mysql_connections] unless mysql_connections.is_a? Array
70
+
71
+ mysql_connections
72
+ end
73
+
74
+ def config(stage=nil, index=0)
75
+
76
+ mysql_connections = get_mysql_connections
77
+
78
+ @config = mysql_connections.fetch(index)
63
79
  stage ||= task.fetch(:stage)
64
80
  @config[stage]
65
81
  end
66
82
 
67
-
68
83
  def deploy_to
69
84
  @task.fetch(:deploy_to)
70
85
  end
71
86
 
72
- def cnf_path(name)
73
- File.join(deploy_to, 'shared', ".my.cnf_#{name}")
87
+ def cnf_path(name, index=0)
88
+ File.join(deploy_to, 'shared', ".my.cnf_#{name}_#{index}")
74
89
  end
75
90
 
76
- def mysql_cnf_upload(name, stage=nil)
77
- dest = cnf_path(name)
78
- src = Tempfile.new('my.cnf')
79
- src.write(mysql_cnf(stage))
91
+ def mysql_cnf_upload(name, stage=nil, index=0)
92
+ dest = cnf_path(name, index)
93
+ src = Tempfile.new("my#{index}.cnf")
94
+ src.write(mysql_cnf(stage, index))
80
95
  src.flush
81
96
  @task.on release_roles :all do
82
97
  upload!(src.path, dest)
@@ -89,39 +104,48 @@ module Capistrano
89
104
  dest
90
105
  end
91
106
 
92
- def mysql_cnf(stage=nil)
93
- c=config(stage)
107
+ def mysql_cnf(stage=nil, index=0)
108
+ c=config(stage, index)
94
109
  output = "[client]\n"
95
110
  output +="user=#{c[:username]}\n" if c.has_key?(:username)
96
111
  output +="password=#{c[:password]}\n" if c.has_key?(:password)
97
112
  output +="host=#{c[:host]}\n" if c.has_key?(:host)
98
113
  output +="port=#{c[:port]}\n" if c.has_key?(:port)
114
+ output
99
115
  end
100
116
 
101
117
  def backup(t)
102
118
  @task = t
103
- cnf = mysql_cnf_upload(:backup)
104
- database = config[:database]
105
- # run backup
106
- @task.on release_roles :all do
107
- output_dir = fetch(:backup_dest_path)
108
-
109
- # test for backup dir
110
- execute "test -d \"#{output_dir}\" || mkdir -p \"#{output_dir}\""
119
+ mysql_connections = get_mysql_connections
120
+
121
+ mysql_connections.each_with_index do |c, index|
122
+ cnf = mysql_cnf_upload(:backup, nil, index)
123
+ database = config(fetch(:stage), index)[:database]
124
+ # run backup
125
+ @task.on release_roles :all do
126
+ output_dir = fetch(:backup_dest_path)
127
+
128
+ # test for backup dir
129
+ execute "test -d \"#{output_dir}\" || mkdir -p \"#{output_dir}\""
130
+
131
+ # backup mysqldb
132
+ backupfile = mysql_connections.length > 1 ? "mysql#{index+1}.sql.gz" : "mysql.sql.gz"
133
+ output = File.join(output_dir, backupfile)
134
+ execute "mysqldump --defaults-file=#{cnf} #{database} | gzip > #{output}"
135
+ execute "chmod 600 #{output}"
136
+
137
+ # remove credentials
138
+ execute "rm #{cnf}"
139
+ end
140
+ end
111
141
 
112
- # backup mysqldb
113
- output = File.join(output_dir, 'mysql.sql.gz')
114
- execute "mysqldump --defaults-file=#{cnf} #{database} | gzip > #{output}"
115
- execute "chmod 600 #{output}"
116
142
 
117
- # remove credentials
118
- execute "rm #{cnf}"
119
- end
120
143
  end
121
144
 
122
145
  def templates(t)
123
146
  @task = t
124
- fetch(:mysql_templates, []).each do |c|
147
+
148
+ fetch(:mysql_templates, []).each_with_index do |c, index|
125
149
 
126
150
  dest = File.join(fetch(:local_stage_path), c[:destination])
127
151
 
@@ -129,18 +153,23 @@ module Capistrano
129
153
 
130
154
  # Read template
131
155
  erb = ERB.new(
132
- File.read(c[:template]),
133
- nil,
134
- '-',
156
+ File.read(c[:template]),
157
+ nil,
158
+ '-',
135
159
  )
136
160
 
137
- File.open(dest, 'w') do |file|
138
- namespace = Namespace.new({
139
- config: config(),
140
- stage: fetch(:stage),
141
- })
142
- file.write(erb.result(namespace.get_binding))
161
+ begin
162
+ File.open(dest, 'w') do |file|
163
+ namespace = Namespace.new({
164
+ config: config(nil, index),
165
+ stage: fetch(:stage),
166
+ })
167
+ file.write(erb.result(namespace.get_binding))
168
+ end
169
+ rescue
170
+ fail "MySQL Template could not be written, make sure the configs :mysql_connections and :mysql_templates match!"
143
171
  end
172
+
144
173
  File.exist?(c[:destination])
145
174
  end
146
175
  end
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Former03
3
- VERSION = '0.0.5'
3
+ VERSION = '0.0.8'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-former03
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Simon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-26 00:00:00.000000000 Z
11
+ date: 2016-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -28,58 +28,86 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: capistrano-spec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ">="
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 2.5.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: 2.5.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: sshkit
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 1.7.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 1.7.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: net-ssh
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 2.8.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 2.8.0
83
111
  description: Capistrano with extensions for FORMER 03
84
112
  email:
85
113
  - simon@swine.de
@@ -88,7 +116,7 @@ executables:
88
116
  extensions: []
89
117
  extra_rdoc_files: []
90
118
  files:
91
- - .gitignore
119
+ - ".gitignore"
92
120
  - Gemfile
93
121
  - LICENSE.txt
94
122
  - README.md
@@ -126,17 +154,17 @@ require_paths:
126
154
  - lib
127
155
  required_ruby_version: !ruby/object:Gem::Requirement
128
156
  requirements:
129
- - - '>='
157
+ - - ">="
130
158
  - !ruby/object:Gem::Version
131
159
  version: '0'
132
160
  required_rubygems_version: !ruby/object:Gem::Requirement
133
161
  requirements:
134
- - - '>='
162
+ - - ">="
135
163
  - !ruby/object:Gem::Version
136
164
  version: '0'
137
165
  requirements: []
138
166
  rubyforge_project:
139
- rubygems_version: 2.4.3
167
+ rubygems_version: 2.2.2
140
168
  signing_key:
141
169
  specification_version: 4
142
170
  summary: Capistrano with extensions for FORMER 03