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

Ruby 我的非常简单的自定义木偶类型和提供程序不起作用,ruby,puppet,Ruby,Puppet,我正在阅读关于如何在Puppet中创建自定义类型和提供程序的文章 但我得到了一个错误: Error: Could not autoload puppet/provider/createfile/ruby: undefined method `[]' for nil:NilClass 运行以下代码时: mymodule/lib/puppet/type/filecreate.rb require 'fileutils' Puppet::Type.newtype(:filecreate) do

我正在阅读关于如何在Puppet中创建自定义类型和提供程序的文章
但我得到了一个错误:

Error: Could not autoload puppet/provider/createfile/ruby: undefined method `[]' for nil:NilClass
运行以下代码时:

mymodule/lib/puppet/type/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/puppet/provider/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
我想获取参数值的方法,
put resource[:name]
不正确。那么,如何获取声明为自定义类型
filecreate
的namevar的文件名
file.txt
(见下文)

另外,方法
存在
似乎没有被调用。为什么?

my init.pp包含以下简单代码:

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

您的
put
调用不起作用,因为您尝试在类级别访问实例属性(
resource
)。在这种上下文中访问值没有语义意义。删除这些呼叫

通常,最好使用
Puppet.debug
而不是
put
来收集此类信息


要找出这些错误的来源,请使用
--trace
选项调用
puppet

谢谢您的输入!我删除了
puts
,但我的木偶安装似乎已损坏,因此我重新安装了整个程序,现在可以正常工作了。:)