Sysprepping с packer.io возвращает выход 1, упаковщик не создает AMI

Я пытаюсь создать Windows AMI с packer.io.

В файле powershell я выполнил следующую команду в качестве последней команды шага инициализации:

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

В выводе упаковщика я вижу следующий текст:

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]

Так...

Он успешно работает, а затем запускает sysprep, но sysprep заставляет упаковщика увидеть, что он не запущен успешно. Я пытался запустить упаковщик с -forceНо это, похоже, не позволяет мне успешно создавать изображения.

Я немного растерялся - я не уверен, проще ли мне попытаться заставить упаковщика увидеть, что изображение строится, или попытаться добавить еще один шаг в конце моего Скрипт powershell для упаковщика, чтобы заставить этот результат иметь хороший код ошибки и двигаться вперед.

2 ответа

Нашел этот вопрос, когда искал ответ на мой собственный вопрос "sysprepping перед выключением Packer экземпляра сборки", и это дало мне только правильную подсказку для решения проблемы.

Оказывается, для Packer PowerShell есть необязательный параметр, который называется valid_exit_codes, Так как вы видите код выхода 1, установите valid_exit_codes в "0,1". В вашем пакере windows.json:

"valid_exit_codes": "0,1"

Я не знаю, как это ново; Я использую Packer 0.12.2.


Мои результаты

Интересно, мой ec2config.exe -sysprep бег получил выход 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

Еще один возможный вариант

Еще одна вещь, которую вы можете попробовать (я еще не сделал из-за нехватки времени):

Удалить /shutdown флаг из аргументов sysprep. Вы можете найти это в C:\Program Files\Amazon\Ec2ConfigService\Settings\BundleConfig.xml, Просто используйте скрипт PowerShell, чтобы найти и заменить.

Надеюсь это поможет!

Если завершение работы инициируется на целевом компьютере, мы видели экземпляры в последнем двоичном файле Packer (0.10.1), где он завершался с аналогичной ошибкой.

Вы должны быть в состоянии только нам арги /generalize /oobe /quiet и затем Packer обработает выключение, прежде чем он сгенерирует AMI.

Другие вопросы по тегам