как условно собрать aws ami с упаковщиком?

Я работаю над созданием нового ami с упаковщиком, ТОЛЬКО если результат (команда оболочки) соответствует значению в разделе «provisioner»

Я ищу решение, чтобы иметь условный оператор в разделе "provisioner"

"provisioners": [
  {
    "type": "shell",
    "inline": [
      res=f(20)
    ]

в этом примере я хочу определить условие, если res = 10, затем продолжить (чтобы упаковщик сгенерировал aws ami), иначе остановить выполнение (и напечатать сообщение)


person Maurice Amar    schedule 03.10.2019    source источник
comment
res=f(20) не выглядит допустимой командной строкой оболочки.   -  person muru    schedule 03.10.2019
comment
Это, вероятно, потребует обертки. Рассматривали ли вы создание AMI в конвейере?   -  person Matt Schuchard    schedule 03.10.2019
comment
@MattSchuchard, не могли бы вы прислать мне пример создания AMI в конвейере?   -  person Maurice Amar    schedule 03.10.2019


Ответы (1)


Я начну с заявления об отказе от ответственности: построение по условию — это не то, для чего на самом деле предназначен поставщик. В идеале такая логика должна обрабатываться вне процесса сборки упаковщика, возможно, в конвейере сборки, как предложил @MattSchuchard. Примеры инструментов конвейера сборки: Jenkins, CircleCI, Drone.IO.

Однако: если вам действительно нужно, чтобы эта логика была встроена в средство подготовки, Packer завершает работу и завершает работу с ненулевым кодом ошибки, поэтому вы можете сделать что-то вроде этого:

"provisioners": [
    {
        "type": "shell",
        "inline": [
            "if [ $res -eq f(20) ]; then echo $res && exit 0; else echo "Incorrect result" && exit 1; fi"
        ]
    }
]

Вы можете дополнительно настроить это, используя параметр valid_exit_codes и определив, какие коды выхода вы ожидаете от конкретных обстоятельств, которые вы хотите проверить. Ссылка: https://www.packer.io/docs/provisioners/shell.html#valid_exit_codes

Пример вывода:

$ packer build -var-file=provisioner-test.json build.json
==> amazon-ebs: Prevalidating AMI Name: Test-37Cv9mXMGqw5zAV
    amazon-ebs: Found Image ID: ami-09693313102a30b2c
==> amazon-ebs: Creating temporary keypair: packer_5d96a8b4-ef4d-a705-a393-076457bdc3ea
==> amazon-ebs: Launching a source AWS instance...
==> amazon-ebs: Adding tags to source instance
    amazon-ebs: Adding tag: "Name": "Packer Builder"
    amazon-ebs: Instance ID: i-0ca4d944fe99255da
==> amazon-ebs: Waiting for instance (i-0ca4d944fe99255da) to become ready...
==> amazon-ebs: Using ssh communicator to connect: 10.0.24.189
==> amazon-ebs: Waiting for SSH to become available...
==> amazon-ebs: Connected to SSH!
==> amazon-ebs: Provisioning with shell script: /var/folders/mg/wc582qjx0y759zw3hfwxwjmm0000gp/T/packer-shell814735146
    amazon-ebs: Incorrect result
==> amazon-ebs: Terminating the source AWS instance...
==> amazon-ebs: Cleaning up any extra volumes...
==> amazon-ebs: No volumes to clean up, skipping
==> amazon-ebs: Deleting temporary keypair...
Build 'amazon-ebs' errored: Script exited with non-zero exit status: 1.Allowed exit codes are: [0]

==> Some builds didn't complete successfully and had errors:
--> amazon-ebs: Script exited with non-zero exit status: 1.Allowed exit codes are: [0]

==> Builds finished but no artifacts were created.
person Carlo Mencarelli    schedule 04.10.2019