class ServerBackup::BackupExport
Constants
- COMPONENTS
- LOAD_TRIES
Public Instance Methods
run()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 56 def run validate! components = name_args.empty? ? COMPONENTS : name_args Array(components).each { |component| self.send(component) } end
Private Instance Methods
backup_standard(component, klass)
click to toggle source
# File lib/chef/knife/backup_export.rb, line 129 def backup_standard(component, klass) ui.msg "Backing up #{component}" dir = File.join(config[:backup_dir], component) FileUtils.mkdir_p(dir) klass.list.each do |component_name, url| next if component == "environments" && component_name == "_default" ui.msg "Backing up #{component} #{component_name}" component_obj = load_object(klass, component_name).to_hash unless component_obj ui.error "Could not load #{klass} #{component_name}." next end File.open(File.join(dir, "#{component_name}.json"), "w") do |component_file| component_file.print(JSON.pretty_generate(component_obj)) end end end
clients()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 93 def clients backup_standard("clients", Chef::ApiClient) end
cookbooks()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 164 def cookbooks ui.msg "Backing up cookbooks" dir = File.join(config[:backup_dir], "cookbooks") FileUtils.mkdir_p(dir) if config[:latest] cookbooks = rest.get_rest("/cookbooks?latest") else cookbooks = rest.get_rest("/cookbooks?num_versions=all") end cookbooks.keys.each do |cb| ui.msg "Backing up cookbook #{cb}" dld = Chef::Knife::CookbookDownload.new cookbooks[cb]['versions'].each do |ver| dld.name_args = [cb, ver['version']] dld.config[:download_directory] = dir dld.config[:force] = true begin dld.run rescue ui.msg "Failed to download cookbook #{cb} version #{ver['version']}... Skipping" FileUtils.rm_r(File.join(dir, cb + "-" + ver['version'])) end end end end
data_bags()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 113 def data_bags ui.msg "Backing up data bags" dir = File.join(config[:backup_dir], "data_bags") FileUtils.mkdir_p(dir) Chef::DataBag.list.each do |bag_name, url| FileUtils.mkdir_p(File.join(dir, bag_name)) Chef::DataBag.load(bag_name).each do |item_name, url| ui.msg "Backing up data bag #{bag_name} item #{item_name}" item = Chef::DataBagItem.load(bag_name, item_name) File.open(File.join(dir, bag_name, "#{item_name}.json"), "w") do |dbag_file| dbag_file.print(JSON.pretty_generate(item.raw_data)) end end end end
environments()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 109 def environments backup_standard("environments", Chef::Environment) end
load_object(klass, name, try = 1)
click to toggle source
# File lib/chef/knife/backup_export.rb, line 147 def load_object(klass, name, try = 1) klass.load(name) rescue NoMethodError ui.warn "Problem loading #{klass} #{name}. Try #{try}/#{LOAD_TRIES}" if try < LOAD_TRIES try += 1 load_object(klass, name, try) end rescue Net::HTTPServerException => e if config[:ignore_perm] ui.warn "Problem loading #{name} #{e.message}." ui.warn "Possibly an issue with permissions on the chef server... Skipping" else raise end end
nodes()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 74 def nodes component = "nodes" ui.msg "Backing up #{component}" dir = File.join(config[:backup_dir], component) FileUtils.mkdir_p(dir) Chef::Node.list.each do |component_name, url| next if component == "environments" && component_name == "_default" ui.msg "Backing up #{component} #{component_name}" component_obj = Chef::Node.load(component_name).for_json unless component_obj ui.error "Could not load #{klass} #{component_name}." next end File.open(File.join(dir, "#{component_name}.json"), "w") do |component_file| component_file.print(JSON.pretty_generate(component_obj)) end end end
roles()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 105 def roles backup_standard("roles", Chef::Role) end
users()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 97 def users if Chef::VERSION =~ /^1[1]\./ backup_standard("users", Chef::User) else ui.warn "users export only supported on chef == 11" end end
validate!()
click to toggle source
# File lib/chef/knife/backup_export.rb, line 66 def validate! bad_names = name_args - COMPONENTS unless bad_names.empty? ui.error "Component types #{bad_names.join(",")} are not valid." exit 1 end end