Quick Deploy vm ESXi nge Terraform

Molweni nonke, igama lam ngu-Ivan kwaye ndingumlawuli wenkqubo yotywala (OPS).

Ndingathanda ukukuxelela ukuba ndibeka njani oomatshini benyani kwi-ESXi ngaphandle kwe-vCenter usebenzisa iTerraform.

Rhoqo, kufuneka usebenzise / wenze kwakhona oomatshini ababonakalayo ukuze uvavanye esi okanye eso sicelo. Ngenxa yobuvila, ndacinga malunga nokuzenzekelayo inkqubo. Ukukhangela kwam kwandikhokelela kwimveliso emangalisayo yenkampani hashicorp, iterraform.

Ndicinga ukuba abaninzi abantu bayazi ukuba yintoni iTerraform, kwaye ngubani ongaziyo, esi sisicelo sokulawula nayiphi na ifu, iziseko okanye inkonzo usebenzisa ingcamango ye-IasC (Iziseko zophuhliso njengekhowudi).

Ndisebenzisa i-ESXi njengendawo yam ye-virtualization. Ilula kakhulu, iluncedo kwaye inokuthenjwa.
Ndilindele umbuzo.

Kutheni iterraform xa usebenzisa i-vCenter Server?

Unako ngokuqinisekileyo, kodwa. Okokuqala, le layisensi eyongezelelweyo, okwesibini, le mveliso inamandla kakhulu kwaye ayilunganga kwiseva yam yasekhaya, kwaye okwesithathu, ukukwazi ukuphucula izakhono.

Iqonga le-Intel NUC lisebenza njengeseva:

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.)

Kwaye ke, izinto zokuqala kuqala.

Okwangoku, makhe simise esxi, oko kukuthi, vula izibuko leVNC kwizicwangciso zomlilo.

Ngokungagqibekanga, ifayile ikhuselwe ngokubhala. Senza olu lawulo lulandelayo:

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

fakela le block ilandelayo ukuya esiphelweni sefayile:

<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>

Phuma, gcina. Guqula amalungelo emva kwaye uqale kwakhona inkonzo:

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

Okwenyani de umamkeli aqaliswe ngokutsha. Emva koko, oku kuguqulwa kuya kufuneka kuphindwe.

Ngaphaya koko, ndiya kuwenza wonke umsebenzi kumatshini wenyani kwiseva enye.

Iinkcukacha zeMveliso:

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

Okulandelayo, sifuna ukupakisha, nayo imveliso yeHashiCorp.

Kuyafuneka ukudibanisa ngokuzenzekelayo umfanekiso "wegolide". esiza kuyisebenzisa kwixesha elizayo.

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

Ekuhambeni uguqulelo lopakisha imposiso inokwenzeka, kuba iRedHat-based inokuqulatha ipakethe enegama elifanayo.

which -a packer
/usr/sbin/packer

Kwisisombululo, unokwenza i-symlink, okanye usebenzise indlela epheleleyo /usr/bin/packer.

Ngoku sifuna i-ovftool khuphela ikhonkco. Khuphela, beka kwiseva kwaye ufake:

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.

Siqhubela phambili.

Kwi-gith ndilungiselele yonke into oyifunayo.

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

Ukufowunela big kufuneka ubeke ikhithi yonikezelo lwendlela yokusebenza. Kwimeko yam, le yicentos 7.

Kufuneka kwakhona uhlele ifayile. centos-7-base.json:

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

Emva kwalo lonke utshintsho, qalisa indibano:

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

Ukuba yonke into iqwalaselwe kwaye ichazwe ngokuchanekileyo, ngoko uya kubona umfanekiso wofakelo oluzenzekelayo lwenkqubo yokusebenza. Le nkqubo ithatha kum 7-8 imizuzu.

Emva kokugqitywa ngempumelelo kwifolda imveliso-packer-centos7-x86_64 ifayile ye-ova iya kufumaneka.

Faka iTerraform:

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

Ekubeni Terraform akanayo umboneleli ESXi, kufuneka ukwakha enye.

Siyahamba:

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

Okulandelayo, siqokelela umboneleli:

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

Sisekupheleni. Masihambe sikhuphe umfanekiso wethu.

Makhe siye kwifolda:

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

Okokuqala, hlela ifayile izinto ezahlukeneyo.tf. Kufuneka ucacise uqhagamshelwano kumncedisi we ESXi.

Kwifayile network_config.cfg ziqulathe useto lwenethiwekhi yomatshini wenyani wexesha elizayo. Tshintshela kwiimfuno zakho kwaye usebenzise i-line-line:

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

Ewe, kwifayile eyona.tf tshintsha umendo kwifayile ye-ova kweyakho, ukuba yahlukile.

Umzuzu wenyaniso.

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.

Gqiba:

terraform apply

Ukuba yonke into yenziwe ngokuchanekileyo, emva kwemizuzu emi-2-3 umatshini omtsha wenyani uya kuthunyelwa kumfanekiso owenziwe ngaphambili.

Ukusetyenziswa kuko konke oku kuthintelwe kuphela yintelekelelo yakho.

Ndandifuna nje ukwabelana ngezona ndlela zilungileyo kwaye ndibonise iingongoma eziphambili xa ndisebenza nezi mveliso.

Enkosi ngengqalelo!

PS: Ndingakuvuyela ukugxekwa okwakhayo.

umthombo: www.habr.com

Yongeza izimvo