【问题标题】:provider.vault: "address": required field is not setprovider.vault:“地址”:未设置必填字段
【发布时间】:2019-09-30 22:48:51
【问题描述】:

我正在将 Jenkins 管道与私有 TFE 作为后端集成,并使用保险库进行身份验证。

但是 terraform 计划给了我以下错误

Terraform v0.11.11

Configuring remote state backend...
Initializing Terraform configuration...
2019/05/14 00:11:01 [DEBUG] Using modified User-Agent: Terraform/0.11.11 PTFE/46ef48a
[31m
[1m[31mError: [0m[0m[1mprovider.vault: "address": required field is not set[0m

main.tf >>>>

provider "aws" { region = "us-east-1" } 
resource "aws_instance" "my-test-instance" { 
  ami = "ami-0080e4c5bc078760e" 
  instance_type = "t2.micro" 
  tags { Name = "test-instance" } 
}

詹金斯 >>>

stage('terraform plan') { 
  steps { 
    script { 
      wrap([$class: 'VaultBuildWrapper', configuration:conf, vaultSecrets: secretz]) { 
        withCredentials([string(credentialsId: 'VAULTAWSTOKEN', variable: 'VAULT_TOKEN')]) { 
          sh "~/bin/aws sts get-caller-identity" 
          sh "${env.TERRAFORM_HOME} plan " 
        } 
      } 
    } 
    input (message: 'Ready to apply?', ok: 'Yes') 
  } 
}

【问题讨论】:

  • 你可以edit你的问题,不要在cmets中发布代码
  • 您的保管库配置在哪里?
  • 在 Jenkins 文件中定义。 def secretz = [ [$class:'VaultSecret',路径:“aws/sts/VaultTFE-Sandbox”,secretValues:[[$class:'VaultSecretValue',envVar:'AWS_SESSION_TOKEN',vaultKey:'security_token'],[$类:'VaultSecretValue',envVar:'AWS_ACCESS_KEY_ID',vaultKey:'access_key'],[$class:'VaultSecretValue',envVar:'AWS_SECRET_ACCESS_KEY',vaultKey:'secret_key']]]] def conf = [$class:' VaultConfiguration',vaultUrl:'17.89.120.22:8200',vaultCredentialId:'VAULT_APP_ROLE'

标签: jenkins terraform hashicorp-vault


【解决方案1】:

您需要在您的代码中找到保管库提供者并填写address字段[1]

[1]https://www.terraform.io/docs/providers/vault/index.html#address

【讨论】:

  • 我确实在 main.tf provider "vault" { address = "17.89.120.22:8200" } 中添加了代码,但现在它失败了 * provider.vault: no vault token found.. 我希望所有的身份验证都将在 Jenkins 中完成。
  • 设置 VAULT_TOKEN 环境变量,如 Vault 提供程序的文档中所述。
  • 感谢您的所有帮助!我是这里的新手,正在尝试集成 Jenkins、vault 和 TFE .. 我不知道如何在 jenkins 的 terraform 中传递 VAULT_TOKEN ......这是在 main.tf provider "vault" { address = "${var.vault_addr }" token = "${var.vault_token}" }... 而 Jenkins 有这个块 withCredentials([string(credentialsId: 'VAULTAWSTOKEN', variable: 'VAULT_TOKEN')]) { sh "~/bin/aws sts get -caller-identity" sh "${env.TERRAFORM_HOME} plan $AWS_SESSION_TOKEN "}.. 我做得对吗?
猜你喜欢
  • 1970-01-01
  • 2020-06-12
  • 2016-06-07
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2015-05-30
  • 1970-01-01
  • 2020-06-08
相关资源
最近更新 更多