Попытка выполнить команду execute и batch от имени указанного пользователя в Windows с помощью Chef
Я использую ресурс Chef Execute в Windows. Когда я устанавливаю атрибут пользователя ресурса, я получаю эту ошибку:
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), кажется, что вариант пароля ожидается.
Я попытался использовать пакетный ресурс вместо этого. Команда работает нормально, пока я не установлю атрибут пользователя. Я получаю следующую ошибку:
NoMethodError
-------------
undefined method `uid' for nil:NilClass
Я не знаю, должны ли они работать, и я делаю что-то неправильно или они не работают, и мне нужен возможный обходной путь. Любая помощь приветствуется! Спасибо!
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/ для получения дополнительной информации о том, как хранить и управлять этим паролем.