《Terraform 101 从入门到实践》 第二章 Providers插件管理

news2024/11/25 0:27:45

《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。


不怕出身低,行行出状元。

插件

Terraform可以对多种平台的多种资源进行管理,这个是通过插件来实现的。

这里的插件,在Terraform的世界也叫Providers,也是一个个可执行文件。不同的插件完成不同的功能,对接AWS,就要使用AWS的插件;对接GCP,就要用GCP的插件。

当我们通过terraform init初始化一个项目时,Terraform就会根据配置帮我们下载插件。在我们执行apply的时候,就会调用这些插件实现对应的资源管理。

我们可以到官方仓库( https://registry.terraform.io/browse/providers )去搜有什么插件可用,这里有极其丰富的插件,也有详细的使用说明:

接下来,我们就插件探讨几个问题:

  • 怎么指定下载哪些插件和版本号?
  • 从哪里下载?
  • 下载到什么地方?
  • 没有对插件库有访问权限的环境下怎么处理?
  • 是否每个项目都要下载相同的插件?

指定下载哪些插件和版本

Terraform是通过解析required_providers知道需要哪些插件,一般习惯是定义一个verion.tf文件,把相关配置都放在这个文件里,比如:

terraform {
  required_version = "= v1.0.11"

  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "= 2.1.0"
    }
    random = {
      source  = "hashicorp/random"
      version = "3.1.0"
    }
  }
}

这个文件定义了Terraform核心组件的版本,还定义了local和random插件及其版本号。上面指定Terraform版本为1.0.11,local版本为2.1.0,random版本为3.1.0。

我们看这里的版本号有两个等于=号,会不会觉得奇怪?其实这是HCL语言的一个特性,除了=号,还可以是><=等,这样可以指定版本范围,而不只是某个特定版本。

从哪里下载

可以通过命令terraform providers查看当前项目配置的插件是从哪里下载的。如下:

$ terraform providers

Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.terraform.io/hashicorp/local] 2.1.0

默认是从官方的公共仓库registry.terraform.io下载的。

如果需要指定其它仓库,代码如下:

terraform {
  required_version = "= v1.0.11"

  required_providers {
    local = {
      source  = "hashicorp/local"
      version = "= 2.1.0"
    }
    random = {
      source  = "hashicorp/random"
      version = "3.1.0"
    }
    pkslowcloud = {
      source  = "registry.pkslow.com/examplecorp/pkslowcloud"
      version = "0.1.0"
    }
  }
}

这里pkslowcloud就是使用自定义的仓库地址,执行providers命令如下:

$ terraform providers

Providers required by configuration:
.
├── provider[registry.terraform.io/hashicorp/local] 2.1.0
├── provider[registry.terraform.io/hashicorp/random] 3.1.0
└── provider[registry.pkslow.com/examplecorp/pkslowcloud] 0.1.0

注意:pkslowcloud实际不存在,大家不必尝试下载使用。

下载到什么地方

执行terraform init进行初始化,就会下载插件:

$ terraform init

Initializing the backend...

Initializing provider plugins...
- Finding hashicorp/random versions matching "3.1.0"...
- Finding hashicorp/local versions matching "2.1.0"...
- Installing hashicorp/random v3.1.0...
- Installed hashicorp/random v3.1.0 (signed by HashiCorp)
- Installing hashicorp/local v2.1.0...
- Installed hashicorp/local v2.1.0 (signed by HashiCorp)

执行完init命令后,当前工作目录就会有一个.terraform文件夹,这里就放了插件的程序。目录结构如下:

$ tree -a
.
├── .terraform
│   └── providers
│       └── registry.terraform.io
│           └── hashicorp
│               ├── local
│               │   └── 2.1.0
│               │       └── darwin_amd64
│               │           └── terraform-provider-local_v2.1.0_x5
│               └── random
│                   └── 3.1.0
│                       └── darwin_amd64
│                           └── terraform-provider-random_v3.1.0_x5

没有网络环境怎么办

在有些情况下,并不能直接访问Terraform的公共仓库去下载插件,如果可以从其它地方复制一份插件,并可以使用,那岂不是美哉?Terraform已经考虑了这种需求。

首先它支持有网络环境的机器把当前目录的插件复制到特定目录,命令如下:

$ terraform providers mirror /Users/larry/Software/terraform/plugins
- Mirroring hashicorp/local...
  - Selected v2.1.0 to meet constraints 2.1.0
  - Downloading package for darwin_amd64...
  - Package authenticated: signed by HashiCorp
- Mirroring hashicorp/random...
  - Selected v3.1.0 to meet constraints 3.1.0
  - Downloading package for darwin_amd64...
  - Package authenticated: signed by HashiCorp

查看一下目录结构,Terraform会打包好插件为zip文件:

$ tree -a /Users/larry/Software/terraform/plugins
/Users/larry/Software/terraform/plugins-localdisk
└── registry.terraform.io
    └── hashicorp
        ├── local
        │   ├── 2.1.0.json
        │   ├── index.json
        │   └── terraform-provider-local_2.1.0_darwin_amd64.zip
        └── random
            ├── 3.1.0.json
            ├── index.json
            └── terraform-provider-random_3.1.0_darwin_amd64.zip

下次我们可以指定插件目录实现复用:

$ terraform init -plugin-dir=/Users/larry/Software/terraform/plugins

Initializing the backend...

Initializing provider plugins...
- Reusing previous version of hashicorp/random from the dependency lock file
- Reusing previous version of hashicorp/local from the dependency lock file
- Using previously-installed hashicorp/random v3.1.0
- Using previously-installed hashicorp/local v2.1.0

看日志可以看到,Terraform不再下载,而是重用插件。

执行完命令init后,再查看terraform version,则会显示插件的版本:

$ terraform version
Terraform v1.0.11
on darwin_amd64
+ provider registry.terraform.io/hashicorp/local v2.1.0
+ provider registry.terraform.io/hashicorp/random v3.1.0

Terraform对于这种插件目录重用的支持,不只是zip包,二进制也是支持的,但对应的目录结果有点不一样。这里不展开介绍了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/333607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

隐私计算概览

1、政策背景与应用驱动 1、国内政策法规 2022年1月&#xff0c;十四五规划&#xff1a;初步建立数据源要素市场体系&#xff0c;在保护数据安全和用户隐私前提下&#xff0c;参与数据价值开发。2022年3月&#xff0c;国务院《关于构建更加完善的要素市场化配置体制机制的意见…

java面试题(十七)spring

2.1 请你说说Spring的核心是什么 参考答案 Spring框架包含众多模块&#xff0c;如Core、Testing、Data Access、Web Servlet等&#xff0c;其中Core是整个Spring框架的核心模块。Core模块提供了IoC容器、AOP功能、数据绑定、类型转换等一系列的基础功能&#xff0c;而这些功能…

Python|每日一练|广度优先搜索|字符串|贪心算法|数组|二分查找|单选记录:删除无效的括号|盛最多水的容器|搜索旋转排序数组

1、删除无效的括号&#xff08;广度优先搜索&#xff0c;字符串&#xff09; 给你一个由若干括号和字母组成的字符串 s &#xff0c;删除最小数量的无效括号&#xff0c;使得输入的字符串有效。 返回所有可能的结果。答案可以按 任意顺序 返回。 示例 1&#xff1a; 输入&am…

一文详解 Redis 常见数据类型

一文详解 Redis 常见数据类型1.Redis 数据类型2.String3.key的层级格式4.Hash5.List6.Set7.SortedSet1.Redis 数据类型 Redis支持五种基本数据类型&#xff1a;string&#xff08;字符串&#xff09;&#xff0c;hash&#xff08;哈希&#xff09;&#xff0c;list&#xff08…

Cadence OrCAD 16.6 原理图导出带标签pdf(免费软件版)

Cadence OrCAD 16.6原理图导出带标签pdf&#xff08;免费软件版&#xff09; Cadence OrCAD 16.6 导出有标签的原理图&#xff0c;页面导航、跨页符、元件封装等&#xff0c;更方便阅读。找了一些可用的免费软件。 安装软件 系统win10 22H2&#xff0c;OrCAD SPB 16.6 根据…

odoo16内置机器人对接chatgpt模块源码分析

首先分析 __manifest__.py 代码 # -*- coding: utf-8 -*- # Copyright (c) 2020-Present InTechual Solutions. (<https://intechualsolutions.com/>){name: Odoo ChatGPT Integration,version: 16.0.1.0.1,license: AGPL-3,summary: Odoo ChatGPT Integration,descript…

Boom 3D最新2023电脑版音效增强软件

Boom 3D是适用于Mac和Windows系统的专业音效增强软件&#xff0c;旨在通过播放器&#xff0c;媒体或流媒体服务等介质&#xff0c;在不同类型的耳机上以3D环绕效果播放媒体内容。您无需使用昂贵的耳机或其他附加环绕音效增强器即可感受3D环绕音乐。 Boom 3D专业音效增强软件&am…

CHI一致性概述

硬件保证一致性使得系统功能部件能够在不需要软件编程参与的情况下共享内存。如果任意两个组件对相同地址单元进行写访问&#xff0c;且系统内所有组件看到的这两个写访问顺序是相同&#xff0c;那么这个地址具有一致性属性。 一致性模型 参见下图&#xff0c;每个请求部件RN…

@LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析

背景 最近引入了 Nacos Config 配置管理能力&#xff0c;说起来用法很简单&#xff0c;还是踩了三个坑。 Nacos Config 的 nacos 的帐号密码加密配置后&#xff0c;怎么解密而且在 NacosConfigBootstrapConfiguration 真正注入 Nacos Config 注入之前&#xff0c;而且不能触发…

十分钟利用环信WebIM-vue3-Demo,打包上线一个即时通讯项目【含音视频通话】

这篇文章无废话&#xff0c;只教你如果接到即时通讯功能需求&#xff0c;十分钟利用环信WebIM-vue3-Demo&#xff0c;打包上线一个即时通讯项目【包含音视频通话功能】。 写这篇文章是因为&#xff0c;结合自身情况&#xff0c;以及所遇到的有同样情况的开发者在接到即时通讯&a…

VS+QT项目创建及配置设置

1.创建QT项目 选择MSV2015 32 (与VS一致即可) 2.在VS中 Qt VS Tools-OpenQtProjectFiles(.pro) 打开QT项目。 3.VS属性页中设置配置 &#xff08;1&#xff09;修改SDK版本和 平台工具集 &#xff08;2&#xff09;更改输出目录 &#xff08;3&#xff09;确认Qt Project …

设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)

工厂模式 Factory Pattern&#xff08;简单工厂、工厂方法、抽象工厂&#xff09; 工厂模式-创建型模式-提供了创建对象的最佳方式。 在工厂模式中&#xff0c;创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过一个共同的接口来创建新的对象。 简单工厂 简单工厂…

微服务负载均衡器Ribbon

目录 什么是Ribbon 客户端的负载均衡 服务端的负载均衡 常见负载均衡算法 Nacos使用Ribbon 添加LoadBalanced注解 修改controller Ribbon负载均衡策略 IRule AbstractLoadBalancerRule 修改默认负载均衡策略 自定义负载均衡策略 配置自定义的策略 饥饿加载 Ribbo…

Codeforces Round #699 (Div. 2)

E. 题意:n本书,每本书有颜色a[i],一次操作可以将其中一本书放在末尾,求满足:相同颜色的书都是相邻的 的最小操作次数. 显然最多只需要n次,考虑能节省多少次.倒着考虑,记f[i]为i~n最多能节约的次数.先预处理出每种颜色的出现的位置范围l[i],r[i]. 1.不节约这本书f[i] f[i 1]…

Linux文件,目录IO类系统调用总结与示例

tags: C Syscall Linux 写在前面 无论是做网络编程还是系统编程, 逃不开的一个内容就是C系统调用的学习, 正如C的STL一样, 学习OS也有如下的三步骤: 会使用: 熟悉API懂原理: 分析源码写扩展: 实际开发 现在就来熟悉一下系统调用吧. 环境Ubuntu x86_64. 源码部分也参考了apu…

2023抓住这些风口,让你的服装生意一路狂飙!

如今正是消费回暖的大好时机&#xff0c;想要趁着行情回升大展身手的服装商户们&#xff0c;抓住2023的这些风口&#xff0c;生意一路狂飙不是梦&#xff01;风口1&#xff1a; T 恤和运动衫全球纺织信息透露&#xff0c;在全球范围内&#xff0c;T 恤和运动衫的市场规模将在 2…

骑车不戴头盔识别检测系统 Tesnorflow

骑车不戴头盔识别检测系统通过GPU深度学习技术&#xff0c;骑车不戴头盔识别检测对行驶在马路上的骑电动摩托车等未戴头盔的行为进行抓拍&#xff0c;不经过人为干预自动对上述违规行为进行自动抓拍识别。骑车不戴头盔识别检测系统技术上采用 TesnorflowTensorRT推理组合&#…

Qt学习笔记

文章目录一、C指针函数驼峰命名法、下划线命名法编程报错二、C三、Qt语法Qt历史、Qt应用Qt特色快捷键Qt类的族谱QWidgetQPushButtonQDebug对象树Qt窗口坐标信号和槽Qt自带的信号的槽自定义的信号和槽Qt4版本 vs Qt5版本 的connect写法函数指针解决重载问题拓展类型转换QString …

Minikube vs. kind vs. k3s vs k3d vs MicroK8s

文章目录1. minikube2. k3s3. k3d4. Kind5. MicroK8s1. minikube minikube 是一个 Kubernetes SIG 项目&#xff0c;已经启动三年多了。它采用生成虚拟机的方法&#xff0c;该虚拟机本质上是一个单节点 K8s 集群。由于支持大量管理程序&#xff0c;它可以在所有主要操作系统上…

项目管理基础

项目的特点 项目是为提供独特产品、服务或成果所做的临时性努力 临时性&#xff08;一次性&#xff0c;指项目有明确的开始时间和结束时间&#xff09;独特性逐步完善-渐进明细资源约束目的性 项目的三重制约&#xff1a; 成本 质量 时间 其次还有范围 目标&#xff1a;多快…