Cfruby - 高级的系统管理
根据 Cfruby 站点的定义,“Cfruby 允许使用 Ruby 进行系统管理。它既是一个用于系统管理的 Ruby 函数库,又是一个类 Cfengine 的克隆品(实际上是用于系统管理的一种特定领域语言,即 DSL)”。
Cfruby 基本上是一个由两部分组成的包:
Cfrubylib – 一个纯 Ruby 库,其中包含用于系统管理的类和方法。这包括文件复制、查找、校验和检查、包管理、用户管理等。
Cfenjin – 一种简单的脚本编程语言,可帮助为系统管理任务编写脚本(不必知道 Ruby)。
Cfruby 可以作为一个 Ruby gem 或 tar 压缩文件下载。gem 是最简单、最容易的方式。获取 gem,并使用 “gem install” 命令安装它。
安装 Cfruby:
将下载的 Cfruby gem 文件复制到系统中。(在撰写本文之际,它的文件名是 “cfruby-1.01.gem”)。
运行 gem 安装 cfruby-1.01.gem。
Cfruby 现在应该被安装到系统上。
使用 Cfruby
现在,我将展示 Cfruby 的功能,以及它如何大大简化系统管理。
有两种基本的方式可访问 Cfruby 库提供的功能:
直接使用 libcfgruby 中的 Ruby 类。
使用 cfrubyscript 包装器,它为 libcfruby 提供了一个更简洁的接口。
直接使用 libcfruby 中的 Ruby 类
Libcfruby 是 Cfruby 的核心,它包含一组模块,这些模块提供了各种用于简化系统维护和设置的功能。为了使用 libcfruby,需要在安装 Cfruby gem 之后,将 “require_gem 'cfruby'” 添加到脚本的顶端。这样便可以直接访问 libcfruby 中的所有核心模块,在脚本中可以根据需要按任意方式使用它们。这种方法惟一的缺点是 libcfruby 比较大,它将所有的类和方法都放入到它们各自的名称空间中。所以,为了访问任何一个类,都需要以名称空间加以限定。例如,libcfruby 提供了一个用于获得系统类型的方法。要获取操作系统的类型,需要做以下事情:
清单 5. 使用 libcfruby 获取操作系统类型
require 'rubygems'
require_gem 'cfruby'
os = Cfruby::OS::OSFactory.new.get_os()
puts(os.name)
这只是获得操作系统的名称。随着您用 libcfruby 做更多的事情,您的脚本中将充斥着更多指定名称空间的语句。正是由于这一点,另一种使用 Cfruby 的方法就显得很方便。
使用 cfrubyscript 包装器,这个包装器为 libcfruby 提供了一个更简洁的接口
为了使用 cfrubyscript 包装器,需要添加:
清单 6. 使用 cfrubyscript
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
这样会将 cfrubyscript 包括到脚本中,然后就可以通过一个更简单的接口来访问 libcfruby 的功能。
cfrubyscript 做到了以下几点:
它将一组变量导出到全局名称空间,例如 $os、$pkg、$user、$proc 和 $sched。
它将大多数主要模块放到主名称空间中,所以可以调用 FileEdit.set 而不是 Cfruby::FileEdit.set。
它为 String 和 Array 添加了很多助手方法,这些方法可以做一些 Cfruby 事情(安装程序、编辑文件等)。
它还提供了一个很好的日志记录器。
所以,不再需要在脚本中指定一大堆的名称空间。上面用于获取操作系统类型的例子现在变成这样:
清单 7. 使用 cfrubyscript 获取操作系统的类型
require 'rubygems'
require_gem 'cfruby'
require 'libcfruby/cfrubyscript'
puts($os.name)
这可以翻译成一个单独的调用,该调用使用全局变量 $os。Cfruby 的确强大,它为管理类 *nix 系统提供了很多功能。
现在来看看其中一些功能,以及使用它们的一些基本例子。