建议和反馈

请填写你的反馈内容

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

2019-12-03 ·1176次阅读 ·读完需要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 = <<SETTINGS
    {
        "script": "${filebase64("custom_script.sh")}"
    }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 = <<SETTINGS
    {
        "script": "${base64encode(templatefile("custom_script.sh", {
          vmname="${azurerm_virtual_machine.test.name}"
        }))}"
    }SETTINGS}

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

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

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


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

请先登陆或注册

相关推荐

开发区块链Android应用的7个基本技巧

在过去的几年中,区块链技术已经改变了我们开发和配置与互联网和移动应用程序相关的所有事物的方式,事实证明,它是近来最具突破性的技术之一,结果,数字业务一直密切关注区块链及其应用。适当配置区块链后,它可以......
区块链论坛 · 2020-01-21
370阅读 · 0赞赏 · 0问答

Ubuntu安装Golang编程语言

在本教程中,我们在Ubuntu Linux上安装了Google Go编程语言。然后,我们使用GOPATH环境变量配置Go Workspace环境。Golang,也称为Go,是Google开发的一种开源......
波bobo · 2020-01-20
392阅读 · 0赞赏 · 0问答

GOPROXY手册

1.环境手动教程,默认系统是linux,程序是proxy;所有操作都需要root特权;如果您使用的是Windows,请使用Windows版本的proxy.exe。2.使用配置文件下一个教程将通过命令行......
江南烟雨 · 2020-01-20
357阅读 · 0赞赏 · 0问答

如何构建一个基于actor的简单区块链

在本文中,我将展示构建简单区块链原型的开发过程,让我们从对区块链的一些介绍开始。之后,我们可以定义将要实现的简化模型。区块链快速入门有很多很好的文章解释了区块链的工作原理,因此我将做一个高层次的介绍,......
区块链网 · 2020-01-19
472阅读 · 0赞赏 · 0问答

如何使用CGMiner挖比特币

虽然许多人发现简单地购买比特币更容易,但更多的人却发现,比特币挖矿是一件有趣且具有挑战性的事情。比特币挖矿既有趣又有利可图,你可能会认为,上手实际上更容易。在本文中我将解释如何使用GPU和CGMine......
区块链社区 · 2020-01-17
643阅读 · 0赞赏 · 0问答

session工作原理:如何使用、修改及删除等操作

session和Cookie之间存在某种关系,它们的作用有些相同,并且在一定程度上可以互换使用。session已集成到PHP中,是一种在用户浏览网站上的一系列页面或页面迭代时为用户存储和跟踪数据的一种......
社区菲菲 · 2020-01-16
453阅读 · 0赞赏 · 0问答

VeelDiana

2353

LK币

7

粉丝

36

笔记

感谢"VeelDiana"

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

  • 0
  • 1
  • 1
  • 7
  • 6
喜欢0
链客社群 加入

微博进入

商务合作>

广告投放>

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

联系方式:010-67707199

ICP备案号:京ICP备18032136号

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

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

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

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

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