我们希望听到您的声音!请帮助我们深入了解 Ansible 生态系统的现状。
参与 Ansible 项目 2024 年调查

Ansible 云端漫步

Ansible 云端漫步

今天是个好日子,在这样的日子里,我们常常感觉像是在云端漫步。随着 11 月 28 日向客户发布最新的 Red Hat Ansible 认证集合的公告,我相信许多云从业者都将期待着未来云自动化将带来的变化。

在过去的几个月里,Ansible 团队开展了大量工作,展示了 Red Hat Ansible Automation Platform 如何扩展和连接不同的技术。这对 Ansible 在许多客户的云自动化成功中发挥了至关重要的作用。

cloud automation uses diagram

云自动化需要能够执行许多不同的复杂任务并覆盖同样多的领域。通常,组织会使用不同的技术来满足特定的需求。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 协调预配和配置管理。这些工具结合使用效果更佳!

tooling diagram

这仅仅是一个开始,但未来可期!