Использование Packer для создания GCE с ошибкой «ошибка создания экземпляра», следующие шаги ?

Я работал с Packer v0.10.1 для создания образа и сталкиваюсь с этой проблемой безопасности доступа при попытке запустить через инструмент Hashicorp Atlas.

    Packer v0.10.1

    [1;32mgooglecompute output will be in this color.[0m

    [1;32m==> googlecompute: Checking image does not exist...[0m
    [1;32m==> googlecompute: Creating temporary SSH key for instance...[0m
    [1;32m==> googlecompute: Creating instance...[0m
    [0;32m    googlecompute: Loading zone: us-central1-a[0m
    [1;31m==> googlecompute: Error creating instance: Get https://www.googleapis.com/compute/v1/projects/united-course-124523/zones/us-central1-a?alt=json: oauth2/google: can't get a token from the metadata service; not running on GCE[0m
    [1;31mBuild 'googlecompute' errored: Error creating instance: Get https://www.googleapis.com/compute/v1/projects/united-course-124523/zones/us-central1-a?alt=json: oauth2/google: can't get a token from the metadata service; not running on GCE[0m

    ==> Some builds didn't complete successfully and had errors:
    --> googlecompute: Error creating instance: Get https://www.googleapis.com/compute/v1/projects/united-course-124523/zones/us-central1-a?alt=json: oauth2/google: can't get a token from the metadata service; not running on GCE

    ==> Builds finished but no artifacts were created.

Любой мысли похоже, что это должна быть ошибка GCE, но я загрузил переменную account.json в переменную среды, как показано в файле шаблона Packer ниже.

    {
      "variables": {
        "instance_name": "hdqc-redis-{{timestamp}}",
        "image_name": "testing-hdqc-redis-{{timestamp}}"
      },
      "builders": [
        {
          "type": "googlecompute",
          "project_id": "united-course-124523",
          "source_image": "debian-8-jessie-v20160718",
          "zone": "us-central1-a",
          "instance_name": "{{user `instance_name`}}",
          "image_name": "{{user `image_name`}}",
          "image_description": "Nginx Server.",
          "communicator": "ssh",
          "ssh_username": "redisadmin"
        }
      ],
      "provisioners": [
        {
          "type": "shell",
          "inline": [
            "sleep 3",
            "echo \"slept for 3 seconds.\""
          ]
        },
        {
          "type": "file",
          "source": "install-redis.sh",
          "destination": "install-redis.sh"
        },
        {
          "type": "shell",
          "script": "install-redis.sh",
          "pause_before": "10s"
        }
      ]
    }

После того, как я понял, это просто исключает account.json, который как показано здесь, требуется конкретная учетная запись службы в GCE. Итак, я изменил и добавил переменную содержимого файла account.json.

    {
      "variables": {
        "instance_name": "hdqc-redis-{{timestamp}}",
        "image_name": "testing-hdqc-redis-{{timestamp}}",
        "account_json": "{{env `packer_account_json`}}",
      },
      "builders": [
        {
          "type": "googlecompute",
          "account_file": "{{user `account_json`}}",
          "project_id": "united-course-124523",
          "source_image": "debian-8-jessie-v20160718",
          "zone": "us-central1-a",
          "instance_name": "{{user `instance_name`}}",
          "image_name": "{{user `image_name`}}",
          "image_description": "Nginx Server.",
          "communicator": "ssh",
          "ssh_username": "redisadmin"
        }
      ],
      "provisioners": [
        {
          "type": "shell",
          "inline": [
            "sleep 3",
            "echo \"slept for 3 seconds.\""
          ]
        },
        {
          "type": "file",
          "source": "install-redis.sh",
          "destination": "install-redis.sh"
        },
        {
          "type": "shell",
          "script": "install-redis.sh",
          "pause_before": "10s"
        }
      ]
    }

Но затем добавил это изменение, где у меня есть содержимое файла account.json, сохраненное как переменная с именем «packer_account_json», и в результате возникла следующая ошибка.

    Packer v0.10.1

    googlecompute output will be in this color.

    1 error(s) occurred:

    * account_file path does not exist: {

На что я размышляю, что в мире сейчас. Он не может принимать переменную? Это похоже на то, как я сохранил содержимое account.json в качестве переменной для Terraform, и он отлично работает.

0
задан 18 August 2016 в 02:49
1 ответ

Упаковщику нужны учетные данные для запуска ВМ GCE для создания образа. Если бы вы запускали процесс Packer на GCE, эти учетные данные были бы предоставлены службой метаданных экземпляра.

Поскольку Atlas не запущен на GCE, вам нужно будет создать ключ учетной записи службы, загрузить его и добавить в манифест Packer. Это будет запись account_file в этом простом манифесте:

{ "шрифт": "googlecompute", "аккаунт_файл": "account.json", "проект_ид": "твой проект", "source_image": "ваше основное изображение", "Зона": "мы-централь1-а" }

В разделе , посвященном работе без учетной записи учетной записи вычислительного устройства в документации по упаковке , дается пошаговая инструкция по созданию ключа учетной записи вычислительного устройства.

1
ответ дан 4 December 2019 в 16:31

Теги

Похожие вопросы