Como forçar o DSC a executar todas as configurações (Pacotes) mesmo quando for necessário reiniciar / reinicializar

6

De MSDN

RebootNodeIfNeeded: Certain configuration changes on a target node might require it to be restarted for the changes to be applied. With the value “true,” this property will restart the node immediately and without warning. If “false,” the configuration will be completed, but the node must be restarted manually for the changes to take effect.

Então, meu entendimento é que o DSC deve executar todas as configurações mesmo se uma reinicialização for necessária

Mas, no meu caso, isso não é verdade, depois de instalar um Pacote algumas vezes o DSC é marcado para ser reinicializado e o DSC não executa o restante das configurações

Eu tenho que executar manualmente o comando novamente para executar o resto das configurações

Start-DscConfiguration -Wait -Force -Path .\SomePath

Eu gostaria de forçar o DSC a executar todas as configurações e me informar se eu preciso reiniciar o servidor

Exemplos de como estou configurando os pacotes

    LocalConfigurationManager
    {
        RebootNodeIfNeeded = $false
    }

   Package MVC3
    {
        Name = "Microsoft ASP.NET MVC 3"
        Ensure = "Present"
        Path = "$Env:SystemDrive\AspNetMVC3ToolsUpdateSetup.exe"
        ProductId = "DCDEC776-BADD-48B9-8F9A-DFF513C3D7FA"
        Arguments = "/q"
        DependsOn = "[WindowsFeature]IIS"
        Credential = $Credential
    }

   Package MVC4
    {
        Name = "Microsoft ASP.NET MVC 4 Runtime"
        Ensure = "Present"
        Path = "$Env:SystemDrive\AspNetMVC4Setup.exe"
        ProductId = "942CC691-5B98-42A3-8BC5-A246BA69D983"
        Arguments = "/q"
        DependsOn = "[Package]MVC3"
        Credential = $Credential
    }
    
por Jupaol 17.03.2014 / 22:57

2 respostas

1

Eu criei esta solução

Eu gostaria de encontrar uma maneira melhor de fazer isso. Mas de qualquer maneira isso funciona para mim

Eu ainda acredito que o processo DSC deve me notificar de alguma forma, não apenas via Write-Verbose, porque no meu caso, este processo é iniciado como parte do nosso Processo de Integração Contínua

[int]$maximumAttempts = 5
[int]$attempt = 0
[ValidateNotNull()][guid]$dscResTmp = [guid]::NewGuid()
[ValidateNotNullOrEmpty()][string]$dscResPathTmp = Join-Path $baseFolderPathTmp "$dscResTmp.log"

do
{
    [bool]$stopLoop = $false
    [int]$attempt = ++$attempt

    Start-DscConfiguration -Wait -Force -Path $folderPathTmp 4> $dscResPathTmp

    [string[]]$rebootServerCoincidences = Select-String -Pattern "reboot" -Path $dscResPathTmp

    if ($rebootServerCoincidences.Length -le 0)
    {
        [bool]$stopLoop = $true
    }
    else
    {
        Write-Warning ($rebootServerCoincidences -join [Environment]::NewLine)
    }
}
while($stopLoop -eq $false -and $attempt -le $maximumAttempts)

if ($stopLoop -eq $false)
{
    Write-Warning "Max attempts reached"
}
    
por 17.04.2014 / 05:45
0

Cada recurso pode solicitar que o LCM reinicialize o servidor. Se um recurso solicitar uma reinicialização, ele agendará uma reinicialização e agendará o LCM para executar uma verificação de consistência após a reinicialização do servidor (para continuar a configuração).

Se você quiser que ele seja notificado (por meio do log de eventos ou do fluxo detalhado de Start-DscConfiguration) de que uma reinicialização é necessária, é necessário definir RebootIfNeeded como $ false. Então você é responsável por reinicializações. Alguns instaladores não serão executados se uma reinicialização for necessária para a máquina, portanto, isso pode ser um bloqueador aguardando a reinicialização manual do sistema.

    
por 15.04.2014 / 20:16