Terraform init создание нового рабочего пространства в автоматизации

Я искал в Интернете, но не нашел ничего близкого к ответу. У меня есть следующий main.tf :

terraform {
  cloud {
    organization = "my-organization"

    workspaces {
      tags = ["app:myapplication"]
      
    }
  }
}

Я использую облако terraform и хочу использовать рабочее пространство для автоматизации. Для этого мне нужно сначала выполнить terraform init :

/my/path # terraform init

Initializing Terraform Cloud...

No workspaces found.

There are no workspaces with the configured tags (app:myapplication) in your Terraform Cloud organization. To finish initializing, Terraform needs at least one workspace available.

Terraform can create a properly tagged workspace for you now. Please enter a name to create a new Terraform Cloud workspace.

Enter a value:

Я хотел бы сделать что-то в этом роде:

terraform init -workspace=my-workspace

так что он создается, если он не существует. Но ничего не нахожу. Единственный способ создать первое рабочее пространство — вручную.

Как это сделать в автоматизации с помощью ci/cd?

[редактировать] команды рабочей области terraform недоступны до инициализации

/src/terraform # terraform workspace list

Error: Terraform Cloud initialization required: please run "terraform init"

Reason: Initial configuration of Terraform Cloud.

Changes to the Terraform Cloud configuration block require reinitialization, to discover any changes to the available workspaces.

To re-initialize, run: terraform init

Terraform has not yet made changes to your existing configuration or state.

Ну, вы можете сделать terraform workspace list, grep для того, который вы хотите проверить, присутствует, а затем terraform workspace new <workspace-name>. Это, конечно, произойдет до запуска шага инициализации.

Marko E 31.03.2022 16:51

Я не могу выполнить команду рабочей области terraform до инициализации terraform

Yoann 31.03.2022 16:53

Хорошо, что ты можешь сделать?

Marko E 31.03.2022 16:54

Yoann и @MarkoE CLI и облачные рабочие пространства — это не одно и то же. См. объяснение здесь: terraform.io/cli/workspaces#managing-workspaces.

Matt Schuchard 31.03.2022 17:02
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно будет использовать TF Cloud/TFE API. Вы используете TF Cloud, но можете изменить конечную точку, чтобы ваша установка использовала TFE.

Сначала вам нужно перечислить рабочие области TF Cloud:

curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  https://app.terraform.io/api/v2/organizations/my-organization/workspaces

где my-organization — ваша организация TF Cloud. Это вернет рабочие области в формате JSON. Затем вам нужно будет проанализировать JSON и перебрать карты/хэши/словари существующих рабочих пространств TF Cloud. Для каждой итерации внутри data, а затем ключа name будет вложенное значение для имени рабочей области. Вы должны собрать имена рабочих пространств и сравнить их с именем рабочего пространства, которое вы хотите создать. Если нужной рабочей области нет в списке рабочих областей, то вы создать рабочее пространство TF Cloud:

curl \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/vnd.api+json" \
  --request POST \
  --data @payload.json \
  https://app.terraform.io/api/v2/organizations/my-organization/workspaces

снова заменив вашу организацию и вашу конкретную полезную нагрузку. Затем вы можете terraform init успешно указать бэкэнд рабочее пространство Tf Cloud.

Обратите внимание, что если вы выполняете это в автоматическом режиме, как указано в вопросе, то агенту сборки необходимо подключение к TF Cloud.

Вот это да! большое спасибо, я надеялся на что-то более... хм, менее сложное. Но я предполагаю, что это путь с Hashicorp Terraform. Большое спасибо!

Yoann 31.03.2022 17:04

@Yoann Проголосуйте за / примите ответ, так как он решил ваш вопрос, пожалуйста, и спасибо.

Matt Schuchard 31.03.2022 17:41

Как бы то ни было, это приглашение terraform init ввести имя рабочей области приводит к тому, что Terraform CLI делает практически тот же запрос API, что и второй в этом ответе, поэтому между этими двумя не должно быть функциональной разницы. terraform init действует как ориентированный на человека интерактивный пользовательский интерфейс для этого API, но если вы все равно собираетесь автоматизировать, то проще вообще исключить Terraform CLI из смеси и просто использовать API напрямую.

Martin Atkins 01.04.2022 01:13

Другой вариант, если у вас есть какие-то систематические соглашения для ваших рабочих областей, — это управлять своими рабочими областями Terraform Cloud с помощью самого Terraform с поставщиком hashicorp/tfe. Это еще одна оболочка вокруг того же API, и она может быть полезна, если вам нужно делать это на постоянной/повторяющейся основе, а не просто разово, как здесь предназначено terraform init.

Martin Atkins 01.04.2022 01:14

спасибо тебе @MartinAtkins. Жаль, что terraform cli не очень хорошо отражает детализацию своего API.

Yoann 01.04.2022 08:00

Другие вопросы по теме