Quick Deploy vm ESXi yokhala ndi Terraform

Moni nonse, dzina langa ndine Ivan ndipo ndine woyang'anira dongosolo la mowa (OPS).

Ndikufuna ndikuuzeni momwe ndimayika makina enieni pa ESXi popanda vCenter pogwiritsa ntchito Terraform.

Nthawi zambiri, mumayenera kutumiza / kupanganso makina enieni kuti muyese izi kapena izi. Chifukwa cha ulesi, ndinaganiza zopanga makinawo. Kufufuza kwanga kunanditsogolera ku chinthu chodabwitsa cha kampaniyo hashicorp, terraform.

Ndikuganiza kuti anthu ambiri amadziwa kuti Terraform ndi ndani, ndipo ndani sadziwa, iyi ndi ntchito yoyang'anira mtambo uliwonse, zomangamanga kapena ntchito pogwiritsa ntchito lingaliro la IasC (Infrastructure ngati code).

Ndimagwiritsa ntchito ESXi ngati chilengedwe changa cha virtualization. Zosavuta, zosavuta komanso zodalirika.
Ndikuyembekezera funso.

Chifukwa terraform pamene mungagwiritse ntchito vCenter Seva?

Mukhoza ndithudi, koma. Choyamba, iyi ndi chilolezo chowonjezera, chachiwiri, mankhwalawa ndi ofunika kwambiri ndipo sakukwanira pa seva yanga ya kunyumba, ndipo chachitatu, luso lokweza luso.

Pulatifomu ya Intel NUC imagwira ntchito ngati seva:

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

Ndipo kotero, zinthu zoyamba poyamba.

Pakadali pano, tiyeni tiyike esxi, ndiye kuti, tsegulani doko la VNC pazokonda zozimitsa moto.

Mwachikhazikitso, fayilo imatetezedwa kulembedwa. Timachita izi manipulations:

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

onjezani chipika chotsatira mpaka kumapeto kwa fayilo:

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

Tulukani, sungani. Sinthani maufuluwo ndikuyambiranso ntchito:

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

Zenizeni mpaka wolandirayo ayambitsidwenso. Pambuyo pake, kusokoneza uku kuyenera kubwerezedwa.

Kuphatikiza apo, ndigwira ntchito yonse mu makina enieni pa seva yomweyo.

Zomwe zimagulitsidwa:

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

Kenako, tiyenera wanyamula, komanso chida cha HashiCorp.

Pamafunika kuti basi kusonkhanitsa "golide" fano. zomwe tidzagwiritse ntchito mtsogolo.

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

Poyenda packer version cholakwika chikhoza kuchitika, popeza RedHat-based ikhoza kukhala ndi phukusi lomwe lili ndi dzina lomwelo.

which -a packer
/usr/sbin/packer

Kuti mupeze yankho, mutha kupanga symlink, kapena kugwiritsa ntchito njira yokhazikika /usr/bin/packer.

Tsopano tikufuna ovftool Download kugwirizana. Tsitsani, ikani seva ndikuyika:

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.

Timasunthira patsogolo.

Pa gith ndinakonza zonse zomwe mukufuna.

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

Ku foda chachikulu muyenera kuyika zida zogawa za opareshoni. Kwa ine ndi centos 7.

Muyeneranso kusintha fayilo. centos-7-base.json:

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

Pambuyo pazosintha zonse, yambitsani msonkhanowo:

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

Ngati zonse zakonzedwa ndikufotokozedwa molondola, ndiye kuti mudzawona chithunzi cha kukhazikitsidwa kwa makina ogwiritsira ntchito. Izi zimanditengera mphindi 7-8.

Mukamaliza bwino mufoda zotulutsa-packer-centos7-x86_64 ova file idzapezeka.

Ikani 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

Popeza Terraform alibe wosamalira ESXi, muyenera kumanga mmodzi.

Timapita:

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

Kenako, tisonkhanitsa wopereka:

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

Tili kumapeto. Tiyeni titulutse chithunzi chathu.

Tiyeni tipite ku chikwatu:

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

Choyamba, sinthani fayilo zosintha.tf. Muyenera kufotokoza kugwirizana kwa seva ESXi.

Mu fayilo network_config.cfg muli ndi zoikamo maukonde amtsogolo makina pafupifupi. Sinthani ku zosowa zanu ndikuyendetsa mzere umodzi:

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

Chabwino, mu fayilo chachikulu.tf sinthani njira yopita ku fayilo ya ova kukhala yanu, ngati yosiyana.

Nthawi ya choonadi.

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.

Malizitsani:

terraform apply

Ngati zonse zachitika molondola, ndiye kuti mu mphindi 2-3 makina atsopano adzatumizidwa kuchokera pa chithunzi chomwe chinapangidwa kale.

Zogwiritsa ntchito zonsezi ndizochepa ndi malingaliro anu.

Ndinkangofuna kugawana nawo machitidwe abwino ndikuwonetsa mfundo zazikulu pogwira ntchito ndi mankhwalawa.

Zikomo chifukwa chomvetsera!

PS: Ndidzakhala wokondwa kutsutsidwa kolimbikitsa.

Source: www.habr.com

Kuwonjezera ndemanga