Class: ForemanMaintain::Utils::Backup

Inherits:
Object
  • Object
show all
Includes:
Concerns::SystemHelpers
Defined in:
lib/foreman_maintain/utils/backup.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Concerns::SystemHelpers

#check_min_version, #clean_all_packages, #create_lv_snapshot, #directory_empty?, #downstream_installation?, #execute, #execute!, #execute?, #execute_with_status, #file_exists?, #find_dir_containing_file, #find_package, #find_symlinks, #format_shell_args, #get_lv_info, #get_lv_path, #hostname, included, #package_version, #packages_action, #parse_csv, #parse_json, #rpm_version, #server?, #service_exists?, #shellescape, #smart_proxy?, #systemd_installed?, #version

Methods included from Concerns::Finders

#check, #detector, #feature, #find_all_scenarios, #find_checks, #find_procedures, #find_scenarios, #procedure

Methods included from Concerns::Logger

#logger

Constructor Details

#initialize(backup_dir) ⇒ Backup

Returns a new instance of Backup.



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/foreman_maintain/utils/backup.rb', line 14

def initialize(backup_dir)
  # fpc stands for foreman proxy w/ content
  @backup_dir = backup_dir
  @standard_files = ['config_files.tar.gz']
  @katello_online_files = ['mongo_dump', 'candlepin.dump', 'foreman.dump']
  @katello_offline_files = ['mongo_data.tar.gz', 'pgsql_data.tar.gz']
  @foreman_online_files = ['foreman.dump']
  @foreman_offline_files = ['pgsql_data.tar.gz']
  @fpc_online_files = ['mongo_dump']
  @fpc_offline_files = ['mongo_data.tar.gz']
end

Instance Attribute Details

#foreman_offline_filesObject

Returns the value of attribute foreman_offline_files.



10
11
12
# File 'lib/foreman_maintain/utils/backup.rb', line 10

def foreman_offline_files
  @foreman_offline_files
end

#foreman_online_filesObject

Returns the value of attribute foreman_online_files.



10
11
12
# File 'lib/foreman_maintain/utils/backup.rb', line 10

def foreman_online_files
  @foreman_online_files
end

#fpc_offline_filesObject

Returns the value of attribute fpc_offline_files.



10
11
12
# File 'lib/foreman_maintain/utils/backup.rb', line 10

def fpc_offline_files
  @fpc_offline_files
end

#fpc_online_filesObject

Returns the value of attribute fpc_online_files.



10
11
12
# File 'lib/foreman_maintain/utils/backup.rb', line 10

def fpc_online_files
  @fpc_online_files
end

#katello_offline_filesObject

Returns the value of attribute katello_offline_files.



10
11
12
# File 'lib/foreman_maintain/utils/backup.rb', line 10

def katello_offline_files
  @katello_offline_files
end

#katello_online_filesObject

Returns the value of attribute katello_online_files.



10
11
12
# File 'lib/foreman_maintain/utils/backup.rb', line 10

def katello_online_files
  @katello_online_files
end

#standard_filesObject

Returns the value of attribute standard_files.



10
11
12
# File 'lib/foreman_maintain/utils/backup.rb', line 10

def standard_files
  @standard_files
end

Instance Method Details

#check_backupObject



58
59
60
61
62
63
64
65
66
# File 'lib/foreman_maintain/utils/backup.rb', line 58

def check_backup
  if feature(:instance).foreman_proxy_with_content?
    valid_fpc_backup?
  elsif feature(:katello)
    valid_katello_backup?
  else
    valid_foreman_backup?
  end
end

#file_mapObject



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/foreman_maintain/utils/backup.rb', line 26

def file_map
  @file_map ||= {
    :mongo_data => map_file(@backup_dir, 'mongo_data.tar.gz'),
    :pgsql_data => map_file(@backup_dir, 'pgsql_data.tar.gz'),
    :pulp_data => map_file(@backup_dir, 'pulp_data.tar'),
    :foreman_dump => map_file(@backup_dir, 'foreman.dump'),
    :candlepin_dump => map_file(@backup_dir, 'candlepin.dump'),
    :mongo_dump => map_file(@backup_dir, 'mongo_dump'),
    :config_files => map_file(@backup_dir, 'config_files.tar.gz'),
    :pg_globals => map_file(@backup_dir, 'pg_globals.dump'),
    :metadata => map_file(@backup_dir, 'metadata.yml')
  }
end

#foreman_logical_backup?Boolean

Returns:

  • (Boolean)


158
159
160
161
162
163
164
165
166
# File 'lib/foreman_maintain/utils/backup.rb', line 158

def foreman_logical_backup?
  file_map[:pgsql_data][:present] &&
    file_map[:foreman_dump][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:mongo_data][:present] ||
      file_map[:mongo_dump][:present]
    )
end

#foreman_online_backup?Boolean

Returns:

  • (Boolean)


148
149
150
151
152
153
154
155
156
# File 'lib/foreman_maintain/utils/backup.rb', line 148

def foreman_online_backup?
  file_map[:foreman_dump][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:pgsql_data][:present] ||
      file_map[:mongo_data][:present] ||
      file_map[:mongo_dump][:present]
    )
end

#foreman_standard_backup?Boolean

Returns:

  • (Boolean)


138
139
140
141
142
143
144
145
146
# File 'lib/foreman_maintain/utils/backup.rb', line 138

def foreman_standard_backup?
  file_map[:pgsql_data][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present] ||
      file_map[:mongo_data][:present] ||
      file_map[:mongo_dump][:present]
    )
end

#fpc_logical_backup?Boolean

Returns:

  • (Boolean)


128
129
130
131
132
133
134
135
136
# File 'lib/foreman_maintain/utils/backup.rb', line 128

def fpc_logical_backup?
  file_map[:mongo_dump][:present] &&
    file_map[:mongo_data][:present] &&
    !(
      file_map[:pgsql_data][:present] ||
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present]
    )
end

#fpc_online_backup?Boolean

Returns:

  • (Boolean)


118
119
120
121
122
123
124
125
126
# File 'lib/foreman_maintain/utils/backup.rb', line 118

def fpc_online_backup?
  file_map[:mongo_dump][:present] &&
    !(
      file_map[:mongo_data][:present] ||
      file_map[:pgsql_data][:present] ||
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present]
    )
end

#fpc_standard_backup?Boolean

Returns:

  • (Boolean)


108
109
110
111
112
113
114
115
116
# File 'lib/foreman_maintain/utils/backup.rb', line 108

def fpc_standard_backup?
  file_map[:mongo_data][:present] &&
    !(
      file_map[:pgsql_data][:present] ||
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present] ||
      file_map[:mongo_dump][:present]
    )
end

#katello_logical_backup?Boolean

Returns:

  • (Boolean)


100
101
102
103
104
105
106
# File 'lib/foreman_maintain/utils/backup.rb', line 100

def katello_logical_backup?
  file_map[:mongo_dump][:present] &&
    file_map[:mongo_data][:present] &&
    file_map[:pgsql_data][:present] &&
    file_map[:candlepin_dump][:present] &&
    file_map[:foreman_dump][:present]
end

#katello_online_backup?Boolean

Returns:

  • (Boolean)


90
91
92
93
94
95
96
97
98
# File 'lib/foreman_maintain/utils/backup.rb', line 90

def katello_online_backup?
  file_map[:candlepin_dump][:present] &&
    file_map[:foreman_dump][:present] &&
    file_map[:mongo_dump][:present] &&
    !(
      file_map[:mongo_data][:present] ||
      file_map[:pgsql_data][:present]
    )
end

#katello_standard_backup?Boolean

Returns:

  • (Boolean)


80
81
82
83
84
85
86
87
88
# File 'lib/foreman_maintain/utils/backup.rb', line 80

def katello_standard_backup?
  file_map[:mongo_data][:present] &&
    file_map[:pgsql_data][:present] &&
    !(
      file_map[:candlepin_dump][:present] ||
      file_map[:foreman_dump][:present] ||
      file_map[:mongo_dump][:present]
    )
end

#map_file(backup_dir, filename) ⇒ Object



40
41
42
43
44
45
46
47
# File 'lib/foreman_maintain/utils/backup.rb', line 40

def map_file(backup_dir, filename)
  file_path = File.join(backup_dir, filename)
  present = File.exist?(file_path)
  {
    :present => present,
    :path => file_path
  }
end

#metadataObject



186
187
188
189
190
191
192
# File 'lib/foreman_maintain/utils/backup.rb', line 186

def 
  if file_map[:metadata][:present]
    YAML.load_file(file_map[:metadata][:path])
  else
    {}
  end
end

#present_filesObject



49
50
51
52
# File 'lib/foreman_maintain/utils/backup.rb', line 49

def present_files
  present_files = file_map.select { |_k, v| v[:present] }
  present_files.values.map { |f| File.basename(f[:path]) }
end

#pulp_tar_split?Boolean

Returns:

  • (Boolean)


194
195
196
# File 'lib/foreman_maintain/utils/backup.rb', line 194

def pulp_tar_split?
  File.exist?(File.join(@backup_dir, 'pulp_data.part0002'))
end

#sql_dump_files_exist?Boolean

Returns:

  • (Boolean)


204
205
206
207
# File 'lib/foreman_maintain/utils/backup.rb', line 204

def sql_dump_files_exist?
  file_map[:foreman_dump][:present] ||
    file_map[:candlepin_dump][:present]
end

#tar_backups_exist?Boolean

Returns:

  • (Boolean)


198
199
200
201
202
# File 'lib/foreman_maintain/utils/backup.rb', line 198

def tar_backups_exist?
  file_map[:mongo_data][:present] ||
    file_map[:pulp_data][:present] ||
    file_map[:pgsql_data][:present]
end

#valid_backup?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/foreman_maintain/utils/backup.rb', line 54

def valid_backup?
  file_map[:config_files][:present] && check_backup
end

#valid_foreman_backup?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/foreman_maintain/utils/backup.rb', line 76

def valid_foreman_backup?
  foreman_standard_backup? || foreman_online_backup? || foreman_logical_backup?
end

#valid_fpc_backup?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/foreman_maintain/utils/backup.rb', line 68

def valid_fpc_backup?
  fpc_online_backup? || fpc_standard_backup? || fpc_logical_backup?
end

#valid_katello_backup?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/foreman_maintain/utils/backup.rb', line 72

def valid_katello_backup?
  katello_online_backup? || katello_standard_backup? || katello_logical_backup?
end

#validate_hostname?Boolean

Returns:

  • (Boolean)


168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
# File 'lib/foreman_maintain/utils/backup.rb', line 168

def validate_hostname?
  # make sure that the system hostname is the same as the backup
  config_tarball = file_map[:config_files][:path]
  config_files = tarball_file_list(config_tarball)

  # Incremental backups sometimes don't include httpd.conf. Since a "base" backup
  # is restored before an incremental, we can assume that the hostname is checked
  # during the base backup restore
  if config_files.include?('etc/httpd/conf/httpd.conf')
    tar_cmd = "tar zxf #{config_tarball} etc/httpd/conf/httpd.conf " \
              "--to-stdout | grep ServerName | awk {'print $2'} | tr -d '\"'"
    backup_hostname = execute(tar_cmd).chomp
    backup_hostname == hostname
  else
    true
  end
end