Hoʻokomo wikiwiki iā vm ESXi me Terraform

Aloha ʻoukou a pau, ʻo Ivan koʻu inoa a he luna hoʻoponopono waiʻona au (OPS).

Makemake wau e haʻi iā ʻoe pehea wau e hoʻolaha ai i nā mīkini virtual ma ESXi me ka ʻole o vCenter me ka hoʻohana ʻana iā Terraform.

ʻO ka manawa pinepine, pono ʻoe e kau / hana hou i nā mīkini virtual i mea e hoʻāʻo ai i kēia a i kēlā noi. Ma muli o ka palaualelo, ua noʻonoʻo wau e hoʻomaʻamaʻa i ke kaʻina hana. ʻO kaʻu ʻimi i alakaʻi iaʻu i kahi huahana nani o ka hui hashicorp, ʻeleʻele.

Manaʻo wau he nui ka poʻe i ʻike i ke ʻano o Terraform, a ʻo wai ka mea ʻike ʻole, he noi kēia no ka hoʻokele ʻana i kekahi ao, ʻenehana a lawelawe paha me ka hoʻohana ʻana i ka manaʻo IasC (ʻOihana e like me ke code).

Ke hoʻohana nei au iā ESXi i koʻu ʻāina virtualization. Maʻalahi, kūpono a hilinaʻi.
Manaʻo wau i kahi nīnau.

No ke aha ʻo terraform inā hiki iā ʻoe ke hoʻohana i ka vCenter Server?

Hiki iā ʻoe ke ʻoiaʻiʻo, akā. ʻO ka mea mua, he laikini hou kēia, ʻo ka lua, he waiwai nui kēia huahana a ʻaʻole kūpono i kaʻu kikowaena home, a ʻo ke kolu, ka hiki ke hoʻonui i nā mākau.

Ke hana nei ka platform Intel NUC ma ke ʻano he kikowaena:

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

A no laila, nā mea mua.

I kēia manawa, e hoʻonohonoho kāua i ka esxi, ʻo ia hoʻi, e wehe i ke awa VNC i nā hoʻonohonoho firewall.

Ma ka paʻamau, mālama ʻia ka faila. Hana mākou i kēia mau manipulations:

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

e hoʻopili i kēia poloka i ka hope o ka faila:

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

Puka, mālama. E hoʻololi i nā kuleana a hoʻomaka hou i ka lawelawe:

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

ʻOiaʻiʻo a hiki i ka hoʻomaka hou ʻana o ka mea hoʻokipa. Ma hope o kēlā, pono e hana hou i kēia manipulation.

Eia hou, e hoʻokō au i nā hana a pau ma kahi mīkini virtual ma ka kikowaena hoʻokahi.

Nā huahana huahana:

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

A laila, pono mākou packer, he huahana no HashiCorp.

Pono e hoʻohui 'akomi i ke kiʻi "gula". a mākou e hoʻohana ai i ka wā e hiki mai ana.

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

I ka neʻe ʻana packer version hiki mai paha kekahi hewa, no ka mea, aia i loko o RedHat kahi pūʻolo me ka inoa like.

which -a packer
/usr/sbin/packer

No ka hoʻonā, hiki iā ʻoe ke hana i kahi symlink, a hoʻohana paha i kahi ala paʻa /usr/bin/packer.

I kēia manawa pono mākou i ka ovftool Download loulou. Hoʻoiho, kau i ka kikowaena a hoʻokomo:

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.

Ke neʻe nei mākou.

Ma ka gith ua hoʻomākaukau wau i nā mea a pau āu e pono ai.

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

I ka waihona nui pono ʻoe e kau i ka pahu hoʻohele o ka ʻōnaehana hana. I koʻu hihia, he 7 keneta kēia.

Pono ʻoe e hoʻoponopono i ka faila. centos-7-base.json:

variables: указать свои данные для подключения
iso_urls: указать актуальный
iso_checksum: чексумма вашего образа 

Ma hope o nā hoʻololi a pau, e holo i ka hui:

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

Inā hoʻonohonoho pono ʻia nā mea a pau, a laila e ʻike ʻoe i kahi kiʻi o ka hoʻokomo ʻana i ka ʻōnaehana hana. Lawe kēia kaʻina iaʻu i 7-8 mau minuke.

Ma hope o ka hoʻokō pono ʻana i ka waihona output-packer-centos7-x86_64 E ʻike ʻia ka faila ova.

E hoʻouka i ka 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

No ka mea ʻaʻohe mea hoʻolako iā Terraform no ESXi, pono ʻoe e kūkulu i hoʻokahi.

Hele mākou:

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

A laila, hōʻiliʻili mākou i ka mea hoʻolako:

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

Aia mākou ma ka laina hoʻopau. E hele kāua e ʻōwili i kā mākou kiʻi.

E hele kāua i ka waihona:

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

ʻO ka mea mua, hoʻoponopono i ka faila nā mea hoʻololi.tf. Pono ʻoe e kuhikuhi i kahi pilina i ka kikowaena ESXi.

Ma ka waihona network_config.cfg Aia i loko o nā hoʻonohonoho pūnaewele o ka mīkini virtual e hiki mai ana. Hoʻololi mākou e kūpono i kā mākou pono a holo i ka one-liner:

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

ʻAe, ma ka faila main.tf e hoʻololi i ke ala i ka faila ova iā ʻoe iho, inā ʻokoʻa.

Ka manawa o ka oiaio.

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.

Hoʻopau:

terraform apply

Inā hana pololei nā mea a pau, a laila i loko o 2-3 mau minuke e kau ʻia kahi mīkini virtual hou mai ke kiʻi i hana mua ʻia.

ʻO nā mea hoʻohana no kēia mau mea a pau i kaupalena ʻia e kou noʻonoʻo.

Makemake wau e kaʻana like i nā hana maikaʻi loa a hōʻike i nā kumu nui i ka wā e hana ai me kēia mau huahana.

Mahalo iā ʻoe no ka nānā ʻana!

PS: E hauʻoli wau i ka hoʻohewa ʻana.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka