Class: Cleanfb::Clean

Inherits:
Object
  • Object
show all
Defined in:
lib/cleanfb.rb

Instance Method Summary collapse

Instance Method Details

#removeObject

Method to remove ALL files backed up on the Puppet masters filebucket from a specified agent.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/cleanfb.rb', line 12

def remove()

	# return if no args
	return "Please supply a file" if ARGV[0].nil? || ARGV[0].empty?
			
	# return the help output if requested
	if ((ARGV.include? "-h") or (ARGV.include? "--help"))
		return "Remove backups of an agent from the Puppet master's filebucket.\nBackups are stored at /root/saved_configs/\n\n		Usage:   cleanfb <client> <options>\n\n		options: -h or --help		| help and information\n
		-y		| defaults all input to yes\n"

	end

	arg = ARGV[0]	

	# set ans to yes automatically if -y option
	if !ARGV.nil? and (ARGV.include? "-y") and ARGV.length > 1
	 		ans = "y"
		arg = ARGV[1] if (ARGV.index("-y") == 0)

	# else prompt for answer
	else
  		print "Remove #{arg} ? y|n: "
  		ans = STDIN.gets.chomp
  end

	# if yes, retrieve the files and remove them
		if ans == "y" || ans == "yes"
  		cmd = `puppet filebucket list -l|grep -i #{arg}`
 	  
		unless (ARGV.include? "-y")
			test = cmd.split(" ").last
			multi_match = false

			cmd.each_line do |line|
					if !line.include? test
							multi_match = true
					end
			end	
			
			if multi_match
				print "Matched multiple hosts. Remove all? y|n: "
				ans = STDIN.gets.chomp
				
				unless ans == "y" || ans == "yes"
					return "Ending run"	
				end
			end
		end			
		

		unless cmd.nil? || cmd.empty?
	  	  cmd.each_line do |line|
   	  	path = "/opt/puppetlabs/puppet/cache/bucket"
    		  sum = line.split(" ")[0]
				start = (sum.scan /\w/).join("/")
				
				file = line.split(" ")[3].split("/").last
				name = file.split("_")[0]
				date = line.split(" ")[1]
				time = line.split(" ")[2]
				
				save_dir = "/root/saved_configs/"

				unless Dir.exist? save_dir
						Dir.mkdir(File.join(Dir.home("root"), "saved_configs"), 0700)
				end

				unless Dir.exist? "#{save_dir}/#{name}/"
					Dir.mkdir(File.join("#{save_dir}", "#{name}"), 0700)
				end
			
 	     	path += "/" + start[0..15] + sum + "/"
				
				if File.exist? "#{path}/contents"
					
						puts "Storing " + path
						puts "at /root/saved_configs/#{name}/#{date}_#{time}_#{file}"
						cmd = `mv -f #{path}contents /root/saved_configs/#{name}/#{date}_#{time}_#{file}`
						cmd = `rm -rf #{path}`
				else
   	  		puts "No file #{arg} found."
				end
 	    end
	  	else
   	  puts "No file #{arg} found."
 	  end
 	end
	return 
end

#restoreObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/cleanfb.rb', line 102

def restore()

	# return if no args
	return "Please supply a file" if ARGV[0].nil? || ARGV[0].empty?
			
	# return the help output if requested
	if ((ARGV.include? "-h") or (ARGV.include? "--help"))
		return "Remove backups of an agent from the Puppet master's filebucket.\nBackups are stored at /root/saved_configs/\n\n		Usage:   cleanfb <client> <options>\n\n		options: -h or --help		| help and information\n
		-y		| defaults all input to yes\n"

	end

	arg = ARGV[1]	

	# set ans to yes automatically if -y option
	if !ARGV.nil? and (ARGV.include? "-y") and ARGV.length > 1
	 		ans = "y"
		arg = ARGV[1] if (ARGV.index("-y") == 0)

	# else prompt for answer
	else
  		print "Restore #{arg} ? y|n: "
  		ans = STDIN.gets.chomp
  end

	# if yes, retrieve the files and remove them
		if ans == "y" || ans == "yes"
		
		file = arg
		sum = Digest::MD5.file file
		start = ("#{sum}".scan /\w/).join("/")
   	path = "/opt/puppetlabs/puppet/cache/bucket"
		
		path += "/" + start[0..15] + sum + "/"

		if File.exist? "#{path}/contents"
					
				puts "Restoring " + path
				cmd = `mv -f #{file} #{path}contents`
		else
   	  		puts "No file #{arg} found."
		end
	 	else
   	  puts "No file #{arg} found."
 	end
	return
end