代码之家  ›  专栏  ›  技术社区  ›  Rox

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

  •  1
  • Rox  · 技术社区  · 10 年前

    我正在阅读如何在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/rby.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 似乎没有被调用。为什么?

    还有我的初始化。pp包含以下简单代码:

    class myclass {
      filecreate{'file.txt':
        ensure => present,
        path   => '/home/myuser/',
      }
    }
    
    1 回复  |  直到 10 年前
        1
  •  1
  •   Felix Frank    10 年前

    你的 puts 调用不起作用,因为您尝试访问实例属性( resource )在课堂上。在此上下文中访问值没有任何语义意义。删除这些呼叫。

    通常,最好使用 Puppet.debug 而不是 收集这类信息。

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

    推荐文章