แแแแแกแแแแแแแ แงแแแแแก, แแ แแฅแแแ แแแแแ แแ แแแ แแแแแฐแแแฃแ แ แกแแกแขแแแแก แแแแแแแกแขแ แแขแแ แ (OPS).
แแแแแ แแแแฎแ แแ, แ แแแแ แแแงแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแแก ESXi-แแ vCenter-แแก แแแ แแจแ Terraform-แแก แแแแแงแแแแแแ.
แฎแจแแ แแ, แแแ แแฃ แแ แแแแแแแชแแแก แจแแกแแแแฌแแแแแแ แแแฌแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแแแก แแแแแแแแแ/แฎแแแแฎแแแ แจแแฅแแแ. แกแแแแ แแแชแแก แแแแ แแ แแชแแกแแก แแแขแแแแขแแแแชแแแแ แแคแแฅแ แแแแ. แฉแแแแ แซแแแแแ แแแแแงแแแแ แแแแแแแแแก แจแแกแแแแจแแแแ แแ แแแฃแฅแขแแกแแแ
แแคแแฅแ แแ, แแแแ แแ แแชแแก แ แ แแ แแก Terraform แแ แแแแช แแ แแชแแก, แแก แแ แแก แแแแแแแชแแ แแแแแกแแแแ แ แฆแ แฃแแแแก, แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแ แกแแ แแแกแแก แแแ แแแแกแแแแก IasC แแแแชแแคแชแแแก แแแแแงแแแแแแ (แแแคแ แแกแขแ แฃแฅแขแฃแ แ แ แแแแ แช แแแแ).
แแแ แขแฃแแแแแแชแแแก แแแ แแแแ แแแงแแแแ ESXi-แก. แกแแแแแแ แแแ แขแแแ, แแแกแแฎแแ แฎแแแแแ แแ แกแแแแแแ.
แแแแแแแแ แแแแฎแแแก.
แ แแขแแ แขแแ แแคแแ แแแ แแแ, แ แแแแกแแช แจแแแแซแแแแ แแแแแแงแแแแ vCenter แกแแ แแแ แ?
แจแแแแซแแแแ, แ แ แแฅแแ แฃแแแ, แแแแ แแ. แฏแแ แแ แแ, แแก แแ แแก แแแแแขแแแแแ แแแชแแแแแ, แแแแ แแช, แแก แแ แแแฃแฅแขแ แซแแแแแ แ แแกแฃแ แกแแ แแแขแแแกแแฃแ แแ แแ แฃแแ แแแแ แแ แฏแแแแ แฉแแแก แกแแฎแแแก แกแแ แแแ แแ แแ แแแกแแแ, แฃแแแ แแแแก แแแแแฎแแแแแก แจแแกแแซแแแแแแแ.
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 แแแ แขแ firewall-แแก แแแ แแแแขแ แแแจแ.
แแแแฃแแแกแฎแแแแแ, แคแแแแ แแแชแฃแแแ แฉแแฌแแ แแกแแแ. แฉแแแ แแแกแ แฃแแแแ แจแแแแแ แแแแแแฃแแแชแแแแก:
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
แจแแแแแแ, แฉแแแ แแแญแแ แแแแ
แกแแญแแ แแ "แแฅแ แแก" แแแแแกแแฎแฃแแแแแก แแแขแแแแขแฃแ แแ แแฌแงแแแ. แ แแแแแกแแช แแแแแแแแจแ แแแแแแแงแแแแแ.
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
แแแแแกแแแแแกแแแแก แจแแแแซแแแแ แจแแฅแแแแ แกแแแแแแแ, แแ แแแแแแงแแแแ แแแกแแแฃแขแฃแ แ แแแ /usr/bin/packer.
แแฎแแ แฉแแแ แแแญแแ แแแแ ovftool
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.
แฉแแแ แแแแแแแแแแ แ.
แแแขแแ แแแแแแแแแ แงแแแแแคแแ แ, แ แแช แแญแแ แแแแแ.
git clone https://github.com/letnab/create-and-deploy-esxi.git && cd create-and-deploy-esxi
แกแแฅแแฆแแแแแจแ iso แแฅแแแ แฃแแแ แแแแงแแแแ แแแแ แแชแแฃแแ แกแแกแขแแแแก แกแแแแกแขแ แแแฃแชแแ แแแแ แแแ. แฉแแแก แจแแแแฎแแแแแจแ, แแก แแ แแก แชแแแขแแก 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
แแแ แแแ แ แแแจแ, แจแแชแแแแแ แคแแแแ แชแแแแแแแ.tf. แแฅแแแ แฃแแแ แแแฃแแแแแ แแแแจแแ แ ESXi แกแแ แแแ แแแ.
แคแแแแจแ network_config.cfg แจแแแชแแแก แแแแแแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แฅแกแแแแก แแแ แแแแขแ แแแก. แจแแชแแแแแ แแฅแแแแ แกแแญแแ แแแแแแ แแ แแแฃแจแแแ แแ แแ แฎแแแ:
sed -i -e '2d' -e '3i "network": "'$(gzip < network_config.cfg| base64 | tr -d 'n')'",' metadata.json
แแกแ, แคแแแแจแ แแแแแแ แ.แขแค แจแแชแแแแแ แแแ 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