使用Terraform在vSphere上部署CoreOS虚拟机
我在尝试使用Terraform在vsphere上部署CoreOS虚拟机时遇到了很大困难 到目前为止,这是我正在使用的地形文件:使用Terraform在vSphere上部署CoreOS虚拟机,terraform,coreos,vsphere,Terraform,Coreos,Vsphere,我在尝试使用Terraform在vsphere上部署CoreOS虚拟机时遇到了很大困难 到目前为止,这是我正在使用的地形文件: # Configure the VMware vSphere Provider. ENV Variables set for Username and Passwd. provider "vsphere" { vsphere_server = "192.168.105.10" allow_unverified_ssl = true } provider "ign
# Configure the VMware vSphere Provider. ENV Variables set for Username and Passwd.
provider "vsphere" {
vsphere_server = "192.168.105.10"
allow_unverified_ssl = true
}
provider "ignition" {
version = "1.0.0"
}
data "vsphere_datacenter" "dc" {
name = "Datacenter"
}
data "vsphere_datastore" "datastore" {
name = "vol_af01_idvms"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_resource_pool" "pool" {
name = "Cluster_rnd/Resources"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_network" "network" {
name = "VM Network"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
data "vsphere_virtual_machine" "template" {
name = "coreos_production"
datacenter_id = "${data.vsphere_datacenter.dc.id}"
}
# Create a folder
resource "vsphere_folder" "TestPath" {
datacenter_id = "${data.vsphere_datacenter.dc.id}"
path = "Test"
type = "vm"
}
#Define ignition data
data "ignition_networkd_unit" "vmnetwork" {
name = "00-ens192.network"
content = <<EOF
[Match]
Name=ens192
[Network]
DNS=8.8.8.8
Address=192.168.105.27/24
Gateway=192.168.105.1
EOF
}
data "ignition_config" "node" {
networkd = [
"${data.ignition_networkd_unit.vmnetwork.id}"
]
}
# Define the VM resource
resource "vsphere_virtual_machine" "vm" {
name = "terraform-test"
folder = "${vsphere_folder.TestPath.path}"
resource_pool_id = "${data.vsphere_resource_pool.pool.id}"
datastore_id = "${data.vsphere_datastore.datastore.id}"
num_cpus = 2
memory = 1024
guest_id = "other26xLinux64Guest"
network_interface {
network_id = "${data.vsphere_network.network.id}"
}
disk {
name = "terraform-test.vmdk"
size = "${data.vsphere_virtual_machine.template.disks.0.size}"
eagerly_scrub = "${data.vsphere_virtual_machine.template.disks.0.eagerly_scrub}"
thin_provisioned = "${data.vsphere_virtual_machine.template.disks.0.thin_provisioned}"
}
clone {
template_uuid = "${data.vsphere_virtual_machine.template.id}"
}
extra_config {
guestinfo.coreos.config.data.encoding = "base64"
guestinfo.coreos.config.data = "${base64encode(data.ignition_config.node.rendered)}"
}
}
#配置VMware vSphere提供程序。为用户名和密码设置的环境变量。
提供程序“vsphere”{
vsphere_server=“192.168.105.10”
允许\u未验证\u ssl=true
}
供应商“点火”{
version=“1.0.0”
}
数据“vsphere_数据中心”“dc”{
name=“数据中心”
}
数据“vsphere_数据存储”“数据存储”{
name=“vol_af01_idvms”
datacenter_id=“${data.vsphere_datacenter.dc.id}”
}
数据“vsphere\u资源\u池”“池”{
name=“集群\研究/资源”
datacenter_id=“${data.vsphere_datacenter.dc.id}”
}
数据“vsphere_网络”“网络”{
name=“虚拟机网络”
datacenter_id=“${data.vsphere_datacenter.dc.id}”
}
数据“vsphere\u虚拟机”模板{
name=“coreos_生产”
datacenter_id=“${data.vsphere_datacenter.dc.id}”
}
#创建文件夹
资源“vsphere_文件夹”“测试路径”{
datacenter_id=“${data.vsphere_datacenter.dc.id}”
path=“测试”
type=“vm”
}
#定义点火数据
数据“点火网络”装置“vmnetwork”{
name=“00-ens192.网络”
内容=编辑(2018-03-02)
从terraform vsphere provider的1.3.0版开始,有一个新属性可用。使用此属性,无需像我在第一个回答中所做的那样使用VMware PowerCLI调整虚拟机
有一个使用此属性的完整示例
现在的机器定义如下所示:
...
clone {
template_uuid = "${data.vsphere_virtual_machine.template.id}"
}
vapp {
properties {
"guestinfo.coreos.config.data.encoding" = "base64"
"guestinfo.coreos.config.data" = "${base64encode(data.ignition_config.node.rendered)}"
}
...
旧答案
终于让它工作了
我使用Terraform在vSphere上创建CoreOS机器的工作流如下:
从下载最新的容器Linux Stable OVA
将coreos\u production\u vmware\u ova.ova导入vCenter
根据需要编辑机器设置(CPU数量、磁盘大小等)
禁用虚拟机的“vApp选项”
将虚拟机转换为虚拟机模板
完成此操作后,您就有了一个CoreOS虚拟机模板,可以与Terraform一起使用
正如我在对该问题的评论中所说,几天前我发现,这让我明白,我的问题可能与无法执行步骤4有关
问题是,要禁用“vApp选项”(即在UI中查看虚拟机的“vApp选项”选项卡),您需要在vSphere群集中启用DSR,要启用DSR,您的主机必须使用支持DRS的密钥进行许可。我的密钥不支持,所以我被困在第四步
我写信给VMware支持部门,他们告诉我一种替代方法,无需购买其他许可证
这可以使用VMware PowerCLI完成。以下是安装PowerCLI的步骤,也是参考。一旦安装了PowerCLI,这就是我用来在我的计算机中禁用“vApp选项”的脚本:
Import-Module VMware.PowerCLI
#connect to vcenter
Connect-VIServer -Server yourvCenter -User yourUser -Password yourPassword
#Use this to disable the vApp functionality.
$disablespec = New-Object VMware.Vim.VirtualMachineConfigSpec
$disablespec.vAppConfigRemoved = $True
#Use this to enable
$enablespec = New-Object VMware.Vim.VirtualMachineConfigSpec
$enablespec.vAppConfig = New-Object VMware.Vim.VmConfigSpec
#Get the VM you want to work against.
$VM = Get-VM yourTemplate | Get-View
#Disables vApp Options
$VM.ReconfigVM($disablespec)
#Enables vApp Options
$VM.ReconfigVM($enablespec)
我在Powershell上执行了这一操作,并成功地重新配置了虚拟机,执行了第四步。通过这一步,我终于为这个场景正确配置了CoreOS虚拟机模板
我已经使用terraform vSphere provider版本v0.4.2和v1.1.0(语法更改)对此进行了测试,机器创建正确;点火设置工作正常,并且您在点火文件中添加的所有内容(网络配置、用户等)都有效在新创建的机器上应用。一个好的起点是输出渲染的点火配置,以查看它是否符合预期。如果需要有关如何操作的指导,请联系。@DanCat我已经这样做了,文件是正确的。根据github的评论,我怀疑我的问题与我设置的vApp选项有关不能取消选中(由于我们没有相应的VMware许可证,我的虚拟机中缺少该选项)。我向VMware支持部门发送了一封电子邮件,解释了我的情况,正在等待答复。如何对点火配置进行更改?@Dhawal我使用Terraform点火提供程序