Ansible 云端漫步
Ansible 云端漫步
今天是个好日子,在这样的日子里,我们常常感觉像是在云端漫步。随着 11 月 28 日向客户发布最新的 Red Hat Ansible 认证集合的公告,我相信许多云从业者都将期待着未来云自动化将带来的变化。
在过去的几个月里,Ansible 团队开展了大量工作,展示了 Red Hat Ansible Automation Platform 如何扩展和连接不同的技术。这对 Ansible 在许多客户的云自动化成功中发挥了至关重要的作用。
云自动化需要能够执行许多不同的复杂任务并覆盖同样多的领域。通常,组织会使用不同的技术来满足特定的需求。Terraform 便是其中一种广泛使用的技术。
我们最近发布了一些关于此主题的博客文章,内容涵盖了使用 Terraform 和 Ansible Automation Platform 的简单示例,到对两种工具之间差异的深入探讨。AnsibleFest 2022 甚至提供了一个实验室,我们可以在其中通过自动化控制器使用 Terraform,从而能够集中管理 Terraform 的云基础设施的预配和取消预配,同时通过 Ansible 运行预配后配置。
传统上,用于与 Terraform 交互的模块来自社区,但是,随着对具有 Red Hat 支持的官方集合的需求越来越大,我们宣布了 cloud.terraform,一个用于 Terraform 的 Red Hat Ansible 认证集合。
那么 cloud.terraform 集合是什么呢?
该集合从今天起在 Ansible Automation Hub 上可用,允许在自动化执行环境中使用 Terraform 以代码方式管理和预配云基础设施。该集合目前包含两个模块和示例角色,可帮助您以经过认证和支持的方式将 Terraform 工作负载引入 Ansible Automation Platform。
这些模块允许 Ansible 应用 Terraform 计划以及预配和取消预配基础设施。目前,我们支持 **AWS**、**Azure** 和 **Google Cloud** 作为 Terraform 的提供商,并支持 **azurerm**、**gcs** 和 **s3** 作为后端。需要注意的是,我们不支持 Terraform 的本地后端,原因有两个。首先,许多 Terraform 从业者都认为在生产环境中使用本地后端并非最佳实践;其次,由于我们从执行环境触发自动化,因此本地后端存储在每次执行时都不持久或相同。
让我们看看 Ansible Playbook 中模块的使用情况。
**模块:** cloud.terraform.terraform
这将替换当前用于通用功能的 community.general.terraform 模块。
… example: - name: Apply plan cloud.terraform.terraform: project_path: "{{ repo_dir }}" plan_file: "{{ plan_file }}" state: present # applying a plan doesn't have a switch for this # optional config state_file: "{{ terraform_options.state_file | default(omit) }}" force_init: "{{ terraform_options.force_init | default(omit) }}" binary_path: "{{ terraform_options.binary_path | default(omit) }}" plugin_paths: "{{ terraform_options.plugin_paths | default(omit) }}" workspace: "{{ terraform_options.workspace | default(omit) }}" lock: "{{ terraform_options.lock | default(omit) }}" lock_timeout: "{{ terraform_options.lock_timeout | default(omit) }}" parallelism: "{{ terraform_options.parallelism | default(omit) }}"
**模块:** cloud.terraform.output
此模块允许我们从 Terraform 状态文件提取值,并允许您将其存储为事实。
… example: - name: Read outputs from state file cloud.terraform.terraform_output: state_file: "{{ state_file }}" register: terraform_output_state_file when: state_file is defined - name: Add hosts from terraform_output ansible.builtin.add_host: name: "{{ item[mapping_variables.name] }}" groups: "{{ item[mapping_variables.group] }}" ansible_host: "{{ item[mapping_variables.ip] }}" ansible_user: "{{ item[mapping_variables.user] }}" loop: "{{ terraform_output.outputs[mapping_variables.host_list].value }}" vars: terraform_output: "{{ (terraform_output_project_path is success) | ternary(terraform_output_project_path, terraform_output_state_file) }}”
除了这些模块之外,该集合还包含两个示例角色,用于从 Git 存储库检索项目文件,以及一个角色用于在上述示例中创建内存中的清单。
Ansible Automation Platform 与 Terraform,为什么?
尽管 Ansible 和 Terraform 都可以预配基础设施和云工作负载,但许多客户发现 Terraform 易于使用基础设施即代码,但在预配后,Terraform 工具存在差距。能够使用 Ansible 允许我们解决这个问题,并使用这两种工具实现完全自动化的工作流。这也意味着那些已经花费时间和金钱构建 Terraform 清单的客户无需替换 Terraform,而是让 Ansible Automation Platform 协调预配和配置管理。这些工具结合使用效果更佳!
这仅仅是一个开始,但未来可期!