snapback 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,14 @@
1
+ module Snapback
2
+ module MySQL
3
+ class ServiceControl
4
+
5
+ def self.start
6
+ `service mysql start`
7
+ end
8
+
9
+ def self.stop
10
+ `service mysql stop`
11
+ end
12
+ end
13
+ end
14
+ end
@@ -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 add_rollback_method method
10
- @@rollback_commands.push method
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 do_rollback
14
- while rollback_command = @@rollback_commands.pop do
15
- rollback_command.call
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
@@ -0,0 +1,3 @@
1
+ module Snapback
2
+ VERSION = '0.0.3'
3
+ 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.1
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
- date: 2013-06-19 00:00:00 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: mysql
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
- requirement: &id001 !ruby/object:Gem::Requirement
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
- requirement: &id002 !ruby/object:Gem::Requirement
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
- requirement: &id003 !ruby/object:Gem::Requirement
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
- requirement: &id004 !ruby/object:Gem::Requirement
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
- version_requirements: *id004
54
- description: A simple logical volume database manager
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
- files:
63
- - lib/snapback/app/commit.rb
64
- - lib/snapback/app/create.rb
65
- - lib/snapback/app/drop.rb
66
- - lib/snapback/app/install.rb
67
- - lib/snapback/app/mount.rb
68
- - lib/snapback/app/rollback.rb
69
- - lib/snapback/app/snapshot.rb
70
- - lib/snapback/app/unmount.rb
71
- - lib/snapback/database.rb
72
- - lib/snapback/dsl.rb
73
- - lib/snapback/options.rb
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
- require_paths:
128
+ require_paths:
129
+ - lib
86
130
  - lib
87
- required_ruby_version: !ruby/object:Gem::Requirement
88
- requirements:
89
- - &id005
90
- - ">="
91
- - !ruby/object:Gem::Version
92
- version: "0"
93
- required_rubygems_version: !ruby/object:Gem::Requirement
94
- requirements:
95
- - *id005
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.3
143
+ rubygems_version: 2.0.4
100
144
  signing_key:
101
145
  specification_version: 4
102
146
  summary: Snapback
103
147
  test_files: []
104
-
@@ -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
@@ -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
@@ -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