使用 Ansible 自动化 OpenStack

Ansible 在自动化您的基础设施时提供了独特的灵活性。
1 位读者喜欢这篇文章。
Looking at a map

opensource.com

在我之前的文章中,我演示了如何使用 Terraform 管理 OpenStack。使用 Terraform 作为基础设施即代码 (IaC) 是一项重大优势,但也需要员工来支持它。有时,您真正需要的只是按时间资源配置基础设施的能力,而无需构建持久的数据结构。当设计灵活的环境时,我更喜欢 Ansible 的声明式语言。

Ansible 的灵活性使我能够为以下用例进行设计:

  1. 一个定时的测试环境,可以在使用后删除。
  2. 一个为特定时间段提供的培训环境,然后销毁。
  3. 当 Terraform 因为映射您现有的基础设施而变得困难时,从手动基础设施迁移到自动化基础设施。

安装 Ansible 和 OpenStack SDK

首先,您需要安装 Ansible 及其 SDK。为此,您必须安装 Docker 或 Podman

我使用 Ansible 的 pip 安装方式

$ python3 -m pip install ansible-navigator --user

ansible-navigator 命令被 AWX 或 Red Hat Ansible Automation Platform 用于运行 Ansible playbook。与之前的 ansible-playbookansible 临时命令不同,它会创建一个容器和执行环境。

您必须使用 OpenStack SDK 构建您的执行环境。为此,我强烈推荐 Gineesh Madapparambath 关于如何创建执行环境的文章。

创建后,使用您的 Ansible 执行环境来配置您的镜像

$ ansible-navigator images

选择要使用的镜像并运行 playbook

$ ansible-navigator run main.yaml --stdout

示例 playbook

我的示例 playbook 使用了我在 Terraform 文章中演示的相同结构

$ cat >> main.yaml << EOF
---
- hosts: localhost
  vars:
    flavors:
      - name: "small"
        ram: 4096
        vcpus: 1
      - name: "medium"
        ram: 8096
        vcpus: 2
      - name: "large"
        ram: 16384
        vcpus: 4
      - name: "xlarge"
        ram: 32768
        vcpus: 8

  tasks:
  - name: create flavors
    openstack.cloud.compute_flavor:
      state: present
      name: "{{ item.name }}"
      ram: "{{ item.ram }}"
      vcpus: "{{ item.vcpus }}"
      disk: 0
    loop: 
      - flavors

  - name: create external network
    openstack.cloud.network:
      state: present
      name: "external-network"
      provider_network_type: "flat"
      provider_physical_network: "physnet1"
      external: true

  - name: create external subnet
    openstack.cloud.subnet:
      state: present
      name: "external-subnet"
      network_name: "external-network"
      cidr: "10.0.0.0/8"
      gateway_ip: "10.0.0.1"
      dns_nameservers:
        - "10.0.0.254"
        - "10.0.0.253"
      allocation_pool_start: "10.0.0.2"
      allocation_pool_end: "10.0.254.254"

  - name: create external router
    openstack.cloud.router:
      name: "external-router"
      state: present
      network: "external-network"

  - name: create Cirros image
    openstack.cloud.image:
      name: cirros
      container_format: bare
      disk_format: qcow2
      state: present
      filename: cirros-0.6.1-x86_64-disk.img

  - name: create Demo project
    openstack.cloud.project:
      state: present
      name: "Demo"
      enabled: True

  - name: create demo-user
    openstack.cloud.user:
      state: present
      name: "demo-user"
      password: "demo"
      default_project: "Demo"
EOF

结果

运行 playbook 后,您将获得网络

Network settings

(AJ Canlas, CC BY-SA 4.0)

您还将获得 flavors

flavors

(AJ Canlas, CC BY-SA 4.0)

以及镜像

images

(AJ Canlas, CC BY-SA 4.0)

以及一个演示项目

projects

(AJ Canlas, CC BY-SA 4.0)

合适的工具

关于如何自动化,没有唯一正确或错误的答案。如何实施自动化取决于您组织的需求、基础设施、系统设计和人员资源。选择一个优秀的开源工具开始使用。现在投入精力,将来可以为您节省大量工作。

接下来阅读什么
AJ Canlas
AJ Canlas 是 Micro-D International 菲律宾分公司的高级解决方案咨询经理。他负责公共云和私有云基础设施及倡议。他的主要优势在于 Linux、OpenStack、Ansible 自动化和容器化。

评论已关闭。

© . All rights reserved.