automate-it 0.9.0
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.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.hgignore +10 -0
- data/.loadpath +5 -0
- data/.project +17 -0
- data/CHANGES.txt +314 -0
- data/Hoe.rake +40 -0
- data/Manifest.txt +164 -0
- data/README.txt +40 -0
- data/Rakefile +256 -0
- data/TESTING.txt +57 -0
- data/TODO.txt +50 -0
- data/TUTORIAL.txt +391 -0
- data/automate-it.gemspec +25 -0
- data/bin/ai +3 -0
- data/bin/aifield +75 -0
- data/bin/aissh +93 -0
- data/bin/aitag +134 -0
- data/bin/automateit +133 -0
- data/docs/friendly_errors.txt +50 -0
- data/docs/previews.txt +86 -0
- data/examples/basic/Rakefile +26 -0
- data/examples/basic/config/automateit_env.rb +16 -0
- data/examples/basic/config/fields.yml +3 -0
- data/examples/basic/config/tags.yml +7 -0
- data/examples/basic/dist/README.txt +9 -0
- data/examples/basic/dist/myapp_server.erb +30 -0
- data/examples/basic/install.log +15 -0
- data/examples/basic/lib/README.txt +10 -0
- data/examples/basic/recipes/README.txt +4 -0
- data/examples/basic/recipes/install.rb +61 -0
- data/examples/basic/recipes/uninstall.rb +6 -0
- data/gpl.txt +674 -0
- data/helpers/cpan_wrapper.pl +220 -0
- data/helpers/which.cmd +7 -0
- data/lib/automateit.rb +55 -0
- data/lib/automateit/account_manager.rb +114 -0
- data/lib/automateit/account_manager/base.rb +138 -0
- data/lib/automateit/account_manager/etc.rb +128 -0
- data/lib/automateit/account_manager/nscd.rb +33 -0
- data/lib/automateit/account_manager/passwd_expect.rb +40 -0
- data/lib/automateit/account_manager/passwd_pty.rb +69 -0
- data/lib/automateit/account_manager/posix.rb +138 -0
- data/lib/automateit/address_manager.rb +88 -0
- data/lib/automateit/address_manager/base.rb +171 -0
- data/lib/automateit/address_manager/bsd.rb +28 -0
- data/lib/automateit/address_manager/freebsd.rb +59 -0
- data/lib/automateit/address_manager/linux.rb +42 -0
- data/lib/automateit/address_manager/openbsd.rb +66 -0
- data/lib/automateit/address_manager/portable.rb +37 -0
- data/lib/automateit/address_manager/sunos.rb +34 -0
- data/lib/automateit/cli.rb +85 -0
- data/lib/automateit/common.rb +65 -0
- data/lib/automateit/constants.rb +35 -0
- data/lib/automateit/download_manager.rb +48 -0
- data/lib/automateit/edit_manager.rb +321 -0
- data/lib/automateit/error.rb +10 -0
- data/lib/automateit/field_manager.rb +103 -0
- data/lib/automateit/interpreter.rb +631 -0
- data/lib/automateit/package_manager.rb +257 -0
- data/lib/automateit/package_manager/apt.rb +27 -0
- data/lib/automateit/package_manager/cpan.rb +101 -0
- data/lib/automateit/package_manager/dpkg.rb +54 -0
- data/lib/automateit/package_manager/egg.rb +64 -0
- data/lib/automateit/package_manager/gem.rb +201 -0
- data/lib/automateit/package_manager/pear.rb +95 -0
- data/lib/automateit/package_manager/pecl.rb +80 -0
- data/lib/automateit/package_manager/portage.rb +69 -0
- data/lib/automateit/package_manager/yum.rb +65 -0
- data/lib/automateit/platform_manager.rb +49 -0
- data/lib/automateit/platform_manager/darwin.rb +30 -0
- data/lib/automateit/platform_manager/debian.rb +26 -0
- data/lib/automateit/platform_manager/freebsd.rb +29 -0
- data/lib/automateit/platform_manager/gentoo.rb +26 -0
- data/lib/automateit/platform_manager/lsb.rb +44 -0
- data/lib/automateit/platform_manager/openbsd.rb +28 -0
- data/lib/automateit/platform_manager/struct.rb +80 -0
- data/lib/automateit/platform_manager/sunos.rb +39 -0
- data/lib/automateit/platform_manager/uname.rb +29 -0
- data/lib/automateit/platform_manager/windows.rb +40 -0
- data/lib/automateit/plugin.rb +7 -0
- data/lib/automateit/plugin/base.rb +32 -0
- data/lib/automateit/plugin/driver.rb +256 -0
- data/lib/automateit/plugin/manager.rb +224 -0
- data/lib/automateit/project.rb +493 -0
- data/lib/automateit/root.rb +17 -0
- data/lib/automateit/service_manager.rb +93 -0
- data/lib/automateit/service_manager/chkconfig.rb +39 -0
- data/lib/automateit/service_manager/rc_update.rb +37 -0
- data/lib/automateit/service_manager/sysv.rb +139 -0
- data/lib/automateit/service_manager/update_rcd.rb +35 -0
- data/lib/automateit/shell_manager.rb +316 -0
- data/lib/automateit/shell_manager/base_link.rb +67 -0
- data/lib/automateit/shell_manager/link.rb +24 -0
- data/lib/automateit/shell_manager/portable.rb +523 -0
- data/lib/automateit/shell_manager/symlink.rb +32 -0
- data/lib/automateit/shell_manager/which_base.rb +30 -0
- data/lib/automateit/shell_manager/which_unix.rb +16 -0
- data/lib/automateit/shell_manager/which_windows.rb +20 -0
- data/lib/automateit/tag_manager.rb +127 -0
- data/lib/automateit/tag_manager/struct.rb +121 -0
- data/lib/automateit/tag_manager/tag_parser.rb +93 -0
- data/lib/automateit/tag_manager/yaml.rb +29 -0
- data/lib/automateit/template_manager.rb +56 -0
- data/lib/automateit/template_manager/base.rb +181 -0
- data/lib/automateit/template_manager/erb.rb +17 -0
- data/lib/ext/metaclass.rb +17 -0
- data/lib/ext/object.rb +18 -0
- data/lib/ext/shell_escape.rb +7 -0
- data/lib/hashcache.rb +22 -0
- data/lib/helpful_erb.rb +63 -0
- data/lib/inactive_support.rb +53 -0
- data/lib/inactive_support/basic_object.rb +6 -0
- data/lib/inactive_support/clean_logger.rb +127 -0
- data/lib/inactive_support/core_ext/array/extract_options.rb +19 -0
- data/lib/inactive_support/core_ext/blank.rb +50 -0
- data/lib/inactive_support/core_ext/class/attribute_accessors.rb +48 -0
- data/lib/inactive_support/core_ext/class/inheritable_attributes.rb +140 -0
- data/lib/inactive_support/core_ext/enumerable.rb +63 -0
- data/lib/inactive_support/core_ext/hash/keys.rb +54 -0
- data/lib/inactive_support/core_ext/module/aliasing.rb +70 -0
- data/lib/inactive_support/core_ext/numeric/time.rb +91 -0
- data/lib/inactive_support/core_ext/string/inflections.rb +153 -0
- data/lib/inactive_support/core_ext/symbol.rb +14 -0
- data/lib/inactive_support/core_ext/time/conversions.rb +96 -0
- data/lib/inactive_support/duration.rb +96 -0
- data/lib/inactive_support/inflections.rb +53 -0
- data/lib/inactive_support/inflector.rb +282 -0
- data/lib/nested_error.rb +33 -0
- data/lib/nitpick.rb +33 -0
- data/lib/queued_logger.rb +68 -0
- data/lib/tempster.rb +250 -0
- data/misc/index_gem_repository.rb +304 -0
- data/misc/setup_egg.rb +12 -0
- data/misc/setup_gem_dependencies.sh +6 -0
- data/misc/setup_rubygems.sh +21 -0
- metadata +279 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
# == PackageManager::YUM
|
2
|
+
#
|
3
|
+
# The YUM driver for the PackageManager provides a way to manage software
|
4
|
+
# packages on Red Hat-style systems using +yum+ and +rpm+.
|
5
|
+
class AutomateIt::PackageManager::YUM < AutomateIt::PackageManager::BaseDriver
|
6
|
+
depends_on :programs => %w(yum rpm)
|
7
|
+
|
8
|
+
def suitability(method, *args) # :nodoc:
|
9
|
+
return available? ? 1 : 0
|
10
|
+
end
|
11
|
+
|
12
|
+
# See AutomateIt::PackageManager#installed?
|
13
|
+
def installed?(*packages)
|
14
|
+
return _installed_helper?(*packages) do |list, opts|
|
15
|
+
### rpm -q --nosignature --nodigest --qf "%{NAME} # %{VERSION} # %{RELEASE}\n" httpd nomarch foo
|
16
|
+
cmd = 'rpm -q --nosignature --nodigest --qf "%{NAME} # %{VERSION} # %{RELEASE}\n"'
|
17
|
+
list.each{|package| cmd << " "+package}
|
18
|
+
cmd << " 2>&1" # missing packages are listed on STDERR
|
19
|
+
|
20
|
+
log.debug(PEXEC+cmd)
|
21
|
+
data = `#{cmd}`
|
22
|
+
matches = data.scan(/^(.+) # (.+) # .+$/)
|
23
|
+
available = matches.inject([]) do |sum, match|
|
24
|
+
package, status = match
|
25
|
+
sum << package
|
26
|
+
sum
|
27
|
+
end
|
28
|
+
available
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# See AutomateIt::PackageManager#not_installed?
|
33
|
+
def not_installed?(*packages)
|
34
|
+
_not_installed_helper?(*packages)
|
35
|
+
end
|
36
|
+
|
37
|
+
# See AutomateIt::PackageManager#install
|
38
|
+
def install(*packages)
|
39
|
+
return _install_helper(*packages) do |list, opts|
|
40
|
+
# yum options:
|
41
|
+
# -y : yes to queries
|
42
|
+
# -d 0 : no debugging info
|
43
|
+
# -e 0 : show only fatal errors
|
44
|
+
# -C : don't download headers
|
45
|
+
cmd = "yum -y -d 0 -e 0"
|
46
|
+
cmd << " -C" if opts[:cache] == true
|
47
|
+
cmd << " install "+list.join(" ")+" < /dev/null"
|
48
|
+
cmd << " > /dev/null" if opts[:quiet]
|
49
|
+
cmd << " 2>&1"
|
50
|
+
|
51
|
+
interpreter.sh(cmd)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
# See AutomateIt::PackageManager#uninstall
|
56
|
+
def uninstall(*packages)
|
57
|
+
return _uninstall_helper(*packages) do |list, opts|
|
58
|
+
cmd = "rpm --erase --quiet "+list.join(" ")+" < /dev/null"
|
59
|
+
cmd << " > /dev/null" if opts[:quiet]
|
60
|
+
cmd << " 2>&1"
|
61
|
+
|
62
|
+
interpreter.sh(cmd)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# == PlatformManager
|
2
|
+
#
|
3
|
+
# The PlatformManager provides a way to query platform identifiers, such as
|
4
|
+
# the operating system distribution's version.
|
5
|
+
class AutomateIt::PlatformManager < AutomateIt::Plugin::Manager
|
6
|
+
# Query the +search+ field. The +search+ can either be a key or a set of
|
7
|
+
# keys separated by "#" signs.
|
8
|
+
#
|
9
|
+
# Examples:
|
10
|
+
# query(:os) # => "linux"
|
11
|
+
# query("arch") # => "i686"
|
12
|
+
# query("os#arch") # => "linux_i686"
|
13
|
+
# query("os#arch#distro#release") # => "linux_i686_ubuntu_6.06"
|
14
|
+
#
|
15
|
+
# Fields that may be provided by drivers:
|
16
|
+
# * :arch -- Hardware architecture, e.g., "i686"
|
17
|
+
# * :os -- Operating system, e.g., "linux"
|
18
|
+
# * :distro -- Operating system distribution, e.g., "ubuntu"
|
19
|
+
# * :release -- Operating system distribution release, e.g., "6.06"
|
20
|
+
def query(search) dispatch(search) end
|
21
|
+
|
22
|
+
# Is this a single-vendor operating system? E.g., Windows is, while Linux
|
23
|
+
# isn't. This method helps the TagManager determine how to name tags. A
|
24
|
+
# single-vendor product uses the "os#release" format (e.g., "windows_xp"),
|
25
|
+
# while a multi-vendor product uses a "distro#release" format
|
26
|
+
# ("ubuntu_6.06").
|
27
|
+
def single_vendor?() dispatch() end
|
28
|
+
|
29
|
+
# Return an array of tags for this platform.
|
30
|
+
def tags() dispatch() end
|
31
|
+
end
|
32
|
+
|
33
|
+
# == PlatformManager::BaseDriver
|
34
|
+
#
|
35
|
+
# Base class for all PlatformManager drivers.
|
36
|
+
class AutomateIt::PlatformManager::BaseDriver < AutomateIt::Plugin::Driver
|
37
|
+
end
|
38
|
+
|
39
|
+
# Drivers
|
40
|
+
require 'automateit/platform_manager/struct'
|
41
|
+
require 'automateit/platform_manager/uname'
|
42
|
+
require 'automateit/platform_manager/lsb'
|
43
|
+
require 'automateit/platform_manager/debian'
|
44
|
+
require 'automateit/platform_manager/gentoo'
|
45
|
+
require 'automateit/platform_manager/darwin'
|
46
|
+
require 'automateit/platform_manager/windows'
|
47
|
+
require 'automateit/platform_manager/freebsd'
|
48
|
+
require 'automateit/platform_manager/sunos'
|
49
|
+
require 'automateit/platform_manager/openbsd'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# == PlatformManager::Darwin
|
2
|
+
#
|
3
|
+
# A PlatformManager driver for Apple's Darwin.
|
4
|
+
class AutomateIt::PlatformManager::Darwin < AutomateIt::PlatformManager::Struct
|
5
|
+
depends_on :files => ["/usr/sbin/scutil"], :programs => ["which", "uname"]
|
6
|
+
|
7
|
+
def suitability(method, *args) # :nodoc:
|
8
|
+
# Must be higher than PlatformManager::Uname
|
9
|
+
return available? ? 3 : 0
|
10
|
+
end
|
11
|
+
|
12
|
+
def _prepare
|
13
|
+
return if @struct[:release]
|
14
|
+
@struct[:os] = "darwin"
|
15
|
+
@struct[:arch] = `uname -p`.strip.downcase
|
16
|
+
@struct[:distro] = "apple"
|
17
|
+
@struct[:release] = `uname -r`.strip.downcase
|
18
|
+
@struct
|
19
|
+
end
|
20
|
+
private :_prepare
|
21
|
+
|
22
|
+
def query(search)
|
23
|
+
_prepare
|
24
|
+
super(search)
|
25
|
+
end
|
26
|
+
|
27
|
+
def single_vendor?
|
28
|
+
return true
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# == PlatformManager::Debian
|
2
|
+
#
|
3
|
+
# A PlatformManager driver for Debian Linux.
|
4
|
+
class AutomateIt::PlatformManager::Debian < AutomateIt::PlatformManager::Uname
|
5
|
+
VERSION_FILE = "/etc/debian_version"
|
6
|
+
|
7
|
+
depends_on :files => [VERSION_FILE]
|
8
|
+
|
9
|
+
def suitability(method, *args) # :nodoc:
|
10
|
+
# Must be higher than PlatformManager::Struct
|
11
|
+
return available? ? 3 : 0
|
12
|
+
end
|
13
|
+
|
14
|
+
def _prepare
|
15
|
+
return if @struct[:distro]
|
16
|
+
@struct[:distro] = "debian"
|
17
|
+
@struct[:release] = File.read(VERSION_FILE).strip
|
18
|
+
@struct
|
19
|
+
end
|
20
|
+
private :_prepare
|
21
|
+
|
22
|
+
def query(search)
|
23
|
+
_prepare
|
24
|
+
super(search)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# == PlatformManager::FreeBSD
|
2
|
+
#
|
3
|
+
# A PlatformManager driver for FreeBSD.
|
4
|
+
class AutomateIt::PlatformManager::FreeBSD < AutomateIt::PlatformManager::Uname
|
5
|
+
def self.token
|
6
|
+
:freebsd
|
7
|
+
end
|
8
|
+
|
9
|
+
depends_on :files => %w(/etc/portsnap.conf /etc/rc.conf)
|
10
|
+
|
11
|
+
def suitability(method, *args) # :nodoc:
|
12
|
+
# Must be higher than PlatformManager::Struct
|
13
|
+
return available? ? 3 : 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def _prepare
|
17
|
+
return if @struct[:distro]
|
18
|
+
@struct[:distro] = "freebsd"
|
19
|
+
@struct[:release] = `uname -r`.strip.match(/^([\d\.]+)-/)[1]
|
20
|
+
@struct
|
21
|
+
end
|
22
|
+
private :_prepare
|
23
|
+
|
24
|
+
def query(search)
|
25
|
+
_prepare
|
26
|
+
super(search)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# == PlatformManager::Gentoo
|
2
|
+
#
|
3
|
+
# A PlatformManager driver for Gentoo Linux.
|
4
|
+
class AutomateIt::PlatformManager::Gentoo < AutomateIt::PlatformManager::Uname
|
5
|
+
GENTOO_RELEASE = "/etc/gentoo-release"
|
6
|
+
|
7
|
+
depends_on :files => [GENTOO_RELEASE]
|
8
|
+
|
9
|
+
def suitability(method, *args) # :nodoc:
|
10
|
+
# Must be higher than PlatformManager::Struct
|
11
|
+
return available? ? 3 : 0
|
12
|
+
end
|
13
|
+
|
14
|
+
def _prepare
|
15
|
+
return if @struct[:distro]
|
16
|
+
@struct[:distro] = "gentoo"
|
17
|
+
@struct[:release] = File.read(GENTOO_RELEASE).strip.match(/\s([\d\.]+)$/)[1]
|
18
|
+
@struct
|
19
|
+
end
|
20
|
+
private :_prepare
|
21
|
+
|
22
|
+
def query(search)
|
23
|
+
_prepare
|
24
|
+
super(search)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# == PlatformManager::LSB
|
2
|
+
#
|
3
|
+
# A PlatformManager driver for LSB (Linux Standards Base) systems. The
|
4
|
+
# platform doesn't actually need to be Linux, but simply has to provide an
|
5
|
+
# <tt>lsb_release</tt> command.
|
6
|
+
class AutomateIt::PlatformManager::LSB < AutomateIt::PlatformManager::Uname
|
7
|
+
LSB_RELEASE = "lsb_release"
|
8
|
+
|
9
|
+
depends_on :programs => [LSB_RELEASE]
|
10
|
+
|
11
|
+
def suitability(method, *args) # :nodoc:
|
12
|
+
# Level must be greater than Uname and Debian
|
13
|
+
return available? ? 4 : 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def setup(opts={}) # :nodoc:
|
17
|
+
super(opts) # Rely on Uname to set :os and :arch
|
18
|
+
@struct[:distro] ||= @@struct_cache[:distro]
|
19
|
+
@struct[:release] ||= @@struct_cache[:release]
|
20
|
+
if available?
|
21
|
+
unless @struct[:distro] and @struct[:release]
|
22
|
+
hash = _parse_lsb_release_data(_read_lsb_release_data)
|
23
|
+
@struct[:distro] ||= @@struct_cache[:distro] ||= hash["Distributor ID"].to_s.downcase
|
24
|
+
@struct[:release] ||= @@struct_cache[:release] ||= hash["Release"].to_s.downcase
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
# Returns the LSB data for this platform's Distributor and ID
|
32
|
+
def _read_lsb_release_data
|
33
|
+
# TODO Consider parsing files directly to avoid the overhead of this command.
|
34
|
+
#
|
35
|
+
# Do NOT use 'lsb_release -a' because this takes a few seconds. Telling
|
36
|
+
# 'lsb_release' which fields we want makes it much faster.
|
37
|
+
`"#{LSB_RELEASE}" --release --id`
|
38
|
+
end
|
39
|
+
|
40
|
+
# Parses LSB data into a hash.
|
41
|
+
def _parse_lsb_release_data(data)
|
42
|
+
data.scan(/^([^:]+):\s+([^\n]+)/).inject({}){|s,v| s[v.first] = v.last; s}
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# == PlatformManager::OpenBSD
|
2
|
+
#
|
3
|
+
# A PlatformManager driver for OpenBSD.
|
4
|
+
class AutomateIt::PlatformManager::OpenBSD < AutomateIt::PlatformManager::Uname
|
5
|
+
def self.token
|
6
|
+
:openbsd
|
7
|
+
end
|
8
|
+
|
9
|
+
depends_on :files => %w(/obsd /bsd /bsd.rd), :directories => %w(/altroot /stand)
|
10
|
+
|
11
|
+
def suitability(method, *args) # :nodoc:
|
12
|
+
# Must be higher than PlatformManager::Struct
|
13
|
+
return available? ? 3 : 0
|
14
|
+
end
|
15
|
+
|
16
|
+
def _prepare
|
17
|
+
return if @struct[:distro]
|
18
|
+
@struct[:distro] = `uname -s`.strip.downcase
|
19
|
+
@struct[:release] = `uname -r`.strip.downcase
|
20
|
+
@struct
|
21
|
+
end
|
22
|
+
private :_prepare
|
23
|
+
|
24
|
+
def query(search)
|
25
|
+
_prepare
|
26
|
+
super(search)
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# == PlatformManager::Struct
|
2
|
+
#
|
3
|
+
# A simple PlatformManager driver that queries a hash for results. Although
|
4
|
+
# not useful on its own, it's inherited by other drivers that provide
|
5
|
+
# platform-specific methods to query the system.
|
6
|
+
class AutomateIt::PlatformManager::Struct < AutomateIt::PlatformManager::BaseDriver
|
7
|
+
depends_on :nothing
|
8
|
+
|
9
|
+
# Hash mapping of keys that have many common names, e.g., "release" and "version"
|
10
|
+
attr_accessor :key_aliases
|
11
|
+
|
12
|
+
def suitability(method, *args) # :nodoc:
|
13
|
+
return 1
|
14
|
+
end
|
15
|
+
|
16
|
+
# Options:
|
17
|
+
# * :struct -- The hash to use for queries.
|
18
|
+
def setup(opts={})
|
19
|
+
super(opts)
|
20
|
+
|
21
|
+
@@struct_cache ||= {}
|
22
|
+
|
23
|
+
if opts[:struct]
|
24
|
+
@struct = opts[:struct]
|
25
|
+
else
|
26
|
+
@struct ||= {}
|
27
|
+
end
|
28
|
+
|
29
|
+
# Generate bi-directional map
|
30
|
+
@key_aliases ||= @@key_aliases ||= {
|
31
|
+
:version => :release,
|
32
|
+
}.inject({}){|s,v| s[v[0]] = v[1]; s[v[1]] = v[0]; s}
|
33
|
+
end
|
34
|
+
|
35
|
+
# See PlatformManager#query
|
36
|
+
def query(search)
|
37
|
+
result = ""
|
38
|
+
for key in search.to_s.split(/#/)
|
39
|
+
result << "_" unless result.empty?
|
40
|
+
result << _query_key(key)
|
41
|
+
end
|
42
|
+
result
|
43
|
+
end
|
44
|
+
|
45
|
+
def _query_key(key)
|
46
|
+
key = key.to_sym
|
47
|
+
unless @struct.has_key?(key)
|
48
|
+
key_alias = key_aliases[key]
|
49
|
+
if @struct.has_key?(key_alias)
|
50
|
+
key = key_alias
|
51
|
+
else
|
52
|
+
raise IndexError.new("platform doesn't provide key: #{key}")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
return @struct[key]
|
56
|
+
end
|
57
|
+
private :_query_key
|
58
|
+
|
59
|
+
# See PlatformManager#single_vendor?
|
60
|
+
def single_vendor?
|
61
|
+
return false
|
62
|
+
end
|
63
|
+
|
64
|
+
# See PlatformManager#tags
|
65
|
+
def tags
|
66
|
+
results = []
|
67
|
+
for key in %w(os arch distro os#arch)
|
68
|
+
results << query(key) rescue IndexError
|
69
|
+
end
|
70
|
+
|
71
|
+
release_query = \
|
72
|
+
if single_vendor?
|
73
|
+
"os#release" # E.g. windows_xp
|
74
|
+
else
|
75
|
+
"distro#release" # E.g. ubuntu_6.06
|
76
|
+
end
|
77
|
+
results << query(release_query) rescue IndexError
|
78
|
+
return results
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# == PlatformManager::SunOS
|
2
|
+
#
|
3
|
+
# A PlatformManager driver for SunOS.
|
4
|
+
class AutomateIt::PlatformManager::SunOS < AutomateIt::PlatformManager::Uname
|
5
|
+
def self.token
|
6
|
+
:sunos
|
7
|
+
end
|
8
|
+
|
9
|
+
depends_on \
|
10
|
+
:programs => %w(uname),
|
11
|
+
:callbacks => [lambda {
|
12
|
+
begin
|
13
|
+
not `uname -s`.match(/SunOS/i).nil?
|
14
|
+
rescue
|
15
|
+
false
|
16
|
+
end
|
17
|
+
}]
|
18
|
+
|
19
|
+
def suitability(method, *args) # :nodoc:
|
20
|
+
# Must be higher than PlatformManager::Struct and Uname
|
21
|
+
return available? ? 3 : 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def _prepare
|
25
|
+
return if @struct[:release]
|
26
|
+
@struct[:distro] = "sun"
|
27
|
+
@struct[:release] = `uname -r`.strip.downcase
|
28
|
+
@struct
|
29
|
+
end
|
30
|
+
|
31
|
+
def query(search)
|
32
|
+
_prepare
|
33
|
+
super(search)
|
34
|
+
end
|
35
|
+
|
36
|
+
def single_vendor?
|
37
|
+
return true
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# == PlatformManager::Uname
|
2
|
+
#
|
3
|
+
# A PlatformManager driver that uses the Unix +uname+ command to provide
|
4
|
+
# basic information about the platform.
|
5
|
+
class AutomateIt::PlatformManager::Uname < AutomateIt::PlatformManager::Struct
|
6
|
+
depends_on :programs => %w(uname)
|
7
|
+
|
8
|
+
def suitability(method, *args) # :nodoc:
|
9
|
+
# Level must be greater than Struct's
|
10
|
+
return available? ? 2 : 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def setup(opts={}) # :nodoc:
|
14
|
+
super(opts)
|
15
|
+
if available?
|
16
|
+
@struct[:os] ||= @@struct_cache[:os] ||= `uname -s`.chomp.downcase
|
17
|
+
@struct[:arch] ||= @@struct_cache[:arch] ||= `uname -m`.chomp.downcase
|
18
|
+
=begin
|
19
|
+
# This method is 20% faster, but is it less portable because of the combined calls?
|
20
|
+
@struct[:os] and @struct[:arch] or begin
|
21
|
+
output = `uname -s -m`.chomp.downcase
|
22
|
+
os, arch = output.split(/\s+/)
|
23
|
+
@struct[:os] = @@struct_cache[:os] = os
|
24
|
+
@struct[:arch] = @@struct_cache[:arch] = arch
|
25
|
+
end
|
26
|
+
=end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|