2017-12-14 44 views
1

Terraformを使用してvSphereにCoreOS仮想マシンを展開しようとするのは本当に困難です。私は、このようなネットワーク構成などの仮想マシンのカスタマイズの詳細を渡すために仮想マシンと点火プロバイダを作成するために、テラフォームののvSphere provierを使用してい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 "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)}" 
    } 
} 

は、これまでのところ、これは私が使用しているテラフォームファイルであります。

仮想マシン定義でextra_configプロパティを正しく使用しているかどうかはわかりません。そのプロパティのドキュメントはhereです。

仮想マシンは作成されますが、ネットワーク設定は適用されません。これは、イグニッションプロビジョニングが正しく機能していないことを意味します。

この特定のシナリオ(Vsphere環境とCoreOS仮想マシン)でTerraformを適切に設定する方法、特にguestinfoの設定については、どのような指針もありがとうございます。

  • テラフォームのv0.11.1、provider.ignition v1.0.0デベロッパー、provider.vsphere v1.1.0デベロッパー

  • のVMware ESXiの、6.5.0、5310538

  • CoreOS 1520.0.0

+0

良い出発点は、レンダリングされた点火設定を出力して、それが予想通りであるかどうかを確認することです。それを行う方法についてガイダンスが必要な場合は、手を差し伸べてください。 – DanCat

+0

@DanCat私はすでにそれを行い、ファイルは正しいです。 githubからの[this](https://github.com/coreos/tectonic-installer/issues/1729#issuecomment-323556282)のコメントに基づいて、私は自分の問題がそのvAppオプション設定に関係していると思っています。 (私たちが適切なVMwareライセンスを所有していないため、仮想マシンには欠けている)。私はVMwareのサポートに私の状況を説明する電子メールを送って、私は答えを待っています。 – amarruedo

答えて

2

EDIT(2018年3月2日)

terraform vsphereプロバイダのバージョン1.3.0では、新しいvAppプロパティが利用可能です。このプロパティを使用すると、最初の回答と同じように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)}" 
    } 

    ... 

OLD ANSWER

最後にこの作業を得た:

は次のようになります。このプロパティhere

マシン定義を使用しての完全な例があります。

私は次のようにTerrafomrが使用してvSphereの上CoreOSマシンを作成するために使用したワークフロー:

  1. https://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_ova.ovaから最新のコンテナのLinux安定したOVAをダウンロードしてください。
  2. coreos_production_vmware_ova.ovaをvCenterにインポートします。
  3. マシン設定を必要に応じて編集します(CPU数、ディスクサイズなど)
  4. 仮想マシンの「vAppオプション」を無効にします。
  5. 仮想マシンを仮想マシンテンプレートに変換します。

これを実行すると、Terraformで使用できるようになったCoreOS仮想マシンテンプレートが得られます。

私はthisを発見し、それは私の問題は、事はすることにあるステップ4

を行うことができないに関連している可能性があることを理解するために私をリードし、いくつかの日前に、質問へのコメントで言ったようにvSphereクラスタでDSRが有効になっている必要がある場合は、「vAppオプション」を無効にする(つまり、仮想マシンの「vAppオプション」タブをUIで表示する)ことができ、DSRを有効にできるようにするには、 DRSをサポートする鍵。私はそうではなかったので、私はその第4ステップで立ち往生しました。

私は、VMwareのサポートに書いた、そして、彼らは別のライセンスを購入することなく、私はこれを行うための別の方法を語りました。

これは、VMware PowerCLIを使用して行うことができます。 HereはPowerCLIをインストールする手順であり、hereが参考になります。あなたは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仮想マシンテンプレートが正しく構成されました。

私はテラフォームのvSphereのプロバイダのバージョンv0.4.2とv1.1.0デベロッパー(構文の変更)でこれをテストしてみたし、マシンが正しく作成されます。点火プロビジョニングの作業や、イグニッションファイル(ネットワークコンフィグ、ユーザーなど)に置いたすべてが新しく作成されたマシンに適用されます。

関連する問題