我们在管道中使用 Vault 插件从 Vault 读取凭证。现在我们还想使用 Vault 的 PKI 引擎生成 TLS 证书。为此,我需要在管道文件中提供 Jenkins 的 appRole 秘密 ID。该秘密在 Jenkins 中配置为“Vault 应用程序角色凭据”,我不知道如何访问它。
我想做的是这样的:
withCredentials([VaultAppRoleCredential(credentialsId: 'vault_credentials'), roleIdVariable: 'roleId', secretIdVariable: 'secretId']) {
stage('generate certificate') {
// authenticate with credentials against Vault
// ...
}
Run Code Online (Sandbox Code Playgroud)
}
目前我的解决方法是复制凭据并将 roleId 和 SecretId 另外存储在 Jenkins 中的用户名+密码凭据中。
我正在按照示例https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/aws_auth.tf使用 Terraform 设置 EKS 集群,现在我有两个 Terraform 文件:
kubeconfig.tf
resource "local_file" "kubeconfig" {
content = "${data.template_file.kubeconfig.rendered}"
filename = "tmp/kubeconfig"
}
data "template_file" "kubeconfig" {
template = "${file("template/kubeconfig.tpl")}"
...
}
Run Code Online (Sandbox Code Playgroud)
aws-auth.tf
resource "null_resource" "update_config_map_aws_auth" {
provisioner "local-exec" {
command = "kubectl apply -f tmp/config-map-aws-auth_${var.cluster-name}.yaml --kubeconfig /tmp/kubeconfig"
}
...
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个 local-exec 命令失败
输出:错误:stat tmp/kubeconfig:没有这样的文件或目录
在第二次运行时它成功了。我认为该文件是在 local-exec 尝试使用它之后创建的,并且 local-exec 应该依赖于文件资源。所以我尝试通过使用插值(隐式依赖)来表达依赖关系,如下所示:
resource "null_resource" "update_config_map_aws_auth" {
provisioner "local-exec" {
command = "kubectl apply -f tmp/config-map-aws-auth_${var.cluster-name}.yaml --kubeconfig ${resource.local_file.kubeconfig.filename}"
}
Run Code Online (Sandbox Code Playgroud)
但这总是给我
错误:资源“null_resource.update_config_map_aws_auth”供应商local-exec(#1):变量resource.local_file.kubeconfig.filename中引用了未知资源“resource.local_file”