chef_backup 0.0.1.dev.3 → 0.0.1.dev.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -1
- data/chef_backup.gemspec +1 -1
- data/lib/chef_backup/data_map.rb +9 -1
- data/lib/chef_backup/helpers.rb +17 -1
- data/lib/chef_backup/strategy/backup/tar.rb +7 -0
- data/lib/chef_backup/strategy/restore/tar.rb +35 -0
- data/lib/chef_backup/version.rb +1 -1
- data/spec/fixtures/chef-server-running.json +4 -0
- data/spec/unit/strategy/backup/tar_spec.rb +2 -2
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 94cbd6726cb86fe838709bb6cd0102f18ff98a02
|
4
|
+
data.tar.gz: 7a38dd28ef497ae4b1ec8a59adb22634e28f2fc4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f1c58f55e246331ab7cc8c9919f6e9dafaba9922d4c597e5546bd59701634e3766461d4e58f3efffcea09cf1267724e52d3f11b4b9fc6b37be68eecdc1664b4
|
7
|
+
data.tar.gz: af600e295428765fb2e8bd0316039108a1133c5fd7a82ea8df83b1c518019c965a4239935cc9625010522b2bc82ff23aab588ab4afc9f0f24e06a0ebac846478
|
data/.rubocop.yml
CHANGED
@@ -2,8 +2,12 @@ Style/ClassAndModuleChildren:
|
|
2
2
|
Enabled: false
|
3
3
|
Style/GuardClause:
|
4
4
|
Enabled: false
|
5
|
+
Metrics/LineLength:
|
6
|
+
Max: 120
|
5
7
|
Metrics/ClassLength:
|
6
8
|
Max: 200
|
9
|
+
Metrics/ModuleLength:
|
10
|
+
Max: 200
|
7
11
|
Metrics/CyclomaticComplexity:
|
8
12
|
Max: 10
|
9
13
|
Metrics/PerceivedComplexity:
|
@@ -11,7 +15,7 @@ Metrics/PerceivedComplexity:
|
|
11
15
|
Metrics/MethodLength:
|
12
16
|
Max: 40
|
13
17
|
Metrics/AbcSize:
|
14
|
-
Max:
|
18
|
+
Max: 40
|
15
19
|
AllCops:
|
16
20
|
Exclude:
|
17
21
|
- 'Guardfile'
|
data/chef_backup.gemspec
CHANGED
@@ -28,6 +28,6 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
29
|
spec.add_development_dependency 'guard-rspec'
|
30
30
|
spec.add_development_dependency 'pry-rescue'
|
31
|
-
spec.add_development_dependency 'rubocop', '>= 0.
|
31
|
+
spec.add_development_dependency 'rubocop', '>= 0.32.1'
|
32
32
|
spec.add_development_dependency 'simplecov'
|
33
33
|
end
|
data/lib/chef_backup/data_map.rb
CHANGED
@@ -11,15 +11,17 @@ module ChefBackup
|
|
11
11
|
attr_writer :data_map
|
12
12
|
end
|
13
13
|
|
14
|
-
attr_accessor :strategy, :backup_time, :configs, :services
|
14
|
+
attr_accessor :strategy, :backup_time, :topology, :configs, :services, :ha
|
15
15
|
|
16
16
|
def initialize
|
17
17
|
@services = {}
|
18
18
|
@configs = {}
|
19
|
+
@ha = {}
|
19
20
|
yield self if block_given?
|
20
21
|
|
21
22
|
@backup_time ||= Time.now.iso8601
|
22
23
|
@strategy ||= 'none'
|
24
|
+
@toplogy ||= 'idontknow'
|
23
25
|
end
|
24
26
|
|
25
27
|
def add_service(service, data_dir)
|
@@ -32,10 +34,16 @@ module ChefBackup
|
|
32
34
|
@configs[config]['data_dir'] = path
|
33
35
|
end
|
34
36
|
|
37
|
+
def add_ha_info(k, v)
|
38
|
+
@ha[k] = v
|
39
|
+
end
|
40
|
+
|
35
41
|
def manifest
|
36
42
|
{
|
37
43
|
'strategy' => strategy,
|
38
44
|
'backup_time' => backup_time,
|
45
|
+
'topology' => topology,
|
46
|
+
'ha' => ha,
|
39
47
|
'services' => services,
|
40
48
|
'configs' => configs
|
41
49
|
}
|
data/lib/chef_backup/helpers.rb
CHANGED
@@ -104,18 +104,34 @@ module Helpers
|
|
104
104
|
private_chef['backup']['strategy']
|
105
105
|
end
|
106
106
|
|
107
|
+
def topology
|
108
|
+
private_chef['topology']
|
109
|
+
end
|
110
|
+
|
107
111
|
def frontend?
|
108
112
|
private_chef['role'] == 'frontend'
|
109
113
|
end
|
110
114
|
|
111
115
|
def backend?
|
112
|
-
private_chef['role'] =~
|
116
|
+
private_chef['role'] =~ /backend|standalone/
|
113
117
|
end
|
114
118
|
|
115
119
|
def online?
|
116
120
|
private_chef['backup']['mode'] == 'online'
|
117
121
|
end
|
118
122
|
|
123
|
+
def ha?
|
124
|
+
topology == 'ha'
|
125
|
+
end
|
126
|
+
|
127
|
+
def tier?
|
128
|
+
topology == 'tier'
|
129
|
+
end
|
130
|
+
|
131
|
+
def standalone?
|
132
|
+
topology == 'standalone'
|
133
|
+
end
|
134
|
+
|
119
135
|
def tmp_dir
|
120
136
|
@tmp_dir ||= begin
|
121
137
|
dir = safe_key { config['tmp_dir'] } ||
|
@@ -75,6 +75,12 @@ class TarBackup
|
|
75
75
|
if private_chef.key?('upgrades')
|
76
76
|
data_map.add_service('upgrades', private_chef['upgrades']['dir'])
|
77
77
|
end
|
78
|
+
|
79
|
+
if ha?
|
80
|
+
data_map.add_service('keepalived', private_chef['keepalived']['dir'])
|
81
|
+
data_map.add_ha_info('provider', private_chef['ha']['provider'])
|
82
|
+
data_map.add_ha_info('path', private_chef['ha']['path'])
|
83
|
+
end
|
78
84
|
end
|
79
85
|
|
80
86
|
def manifest
|
@@ -111,6 +117,7 @@ class TarBackup
|
|
111
117
|
@data_map ||= ChefBackup::DataMap.new do |data|
|
112
118
|
data.backup_time = backup_time
|
113
119
|
data.strategy = strategy
|
120
|
+
data.topology = topology
|
114
121
|
end
|
115
122
|
end
|
116
123
|
|
@@ -26,6 +26,12 @@ class TarRestore
|
|
26
26
|
def restore
|
27
27
|
log 'Restoring Chef Server from backup'
|
28
28
|
cleanse_chef_server(config['agree_to_cleanse'])
|
29
|
+
if manifest['topology'] == 'ha'
|
30
|
+
log 'Performing HA restore - please ensure that keepalived is not running on the standby host'
|
31
|
+
fix_ha_plugins
|
32
|
+
check_ha_volume
|
33
|
+
touch_drbd_ready
|
34
|
+
end
|
29
35
|
restore_configs
|
30
36
|
restore_services unless frontend?
|
31
37
|
touch_sentinel
|
@@ -102,6 +108,35 @@ class TarRestore
|
|
102
108
|
@backup_name ||= Pathname.new(tarball_path).basename.sub_ext('').to_s
|
103
109
|
end
|
104
110
|
|
111
|
+
def fix_ha_plugins
|
112
|
+
log 'Fixing HA plugins directory (https://github.com/chef/chef-server/issues/115)'
|
113
|
+
plugins_dir = '/var/opt/opscode/plugins'
|
114
|
+
drbd_plugin = File.join(plugins_dir, 'chef-ha-drbd.rb')
|
115
|
+
|
116
|
+
FileUtils.mkdir_p(plugins_dir) unless Dir.exist?(plugins_dir)
|
117
|
+
FileUtils.ln_sf('/opt/opscode/chef-server-plugin.rb', drbd_plugin) unless
|
118
|
+
File.exist?(drbd_plugin)
|
119
|
+
end
|
120
|
+
|
121
|
+
def check_ha_volume
|
122
|
+
log 'Checking that the HA storage volume is mounted'
|
123
|
+
ha_data_dir = manifest['ha']['path']
|
124
|
+
|
125
|
+
unless ha_data_dir_mounted?(ha_data_dir)
|
126
|
+
fail "Please mount the data directory #{ha_data_dir} and perform any DRBD configuration before continuing"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
def ha_data_dir_mounted?(ha_data_dir)
|
131
|
+
File.read('/proc/mounts').split("\n").grep(/#{ha_data_dir}/).count > 0
|
132
|
+
end
|
133
|
+
|
134
|
+
def touch_drbd_ready
|
135
|
+
log 'Touching drbd_ready file'
|
136
|
+
FileUtils.touch('/var/opt/opscode/drbd/drbd_ready') unless
|
137
|
+
File.exist?('/var/opt/opscode/drbd/drbd_ready')
|
138
|
+
end
|
139
|
+
|
105
140
|
def reconfigure_server
|
106
141
|
log 'Reconfiguring the Chef Server'
|
107
142
|
shell_out('chef-server-ctl reconfigure')
|
data/lib/chef_backup/version.rb
CHANGED
@@ -60,7 +60,7 @@ describe ChefBackup::Strategy::TarBackup do
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
context 'on a
|
63
|
+
context 'on a standalone' do
|
64
64
|
before { private_chef('role' => 'standalone') }
|
65
65
|
|
66
66
|
context 'during an online backup' do
|
@@ -224,7 +224,7 @@ describe ChefBackup::Strategy::TarBackup do
|
|
224
224
|
allow(subject).to receive(:data_map).and_return(data_map)
|
225
225
|
allow(subject).to receive(:stateful_services).and_return(services)
|
226
226
|
allow(subject).to receive(:config_directories).and_return(configs)
|
227
|
-
%w(add_service add_config).each do |method|
|
227
|
+
%w(add_service add_config add_ha_info).each do |method|
|
228
228
|
allow(data_map).to receive(method.to_sym).and_return(true)
|
229
229
|
end
|
230
230
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef_backup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.dev.
|
4
|
+
version: 0.0.1.dev.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Cragun
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: di-ruby-lvm
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: 0.32.1
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: 0.32.1
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: simplecov
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -251,3 +251,4 @@ test_files:
|
|
251
251
|
- spec/unit/strategy/restore/shared_examples/restore.rb
|
252
252
|
- spec/unit/strategy/restore/tar_spec.rb
|
253
253
|
- spec/unit/strategy_spec.rb
|
254
|
+
has_rdoc:
|