_この問題は、もともと@mtheusによってhashicorp / terraform# 18718として開かれました。 プロバイダーの分割の結果として、ここに移行されました。 問題の元の本文は以下のとおりです。_
Terraform v0.11.8
resource "local_file" "kubeconfig" {
sensitive = true
content = "${data.terraform_remote_state.kubernetes.kubeconfig}"
filename = ".kube/config"
}
機密情報が出力に含まれていないようです
data.terraform_remote_state.kubernetes: Refreshing state...
local_file.kubeconfig: Creating...
content: "" => "\n\napiVersion: v1\nclusters:\n- cluster:\n server: https://**<SENSIVE>**.sk1.us-east-1.eks.amazonaws.com\n certificate-authority-data: LS0tLS1C**<SENSIVE>**\n name: kubernetes\ncontexts:\n- context:\n cluster: kubernetes\n user: aws\n name: aws\ncurrent-context: aws\nkind: Config\npreferences: {}\nusers:\n- name: aws\n user:\n exec:\n apiVersion: client.authentication.k8s.io/v1alpha1\n command: aws-iam-authenticator\n args:\n - \"token\"\n - \"-i\"\n - \"latam\"\n"
filename: "" => ".kube/config"
local_file.kubeconfig: Creation complete after 0s (ID: 73a74cc24de6ebfe8304a9b889415884fd819390)
terraform init
terraform apply
出力を印刷するすべてのコンポーネントに適用する必要があります
マスターのコードはソリューションを実装します: sensitve_content
。 これは他のテラフォームリソースと一致していませんが、少なくともその解決策です。
ただし、Terraformv0.11.10およびprovider.localv1.1.0ではまだ利用できないようです。
これは2018年3月に#9で実装されましたが、まだリリースされていません。
@alewando応答が遅いので、ごめんなさい! コアチームは、terraform 0.12リリースに真っ向から取り組んできましたが、残念ながら、いくつかのこと(このプロバイダーなど)は結果として無視されてきました。
これをブックマークして、保留中のPRを確認し、リリースを公開することを思い出させます。 この特定の問題に取り組んでくれてありがとう、そしてあなたの忍耐に感謝します!
@mildwonkeyリリースカットを取得する可能性はありますか? フォークして新しいリリースを行うことはできますが、カスタムプラグインを取り込むには、Terraformオーケストレーションでボイラープレートをロードする必要があります。
@mildwonkey繰り返しになりますが、リリースを呼びかけます。 それは簡単な勝利であり、私たちに大いに役立つ可能性があります。
@mildwonkeyこれも素晴らしい機能だと思いますので、リリースを楽しみにしています。 🙂
一時的な代替手段を探している人のために、それは私が複数のRDSデータベースのクレデンシャルをエクスポートするためにしたことです(私はデータベース/パスワードとマスターパスワードのマップを持っています):
locals {
databases = "${keys(var.shared_db_databases_passwords)}"
manual_output = {
endpoint = "${module.shared_database.database_endpoint}"
username = "myusername"
password = "${var.shared_db_master_password}"
port = 5432
databases = "${local.databases}"
passwords = "${values(var.shared_db_databases_passwords)}"
}
}
resource "null_resource" "manual_output" {
triggers {
databases = "${join(",", local.databases)}"
}
provisioner "local-exec" {
command = "echo $DATA > manual_output.json"
environment {
DATA = "${jsonencode(local.manual_output)}" # Necessary to hide outputs
}
}
}
https://github.com/terraform-providers/terraform-provider-local/releases/tag/v1.2.0がリリースされ、 sensitive_content
のサポートが追加されたため、この問題を解決できると思います。
ありがとう@invidian !
local_file
データソースもsensitive_content
をサポートする必要があります
@ShahNewazKhan local_file
データソースに属性sensitive_content
が必要だと言っていますか? もしそうなら、これのユースケースは何でしょうか?
@unacceptable実際にlocal_fileリソースを作成するのとは異なる方法でlocal_fileリソースのコンテンツを設定している(または単に既存のファイルを読み取りたい)と想像してください。 そのコンテンツがそもそも機密性の高いものである場合は、出力またはtfstateに直接表示せずにアクセスする必要があります。
この機能を持つことは理にかなっていると思います。 local_file
データソースにはsensitive_filename
パラメータを含めることができます。これは、コンテンツをcontent
(およびcontent_base64
)ではなくsensitive_content
プロパティに配置する必要があることを示します。 content_base64
)。 しかし、それは新機能の提案のようです。 おそらく、それに対処するために別の問題を作成する必要がありますか?
ここで作成しました:
https://github.com/terraform-providers/terraform-provider-local/issues/36
このオプションはデータ構造に存在する必要があると思います。そのため、local_fileリソースを介して定義されたファイルからsensitive_contentを取得できるだけでなく、既存のファイルからも取得できます。
最も参考になるコメント
https://github.com/terraform-providers/terraform-provider-local/releases/tag/v1.2.0がリリースされ、
sensitive_content
のサポートが追加されたため、この問題を解決できると思います。