irgat 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
|