gpt4 book ai didi

ansible - 如何将 terraform 输出变量作为 vars_files 传递到 ansible 中?

转载 作者:行者123 更新时间:2023-12-02 14:50:50 27 4
gpt4 key购买 nike

我正在使用 terraform 配置 AWS 基础设施,并希望使用 vars_fileaws_subnet_idaws_security_id 等变量传递到 ansible playbook 中(不要知道是否还有其他方法)。我怎样才能做到这一点?

最佳答案

我使用 Terraform local_file 创建 Ansible vars_file。我在变量名称中添加了 tf_ 前缀,以明确它们源自 Terraform:

# Export Terraform variable values to an Ansible var_file
resource "local_file" "tf_ansible_vars_file_new" {
content = <<-DOC
# Ansible vars_file containing variable values from Terraform.
# Generated by Terraform mgmt configuration.

tf_environment: ${var.environment}
tf_gitlab_backup_bucket_name: ${aws_s3_bucket.gitlab_backup.bucket}
DOC
filename = "./tf_ansible_vars_file.yml"
}

运行 terraform apply 以创建包含 Terraform 变量值的 Ansible var_file tf_ansible_vars_file.yml:

# Ansible vars_file containing variable values from Terraform.
# Generated by Terraform mgmt configuration.

tf_environment: "mgmt"
tf_gitlab_backup_bucket_name: "project-mgmt-gitlab-backup"

tf_ansible_vars_file.yml 添加到您的 Ansible playbook:

  vars_files:
- ../terraform/mgmt/tf_ansible_vars_file.yml

现在,在 Ansible 中,此文件中定义的变量将包含来自 Terraform 的值。

显然,这意味着您必须在 Ansible 之前运行 Terraform。但对于所有 Ansible 用户来说,这一点不会那么明显。将断言添加到您的 Ansible 剧本中,以帮助用户弄清楚如果缺少 tf_ 变量该怎么办:

- name: Check mandatory variables imported from Terraform
assert:
that:
- tf_environment is defined
- tf_gitlab_backup_bucket_name is defined
fail_msg: "tf_* variable usually defined in '../terraform/mgmt/tf_ansible_vars_file.yml' is missing"

更新:此答案的早期版本使用了 Terraform 模板。经验表明,模板文件很容易出错,并且会增加不必要的复杂性。因此,我将模板文件移至 local_filecontent 中。

关于ansible - 如何将 terraform 输出变量作为 vars_files 传递到 ansible 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353666/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com