#azure-devops #terraform #azure-pipelines
#azure-devops #terraform #azure-конвейеры
Вопрос:
Я привязываюсь к запуску terraform в моем конвейере Azure Devops. Я использую расширение terraform версии 0.1.8 от marketplace от MicrosoftDevLabs, Моя задача выглядит следующим образом :
task: TerraformTaskV1@0
displayName: 'Terraform - Init'
inputs:
provider: 'azurerm'
command: 'init'
commandOptions: '-input=false'
backendServiceArm: 'service-connection'
backendAzureRmResourceGroupName: 'Project-RG'
backendAzureRmStorageAccountName: 'projectsa'
backendAzureRmContainerName: 'tfstate'
backendAzureRmKey: 'terraform.tfstate'
workingDirectory: terraform
Команда, которую он пытается выполнить, является
`/opt/hostedtoolcache/terraform/0.13.5/x64/terraform init -backend-config=storage_account_name=projectsa -backend-config=container_name=tfstate -backend-config=key=terraform.tfstate -backend-config=resource_group_name=Project-RG -backend-config=arm_subscription_id=xxxx-xxxx-xxxx -backend-config=arm_tenant_id=*** -backend-config=arm_client_id=*** -backend-config=arm_client_secret=***’
И сообщение об ошибке:
Initializing the backend...
Error: Invalid backend configuration argument
The backend configuration argument "storage_account_name" given on the command line is not expected for the selected backend type.
Error: Invalid backend configuration argument
The backend configuration argument "container_name" given on the command line is not expected for the selected backend type.
Error: Invalid backend configuration argument
The backend configuration argument "key" given on the command line is not expected for the selected backend type.
Комментарии:
1. Можете ли вы вставить сообщение об ошибке?
2. Здравствуйте, ошибка как таковая :
Initializing the backend... Error: Invalid backend configuration argument The backend configuration argument "storage_account_name" given on the command line is not expected for the selected backend type. Error: Invalid backend configuration argument The backend configuration argument "container_name" given on the command line is not expected for the selected backend type. Error: Invalid backend configuration argument The backend configuration argument "key" given on the command line is not expected for the selected backend type.
Ответ №1:
Исправлено. Решение немного смущает. The.tf серверная часть файлов была упомянута как локальная. Что теперь имеет смысл, поскольку локальный сервер не поддерживает эти параметры. Изменение серверной части на azure исправило это. Убедитесь, что у вас определен правильный сервер, поскольку в ошибке указано, что параметры для серверной части не поддерживаются.
Комментарии:
1. Спасибо, только что сделал это сейчас.
2. Спасибо, что поделились, просто для записи, я изменил серверную часть на
azurerm
, и это исправлено3. Спасибо за это. Я допустил ту же глупую ошибку.
Ответ №2:
Я столкнулся с аналогичной ошибкой и обнаружил, что использование задачи TerraformTaskV2 @ 2 в моем конвейере yml в отличие от более старой TerraformTaskV1 @ 0 решило проблему. Эта новая задача также работает с самой последней версией Terraform, такой как 1.1.4.
# Install Terraform on Agent
- task: TerraformInstaller@0
displayName: 'install'
inputs:
terraformVersion: '1.1.4'
# Initialize Terraform
- task: TerraformTaskV2@2
displayName: 'init'
inputs:
provider: 'azurerm'
command: 'init'
backendAzureRmResourceGroupName: 'prodbackendstf'
backendAzureRmStorageAccountName: 'productiontfstate'
backendAzureRmContainerName: 'tfstate'
backendAzureRmKey: 'tf.state'
backendServiceArm: 'IaC SPn'
workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
Ответ №3:
Я запустил это
- task: TerraformInstaller@0
inputs:
terraformVersion: '0.13.5'
- task: TerraformTaskV1@0
inputs:
provider: 'azurerm'
command: 'init'
workingDirectory: '$(System.DefaultWorkingDirectory)/stackoverflow/74-terraform'
backendServiceArm: 'rg-the-code-manual'
backendAzureRmResourceGroupName: 'TheCodeManual'
backendAzureRmStorageAccountName: 'thecodemanual'
backendAzureRmContainerName: 'infra'
backendAzureRmKey: 'tfstate-so-74'
commandOptions: '-input=false'
и он заработал
2020-12-04T10:06:25.4318809Z [command]/opt/hostedtoolcache/terraform/0.13.5/x64/terraform init -backend-config=storage_account_name=thecodemanual -backend-config=container_name=infra -backend-config=key=tfstate-so-74 -backend-config=resource_group_name=TheCodeManual -backend-config=arm_subscription_id=<subscriptionId> -backend-config=arm_tenant_id=*** -backend-config=arm_client_id=*** -backend-config=arm_client_secret=***
2020-12-04T10:06:25.4670082Z
2020-12-04T10:06:25.4675423Z [0m[1mInitializing the backend...[0m
2020-12-04T10:06:25.4738557Z [0m[32m
2020-12-04T10:06:25.4740133Z Successfully configured the backend "azurerm"! Terraform will automatically
2020-12-04T10:06:25.4742265Z use this backend unless the backend configuration changes.[0m
2020-12-04T10:06:25.9242628Z [33m
2020-12-04T10:06:25.9244849Z [1m[33mWarning: [0m[0m[1m"arm_client_id": [DEPRECATED] `arm_client_id` has been replaced by `client_id`[0m
2020-12-04T10:06:25.9246980Z
2020-12-04T10:06:25.9248608Z [0m[0m[0m
2020-12-04T10:06:25.9249659Z [33m
2020-12-04T10:06:25.9251909Z [1m[33mWarning: [0m[0m[1m"arm_client_secret": [DEPRECATED] `arm_client_secret` has been replaced by `client_secret`[0m
2020-12-04T10:06:25.9252897Z
2020-12-04T10:06:25.9254321Z [0m[0m[0m
2020-12-04T10:06:25.9255028Z [33m
2020-12-04T10:06:25.9256913Z [1m[33mWarning: [0m[0m[1m"arm_tenant_id": [DEPRECATED] `arm_tenant_id` has been replaced by `tenant_id`[0m
2020-12-04T10:06:25.9261480Z
2020-12-04T10:06:25.9262574Z [0m[0m[0m
2020-12-04T10:06:25.9263605Z [33m
2020-12-04T10:06:25.9264816Z [1m[33mWarning: [0m[0m[1m"arm_subscription_id": [DEPRECATED] `arm_subscription_id` has been replaced by `subscription_id`[0m
2020-12-04T10:06:25.9265629Z
С информацией об устаревании настроек, но это на данный момент не приводит к сбою. Для этого уже есть проблема и PR на github.
Вы запускали TerraformInstaller
раньше TerraformTaskV1
?
Комментарии:
1. Исправлено. Решение немного смущает. The.tf серверная часть файлов была упомянута как локальная. Что теперь имеет смысл, поскольку локальный сервер не поддерживает эти параметры.
Ответ №4:
Я использую terraform v1.1.3 и задачу конвейера Azure TerraformTaskV1 @ 0. Я получал ту же проблему, странную, что и тот же блок azurerm, который использовался для работы, когда я использовал 0.14.X. Чтобы исправить, я отредактировал внутренний блок, чтобы вместо него использовался access_key
ключ хранилища больших двоичных объектов, затем удалил TerraformTaskV1 @ 0 и вместо этого инициализировал terraform с помощью задачи cmd, как показано ниже:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 2.92"
}
}
backend "azurerm" {
storage_account_name = "**terraformStorageAccount**"
container_name = "**terraformStateFileContainer**"
key = "**terraformStateFile**"
access_key = "**storageKey**" #this is sensitive so should be retrieved from safe place via keyvault or dev ops pipeline variables
}
required_version = ">= 1.1.0"
}
Я использую эту задачу для замены переменных конвейера на переменные в файлах tf. Вам нужно будет установить эту задачу, кстати:
- task: replacetokens@3
displayName: Replace Variable Tokens
inputs:
rootDirectory: '$(Pipeline.Workspace)'
targetFiles: '**/*.tf'
encoding: 'auto'
writeBOM: true
actionOnMissing: 'warn'
keepToken: false
tokenPrefix: '**'
tokenSuffix: '**'
useLegacyPattern: false
enableTelemetry: false
После замены переменных используйте задачу cmd для инициализации терраформирования
- task: CmdLine@2
inputs:
script: 'terraform init'