Я пытаюсь создать 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.