Sysprepping com packer.io retorna a saída 1, o empacotador não cria a AMI

3

Estou tentando construir uma AMI do Windows com o packer.io.

No arquivo powershell, executei o seguinte comando como o último comando da etapa de provisionamento:

Write-Host "Running the EC2Config.exe file to sysprep the image for UserData to run on next boot."
cmd.exe /c "C:\Program Files\Amazon\Ec2ConfigService\ec2config.exe" -sysprep

Na saída do meu empacotador, vejo o seguinte texto:

amazon-ebs: Running the EC2Config.exe file to sysprep the image for UserData to run on next boot.
amazon-ebs: Running in foreground...
amazon-ebs: SysprepUtils: Setting bundle/Sysprep operations for Vista/2008.
amazon-ebs: SysprepUtils: Reading Bundle Properties from C:\Program Files\Amazon\Ec2ConfigService\Settings\BundleConfig.xml
amazon-ebs: SysprepUtils: Processing property: AutoSysprep
amazon-ebs: SysprepUtils: Processing property: SetRDPCertificate
amazon-ebs: SysprepUtils: Changing plugin Ec2ConfigureRDP state to Disabled
amazon-ebs: SysprepUtils: Changing plugin Ec2OutputRDPCert state to Enabled
amazon-ebs: SysprepUtils: Processing property: SetPasswordAfterSysprep
amazon-ebs: SysprepUtils: Changing plugin Ec2SetPassword state to Enabled
amazon-ebs: SysprepUtils: Changing plugin Ec2WindowsActivate state to Enabled
amazon-ebs: SysprepUtils: Changing plugin Ec2HandleUserData state to Enabled
amazon-ebs: SysprepUtils: Changing plugin Ec2DynamicBootVolumeSize state to Enabled
amazon-ebs: SysprepUtils: Sysprep command: 'C:\windows\system32\sysprep\sysprep.exe'
amazon-ebs: SysprepUtils: Sysprep args: '"/unattend:C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /shutdown /generalize'
==> amazon-ebs: Terminating the source AWS instance...
==> amazon-ebs: No AMIs to cleanup
==> amazon-ebs: Deleting temporary keypair...
Build 'amazon-ebs' errored: Script exited with non-zero exit status: 1. Allowed exit codes are: [0]

Então ...

Ele está sendo executado com êxito e, em seguida, está executando o sysprep, mas o sysprep está causando o empacotador para ver se ele não foi executado com êxito. Eu tentei executar o empacotador com -force , mas isso não me permite construir as imagens com sucesso.

Eu estou meio perdido aqui - eu não tenho certeza se a maneira mais fácil é tentar forçar o empacotador para ver que uma imagem está sendo construída, ou, para tentar adicionar outro passo no final do meu script powershell para packer tentar forçar esse resultado a ter um bom código de erro e seguir em frente.

    
por Ian Wilson 19.08.2016 / 06:37

2 respostas

2

Encontrei esta pergunta enquanto procurava por uma resposta à minha própria pergunta sobre 'sysprepping antes de o Packer encerrar a instância de compilação', e isso me deu a pista certa para resolver o problema.

Acontece que há um parâmetro opcional para o provisionador do Packger PowerShell chamado valid_exit_codes . Como você está vendo um código de saída de 1, defina valid_exit_codes como "0,1". No seu Packer windows.json:

"valid_exit_codes": "0,1"

Eu não sei como isso é novo; Estou usando o Packer 0.12.2.

Meus resultados

Curiosamente, minha ec2config.exe -sysprep run obteve uma saída de 0:

amazon-ebs: SysprepUtils: Sysprep args: '"/unattend:C:\Program Files\Amazon\Ec2ConfigService\sysprep2008.xml" /oobe /shutdown /generalize'

2017/01/23 20:18:33 packer: 2017/01/23 20:18:33 [INFO] command 'powershell -executionpolicy bypass -encodedCommand aQBmACAAKAB ..deleted.. GUAcwB0AC0A=' exited with code: 0

Outra opção possível

Uma outra coisa que você pode querer considerar tentar (ainda não devido a restrições de tempo):

Remova o sinalizador /shutdown dos argumentos do sysprep. Você pode encontrar isso no C:\Program Files\Amazon\Ec2ConfigService\Settings\BundleConfig.xml . Basta usar um script do PowerShell para encontrar e substituir.

Espero que isso ajude!

    
por 23.01.2017 / 21:56
0

Se um desligamento for iniciado na máquina de destino, vimos instâncias no binário mais recente do Packer (0.10.1), onde ele terminaria com um erro semelhante.

Você deve ser capaz de usar apenas os args /generalize /oobe /quiet e, em seguida, o Packer manipulará o desligamento antes de gerar a AMI.

    
por 19.08.2016 / 07:02