在我之前的文章中,我演示了如何使用 Terraform 管理 OpenStack。使用 Terraform 作为基础设施即代码 (IaC) 是一项重大优势,但也需要员工来支持它。有时,您真正需要的只是按时间资源配置基础设施的能力,而无需构建持久的数据结构。当设计灵活的环境时,我更喜欢 Ansible 的声明式语言。
Ansible 的灵活性使我能够为以下用例进行设计:
- 一个定时的测试环境,可以在使用后删除。
- 一个为特定时间段提供的培训环境,然后销毁。
- 当 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-playbook
或 ansible
临时命令不同,它会创建一个容器和执行环境。
您必须使用 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 后,您将获得网络

(AJ Canlas, CC BY-SA 4.0)
您还将获得 flavors

(AJ Canlas, CC BY-SA 4.0)
以及镜像

(AJ Canlas, CC BY-SA 4.0)
以及一个演示项目

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