如何在自定义类型中测试ensure的值?

时间:2018-01-05 01:23:00

标签: puppet

我一直在为Puppet编写自定义类型,而且我遇到过这样一个案例:对于最新的'和'现在'我要求存在某些参数,但是对于“缺席”这些参数。我希望这些参数是可选的。

不幸的是,我还没有能够弄清楚如何测试'确保'在红宝石代码中。

Puppet::Type.type(:fubar) do
  ensurable do
    desc 'Has three states: absent, present, and latest.'
    newvalue(:absent) do
      # ...
    end

    newvalue(:latest) do
      # ...
    end

    newvalue(:present) do
      # ...
    end

    def insync?(is)
      # ...
    end

    defaultto :latest
  end

  # ...

  validate do
    # This if condition doesn't work.  The error is still raised.
    if :ensure != :absent
      unless value(:myprop)
        raise ArgumentError, "Property 'myprop' is required."
      end
    end
  end
end

所以,我的问题很简单......我如何测试'确保'的价值?那么当它不存在时,不进行验证?

1 个答案:

答案 0 :(得分:0)

感谢Matt Schuchard和John Bollinger的帮助。

问题在于:

if :ensure != :absent

确实在比较两个符号,我需要将属性的值与符号进行比较:

if self[:ensure] != :absent

我对Puppet和Ruby都是新手,我没有意识到差异。约翰明确表示,马特提供了一个很好的例子。

再次感谢Matt和John。