我非常简单的自定义 Puppet 类型和提供程序不起作用
My very simple custom Puppet type and provider does not work
我正在阅读有关如何在 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
我猜想获取参数值的方式,puts resource[:name]
不正确。那么我如何获取文件名 file.txt
声明为自定义类型 filecreate
的名称变量(见下文)?
另外,似乎没有调用方法exists
。为什么?
我的 init.pp 包含这个简单的代码:
class myclass {
filecreate{'file.txt':
ensure => present,
path => '/home/myuser/',
}
}
您的 puts
调用不起作用,因为您尝试访问 class 级别的实例属性 (resource
)。在此上下文中访问值没有语义意义。删除那些调用。
一般来说,收集这种信息最好用Puppet.debug
而不是puts
。
要找出此类错误的来源,请使用 --trace
选项调用 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
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
我猜想获取参数值的方式,puts resource[:name]
不正确。那么我如何获取文件名 file.txt
声明为自定义类型 filecreate
的名称变量(见下文)?
另外,似乎没有调用方法exists
。为什么?
我的 init.pp 包含这个简单的代码:
class myclass {
filecreate{'file.txt':
ensure => present,
path => '/home/myuser/',
}
}
您的 puts
调用不起作用,因为您尝试访问 class 级别的实例属性 (resource
)。在此上下文中访问值没有语义意义。删除那些调用。
一般来说,收集这种信息最好用Puppet.debug
而不是puts
。
要找出此类错误的来源,请使用 --trace
选项调用 puppet
。