当前位置: 首页 > news >正文

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

《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 providersProviders 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 providersProviders 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 initInitializing 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/pluginsInitializing 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包,二进制也是支持的,但对应的目录结果有点不一样。这里不展开介绍了。

相关文章:

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

《Terraform 101 从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新&#xff0c;书中的示例代码也是放在GitHub上&#xff0c;方便大家参考查看。 不怕出身低&#xff0c;行行出状元。 插件 Terraform可以对多种平台的多种资源进行管理&#xff0c;这个是通过…...

03- pandas 数据库可视化 (机器学习)

pandas库的亮点: 一个快速、高效的DataFrame对象&#xff0c;用于数据操作和综合索引&#xff1b;用于在内存数据结构和不同格式之间读写数据的工具&#xff1a;CSV和文本文件、Microsoft Excel、SQL数据库和快速HDF 5格式&#xff1b;智能数据对齐和丢失数据的综合处理&#…...

Spring为什么这么火 之 Bean的6种作用域和Bean的生命周期

1、Bean的作用域 1.1、什么是作用域&#xff1f; 限定程序中变量的可用范围叫做作用域&#xff0c;或者说在源代码中定义变量的某个区域就叫做作用域 1.2、Bean的6种作用域 singleton&#xff1a;单例作用域prototype&#xff1a;原型作用域【多例作用域】request&#xff1…...

【CSS面试题】2023前端最新版css模块,高频15问

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;博主收集的CSS面试题 目录 一、CSS必备面试题 1.CSS3新特性 2.CSS实现元素两个盒子垂…...

SpringCloud-Netflix学习笔记10——Hystrix实现服务熔断

一、概述 1、分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系&#xff0c;每个依赖关系在某些时候将不可避免的失败&#xff01; 2、服务雪崩 多个微服务之间调用的时候&#xff0c;假设微服务A调用微服务B和微服务C&#xff0c;微服务B 和微服务C又…...

精华文稿|迈向统一的点云三维物体检测框架

分享嘉宾 | 杨泽同 文稿整理 | William 嘉宾介绍 Introduction 3D检测是在三维世界中去定位和分类不同的物体&#xff0c;与传统2D检测的区别在于它有一个深度信息。目前&#xff0c;大部分的工作是倾向于用点云去做三维检测&#xff0c;点云实际上是通过传感器去扫描出来的一…...

面试题:Redis网络模型

1 用户空间和内核空间以Centos 7 linux操作系统为例。计算机系统被内核操控&#xff0c; 内核被应用操控。为了避免用户应用导致冲突甚至内核崩溃&#xff0c;用户应用与内核是分离的进程的寻址空间会划分为两部分:内核空间、用户空间。用户空间只能执行受限的命令(Rin3&#x…...

微信小程序开发你可能不知道的开发技巧

1. 页面级data&#xff0c;组件data的查看 页面级data的查看&#xff0c;很多开发者应该都知道&#xff1b;组件级的数据查看我是开发了大半年才发现的&#xff1b; 页面级的data查看&#xff1a; 组件的data查看&#xff1a; 2. 放大模拟器【调整一些UI细节】 效果&#x…...

STM32开发(8)----CubeMX配置串口通讯(中断方式和DMA方式)

CubeMX配置串口通讯&#xff08;中断方式和DMA方式&#xff09;前言一、中断方式1.CubeMX配置2.代码实现3.实验结果二、DMA方式1.CubeMX配置2.代码实现3.实验结果总结前言 本章继续介绍使用STM32CubeMX对串口进行配置的方法&#xff0c;串口通讯有三种方式&#xff1a;轮询&am…...

7.1 微服务-SpringCloud(二)

目录 前言 7.1.5 Hystrix 7.1.5.1 什么是Hystrix 7.1.5.2 雪崩问题 7.1.5.3 线程隔离&#xff0c;服务降级 7.1.5.4 搭建 7.1.5.4.1 引入依赖 7.1.5.4.2 开启熔断 7.1.5.4.3 编写降级逻辑 1.局部降级逻辑 2.全局降级逻辑 7.1.5.4.4 设置超时 7.1.5.5 服务熔断 7.…...

Spring的AOP开发-基于xml配置的AOP

Spring的AOP开发-基于xml配置的AOP xml方式AOP快速入门 通过配置文件的方式解决以下问题 配置哪些包、哪些类、哪些方法需要被增强配置目标方法要被哪些通知方法所增强&#xff0c;在目标方法执行之前还是之后执行增强 配置方式的设计、配置文件(注解)&#xff0c;Spring已…...

JAVA的垃圾收集器与内存分配策略【一篇文章直接看懂】

内存动态分配和垃圾收集技术是JAVA和C之间最大的区别之一 垃圾收集&#xff08;Garbage Collection&#xff0c;GC&#xff09;只办三件事&#xff1a; 哪些内存需要回收什么时候回收如何回收 对于对象回收的方法 引用计数法&#xff1a; 每处引用时1&#xff0c;引用失效…...

NLP学习——信息抽取

信息抽取 自动从半结构或无结构的文本中抽取出结构化信息的任务。常见的信息抽取任务有三类&#xff1a;实体抽取、关系抽取、事件抽取。 1、实体抽取 从一段文本中抽取出文本内容并识别为预定义的类别。 实体抽取任务中的复杂问题&#xff1a; 重复嵌套&#xff0c;原文中…...

【深度学习基础7】预训练、激活函数、权重初始化、块归一化

一、Unsupervised Pre-training 得益于 Hinton and Salakhutdinov 在 2006 年的开创性工作— 无监督预训(unsupervised pre-training);在《Reducing the dimensionality of data with neural networks.》这篇论文中,他们在 RBMs 中引入无监督预训练,下面我们将在Autoenco…...

MetaMQ

文章目录MetaMQMetaMQ 的优势在于&#xff1a;MetaMQ 的劣势也有&#xff1a;MetaMQ MetaMQ 是一个基于以太坊的可扩展分布式消息队列&#xff08;MQ&#xff09;系统&#xff0c;它可以支持大规模的分布式应用程序。MetaMQ 是一个开放源代码项目&#xff0c;它支持企业级应用程…...

热门盘点 | 10款评分最高的项目管理工具

项目管理软件可以让项目经理及时掌握项目进展可把复杂的任务分解简单帮助项目经理及时了解整个团队进展随着现代项目需求日趋复杂和个性选一个好的项目管理软件还是很有必要的① PingCode国内研发项目管理软件PingCode&#xff0c;它是国内软件研发项目榜单中评分最高的项目管理…...

若依框架---分页功能

继前几天我们学习若依管理系统中的代码生成工具&#xff0c;我们发现若依系统中还要很多值得学习的地方。今天我们来学习若依管理系统中的分页工具。 若依管理系统是前后端分离的&#xff08;准确的说&#xff0c;若依有前后端分离版本&#xff09;。 前端 若依前端的分页没…...

CHAPTER 3 Jenkins SVN GItlab

Jenkins SVN GItlab3.1 JenkinsSVN3.1.1 搭建SVN服务器1. 安装svn server2. 查看svn安装位置3. 创建版本库目录4. 创建svn版本库5. 配置修改6. 防火墙开启3690端口7. 启动SVN-server8. 客户端访问svn服务器3.1.2 测试脚本提交3.1.3 jenkins下载代码配置1. 安装Subversion插件2.…...

为什么Redis集群的最大槽数是16384个?

对于客户端请求的key&#xff0c;根据公式HASH_SLOTCRC16(key) mod 16384&#xff0c;计算出映射到哪个分片上&#xff0c;然后Redis会去相应的节点进行操作&#xff01; 为什么有16384个槽&#xff1f; Redis集群并没有使用一致性hash而是引入了哈希槽的概念。Redis 集群有16…...

餐饮企业数据可视化大屏(智慧餐饮)

随着信息技术的深入发展&#xff0c;数据大屏的适用场景日益广泛&#xff0c;集工作汇报、实时监控和预测分析等功能于一身。 数据可视化的本质是视觉对话&#xff0c;数据可视化将数据分析技术与图形技术结合&#xff0c;清晰有效地将分析结果信息进行解读和传达。 当前很多餐…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...