Quick Deploy vm ESXi αž‡αžΆαž˜αž½αž™ Terraform

αžŸαž½αžŸαŸ’αžαžΈαž’αŸ’αž“αž€αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆ αžαŸ’αž‰αž»αŸ†αžˆαŸ’αž˜αŸ„αŸ‡ Ivan αž αžΎαž™αžαŸ’αž‰αž»αŸ†αž‡αžΆαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ’αžšαžΏαž„αžŸαŸ’αžšαžœαžΉαž„ (OPS)αŸ”

αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž”αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž“αŸ…αž›αžΎ ESXi αžŠαŸ„αž™αž‚αŸ’αž˜αžΆαž“ vCenter αžŠαŸ„αž™αž”αŸ’αžšαžΎ Terraform αŸ”

αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™/αž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž‘αžΎαž„αžœαž·αž‰ αžŠαžΎαž˜αŸ’αž”αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸαŸ‡ αž¬αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ„αŸ‡αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž—αžΆαž–αžαŸ’αž‡αž·αž› αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž‚αž·αžαž’αŸ†αž–αžΈαž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αžšαž€αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž“αžΆαŸ†αžαŸ’αž‰αž»αŸ†αž‘αŸ…αžšαž€αž•αž›αž·αžαž•αž›αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžšαž”αžŸαŸ‹αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“ αž αžΆαžŸαŸŠαžΈαžαž”, terraform.

αžαŸ’αž‰αž»αŸ†αž‚αž·αžαžαžΆαž˜αž“αž»αžŸαŸ’αžŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΉαž„αžαžΆ Terraform αž‡αžΆαž’αŸ’αžœαžΈ αž αžΎαž™αž’αŸ’αž“αž€αžŽαžΆαž˜αž·αž“αžŠαžΉαž„ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αž–αž€ αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž¬αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŽαžΆαž˜αž½αž™αžŠαŸ„αž™αž”αŸ’αžšαžΎαž‚αŸ†αž“αž·αž IasC (αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαž€αžΌαžŠ).

αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΎ ESXi αž‡αžΆαž”αžšαž·αžŸαŸ’αžαžΆαž“αž“αž·αž˜αŸ’αž˜αž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ” αžŸαžΆαž˜αž‰αŸ’αž‰ αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αž·αž„αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”
αžαŸ’αž‰αž»αŸ†αžšαŸ†αž–αžΉαž„αžŸαŸ†αžŽαž½αžšαž˜αž½αž™αŸ”

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆ terraform αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ vCenter Server?

αž’αŸ’αž“αž€αž’αžΆαž…αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹, αž”αŸ‰αž»αž“αŸ’αžαŸ‚αŸ” αž‘αžΈαž˜αž½αž™ αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽαž”αž“αŸ’αžαŸ‚αž˜ αž‘αžΈαž–αžΈαžš αž•αž›αž·αžαž•αž›αž“αŸαŸ‡αž‚αžΊαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αžαŸ’αž›αžΆαŸ†αž„αž›αžΎαž’αž“αž’αžΆαž“ αž αžΎαž™αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αž·αž“αžŸαž˜αž“αžΉαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž•αŸ’αž‘αŸ‡αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž‘αŸ αž αžΎαž™αž‘αžΈαž”αžΈαž‚αžΊαžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž±αŸ’αž™αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αž“αžΌαžœαž‡αŸ†αž“αžΆαž‰αŸ”

αžœαŸαž‘αž·αž€αžΆ Intel NUC αžŠαžΎαžšαžαž½αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ–

CPU: 2 CPUs x Intel(R) Core(TM) i3-4010U CPU @ 1.70GHz
RAM: 8Gb
HDD: 500Gb
ESXi version: ESXi-6.5.0-4564106-standard (VMware, Inc.)

αžŠαžΌαž…αŸ’αž“αŸαŸ‡β€‹αž αžΎαž™β€‹αžšαžΏαž„β€‹αžŠαŸ†αž”αžΌαž„β€‹αž‡αžΆβ€‹αžŠαŸ†αž”αžΌαž„αŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αŸαž›αž“αŸαŸ‡ αž…αžΌαžšαž™αžΎαž„αžšαŸ€αž”αž…αŸ† esxi αž–αŸ„αž›αž‚αžΊαž”αžΎαž€αž…αŸ’αžšαž€ VNC αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‡αž‰αŸ’αž‡αžΆαŸ†αž„αž—αŸ’αž›αžΎαž„αŸ”

αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž―αž€αžŸαžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžΆαžšαž–αžΆαžšαž€αžΆαžšαžŸαžšαžŸαŸαžšαŸ” αž™αžΎαž„αž’αž“αž»αžœαžαŸ’αžαž§αž”αžΆαž™αž€αž›αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸˆ

chmod 644 /etc/vmware/firewall/service.xml
chmod +t /etc/vmware/firewall/service.xml
vi /etc/vmware/firewall/service.xml

αž”αž“αŸ’αžαŸ‚αž˜αž”αŸ’αž›αž»αž€αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‘αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž―αž€αžŸαžΆαžšαŸ–

<service id="1000">
  <id>packer-vnc</id>
  <rule id="0000">
    <direction>inbound</direction>
    <protocol>tcp</protocol>
    <porttype>dst</porttype>
    <port>
      <begin>5900</begin>
      <end>6000</end>
    </port>
  </rule>
  <enabled>true</enabled>
  <required>true</required>
</service>

αž…αžΆαž€αž…αŸαž‰, αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ” αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžŸαž·αž‘αŸ’αž’αž·αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž‘αžΎαž„αžœαž·αž‰αŸ–

chmod 444 /etc/vmware/firewall/service.xml
esxcli network firewall refresh

αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαžšαž αžΌαžαžŠαž›αŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‘αžΎαž„αžœαž·αž‰αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž§αž”αžΆαž™αž€αž›αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž„αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαžαŸ‚αž˜αž½αž™αŸ”

αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαžšαž”αžŸαŸ‹αž•αž›αž·αžαž•αž›:

OS: Centos 7 x86_64 minimal
RAM: 1GB
HDD: 20GB
Selinux: disable
firewalld: disable

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš αžαŸ’αž…αž”αŸ‹αž€αŸαž‡αžΆαž•αž›αž·αžαž•αž›αžšαž”αžŸαŸ‹ HashiCorp αž•αž„αžŠαŸ‚αžšαŸ”

αžœαžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžšαžΌαž”αž—αžΆαž– "មអស" αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αžαŸ”

yum install unzip git -y
curl -O https://releases.hashicorp.com/packer/1.5.5/packer_1.5.5_linux_amd64.zip
unzip packer_1.5.5_linux_amd64.zip -d /usr/bin && rm -rf packer_1.5.5_linux_amd64.zip
packer version
Packer v1.5.5

αž“αŸ…αž›αžΎαž…αž›αž“αžΆ αž€αŸ†αžŽαŸ‚αžœαŸαž…αžαŸ’αž…αž”αŸ‹ αž€αŸ†αž αž»αžŸαž’αžΆαž…αž€αžΎαžαž‘αžΎαž„ αžŠαŸ„αž™αžŸαžΆαžš RedHat αžŠαŸ‚αž›αž˜αžΆαž“αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž›αžΎ αž’αžΆαž…αž˜αžΆαž“αž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžŠαžΌαž…αž‚αŸ’αž“αžΆαŸ”

which -a packer
/usr/sbin/packer

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™ αž’αŸ’αž“αž€αž’αžΆαž…αž”αž„αŸ’αž€αžΎαž symlink αž¬αž”αŸ’αžšαžΎαž•αŸ’αž›αžΌαžœαžŠαžΆαž…αŸ‹αžαžΆαž /usr/bin/packer αŸ”

αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžš ovftool αžαŸ†αžŽαž‘αžΆαž‰αž™αž€. αž‘αžΆαž‰αž™αž€ αžŠαžΆαž€αŸ‹αž›αžΎ server αž αžΎαž™αžŠαŸ†αž‘αžΎαž„αŸ–

chmod +x VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
./VMware-ovftool-4.4.0-15722219-lin.x86_64.bundle
Extracting VMware Installer...done.
You must accept the VMware OVF Tool component for Linux End User
License Agreement to continue.  Press Enter to proceed.
VMWARE END USER LICENSE AGREEMENT
Do you agree? [yes/no]:yes
The product is ready to be installed.  Press Enter to begin
installation or Ctrl-C to cancel. 
Installing VMware OVF Tool component for Linux 4.4.0
    Configuring...
[######################################################################] 100%
Installation was successful.

αž™αžΎαž„αž”αž“αŸ’αžαž‘αŸ…αž˜αž»αžαž‘αŸ€αžαŸ”

αž“αŸ…αž›αžΎ gith αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxi

αž‘αŸ…αžαžαž―αž€αžŸαžΆαžš αž’αŸ† αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαžΆαž€αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž…αŸ‚αž€αž…αžΆαž™αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž“αŸαŸ‡αž‚αžΊαž‡αžΆ centos 7 αŸ”

αž’αŸ’αž“αž€αž€αŸαžαŸ’αžšαžΌαžœαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž―αž€αžŸαžΆαžšαž•αž„αžŠαŸ‚αžšαŸ” centos-7-base.json:

variables: ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ свои Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ
iso_urls: ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ
iso_checksum: чСксумма вашСго ΠΎΠ±Ρ€Π°Π·Π° 

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž‡αž½αž”αž”αŸ’αžšαž‡αž»αŸ†αž‚αŸ’αž“αžΆαŸ–

/usr/bin/packer build centos-7-base.json

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αž·αž„αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αŸ„αŸ‡αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž–αž“αŸƒαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ” αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸαŸ‡αž…αŸ†αžŽαžΆαž™αž–αŸαž› 7-8 αž“αžΆαž‘αžΈαŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž”αž‰αŸ’αž…αž”αŸ‹αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αžαž output-packer-centos7-x86_64 αž―αž€αžŸαžΆαžš ova αž“αžΉαž„αž˜αžΆαž“αž‘αžΈαžαžΆαŸ†αž„αž“αŸ…αŸ”

αžŠαŸ†αž‘αžΎαž„ TerraformαŸ–

curl -O https://releases.hashicorp.com/terraform/0.12.24/terraform_0.12.24_linux_amd64.zip
unzip terraform_0.12.24_linux_amd64.zip -d /usr/bin/ && rm -rf terraform_0.12.24_linux_amd64.zip
terraform version
Terraform v0.12.24

αžŠαŸ„αž™αžŸαžΆαžš Terraform αž˜αž·αž“αž˜αžΆαž“αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ ESXi αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαžαž˜αž½αž™αŸ”

αž™αžΎαž„αžŠαžΆαž€αŸ‹αž‘αŸ…αŸ–

cd /tmp
curl -O https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz && rm -rf go1.14.2.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version
go version go1.14.2 linux/amd64

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αžŸαŸαžœαžΆαŸ–

go get -u -v golang.org/x/crypto/ssh
go get -u -v github.com/hashicorp/terraform
go get -u -v github.com/josenk/terraform-provider-esxi
export GOPATH="$HOME/go"
cd $GOPATH/src/github.com/josenk/terraform-provider-esxi
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -ldflags '-w -extldflags "-static"' -o terraform-provider-esxi_`cat version`
cp terraform-provider-esxi_`cat version` /usr/bin

αž™αžΎαž„β€‹αž“αŸ…β€‹αž›αžΎβ€‹αž”αž“αŸ’αž‘αžΆαžαŸ‹β€‹αž”αž‰αŸ’αž…αž”αŸ‹αŸ” αžαŸ„αŸ‡β€‹αž…αŸαž‰β€‹αžšαžΌαž”β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„αŸ”

αžαŸ„αŸ‡αž‘αŸ…αžαžαž―αž€αžŸαžΆαžšαŸ–

cd /root/create-and-deploy-esxi/centos7

αž‡αžΆαž”αž‹αž˜αžŸαžΌαž˜αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž―αž€αžŸαžΆαžš variables.tf. αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ ESXi αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš network_config.cfg αž˜αžΆαž“αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž”αžŽαŸ’αžαžΆαž‰αžšαž”αžŸαŸ‹αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αžαŸ” αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸ…αžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž“αŸ’αž‘αžΆαžαŸ‹αžαŸ‚αž˜αž½αž™αŸ–

sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.json

αž˜αŸ‚αž“αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš main.tf αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž―αž€αžŸαžΆαžš ova αž‘αŸ…αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαžαž»αžŸαž‚αŸ’αž“αžΆαŸ”

αž‚αŸ’αžšαžΆαž“αŸƒαžŸαŸαž…αž€αŸ’αžαžΈαž–αž·αžαŸ”

terraform init
Initializing the backend...

Initializing provider plugins...

The following providers do not have any version constraints in configuration,
so the latest version was installed.

To prevent automatic upgrades to new major versions that may contain breaking
changes, it is recommended to add version = "..." constraints to the
corresponding provider blocks in configuration, with the constraint strings
suggested below.

* provider.esxi: version = "~> 1.6"
* provider.template: version = "~> 2.1"

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

terraform plan
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.

data.template_file.Default: Refreshing state...
data.template_file.network_config: Refreshing state...

------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # esxi_guest.Default will be created
  + resource "esxi_guest" "Default" {
      + boot_disk_size         = (known after apply)
      + disk_store             = "datastore1"
      + guest_name             = "centos7-test"
      + guest_shutdown_timeout = (known after apply)
      + guest_startup_timeout  = (known after apply)
      + guestinfo              = {
          + "metadata"          = "base64text"
          + "metadata.encoding" = "gzip+base64"
          + "userdata"          = "base64text"
          + "userdata.encoding" = "gzip+base64"
        }
      + guestos                = (known after apply)
      + id                     = (known after apply)
      + ip_address             = (known after apply)
      + memsize                = "1024"
      + notes                  = (known after apply)
      + numvcpus               = (known after apply)
      + ovf_properties_timer   = (known after apply)
      + ovf_source             = "/root/create-and-deploy-esxi/output-packer-centos7-x86_64/packer-centos7-x86_64.ova"
      + power                  = "on"
      + resource_pool_name     = (known after apply)
      + virthwver              = (known after apply)

      + network_interfaces {
          + mac_address     = (known after apply)
          + nic_type        = (known after apply)
          + virtual_network = "VM Network"
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

αž”αž‰αŸ’αž…αž”αŸ‹αŸ–

terraform apply

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αžœαžΈαŸ—αž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αžΆαž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž“αŸ„αŸ‡αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž› 2-3 αž“αžΆαž‘αžΈ αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαžαŸ’αž˜αžΈαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž–αžΈαžšαžΌαž”αž—αžΆαž–αžŠαŸ‚αž›αž”αžΆαž“αž’αŸ’αžœαžΎαž–αžΈαž˜αž»αž“αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΉαž˜αž€αžΆαžšαžŸαŸ’αžšαž˜αžΎαž›αžŸαŸ’αžšαž˜αŸƒαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αžαŸ’αž‰αž»αŸ†αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž…αž„αŸ‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž›αŸ’αž’αž”αŸ†αž•αž»αž αž“αž·αž„αž”αž„αŸ’αž αžΆαž‰αž–αžΈαž…αŸ†αžŽαž»αž…αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž“αŸ…αž–αŸαž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž•αž›αž·αžαž•αž›αž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ”

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹!

PS: αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžšαžΈαž€αžšαžΆαž™αž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαžšαž·αŸ‡αž‚αž“αŸ‹αž€αŸ’αž“αž»αž„αž“αŸαž™αžŸαŸ’αžαžΆαž”αž“αžΆαŸ”

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹