上午看了一下《Puppet实战》,里面讲到了创建自定义Fact的三种方法。其中第一种搜索Ruby的lib库路径找到其中的fact目录下的.rb文件。书中写到默认路径是
/usr/lib/ruby/site_ruby/1.8/factor/
然而我却并没找到,初步估计应该是fact版本不一致导致的问题。所以我就去看了一下Fact文档。
Facter searches all directories in the Ruby $LOAD_PATH
variable for subdirectories named ‘facter’, and loads all Ruby files in those directories. If you had some directory in your $LOAD_PATH
like ~/lib/ruby
, set up like this:
#~/lib/ruby
└── facter
├── rackspace.rb
├── system_load.rb
└── users.rb
Facter tries to load ‘facter/system_load.rb’, ‘facter/users.rb’, and ‘facter/rackspace.rb’.
关键就是这个$LOAD_PATH是Ruby引用外部文件的路径。
没学过Ruby真的浪费了很多时间,最后还是通过显示路径
ruby -e 'puts $LOAD_PATH'
找到了以下结果
/usr/local/share/ruby/site_ruby
/usr/local/lib64/ruby/site_ruby
/usr/share/ruby/vendor_ruby
/usr/lib64/ruby/vendor_ruby
/usr/share/rubygems
/usr/share/ruby
/usr/lib64/ruby/
最后在
/usr/share/ruby/vendor_ruby
找到了fact目录