Назад | Перейти на главную страницу

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 для упаковщика, чтобы попытаться заставить этот результат иметь хороший код ошибки и двигаться дальше.

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

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

"valid_exit_codes": "0,1"

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


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

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