首页 > 解决方案 > 如何从基于 Ruby 的自定义类型的清单中实例化定义的类型?

问题描述

我正在用 Ruby 编写自定义 Puppet 资源类型,并希望使用来自另一个模块的类型。这种其他类型在 Puppet 代码中定义。

从文档中,我可以做到:

Puppet::Type.type(:file).new(file_opts)

这适用于 ruby​​ 中定义的类型,但不适用于.pp文件中定义的类型

define sysctl (){...}

这是基本的 Ruby 类型定义。我generate最终会在我的自定义资源旁边添加一个额外的资源。这就是type(:file)上面示例的工作方式:

Puppet::Type.newtype(:network_interface) do
  ensurable

  newparam(:name) do
    isnamevar
    desc 'The name of the physical network device'
  end

  def create
  end

  def generate
    [Puppet::Type.type('sysctl').new(
      name: "net.ipv4.conf.eth1.promote_secondaries",
      value: 1
    )]
  end
end

我收到此错误:

Network_interface[eth1]: Failed to generate additional resources using 'generate': undefined method `new' for nil:NilClass

我已经深入研究了 Puppet 代码以尝试了解 Puppet 如何从define表单创建类型,但没有运气。

标签: puppet

解决方案


推荐阅读