snapback 0.0.1 → 0.0.3
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 +7 -7
- data/README.md +6 -11
- data/bin/snapback +51 -67
- data/lib/snapback.rb +130 -0
- data/lib/snapback/cli/commit.rb +72 -0
- data/lib/snapback/cli/create.rb +157 -0
- data/lib/snapback/cli/drop.rb +94 -0
- data/lib/snapback/cli/install.rb +179 -0
- data/lib/snapback/cli/mount.rb +97 -0
- data/lib/snapback/cli/rollback.rb +161 -0
- data/lib/snapback/cli/snapshot.rb +155 -0
- data/lib/snapback/cli/unmount.rb +86 -0
- data/lib/snapback/configuration/Configuration_0_0_3.rb +99 -0
- data/lib/snapback/configuration_loader.rb +24 -0
- data/lib/snapback/filesystem.rb +39 -0
- data/lib/snapback/mysql/client_control.rb +125 -0
- data/lib/snapback/mysql/service_control.rb +14 -0
- data/lib/snapback/transaction.rb +25 -10
- data/lib/snapback/version.rb +3 -0
- metadata +110 -67
- data/lib/snapback/app/commit.rb +0 -35
- data/lib/snapback/app/create.rb +0 -117
- data/lib/snapback/app/drop.rb +0 -51
- data/lib/snapback/app/install.rb +0 -156
- data/lib/snapback/app/mount.rb +0 -62
- data/lib/snapback/app/rollback.rb +0 -63
- data/lib/snapback/app/snapshot.rb +0 -74
- data/lib/snapback/app/unmount.rb +0 -39
- data/lib/snapback/database.rb +0 -102
- data/lib/snapback/dsl.rb +0 -208
- data/lib/snapback/options.rb +0 -85
data/lib/snapback/transaction.rb
CHANGED
@@ -1,19 +1,34 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
|
3
1
|
module Snapback
|
4
2
|
class Transaction
|
5
|
-
include Singleton
|
6
|
-
|
7
|
-
@@rollback_commands = []
|
8
3
|
|
9
|
-
def
|
10
|
-
|
4
|
+
def initialize(&block)
|
5
|
+
@reverts = []
|
6
|
+
|
7
|
+
begin
|
8
|
+
instance_eval &block
|
9
|
+
rescue Exception => msg
|
10
|
+
rollback
|
11
|
+
raise msg # re-throw
|
12
|
+
end
|
11
13
|
end
|
12
14
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
15
|
+
def revert(&block)
|
16
|
+
@reverts.push block
|
17
|
+
end
|
18
|
+
|
19
|
+
def rollback
|
20
|
+
if Snapback.verbose?
|
21
|
+
puts ""
|
22
|
+
puts "An error occurred ... rolling back"
|
23
|
+
puts ""
|
24
|
+
end
|
25
|
+
|
26
|
+
while revert = @reverts.pop
|
27
|
+
revert.call
|
16
28
|
end
|
29
|
+
|
30
|
+
|
31
|
+
puts "" if Snapback.verbose?
|
17
32
|
end
|
18
33
|
end
|
19
34
|
end
|
metadata
CHANGED
@@ -1,104 +1,147 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: snapback
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Bashkim Isai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
date: 2013-09-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aruba
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: gli
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.8.0
|
34
|
+
type: :runtime
|
16
35
|
prerelease: false
|
17
|
-
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 2.8.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: mysql
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
21
47
|
version: 2.9.1
|
22
48
|
type: :runtime
|
23
|
-
version_requirements: *id001
|
24
|
-
- !ruby/object:Gem::Dependency
|
25
|
-
name: open4
|
26
49
|
prerelease: false
|
27
|
-
|
28
|
-
requirements:
|
29
|
-
- -
|
30
|
-
- !ruby/object:Gem::Version
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.9.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: open4
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
31
61
|
version: 1.3.0
|
32
62
|
type: :runtime
|
33
|
-
version_requirements: *id002
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: ruby-lvm
|
36
63
|
prerelease: false
|
37
|
-
|
38
|
-
requirements:
|
39
|
-
- -
|
40
|
-
- !ruby/object:Gem::Version
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.3.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: ruby-lvm
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
41
75
|
version: 0.1.1
|
42
76
|
type: :runtime
|
43
|
-
version_requirements: *id003
|
44
|
-
- !ruby/object:Gem::Dependency
|
45
|
-
name: colorize
|
46
77
|
prerelease: false
|
47
|
-
|
48
|
-
requirements:
|
49
|
-
- -
|
50
|
-
- !ruby/object:Gem::Version
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.1.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: colorize
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
51
89
|
version: 0.5.8
|
52
90
|
type: :runtime
|
53
|
-
|
54
|
-
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.5.8
|
97
|
+
description:
|
55
98
|
email:
|
56
|
-
executables:
|
99
|
+
executables:
|
57
100
|
- snapback
|
58
101
|
extensions: []
|
59
|
-
|
60
102
|
extra_rdoc_files: []
|
61
|
-
|
62
|
-
|
63
|
-
- lib/snapback/
|
64
|
-
- lib/snapback/
|
65
|
-
- lib/snapback/
|
66
|
-
- lib/snapback/
|
67
|
-
- lib/snapback/
|
68
|
-
- lib/snapback/
|
69
|
-
- lib/snapback/
|
70
|
-
- lib/snapback/
|
71
|
-
- lib/snapback/
|
72
|
-
- lib/snapback/
|
73
|
-
- lib/snapback/
|
103
|
+
files:
|
104
|
+
- lib/snapback/cli/commit.rb
|
105
|
+
- lib/snapback/cli/create.rb
|
106
|
+
- lib/snapback/cli/drop.rb
|
107
|
+
- lib/snapback/cli/install.rb
|
108
|
+
- lib/snapback/cli/mount.rb
|
109
|
+
- lib/snapback/cli/rollback.rb
|
110
|
+
- lib/snapback/cli/snapshot.rb
|
111
|
+
- lib/snapback/cli/unmount.rb
|
112
|
+
- lib/snapback/configuration/Configuration_0_0_3.rb
|
113
|
+
- lib/snapback/configuration_loader.rb
|
114
|
+
- lib/snapback/filesystem.rb
|
115
|
+
- lib/snapback/mysql/client_control.rb
|
116
|
+
- lib/snapback/mysql/service_control.rb
|
74
117
|
- lib/snapback/transaction.rb
|
118
|
+
- lib/snapback/version.rb
|
119
|
+
- lib/snapback.rb
|
75
120
|
- bin/snapback
|
76
121
|
- README.md
|
77
122
|
homepage: http://github.com/bashaus/snapback
|
78
|
-
licenses:
|
123
|
+
licenses:
|
79
124
|
- MIT
|
80
125
|
metadata: {}
|
81
|
-
|
82
126
|
post_install_message:
|
83
127
|
rdoc_options: []
|
84
|
-
|
85
|
-
|
128
|
+
require_paths:
|
129
|
+
- lib
|
86
130
|
- lib
|
87
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
-
requirements:
|
89
|
-
-
|
90
|
-
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
96
141
|
requirements: []
|
97
|
-
|
98
142
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.0.
|
143
|
+
rubygems_version: 2.0.4
|
100
144
|
signing_key:
|
101
145
|
specification_version: 4
|
102
146
|
summary: Snapback
|
103
147
|
test_files: []
|
104
|
-
|
data/lib/snapback/app/commit.rb
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require "singleton"
|
2
|
-
|
3
|
-
module Snapback
|
4
|
-
module App
|
5
|
-
class Commit
|
6
|
-
include Singleton
|
7
|
-
|
8
|
-
def go
|
9
|
-
volume_group_name = "#{$config['lvm']['volume_group']}"
|
10
|
-
logical_volume_name = "#{$config['lvm']['prefix_backup']}-#{$options[:database]}"
|
11
|
-
|
12
|
-
# Flush
|
13
|
-
exec_flush
|
14
|
-
|
15
|
-
# Stop the MySQL Server
|
16
|
-
$database.server_stop
|
17
|
-
|
18
|
-
on_rollback lambda {
|
19
|
-
$database.server_start
|
20
|
-
}
|
21
|
-
|
22
|
-
# Remove logical volume
|
23
|
-
run "Committing logical volume",
|
24
|
-
"lvremove -f /dev/#{volume_group_name}/#{logical_volume_name}"
|
25
|
-
|
26
|
-
# Start the MySQL Server
|
27
|
-
$database.server_start
|
28
|
-
|
29
|
-
on_rollback lambda {
|
30
|
-
$database.server_stop
|
31
|
-
}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
data/lib/snapback/app/create.rb
DELETED
@@ -1,117 +0,0 @@
|
|
1
|
-
require "singleton"
|
2
|
-
|
3
|
-
module Snapback
|
4
|
-
module App
|
5
|
-
class Create
|
6
|
-
include Singleton
|
7
|
-
|
8
|
-
def go
|
9
|
-
# Ensure we have a size parameter
|
10
|
-
if $options[:size].nil? then
|
11
|
-
raise "You must specify a size attribute. E.g.: -s 500M"
|
12
|
-
end
|
13
|
-
|
14
|
-
volume_group_name = "#{$config['lvm']['volume_group']}"
|
15
|
-
logical_volume_name = "#{$config['lvm']['prefix_database']}-#{$options[:database]}"
|
16
|
-
mount_dir = get_mount_dir $options[:database]
|
17
|
-
mysql_data_dir = $database.get_data_dir
|
18
|
-
|
19
|
-
if !check "Checking database exists #{$options[:database]}", lambda {
|
20
|
-
$database.db_exists?($options[:database])
|
21
|
-
} then
|
22
|
-
check "Creating database '#{$options[:database]}'", lambda {
|
23
|
-
$database.db_create($options[:database])
|
24
|
-
}
|
25
|
-
|
26
|
-
on_rollback lambda {
|
27
|
-
check "Database '#{$options[:database]}' is being dropped", lambda {
|
28
|
-
$database.db_drop($options[:database])
|
29
|
-
}
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
exec_flush
|
34
|
-
|
35
|
-
# Stop the MySQL Server
|
36
|
-
$database.server_stop
|
37
|
-
|
38
|
-
on_rollback lambda {
|
39
|
-
$database.server_start
|
40
|
-
}
|
41
|
-
|
42
|
-
# Create a new logical volume (500MB)
|
43
|
-
# lvcreate –L 500MB –n mysql-{dbName} {vgName};
|
44
|
-
run "Create logical volume",
|
45
|
-
"lvcreate -L #{$options[:size]} -n #{logical_volume_name} #{volume_group_name}"
|
46
|
-
|
47
|
-
on_rollback lambda {
|
48
|
-
run "Removing logical volume",
|
49
|
-
"lvremove -f /dev/#{volume_group_name}/#{logical_volume_name}"
|
50
|
-
}
|
51
|
-
|
52
|
-
# Format the logical volume in ext4 format
|
53
|
-
# mkfs.ext4 /dev/{vgName}/mysql-{dbName};
|
54
|
-
run "Format logical volume filesystem",
|
55
|
-
"mkfs.ext4 /dev/#{volume_group_name}/#{logical_volume_name}"
|
56
|
-
|
57
|
-
# Create a new directory for where the MySQL database can be mounted
|
58
|
-
# mkdir /mnt/mysql/{dbName};
|
59
|
-
|
60
|
-
if !File.directory? mount_dir then
|
61
|
-
run "Make mount directory",
|
62
|
-
"mkdir #{mount_dir}"
|
63
|
-
|
64
|
-
on_rollback lambda {
|
65
|
-
run "Removing mount directory",
|
66
|
-
"rmdir #{$mount_dir}"
|
67
|
-
}
|
68
|
-
|
69
|
-
run "Changing permissions of mount directory",
|
70
|
-
"chmod 0777 #{mount_dir}"
|
71
|
-
end
|
72
|
-
|
73
|
-
# # Mount the new logical volume
|
74
|
-
# mount /dev/{vgName}/mysql-{dbName} /mnt/mysql/{dbName};
|
75
|
-
exec_mount "/dev/#{volume_group_name}/#{logical_volume_name}", mount_dir
|
76
|
-
|
77
|
-
# # Move the contents of the database to the new logical volume
|
78
|
-
# mv {mysql-data-dir}/{dbName}/* /mnt/mysql/{dbName};
|
79
|
-
|
80
|
-
move_mysql_files "#{mysql_data_dir}/#{$options[:database]}", mount_dir
|
81
|
-
|
82
|
-
on_rollback lambda {
|
83
|
-
move_mysql_files mount_dir, "#{mysql_data_dir}/#{$options[:database]}"
|
84
|
-
}
|
85
|
-
|
86
|
-
# # Remove the folder in the MySQL data directory
|
87
|
-
# rmdir {mysql-data-dir}/{dbName}/
|
88
|
-
run "Remove mysql database directory",
|
89
|
-
"rm -rf #{mysql_data_dir}/#{$options[:database]}"
|
90
|
-
|
91
|
-
on_rollback lambda {
|
92
|
-
run "Re-creating MySQL database directory",
|
93
|
-
"mkdir #{mysql_data_dir}/#{$options[:database]}"
|
94
|
-
|
95
|
-
exec_chown "#{mysql_data_dir}/#{$options[:database]}"
|
96
|
-
}
|
97
|
-
|
98
|
-
# # Symbolic-link the MySQL data directory to the new logical volume
|
99
|
-
# ln -s /mnt/mysql/{dbName} {mysql-data-dir}/{dbName}/
|
100
|
-
exec_link "#{mysql_data_dir}/#{$options[:database]}", mount_dir
|
101
|
-
|
102
|
-
# # Change the permissions & ownership to MySQL
|
103
|
-
# chown -R mysql:mysql {mysql-data-dir}/{dbName}/
|
104
|
-
# chown -R mysql:mysql /mnt/mysql/{dbName}/
|
105
|
-
exec_chown "#{mysql_data_dir}/#{$options[:database]}"
|
106
|
-
exec_chown mount_dir
|
107
|
-
|
108
|
-
# Stop the MySQL Server
|
109
|
-
$database.server_start
|
110
|
-
|
111
|
-
on_rollback lambda {
|
112
|
-
$database.server_stop
|
113
|
-
}
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
data/lib/snapback/app/drop.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require "singleton"
|
2
|
-
require "src/app/commit"
|
3
|
-
|
4
|
-
module Snapback
|
5
|
-
module App
|
6
|
-
class Drop
|
7
|
-
include Singleton
|
8
|
-
|
9
|
-
def go
|
10
|
-
volume_group_name = "#{$config['lvm']['volume_group']}"
|
11
|
-
logical_volume_name = "#{$config['lvm']['prefix_database']}-#{$options[:database]}"
|
12
|
-
mount_dir = get_mount_dir $options[:database]
|
13
|
-
mysql_data_dir = $database.get_data_dir
|
14
|
-
|
15
|
-
# Remove the backup
|
16
|
-
Snapback::App::Commit.instance.go
|
17
|
-
|
18
|
-
if !$database.db_exists?($options[:database]) then
|
19
|
-
raise "Database '#{$options[:database]}' does not exist"
|
20
|
-
end
|
21
|
-
|
22
|
-
# Flush
|
23
|
-
exec_flush
|
24
|
-
|
25
|
-
# Stop the MySQL Server
|
26
|
-
$database.server_stop
|
27
|
-
|
28
|
-
on_rollback lambda {
|
29
|
-
$database.server_start
|
30
|
-
}
|
31
|
-
|
32
|
-
# Unlink
|
33
|
-
exec_unlink "#{mysql_data_dir}/#{$options[:database]}", mount_dir
|
34
|
-
|
35
|
-
# Unmount
|
36
|
-
exec_unmount "/dev/#{volume_group_name}/#{logical_volume_name}", mount_dir
|
37
|
-
|
38
|
-
# Remove logical volume
|
39
|
-
run "Remove logical volume",
|
40
|
-
"lvremove -f /dev/#{volume_group_name}/#{logical_volume_name}"
|
41
|
-
|
42
|
-
# Start the MySQL Server
|
43
|
-
$database.server_start
|
44
|
-
|
45
|
-
on_rollback lambda {
|
46
|
-
$database.server_stop
|
47
|
-
}
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|