作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 terraform 配置 AWS 基础设施,并希望使用 vars_file
将 aws_subnet_id
和 aws_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_file
的 content
中。
关于ansible - 如何将 terraform 输出变量作为 vars_files 传递到 ansible 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353666/
我是一名优秀的程序员,十分优秀!