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.