我非常简单的自定义Puppet类型和提供程序不起作用

时间:2015-08-02 15:48:30

标签: ruby puppet

我正在阅读如何在Puppet中创建自定义类型和提供程序。
但是我收到了错误:

Error: Could not autoload puppet/provider/createfile/ruby: undefined method `[]' for nil:NilClass

运行以下代码时:

MyModule的/ LIB /木偶/类型/ filecreate.rb

require 'fileutils'

Puppet::Type.newtype(:filecreate) do
  ensurable do
    defaultvalues
    defaultto :present
  end

  @doc = "Create a file."

  newproperty(:name, :namevar => true) do
    desc "The name of the file"
  end

  newproperty(:path) do
    desc "The path of the file"
  end
end

MyModule的/ LIB /木偶/提供者/ filecreate / ruby​​.rb

require 'fileutils'

Puppet::Type.type(:filecreate).provide(:ruby) do
  desc "create file.."

  puts resource[:name]  # this line does not seem to work, why?
  puts resource[:path]  # this line does not seem to work, why?

  def create
    puts "create file..."
    puts resource[:name]
  end

 def destroy
    puts ("destroy file...")
    FileUtils.rm resource[:path]+resource[:name]
  end

  # Exit method never seems to be called
  def exists?
    puts "is method beeing called???"
    File.exists?(resource[:path])
  end
end

我想获取参数值的方式puts resource[:name]不正确。那么如何获取我的自定义类型file.txt声明为namevar的文件名filecreate(见下文)?

此外,似乎没有调用方法exists。为什么呢?

我的init.pp包含这个简单的代码:

class myclass {
  filecreate{'file.txt':
    ensure => present,
    path   => '/home/myuser/',
  }
}

1 个答案:

答案 0 :(得分:1)

您的puts来电不起作用,因为您尝试在类级别上访问实例属性(resource)。在此上下文中访问值没有任何语义意义。删除这些电话。

通常,最好使用Puppet.debug代替puts来收集此类信息。

要找出此类错误的来源,请使用puppet选项致电--trace