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.
@@ -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