4

我在 Windows 上使用 Chef 资源执行。当我设置资源的用户属性时,我得到这个错误:

Mixlib::ShellOut::InvalidCommandOption
--------------------------------------
You must supply both a username and password when supplying a user in windows

这是有道理的,但没有密码属性。我尝试了各种编造的方法,但还没有弄清楚如何传递一个。对于这种情况,明文密码不是问题。也许传递密码实际上不是一项功能?看这里(https://github.com/opscode/mixlib-shellout/blob/master/lib/mixlib/shellout/windows.rb),似乎需要密码选项。

我尝试使用 Batch 资源。该命令运行良好,直到我设置了用户属性。我收到以下错误:

NoMethodError
-------------
undefined method `uid' for nil:NilClass

我不知道这些是否应该工作,我做错了什么,或者他们不工作,我需要一个可能的解决方法。任何帮助表示赞赏!谢谢!

4

1 回答 1

1

情况似乎确实如此。Windows+Chef 问题的最佳资源通常是 Chef 邮件列表,因为有几个主要使用 Windows 的人在那里活跃。作为一种解决方法,您可以轻松地对资源和提供者进行子类化以允许传入密码:

class Chef
  class Resource::WindowsExecute < Resource::Execute
    def initialize(name, run_context=nil)
      super
      @resource_name = :windows_execute
    end

    def password(arg=nil)
      set_or_return(:password, arg, :kind_of => String)
    end
  end

  class Provider::WindowsExecute < Provider::Execute
    def shell_out!(cmd, opts)
      opts[:password] = new_resource.password if new_resource.password
      super
    end
  end
end

上面的代码完全未经测试,但您可以尝试将其放入libraries/windows_execute.rb并使用windows_execute具有密码属性的资源。我建议阅读https://coderanger.net/chef-secrets/以获取有关如何存储和管理此密码的更多信息。

于 2014-09-29T06:24:05.293 回答