capistrano-former03 0.0.5 → 0.0.8
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.
- 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
|