terraform初体验-terraform初体验
本文最后更新于 20 天前,如有失效请评论区留言。

前言

Terraform 的大名我知道很久了,但是一直没有机会体验。刚好最近正在研究关于 PyVmomiLibCloud,顺便也对 Terraform 进行了简单体验,特此分享给大家。

关于 Terraform

Terraform 是一种开源的基础设施即代码软件工具,它提供了一致的 CLI 工作流来管理数百个云服务。Terraform 将云 API 编码为声明式配置文件。这个声明式配置文件以.tf 结尾。

呆猫

我们通过创建 opensatck 虚机实例来清晰的了解 Terraform 的使用方式。

安装 Terraform

我们可以从 Terraform 官网下载最新版本。
下载链接:https://releases.hashicorp.com/terraform/1.1.6/terraform_1.1.6_windows_amd64.zip

下载完成后,解压压缩包,然后将 Terraform 所在的文件目录添加到环境变量,最后通过 cmd 命令 terraform -version 确定安装是否成功。

terraform版本

下载 terraform-provider-openstack

首先我们创建一个名为 trfm_demo 的文件夹用来作为 terraform 的项目包。

我们计划使用 terraform 对接 openstack,对 openstack 的资源进行操作编排。所以我们首先需要安装 terraform-provider-openstack,这是 terraform 操作 openstack 的插件。

我们可以在配置好 tf 文件后使用 terraform init 进行在线下载,由于国内网速堪忧,所以我们直接到 github 上去找到 terraform-provider-openstackrelease 包下载,然后将压缩包解压到.trfm_demo.terraformpluginsregistry.terraform.ioterraform-provider-openstackopenstack1.47.0windows_amd64下即可。

编写 tf 文件

我们在 trfm_demo 中创建一个名为 main.tf 的描述文件。

main.tf 文件是对云环境认证,资源编排的描述。

terraform {
  required_version = ">= 0.14.0"
  required_providers {
    openstack = {
      source  = "terraform-provider-openstack/openstack"
      version = "~> 1.47.0"
    }
  }
}

provider "openstack" {
  user_name   = "admin"
  tenant_name = "admin"
  password    = "pwd@pwd"
  cloud       = "default"
  region      = "RegionOne"
}

resource "openstack_compute_instance_v2" "boot-from-volume" {
  name            = "boot-from-volume"
  flavor_id       = "e49548cf-a756-4f01-8967-bfc45be67662"
  security_groups = ["default"]

  block_device {
    uuid                  = "949b1ee2-0ea1-4b0a-a272-e832aaf81724"
    source_type           = "image"
    volume_size           = 55
    boot_index            = 0
    destination_type      = "volume"
    delete_on_termination = true
  }

  network {
    name = "Net29"
  }
}

以上,openstack 的认证信息之所以选择 cloud 字段,是因为直接使用 auth_url 存在问题,所以选择使用 openstack 支持的clous.yaml方式。

clouds.yaml 内容:

clouds:
  default:
    auth:
      auth_url: https://xxx.cloud.com:5000/v3
      project_name: admin
      tenant_name: admin
      username: admina
      password: pwd@pwd
      user_domain_name: Default
      project_domain_name: Default
    region_name: RegionOne
    verify: False
    interface: public
    identity_api_version: "3"

terraform init

init 之前我们可以采用 terraform fmt 来对 tf 文件进行格式化校验。

在完成以上步骤后,我们就可以开始进行初始化了,使用命令 terraform init 完成项目初始化。这个过程中会检查文件合法性和下载依赖,但是因为我们计划使用离线的方式,所以我们在初识化的时候借助参数 -plugin-dir ..terraformplugins 来使用本地插件。

初始化

terraform plan

顾名思义,plan 过程是对 tf 中描述的资源进行检查的过程,同时会告诉你将要创建的资源。只会列出资源,不会创建资源。

plan过程

terraform apply

apply 过程即实际创建过程,这个过程中,terraform 会向你确认是否要创建资源,你确认 yes 后就会开始根据描述文件向 openstack 创建资源了。

apply过程

我们看到最后提示 add 一个资源成功,即成功创建一个虚机资源。我们前去 openstack 进行确认。

资源创建中

我们可以看到在 openstack 上资源已经开始创建了,是一个从卷启动的虚机,没有任何问题。

Q&A

1、Terraform 怎么支持 https 协议?

问题描述:

当我们的环境 public endpointhttps 协议时,我们在 apply 的时候会报 auth_url 证书相关的错误,但是我找了一圈没有找到如何配置忽略证书。

解决方案:

经过查询官方文档,我发现 Terraform 是支持 openstackclouds.yaml 的,在 clouds.yaml 中我们可以配置 https 协议的 auth_url

cloud配置

provider "openstack" {
  user_name   = "admin"
  tenant_name = "admin"
  password    = "pwd@pwd"
  cloud       = "default"
  region      = "RegionOne"
}

yaml文件位置

2、Terraform init 很慢怎么办?

问题描述:

我们在 terraform init 过程中,terraform 需要从 github 下载 provider 包,但是由于国内访问 github 慢如牛,所以会出现各种问题。

解决方案:

我们可以复制 github 上的 terraform-provider-openstack 包地址,然后使用 github 加速器进行下载,然后根据上面的教程,将插件放到项目的指定位置,然后在 init 过程中使用 -plugin-dir 参数指定插件路径使用本地插件,问题即可解决。

版权声明:除特殊说明,博客文章均为phyger原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。来自:https://u1s1.vip/archives/192
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇