建议和反馈

请填写你的反馈内容

带有Terraform的Azure VM自定义脚本扩展

2019-12-03 ·2226次阅读 ·读完需要4分钟

Terraform提供对Azure虚拟机自定义脚本扩展的支持,该扩展通常用于配置新创建的虚拟机并对其进行准备,以使其准备执行其角色。这些自定义脚本中执行的典型任务包括安装其他软件包,配置系统服务,创建用户等。

在非常简单的情况下,可以将自定义脚本定义为简单脚本commandToExecute,例如,如果仅需要安装软件包即可。但是,在大多数情况下,需要运行更复杂的脚本来执行配置。您可以使用来指定要从网络位置下载的脚本fileUris,但是会创建对外部组件的依赖关系,并且可能导致某些问题,例如,如果网络位置不可达,或者您想确切地找到哪个位置在过去的部署中使用并执行了该脚本的版本。

如自定义脚本文档中所述,您还可以在扩展设置中将整个脚本作为script属性中的Base64编码的字符串传递这是一个不错的解决方案,其中脚本包含在部署中,没有外部依赖项。

Terraform提供了几种以script非常简单的方式组装此属性的方法。

最简单的方法是使用该filebase64功能,功能将读取文件,并使用Base64对其进行编码,然后将结果包括在资源配置中。

resource "azurerm_virtual_machine_extension" "test" {
  name                 = "hostname"
  location             = "${azurerm_resource_group.test.location}"
  resource_group_name  = "${azurerm_resource_group.test.name}"
  virtual_machine_name = "${azurerm_virtual_machine.test.name}"
  publisher            = "Microsoft.Azure.Extensions"
  type                 = "CustomScript"
  type_handler_version = "2.0"
  settings = <

如果需要向脚本传递一些值,另一种选择是使用templatefileTerraform 0.12和更高版本中提供的新功能。这使您可以读取文件的内容,并使用一组提供的变量将其呈现为模板。使用此功能,您可以使用通常的${ ... }序列将Terraform配置中的任何变量传递给脚本您还必须使用该base64encode函数对结果进行显式Base64编码。

resource "azurerm_virtual_machine_extension" "test" {
  name                 = "hostname"
  location             = "${azurerm_resource_group.test.location}"
  resource_group_name  = "${azurerm_resource_group.test.name}"
  virtual_machine_name = "${azurerm_virtual_machine.test.name}"
  publisher            = "Microsoft.Azure.Extensions"
  type                 = "CustomScript"
  type_handler_version = "2.0"
  settings = <

在此示例中,我们传递了一个vmname变量,变量使用的值进行了初始化azurerm_virtual_machine.test.name可以使用以下语法在脚本中使用此变量:

#!/bin/shecho "This is a test script."echo "This machine name is: ${vmname}"

我发现这是一种使配置脚本与Terraform配置分开的非常干净,简单的方法,但是最终仍然得到了一个完整的资源定义,而没有外部依赖性。


评论(0)问答(0)
请先登录或注册

请先登陆或注册

相关推荐

如何解释“我篡改了区块链”这个问题

区块链数据“全局一致”、“难以篡改”这两个特性已经广为人知,是区块链营造“信任”的基石。为了达到这两个效果,区块链的共识、同步、校验等技术细节足可大书特书,而本文要从“我篡改了区块链数据”讲起。“我篡......
Moon · 2020-07-03
1814阅读 · 0赞赏 · 0问答

漏洞分析 | 一千种死法之 智能合约函数调用错误

6.18期间正愁”千手观音“还不够剁,如果一觉醒来,突然发现爸妈的账户可以随便用了,前男友的钱因为权限设置错误而面对你以及他所有前女友开放了。不是天上掉馅饼,而是老天可能漏了个洞。我的是我的,你的还是......
Rooney · 2020-06-27
1332阅读 · 0赞赏 · 0问答

波卡启动 NPoS,几个知识点了解一下?

Polkadot 今日启动 NPoS(验证人选举),其技术方案也再次引发关注。关于 Polkadot 的几大技术知识点,我们都总结在此了:· Polkadot 网络,中继链、平行链和转接桥· XCMP......
多来A梦 · 2020-06-19
1732阅读 · 0赞赏 · 0问答

区块链 Go并发编程之Channel生产者-消费者模型及单向Channel

生产者与消费者关系在channel中生产者消费者关系可以简单的理解为:生产者和消费者一定是一一配对的状态存在先看一个简单的案例,生产者与消费者关系为1:2package mainimport......
· 2020-06-17
2755阅读 · 0赞赏 · 0问答

区块链 Go并发编程 之 管道 Channel

GO 管道 channel什么是管道管道是Go语言在语言级别上提供的goroutine间的通讯方式,我们可以使用channel在多个goroutine之间传递消息。channel是进程内的通讯方式,是......
Diva · 2020-06-17
2572阅读 · 0赞赏 · 0问答

区块链 GO 并发编程 之 主线程与子线程

基础概念什么是进程?进程:一个正在运行的程序一般是一个进程,一个进程可以包含多个线程 每个进程都有自己的独立的地址空间(内存空间),简单的理解一个运行程序为一个进程什么是线程线程:一条有序的CPU命令......
wind · 2020-06-16
2290阅读 · 0赞赏 · 0问答

VeelDiana

3274

LK币

7

粉丝

44

笔记

感谢"VeelDiana"

这篇精彩的笔记,目前已经帮助

  • 0
  • 2
  • 2
  • 2
  • 6
喜欢0
链客社群 加入

微博进入

商务合作>

广告投放>

公司名称:北京链客行科技有限公司

联系方式:010-67707199

ICP备案号:京ICP备18032136号

Copyright:链客区块链技术问答社区 版权所有

感谢您的提问,问题被社区永久收入以便新人查看。一定要记得采纳最佳答案哦!加油!

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!

您将赞赏给对方2LK币的奖励哦!感谢您的赞赏!