irgat 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +13 -0
- data/Manifest.txt +1 -3
- data/PostInstall.txt +10 -1
- data/README.rdoc +6 -5
- data/Rakefile +1 -1
- data/TODO +23 -3
- data/bin/irgat +19 -33
- data/bin/irgat_setup +12 -3
- data/bin/irgat_updater +86 -0
- data/config/hoe.rb +2 -2
- data/lib/irgat.rb +85 -22
- data/lib/irgat/console.rb +1 -1
- data/lib/irgat/dependencies.rb +14 -9
- data/lib/irgat/execs.rb +36 -39
- data/lib/irgat/log.rb +60 -27
- data/lib/irgat/utils.rb +1 -0
- data/lib/irgat/version.rb +8 -3
- data/lib/modules/backup.rb +117 -35
- data/lib/modules/console.rb +2 -10
- data/lib/modules/kwallet.rb +6 -8
- data/setup/etc/backup.yml.example +8 -5
- data/setup/etc/irgat.yml.example +7 -7
- data/setup/etc/kwallet.yml.example +12 -1
- data/website/index.html +5 -2
- metadata +18 -19
- data/setup/etc/console.yml.default +0 -11
- data/setup/etc/dar.yml.example +0 -16
- data/setup/etc/kwallet.yml.default +0 -18
data/History.txt
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
== 0.0.2 2008-11-3
|
2
|
+
|
3
|
+
* Backup Module:
|
4
|
+
* Fixed Purge and Move old Backups method
|
5
|
+
* Implemented new methods
|
6
|
+
|
7
|
+
* Irgat Base:
|
8
|
+
* Fixed bug in log Module (!@log error)
|
9
|
+
* Fixed commands_launched resume (!@command_log)
|
10
|
+
|
11
|
+
* Intituive
|
12
|
+
* Added some colors in cmd
|
13
|
+
|
1
14
|
== 0.0.1 2008-10-24
|
2
15
|
|
3
16
|
* 1 major enhancement:
|
data/Manifest.txt
CHANGED
@@ -6,6 +6,7 @@ Rakefile
|
|
6
6
|
TODO
|
7
7
|
bin/irgat
|
8
8
|
bin/irgat_setup
|
9
|
+
bin/irgat_updater
|
9
10
|
config/hoe.rb
|
10
11
|
config/requirements.rb
|
11
12
|
lib/irgat.rb
|
@@ -26,11 +27,8 @@ script/txt2html
|
|
26
27
|
setup.rb
|
27
28
|
setup/etc/backup.yml.example
|
28
29
|
setup/etc/chroot.yml.example
|
29
|
-
setup/etc/console.yml.default
|
30
30
|
setup/etc/cron.yml.example
|
31
|
-
setup/etc/dar.yml.example
|
32
31
|
setup/etc/irgat.yml.example
|
33
|
-
setup/etc/kwallet.yml.default
|
34
32
|
setup/etc/kwallet.yml.example
|
35
33
|
setup/etc/ssh.yml.example
|
36
34
|
tasks/deployment.rake
|
data/PostInstall.txt
CHANGED
@@ -1,4 +1,13 @@
|
|
1
|
+
New Install:
|
2
|
+
------------
|
3
|
+
|
1
4
|
Run irgat_setup to setup Irgat
|
2
5
|
|
3
|
-
For more information on Irgat
|
6
|
+
For more information on Irgat read the rdoc documentation or see http://irgat.rubyforge.org
|
7
|
+
|
8
|
+
Updater: (0.0.1 => 0.0.2)
|
9
|
+
-------------------------
|
10
|
+
|
11
|
+
If you have already installed run irgat_updater. These script checks your config files and show posible difference between older and new config files.
|
4
12
|
|
13
|
+
The program only marks these changes. You have to do it manually.
|
data/README.rdoc
CHANGED
@@ -4,23 +4,24 @@ Interactive Ruby for Gnoxys Administration Tools
|
|
4
4
|
|
5
5
|
== DESCRIPTION:
|
6
6
|
|
7
|
-
|
7
|
+
IRGAT (Intuitive Ruby for Gnoxys Administration Tools) are some tools in Ruby for system administration (backups, ssh key management, etc...)
|
8
|
+
|
8
9
|
|
9
10
|
== FEATURES/PROBLEMS:
|
10
11
|
|
11
|
-
|
12
|
+
None
|
12
13
|
|
13
14
|
== SYNOPSIS:
|
14
15
|
|
15
|
-
|
16
|
+
None
|
16
17
|
|
17
18
|
== REQUIREMENTS:
|
18
19
|
|
19
|
-
|
20
|
+
None
|
20
21
|
|
21
22
|
== INSTALL:
|
22
23
|
|
23
|
-
|
24
|
+
None
|
24
25
|
|
25
26
|
== LICENSE:
|
26
27
|
|
data/Rakefile
CHANGED
data/TODO
CHANGED
@@ -11,6 +11,8 @@
|
|
11
11
|
|
12
12
|
=== Backup
|
13
13
|
|
14
|
+
** URGENCY: HIGHT
|
15
|
+
|
14
16
|
- Add a prevent control to predict how much space is going to need the backup and check if exist enought. If not, exit of application. Something like
|
15
17
|
{
|
16
18
|
get_older_size_backup=X
|
@@ -19,8 +21,26 @@
|
|
19
21
|
end
|
20
22
|
}
|
21
23
|
|
22
|
-
|
24
|
+
** URGENCY: LOW
|
25
|
+
|
26
|
+
- Add an option to distribute backups with ftp
|
27
|
+
- Add an option to do other sql backups
|
28
|
+
|
29
|
+
= Error Exits
|
30
|
+
|
31
|
+
2 # Load error in Module
|
32
|
+
3 # Process error in Module
|
33
|
+
6 # Exit by fatal command
|
34
|
+
7 # Not enough parameters
|
35
|
+
|
36
|
+
|
37
|
+
= Loggin
|
23
38
|
|
24
|
-
|
39
|
+
# option by cmd line: -w || --without_output
|
40
|
+
-d <debug level> || --debug_level <debug_level>
|
25
41
|
|
26
|
-
|
42
|
+
= Colors
|
43
|
+
green = 2
|
44
|
+
red = 9
|
45
|
+
dark red = 160
|
46
|
+
orange = 220
|
data/bin/irgat
CHANGED
@@ -1,14 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
#= Usage
|
4
|
-
#
|
5
|
-
# irgat -v || --version # display version information and exit
|
6
|
-
# irgat -h || --help # display help and exit
|
7
|
-
# irgat < arg > # process an irgat petition
|
8
|
-
# ---------------------
|
9
|
-
# irgat works like a modular tool. For example, the syntaxis for a backup is:
|
10
|
-
# $: irgat backup launch
|
11
|
-
#
|
12
3
|
#= Help
|
13
4
|
#
|
14
5
|
# Irgat is an utility to manage administration script and all the tools needed for it.
|
@@ -28,18 +19,10 @@
|
|
28
19
|
#
|
29
20
|
# For more info, view the API of irgat and read the documentation
|
30
21
|
#
|
31
|
-
#= License
|
32
|
-
#
|
33
|
-
# IRGAT (Intuitive Ruby for Gnoxys Administration Tools)
|
34
|
-
# 2007 - 2008 Gnoxys. info@gnoxys.net
|
35
|
-
# This program is released under the terms of the GPL v3 license as you cand find in http://www.gnu.org/licenses/gpl.html
|
36
|
-
#
|
37
|
-
#
|
38
22
|
|
39
23
|
|
40
24
|
# IRGAT constants
|
41
25
|
IRGAT_ROOT = File.dirname(__FILE__) + '/..'
|
42
|
-
puts IRGAT_ROOT
|
43
26
|
# Default paths, if you want to change, change hear
|
44
27
|
IRGAT_CONFIG = '/etc/irgat' unless defined?(IRGAT_CONFIG)
|
45
28
|
IRGAT_LANG = IRGAT_ROOT + '/lang' unless defined?(IRGAT_LANG)
|
@@ -66,22 +49,25 @@ rescue LoadError => msj
|
|
66
49
|
end
|
67
50
|
|
68
51
|
# check launch
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
#
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
52
|
+
args = $*
|
53
|
+
|
54
|
+
case args[0]
|
55
|
+
when nil
|
56
|
+
# no command line params. Show usage and exit
|
57
|
+
puts "\n * ERROR: missing options"
|
58
|
+
Irgat.help(["help","usage"])
|
59
|
+
exit 1
|
60
|
+
when '--version','-v','version'
|
61
|
+
# display version. license and exit
|
62
|
+
puts "\nVERSION\n=======\n #{ ::Irgat::Version }"
|
63
|
+
Irgat.help(["help","license"])
|
64
|
+
exit 0
|
65
|
+
when '--help','-h','help'
|
66
|
+
# help, and exit
|
67
|
+
Irgat.help(args)
|
68
|
+
else
|
69
|
+
# process irgat request
|
70
|
+
Irgat.process(args)
|
85
71
|
end
|
86
72
|
|
87
73
|
|
data/bin/irgat_setup
CHANGED
@@ -13,19 +13,28 @@ Read more info in <irgat_path>/README
|
|
13
13
|
=end
|
14
14
|
|
15
15
|
def stop_install(msj)
|
16
|
-
puts
|
16
|
+
puts "#{ colorize("Irgat updater was stopped with this message:","red") }"
|
17
17
|
puts '"'+msj+'"'
|
18
18
|
puts ''
|
19
19
|
puts 'Bye!'
|
20
20
|
exit 1
|
21
21
|
end
|
22
22
|
|
23
|
+
def colorize(msj, color)
|
24
|
+
case color
|
25
|
+
when "red"
|
26
|
+
color_num = 1
|
27
|
+
when "green"
|
28
|
+
color_num = 2
|
29
|
+
end
|
30
|
+
"\x1b[#{ 38 };5;#{ color_num }m#{ msj }\x1b[0m"
|
31
|
+
end
|
23
32
|
|
24
33
|
|
25
34
|
puts ''
|
26
35
|
puts 'Welcome to IRGAT setup'
|
27
36
|
puts '------------------------'
|
28
|
-
|
37
|
+
|
29
38
|
|
30
39
|
if Process.euid != 0
|
31
40
|
stop_install('You must run this program as root.')
|
@@ -77,7 +86,7 @@ end
|
|
77
86
|
puts 'Copy Irgat config sample files to destination'
|
78
87
|
puts ''
|
79
88
|
|
80
|
-
%x[ cp -rf #{ File.dirname(__FILE__) }/../setup/etc
|
89
|
+
%x[ cp -rf #{ File.dirname(__FILE__) }/../setup/etc/*.yml.example #{irgat_config_folder} ]
|
81
90
|
|
82
91
|
if $? != 0
|
83
92
|
stop_install("Exec: cp -r #{ File.dirname(__FILE__) }/../setup/etc/* #{irgat_config_folder} return error")
|
data/bin/irgat_updater
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
=begin
|
4
|
+
|
5
|
+
Irgat updater program
|
6
|
+
---------------------
|
7
|
+
|
8
|
+
Author: Gnoxys. info@gnoxys.net
|
9
|
+
License: GPL v3.
|
10
|
+
|
11
|
+
Read more info in <irgat_path>/README
|
12
|
+
|
13
|
+
=end
|
14
|
+
|
15
|
+
require 'yaml'
|
16
|
+
|
17
|
+
def stop_update(msj)
|
18
|
+
puts "#{ colorize("Irgat updater was stopped with this message:","red") }"
|
19
|
+
puts '"'+msj+'"'
|
20
|
+
puts ''
|
21
|
+
puts 'Bye!'
|
22
|
+
exit 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def colorize(msj, color)
|
26
|
+
case color
|
27
|
+
when "red"
|
28
|
+
color_num = 1
|
29
|
+
when "green"
|
30
|
+
color_num = 2
|
31
|
+
when "orange"
|
32
|
+
color_num = 220
|
33
|
+
end
|
34
|
+
"\x1b[#{ 38 };5;#{ color_num }m#{ msj }\x1b[0m"
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
puts ''
|
40
|
+
puts 'Welcome to IRGAT updater'
|
41
|
+
puts '------------------------'
|
42
|
+
|
43
|
+
if Process.euid != 0
|
44
|
+
stop_update('You must run this program as root.')
|
45
|
+
end
|
46
|
+
|
47
|
+
puts ''
|
48
|
+
puts 'Irgat Updater checks yours config files and compare it with the newer examples in the new install release.
|
49
|
+
Changes are show in screen, but you must edit it manually.'
|
50
|
+
puts 'You can repeat these command whatever times you need'
|
51
|
+
puts ''
|
52
|
+
puts '* Start with the update'
|
53
|
+
puts " Do it? [Y/n]"
|
54
|
+
|
55
|
+
answer = $stdin.gets
|
56
|
+
|
57
|
+
stop_update('Halted by user') if answer.strip == 'n'
|
58
|
+
|
59
|
+
Dir.chdir("/etc/irgat")
|
60
|
+
# Takes all the entries but not examples
|
61
|
+
(Dir["*"] - Dir["*example*"]).each { |config_file|
|
62
|
+
puts "\n* Check #{ config_file }? [Y/n]"
|
63
|
+
answer = $stdin.gets
|
64
|
+
|
65
|
+
if answer.strip != 'n'
|
66
|
+
# load yml
|
67
|
+
system_yml = YAML.load_file(config_file)
|
68
|
+
# load release yml
|
69
|
+
release_yml = YAML.load_file("#{ File.dirname(__FILE__) }/../setup/etc/#{ config_file.split('.').first }.yml.example")
|
70
|
+
release_yml.each_pair { |release_option, release_value|
|
71
|
+
# Exist in config file
|
72
|
+
if !system_yml.has_key?(release_option)
|
73
|
+
puts "[ #{ colorize("ERROR","red") } ] Not found => #{ release_option }"
|
74
|
+
else
|
75
|
+
# check value
|
76
|
+
if release_value != system_yml[release_option]
|
77
|
+
puts "[ #{ colorize("WARNING","orange") } ] Different Value => #{ release_option }"
|
78
|
+
else
|
79
|
+
puts "[ #{ colorize("OK","green") } ] Same Value => #{ release_option } "
|
80
|
+
end
|
81
|
+
end
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
|
86
|
+
}
|
data/config/hoe.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'irgat/version'
|
2
2
|
|
3
|
+
|
3
4
|
AUTHOR = 'Gnoxys' # can also be an array of Authors
|
4
5
|
EMAIL = "info@gnoxys.net"
|
5
6
|
DESCRIPTION = "Intuitive Ruby for Gnoxys Administration Tools"
|
@@ -9,7 +10,6 @@ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
|
9
10
|
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
10
11
|
EXTRA_DEPENDENCIES = [
|
11
12
|
['net-ssh', '>= 2.0.4'],
|
12
|
-
['rdoc', '>= 2.2.1'],
|
13
13
|
['termios', '>= 0.9.4'],
|
14
14
|
['tmail', '>= 1.2.3.1']
|
15
15
|
] # An array of rubygem dependencies [name, version]
|
@@ -40,7 +40,7 @@ end
|
|
40
40
|
REV = nil
|
41
41
|
# UNCOMMENT IF REQUIRED:
|
42
42
|
# REV = YAML.load(`svn info`)['Revision']
|
43
|
-
VERS = Irgat::
|
43
|
+
VERS = "#{::Irgat::Version}" + (REV ? ".#{REV}" : "")
|
44
44
|
RDOC_OPTS = ['--quiet', '--title', 'irgat documentation',
|
45
45
|
"--opname", "index.html",
|
46
46
|
"--line-numbers",
|
data/lib/irgat.rb
CHANGED
@@ -1,12 +1,33 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless
|
2
2
|
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
4
|
+
# IRGAT constants
|
5
|
+
IRGAT_ROOT = File.dirname(__FILE__) + '/..' unless defined?(IRGAT_ROOT)
|
6
|
+
# Default paths, if you want to change, change hear
|
7
|
+
IRGAT_CONFIG = '/etc/irgat' unless defined?(IRGAT_CONFIG)
|
8
|
+
IRGAT_LANG = IRGAT_ROOT + '/lang' unless defined?(IRGAT_LANG)
|
9
|
+
IRGAT_LIB = IRGAT_ROOT + '/lib' unless defined?(IRGAT_LIB)
|
10
|
+
|
11
|
+
begin
|
12
|
+
# requiere other modules, if not loaded yet
|
13
|
+
require 'yaml'
|
14
|
+
require 'erb'
|
15
|
+
# RDoc, built inside help
|
16
|
+
require 'rdoc/usage'
|
17
|
+
require 'rdoc/code_objects'
|
18
|
+
require 'rdoc/markup/simple_markup'
|
19
|
+
require 'rdoc/markup/simple_markup/to_flow'
|
20
|
+
require 'rdoc/ri/ri_formatter'
|
21
|
+
require 'rdoc/ri/ri_options'
|
22
|
+
require 'net/smtp'
|
23
|
+
require 'tmail'
|
24
|
+
# irgat Base
|
25
|
+
require 'irgat'
|
26
|
+
rescue LoadError => msj
|
27
|
+
puts "Irgat needed the follow gem:"+(msj.to_s.split('--'))[1]+", but not found."
|
28
|
+
puts "[ ERROR ] in file "+msj.backtrace.to_s
|
29
|
+
end
|
30
|
+
|
10
31
|
|
11
32
|
# start with Irgat module. Build namespace IRGAT
|
12
33
|
module Irgat
|
@@ -17,11 +38,16 @@ module Irgat
|
|
17
38
|
irgat = Irgat.new
|
18
39
|
irgat.process(args)
|
19
40
|
end
|
41
|
+
|
42
|
+
def help(args = {})
|
43
|
+
irgat = Irgat.new
|
44
|
+
irgat.help(args)
|
45
|
+
end
|
20
46
|
end
|
21
47
|
|
22
48
|
class Irgat
|
23
49
|
#accesor to configs
|
24
|
-
|
50
|
+
attr :config
|
25
51
|
attr_reader :config_module
|
26
52
|
#accesor to init time
|
27
53
|
attr_reader :init_time
|
@@ -29,56 +55,92 @@ module Irgat
|
|
29
55
|
attr :programs
|
30
56
|
#accesor to folders
|
31
57
|
attr :folders
|
58
|
+
#accesor log
|
59
|
+
attr :log_process
|
60
|
+
#accesor to command launched
|
61
|
+
attr :commands_launched
|
62
|
+
#accesor to action
|
63
|
+
attr :action
|
64
|
+
|
65
|
+
|
66
|
+
# Class top variable debug level :: can override config debug level
|
67
|
+
@@debug_level = nil
|
68
|
+
|
69
|
+
# version, FIXME ?
|
70
|
+
require 'irgat/version'
|
32
71
|
|
33
72
|
# add utils
|
34
73
|
require 'irgat/utils'
|
74
|
+
include ::Irgat::Help
|
35
75
|
include ::Irgat::Log
|
36
76
|
include ::Irgat::Mail
|
37
77
|
include ::Irgat::Execs
|
38
78
|
include ::Irgat::Dependencies
|
39
79
|
|
40
80
|
# simple initialize of a Irgat object... loading general config
|
41
|
-
def initialize(
|
81
|
+
def initialize(values = {})
|
42
82
|
@init_time = Time.now
|
43
83
|
@config = self.load_config
|
84
|
+
# modify debug by cmd line class
|
85
|
+
if @@debug_level.to_i >= 1
|
86
|
+
@config[:debug_level] = @@debug_level.to_i
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def help(args)
|
91
|
+
@log_to_stdout = true
|
92
|
+
# help
|
93
|
+
args.shift
|
94
|
+
pattern = args.to_s
|
95
|
+
show_help(pattern, exit_irgat = true)
|
44
96
|
end
|
45
97
|
|
46
98
|
def process(args = [])
|
47
99
|
irgat_module = args.shift
|
48
100
|
# get subsytem if active FIXME
|
49
101
|
if !self.config[:enable_subsystem].include?(irgat_module)
|
50
|
-
exit_with_error('Module not enable in irgat config'
|
102
|
+
exit_with_error('Module not enable in irgat config',
|
103
|
+
{ :exit_level => 2 })
|
51
104
|
end
|
52
105
|
|
53
106
|
# action ?
|
54
107
|
( args.first ? action = args.shift : action = "default" )
|
55
108
|
|
56
|
-
#
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
109
|
+
# irgat options
|
110
|
+
module_args = Array.new
|
111
|
+
while arg = args.shift
|
112
|
+
case arg
|
113
|
+
when "-w","--without_output"
|
114
|
+
# modify stdout
|
115
|
+
$stdout = File.new("/dev/null","w")
|
116
|
+
when "-d","--debug_level"
|
117
|
+
# take new debug level
|
118
|
+
@@debug_level = args.shift
|
119
|
+
else
|
120
|
+
module_args << arg
|
121
|
+
end
|
65
122
|
end
|
66
123
|
|
67
124
|
# init the module
|
68
125
|
begin
|
69
126
|
require 'modules/' + irgat_module
|
70
|
-
irgat_process = Object.module_eval("#{ irgat_module.capitalize }").new
|
127
|
+
irgat_process = Object.module_eval("#{ irgat_module.capitalize }").new({:action => action })
|
71
128
|
rescue LoadError => msj
|
72
|
-
exit_with_error("Unable to start the #{ irgat_module } module. Error was: #{ msj.backtrace.to_s } ")
|
129
|
+
exit_with_error("Unable to start the #{ irgat_module } module. Error was: #{ msj.backtrace.to_s } ", { :exit_level => 2 })
|
73
130
|
end
|
74
131
|
|
75
132
|
# scape possible private methods throught a bug in send method
|
76
133
|
# http://joshstaiger.org/archives/2006/12/the_ruby_send_h.html
|
77
134
|
if irgat_process.public_methods.include?(action)
|
78
|
-
irgat_process.send(action,
|
135
|
+
module_return = irgat_process.send(action, module_args)
|
79
136
|
else
|
80
|
-
exit_with_error("Unable to exec action. Not avaible public method '#{ action }' in '#{ irgat_module }' Module.
|
137
|
+
exit_with_error("Unable to exec action. Not avaible public method '#{ action }' in '#{ irgat_module }' Module.", { :exit_level => 2 })
|
81
138
|
end
|
139
|
+
|
140
|
+
# report
|
141
|
+
output_log(irgat_process,
|
142
|
+
{ :main_msj => (module_return || "[IRGAT] [#{ irgat_module.upcase }] [OK] #{ action } process in #{ @config[:server_name] }")})
|
143
|
+
exit 0
|
82
144
|
end
|
83
145
|
|
84
146
|
# method to load the config options for a module and return a hash symbol
|
@@ -89,6 +151,7 @@ module Irgat
|
|
89
151
|
config_yml.each{|k, v| config_to_symbols[k.to_sym] = v}
|
90
152
|
config_to_symbols
|
91
153
|
end
|
154
|
+
|
92
155
|
end
|
93
156
|
end
|
94
157
|
|