Eu fiz essa pergunta originalmente no StackOverflow, mas não recebi nenhuma resposta em funcionamento: link .
Estou tentando usar o Chef (chef-solo) para gerenciar minha instalação do Windows Server 2008 R2. Chef fornece windows_feature
para adicionar funções / recursos a um servidor Windows. Por padrão, windows_feature
usa o DISM para instalar funções (se disponível). No entanto, que eu saiba, nem todas as funções (por exemplo, RDS-RD-Server) podem ser adicionadas via DISM.
Eu poderia usar Chef::Provider::WindowsFeature::ServerManagerCmd
(identificado no livro de receitas do Windows: link ), mas não parece que é uma classe real (navegando o código fonte lá). Além disso, servermanagercmd é obsoleto (embora funcione).
Eu não me importaria em usar um bloco powershell para adicionar o papel, mas estou tendo dificuldade em garantir a idempotência. Parece que o shell de comando not_if
é um shell mingwin estranho em vez de CMD.
Aqui está uma amostra do que eu tentei usar o powershell (não funciona):
powershell "install_rds_server" do
code %Q{
Import-Module Servermanager
Add-WindowsFeature RDS-RD-Server
}.strip
not_if %Q{
powershell "Import-Module Servermanager; $check = get-windowsfeature -name RDS-RD-Server; if ($check.Installed -ne \"True\") { exit 1 }"
}.strip
end
Eu também tentei o seguinte:
windows_feature 'RDS-RD-Server' do
provider Chef::Provider::WindowsFeature::ServerManagerCmd
end
que retorna o seguinte erro:
FATAL: NameError: uninitialized constant Chef::Provider::WindowsFeature::ServerManagerCmd
Qual seria a maneira recomendada pelo Chef de adicionar esse papel?