Finished feature
This commit is contained in:
parent
58b6de55a2
commit
3aae6b998a
97
bucket-tool
Normal file → Executable file
97
bucket-tool
Normal file → Executable file
@ -6,6 +6,8 @@ require 'digest'
|
|||||||
|
|
||||||
# END: Requires
|
# END: Requires
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# BEGIN: Helper Functions
|
# BEGIN: Helper Functions
|
||||||
|
|
||||||
def usage
|
def usage
|
||||||
@ -24,6 +26,7 @@ Actions:
|
|||||||
list-files : List all files/paths that have been backed up to the bucket
|
list-files : List all files/paths that have been backed up to the bucket
|
||||||
get <entry-hash> : Get the content of a specific entry (by hash)
|
get <entry-hash> : Get the content of a specific entry (by hash)
|
||||||
restore <value> : Restore previous state of file stored in bucket. Value can be hash or filename/filepath
|
restore <value> : Restore previous state of file stored in bucket. Value can be hash or filename/filepath
|
||||||
|
backup <file> : Backup the file to the bucket
|
||||||
|
|
||||||
Global Flags:
|
Global Flags:
|
||||||
-d | --debug : Set debug flag
|
-d | --debug : Set debug flag
|
||||||
@ -180,6 +183,7 @@ end
|
|||||||
|
|
||||||
$CONFIG = Hash.new
|
$CONFIG = Hash.new
|
||||||
$CONFIG[:bucket_dir]=` #{puppet_exe} agent --configprint clientbucketdir `.strip()
|
$CONFIG[:bucket_dir]=` #{puppet_exe} agent --configprint clientbucketdir `.strip()
|
||||||
|
$CONFIG[:puppet_version]=` #{puppet_exe} --version `
|
||||||
$CONFIG[:action]=""
|
$CONFIG[:action]=""
|
||||||
$CONFIG[:search_term]=""
|
$CONFIG[:search_term]=""
|
||||||
$CONFIG[:log_file]=""
|
$CONFIG[:log_file]=""
|
||||||
@ -187,7 +191,7 @@ $CONFIG[:info_format]="inline"
|
|||||||
File.open('/etc/hostname') do |file|
|
File.open('/etc/hostname') do |file|
|
||||||
$HOSTNAME=file.read().strip()
|
$HOSTNAME=file.read().strip()
|
||||||
end
|
end
|
||||||
FLAG_REGEX=/\-+\S+/
|
FLAG_REGEX=/^\-+\S+/
|
||||||
|
|
||||||
# END: Variables
|
# END: Variables
|
||||||
|
|
||||||
@ -207,7 +211,7 @@ if not (ARGV & ['-d', '--debug']).empty?
|
|||||||
end
|
end
|
||||||
i=0
|
i=0
|
||||||
case ARGV[i]
|
case ARGV[i]
|
||||||
when 'search', 'get', 'restore'
|
when 'search', 'get', 'restore', 'backup'
|
||||||
$CONFIG[:action]=ARGV[i]
|
$CONFIG[:action]=ARGV[i]
|
||||||
log "$CONFIG[:action] was set to #{ARGV[i]}"
|
log "$CONFIG[:action] was set to #{ARGV[i]}"
|
||||||
log "user provided search action ARGV[i.next] == #{ARGV[i.next]}"
|
log "user provided search action ARGV[i.next] == #{ARGV[i.next]}"
|
||||||
@ -265,6 +269,11 @@ case $CONFIG[:action]
|
|||||||
exit
|
exit
|
||||||
end
|
end
|
||||||
|
|
||||||
|
when 'backup'
|
||||||
|
if not File.exist? $CONFIG[:search_term]
|
||||||
|
puts "File #{$CONFIG[:search_term]} does not exist. Please check to make sure that there are not typos and attempt the run again."
|
||||||
|
exit
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
## END: Checks
|
## END: Checks
|
||||||
@ -470,6 +479,88 @@ def restore_entry (bucket)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def backup_file (bucket)
|
||||||
|
hash=""
|
||||||
|
if Gem::Version.new($CONFIG[:puppet_version]) >= Gem::Version.new("7.0.0")
|
||||||
|
log "Puppet Version is +7.* so hashing algo will be SHA256"
|
||||||
|
File.open($CONFIG[:search_term],'r') do |file|
|
||||||
|
hash = Digest::SHA2.hexdigest file.read()
|
||||||
|
end
|
||||||
|
|
||||||
|
else
|
||||||
|
log "Puppet Version is not 7.* so hashing algo will be MD5"
|
||||||
|
File.open($CONFIG[:search_term],'r') do |file|
|
||||||
|
hash = Digest::MD5.hexdigest file.read()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
log "Hash for #{$CONFIG[:search_term]} was generated to be #{hash}"
|
||||||
|
|
||||||
|
if bucket.entries.has_key? hash
|
||||||
|
log "Hash was found to already be backed up to bucket"
|
||||||
|
puts "This file (hash: #{hash} has already been backed up in the bucket"
|
||||||
|
puts bucket.entries[hash].info
|
||||||
|
exit
|
||||||
|
end
|
||||||
|
|
||||||
|
puppet_uid=0
|
||||||
|
puppet_gid=0
|
||||||
|
File.open('/etc/passwd','r') do |file|
|
||||||
|
log "Getting puppet UID & GID from /etc/passwd"
|
||||||
|
passd = file.read.split(/\n/).select{|line| line =~ /puppet.+/}.first
|
||||||
|
puppet_uid=Integer(passd.split(':')[2])
|
||||||
|
log "Retrieved Puppet UID as #{puppet_uid}"
|
||||||
|
puppet_gid=Integer(passd.split(':')[3])
|
||||||
|
log "Retrieved Puppet GID as #{puppet_gid}"
|
||||||
|
end
|
||||||
|
|
||||||
|
log "Created preceeding directorys to hash directory"
|
||||||
|
dir=$CONFIG[:bucket_dir]
|
||||||
|
hash.chars[0,8].map{|char|
|
||||||
|
dir+="/#{char}"
|
||||||
|
log "Checking to make sure that #{dir} doesn't exist"
|
||||||
|
if not Dir.exist? dir
|
||||||
|
log "#{dir} didn't exist so creating the directory & changing the UID to #{puppet_uid} & GID #{puppet_gid}"
|
||||||
|
Dir.mkdir dir
|
||||||
|
File.chown(puppet_gid, puppet_uid, dir)
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
entry_dir="#{dir}/#{hash}"
|
||||||
|
if not Dir.exist? entry_dir
|
||||||
|
log "#{entry_dir} didn't exist so creating the directory & changing the UID to #{puppet_uid} & GID #{puppet_gid}"
|
||||||
|
Dir.mkdir entry_dir
|
||||||
|
File.chown(puppet_gid, puppet_uid, entry_dir)
|
||||||
|
end
|
||||||
|
|
||||||
|
contents_path="#{entry_dir}/contents"
|
||||||
|
log "#{contents_path} will be created"
|
||||||
|
paths_path="#{entry_dir}/paths"
|
||||||
|
log "#{paths_path} will be created"
|
||||||
|
|
||||||
|
log "Creating #{contents_path}"
|
||||||
|
File.open(contents_path, 'w') do |contents_file|
|
||||||
|
log "Opened #{contents_path} to be written to"
|
||||||
|
File.open($CONFIG[:search_term], 'r') do |source_file|
|
||||||
|
log "Opened #{$CONFIG[:search_term]} to be read from"
|
||||||
|
contents_file.write(source_file.read)
|
||||||
|
contents_file.chown(puppet_gid, puppet_uid)
|
||||||
|
log "#{contents_path} was created & was chowned to UID to #{puppet_uid} & GID #{puppet_gid}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
log "Creating #{paths_path}"
|
||||||
|
File.open(paths_path, 'w') do |paths_file|
|
||||||
|
log "Opened #{paths_path} to be written to"
|
||||||
|
paths_file.write($CONFIG[:search_term])
|
||||||
|
log "Just wrote #{$CONFIG[:search_term]} to #{paths_path}"
|
||||||
|
paths_file.chown(puppet_gid, puppet_uid)
|
||||||
|
log "#{paths_path} was created & was chowned to UID to #{puppet_uid} & GID #{puppet_gid}"
|
||||||
|
end
|
||||||
|
|
||||||
|
puts "File #{$CONFIG[:search_term]} was backed up to #{entry_dir}"
|
||||||
|
end
|
||||||
|
|
||||||
# END: Work Functions
|
# END: Work Functions
|
||||||
|
|
||||||
|
|
||||||
@ -494,6 +585,8 @@ if __FILE__ == $0
|
|||||||
when 'restore'
|
when 'restore'
|
||||||
restore_entry bucket
|
restore_entry bucket
|
||||||
|
|
||||||
|
when 'backup'
|
||||||
|
backup_file bucket
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user