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 +4 -4
- data/.gitignore +2 -0
- data/capistrano-former03.gemspec +2 -0
- data/lib/capistrano/former03/mysql.rb +82 -53
- data/lib/capistrano/former03/version.rb +1 -1
- metadata +42 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7e688555bcf42485402c20d0a3c89bb813a45a3
|
4
|
+
data.tar.gz: 6aeef974c3e5075c76bc0a0dfe47174480cb396f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 734d81dd507eaed0f99b735a599bed5527a77c2025190623cd03e507d6c1de1a7cdd23306af083ddfcea70b68f9c28e17671ab4202ed71296339d58a1d8058f9
|
7
|
+
data.tar.gz: 3c557b096bc734435c4f3d9847e7816c2adf6fd6e710b77f2e8ece7f3e3f59e9cd3101b891e3ed1cbda9001637c3e8092581d62f1836329110485abdcc07d748
|
data/.gitignore
CHANGED
data/capistrano-former03.gemspec
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
tables = tables
|
49
|
-
|
50
|
-
|
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
|
-
|
53
|
-
|
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
|
62
|
-
|
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(
|
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
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
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
|
-
|
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
|
-
|
133
|
-
|
134
|
-
|
156
|
+
File.read(c[:template]),
|
157
|
+
nil,
|
158
|
+
'-',
|
135
159
|
)
|
136
160
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
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
|
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.
|
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:
|
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.
|
167
|
+
rubygems_version: 2.2.2
|
140
168
|
signing_key:
|
141
169
|
specification_version: 4
|
142
170
|
summary: Capistrano with extensions for FORMER 03
|