ื›ื™ืฆื“ ืœื ื”ืœ ืชืฉืชื™ืช ืขื ืŸ ืขื Terraform

ื›ื™ืฆื“ ืœื ื”ืœ ืชืฉืชื™ืช ืขื ืŸ ืขื Terraform

ื‘ืžืืžืจ ื–ื” ื ื‘ื—ืŸ ืžืžื” ืžื•ืจื›ื‘ืช Terraform, ื•ื’ื ื ืฉื™ืง ื‘ื”ื“ืจื’ื” ืชืฉืชื™ืช ืžืฉืœื ื• ื‘ืขื ืŸ ืขื VMware - ื ื›ื™ืŸ ืฉืœื•ืฉื” VMs ืœืžื˜ืจื•ืช ืฉื•ื ื•ืช: ืคืจื•ืงืกื™, ืื—ืกื•ืŸ ืงื‘ืฆื™ื ื•-CMS.

ืขืœ ื”ื›ืœ ื‘ืคื™ืจื•ื˜ ื•ื‘ืฉืœื•ืฉื” ืฉืœื‘ื™ื:

1. Terraform - ืชื™ืื•ืจ, ื™ืชืจื•ื ื•ืช ื•ืจื›ื™ื‘ื™ื

Terraform ื”ื•ื ื›ืœื™ IaC (Infrastructure-as-Code) ืœื‘ื ื™ื™ื” ื•ื ื™ื”ื•ืœ ืฉืœ ืชืฉืชื™ืช ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืืžืฆืขื•ืช ืงื•ื“.

ืฆื™ื™ื ื• ื›ืžื” ื™ืชืจื•ื ื•ืช ื‘ืขื‘ื•ื“ื” ืขื ื”ื›ืœื™:

  • ืžื”ื™ืจื•ืช ืคืจื™ืกื” ืฉืœ ื“ื™ื™ืจื™ื ื—ื“ืฉื™ื (ืกื‘ื™ื‘ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช). ื‘ื“ืจืš ื›ืœืœ, ื›ื›ืœ ืฉื™ืฉ ื™ื•ืชืจ ืœืงื•ื—ื•ืช ื—ื“ืฉื™ื, ื›ืš ืฆื•ื•ืช ื”ืชืžื™ื›ื” ื”ื˜ื›ื ื™ืช ืฆืจื™ืš ืœืขืฉื•ืช ื™ื•ืชืจ "ืงืœื™ืงื™ื" ื›ื“ื™ ืœืคืจืกื ืžืฉืื‘ื™ื ื—ื“ืฉื™ื. ืขื Terraform, ืžืฉืชืžืฉื™ื ื™ื›ื•ืœื™ื ืœืฉื ื•ืช ืืช ื”ื’ื“ืจื•ืช ื”ืžื—ืฉื‘ ื”ื•ื•ื™ืจื˜ื•ืืœื™ (ืœื“ื•ื’ืžื”, ื›ื™ื‘ื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื•ื”ื’ื“ืœืช ืžื—ื™ืฆืช ื”ื“ื™ืกืง ื”ื•ื•ื™ืจื˜ื•ืืœื™) ืžื‘ืœื™ ืœื”ื™ื“ืจืฉ ืœืชืžื™ื›ื” ื˜ื›ื ื™ืช ืื• ื›ื™ื‘ื•ื™ ื”ืžื—ืฉื‘ ืขืฆืžื•.

  • ืื™ืžื•ืช ืžื™ื™ื“ื™ ืฉืœ ืชื•ื›ื ื™ืช ื”ื”ืคืขืœื” ื˜ื ื ื˜ ื—ื“ืฉ. ื‘ืืžืฆืขื•ืช ืชื™ืื•ืจ ืงื•ื“ ื”ืชืฉืชื™ืช ื ื•ื›ืœ ืœื‘ื“ื•ืง ืžื™ื“ ืžื” ื™ืชื•ื•ืกืฃ ื•ื‘ืื™ื–ื” ืกื“ืจ, ื•ื›ืŸ ื‘ืื™ื–ื” ืžืฆื‘ ืกื•ืคื™ ืชื”ื™ื” ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื–ื• ืื• ืื—ืจืช ืื• ืจืฉืช ื•ื™ืจื˜ื•ืืœื™ืช ืขื ื—ื™ื‘ื•ืจื™ื ืœืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช.

  • ื™ื›ื•ืœืช ืœืชืืจ ืืช ืคืœื˜ืคื•ืจืžื•ืช ื”ืขื ืŸ ื”ืคื•ืคื•ืœืจื™ื•ืช ื‘ื™ื•ืชืจ. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื›ืœื™ ืžืืžื–ื•ืŸ ื•-Google Cloud, ื•ืขื“ ืœืคืœื˜ืคื•ืจืžื•ืช ืคืจื˜ื™ื•ืช ื”ืžื‘ื•ืกืกื•ืช ืขืœ VMware vCloud Director, ื”ืžืฆื™ืขื•ืช ืฉื™ืจื•ืชื™ื ื‘ืชื•ืš ืคืชืจื•ื ื•ืช IaaS, SaaS ื•-PaaS.

  • ื ื”ืœ ืžืกืคืจ ืกืคืงื™ ืขื ืŸ ื•ืœื”ืคื™ืฅ ืืช ื”ืชืฉืชื™ืช ื‘ื™ื ื™ื”ื ื›ื“ื™ ืœืฉืคืจ ืืช ืกื‘ื™ืœื•ืช ื”ืชืงืœื•ืช, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ืชืฆื•ืจื” ืื—ืช ืœื™ืฆื™ืจื”, ืื‘ื—ื•ืŸ ื•ื ื™ื”ื•ืœ ืžืฉืื‘ื™ ืขื ืŸ.

  • ืฉื™ืžื•ืฉ ื ื•ื— ืœื™ืฆื™ืจืช ืขืžื“ื•ืช ื”ื“ื’ืžื” ืขื‘ื•ืจ ื‘ื“ื™ืงื•ืช ืชื•ื›ื ื” ื•ืื™ืชื•ืจ ื‘ืื’ื™ื. ื ื™ืชืŸ ืœื™ืฆื•ืจ ื•ืœื”ืขื‘ื™ืจ ืขืžื“ื•ืช ืœืžื—ืœืงืช ื”ื‘ื“ื™ืงื•ืช, ืœื‘ื“ื•ืง ืชื•ื›ื ื•ืช ื‘ืกื‘ื™ื‘ื•ืช ืฉื•ื ื•ืช ื‘ืžืงื‘ื™ืœ, ื•ืœืฉื ื•ืช ื•ืœืžื—ื•ืง ืžืฉืื‘ื™ื ื‘ืื•ืคืŸ ืžื™ื™ื“ื™ ืขืœ ื™ื“ื™ ื™ืฆื™ืจืช ืชื•ื›ื ื™ืช ื‘ื ื™ื™ืช ืžืฉืื‘ื™ื ืื—ืช ื‘ืœื‘ื“

"ื˜ืจืจื™ื•ื" Terraform

ื“ื™ื‘ืจื ื• ื‘ืงืฆืจื” ืขืœ ื”ื™ืชืจื•ื ื•ืช ืฉืœ ื”ื›ืœื™, ืขื›ืฉื™ื• ื‘ื•ืื• ื ื—ืœืง ืื•ืชื• ืœืžืจื›ื™ื‘ื™ื•

ืกืคืงื™ื. 

ื‘- Terraform, ื›ืžืขื˜ ื›ืœ ืกื•ื’ ืฉืœ ืชืฉืชื™ืช ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื™ื•ืฆื’ ื›ืžืฉืื‘. ื”ื—ื™ื‘ื•ืจ ื‘ื™ืŸ ืžืฉืื‘ื™ื ืœืคืœื˜ืคื•ืจืžืช ื”-API ืžืกื•ืคืง ืขืœ ื™ื“ื™ ืžื•ื“ื•ืœื™ ืกืคืง, ื”ืžืืคืฉืจื™ื ืœื™ืฆื•ืจ ืžืฉืื‘ื™ื ื‘ืชื•ืš ืคืœื˜ืคื•ืจืžื” ืกืคืฆื™ืคื™ืช, ืœืžืฉืœ, Azure ืื• VMware vCloud Director.

ื›ื—ืœืง ืžื”ืคืจื•ื™ืงื˜, ืชื•ื›ืœื• ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืกืคืงื™ื ืฉื•ื ื™ื ื‘ืคืœื˜ืคื•ืจืžื•ืช ืฉื•ื ื•ืช.

ืžืฉืื‘ื™ื (ืชื™ืื•ืจ ืžืฉืื‘).

ืชื™ืื•ืจ ื”ืžืฉืื‘ื™ื ืžืืคืฉืจ ืœืš ืœื ื”ืœ ืจื›ื™ื‘ื™ ืคืœื˜ืคื•ืจืžื”, ื›ื’ื•ืŸ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืื• ืจืฉืชื•ืช. 

ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืชื™ืื•ืจ ืžืฉืื‘ ืขื‘ื•ืจ ืกืคืง VMware vCloud Director ื‘ืขืฆืžืš ื•ืœื”ืฉืชืžืฉ ื‘ืชื™ืื•ืจ ื–ื” ื›ื“ื™ ืœื™ืฆื•ืจ ืžืฉืื‘ื™ื ืขื ื›ืœ ืกืคืง ืื™ืจื•ื— ืฉืžืฉืชืžืฉ ื‘-vCloud Director. ืืชื” ืจืง ืฆืจื™ืš ืœืฉื ื•ืช ืืช ืคืจืžื˜ืจื™ ื”ืื™ืžื•ืช ื•ืคืจืžื˜ืจื™ ื—ื™ื‘ื•ืจ ื”ืจืฉืช ืœืกืคืง ื”ืื™ืจื•ื— ื”ื ื“ืจืฉ

ื–ื›ื™ื•ืช.

ืจื›ื™ื‘ ื–ื” ืžืืคืฉืจ ืœื‘ืฆืข ืคืขื•ืœื•ืช ืœื”ืชืงื ื” ื•ืชื—ื–ื•ืงื” ืจืืฉื•ื ื™ืช ืฉืœ ืžืขืจื›ืช ื”ื”ืคืขืœื” ืœืื—ืจ ื™ืฆื™ืจืช ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช. ืœืื—ืจ ืฉื™ืฆืจืช ืžืฉืื‘ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช, ืชื•ื›ืœ ืœื”ืฉืชืžืฉ ื‘ืคืจื•ืกืคืงื˜ื™ื ื›ื“ื™ ืœื”ื’ื“ื™ืจ ื•ืœื”ืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช SSH, ืœืขื“ื›ืŸ ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ื•ืœื”ื•ืจื™ื“ ื•ืœื”ืคืขื™ืœ ืกืงืจื™ืคื˜. 

ืžืฉืชื ื™ ืงืœื˜ ื•ืคืœื˜.

ืžืฉืชื ื™ ืงืœื˜ - ืžืฉืชื ื™ ืงืœื˜ ืœื›ืœ ืกื•ื’ื™ ื‘ืœื•ืง. 

ืžืฉืชื ื™ ืคืœื˜ ืžืืคืฉืจื™ื ืœืš ืœืฉืžื•ืจ ืขืจื›ื™ื ืœืื—ืจ ื™ืฆื™ืจืช ืžืฉืื‘ื™ื ื•ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ื›ืžืฉืชื ื™ ืงืœื˜ ื‘ืžื•ื“ื•ืœื™ื ืื—ืจื™ื, ืœืžืฉืœ ื‘ื‘ืœื•ืง Provisioners.

ืžื“ื™ื ื•ืช.

ืงื‘ืฆื™ ืžื“ื™ื ื•ืช ืžืื—ืกื ื™ื ืžื™ื“ืข ืขืœ ื”ืชืฆื•ืจื” ืฉืœ ืžืฉืื‘ื™ ืคืœื˜ืคื•ืจืžืช ื”ืกืคืง. ื›ืืฉืจ ื”ืคืœื˜ืคื•ืจืžื” ื ื•ืฆืจืช ืœืจืืฉื•ื ื”, ืื™ืŸ ืžื™ื“ืข ืขืœ ืžืฉืื‘ื™ื ื•ืœืคื ื™ ื›ืœ ืคืขื•ืœื”, Terraform ืžืขื“ื›ื ืช ืืช ื”ืžืฆื‘ ืขื ื”ืชืฉืชื™ืช ื”ืืžื™ืชื™ืช ืฉืœ ื”ืžืฉืื‘ื™ื ืฉื›ื‘ืจ ืชื•ืืจื•.

ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ืฉืœ ืžื“ื™ื ื•ืช ื”ื™ื ืœืฉืžื•ืจ ื—ื‘ื•ืจื” ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœ ืžืฉืื‘ื™ื ืฉื›ื‘ืจ ื ื•ืฆืจื• ื›ื“ื™ ืœื”ืฉื•ื•ืช ืืช ื”ืชืฆื•ืจื” ืฉืœ ืžืฉืื‘ื™ื ื•ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื ื•ืกืคื• ืขืœ ืžื ืช ืœืžื ื•ืข ื™ืฆื™ืจื” ื—ื•ื–ืจืช ื•ืฉื™ื ื•ื™ื™ื ื‘ืคืœื˜ืคื•ืจืžื”.

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืžื™ื“ืข ื”ืžื“ื™ื ื” ืžืื•ื—ืกืŸ ื‘ืงื•ื‘ืฅ terraform.tfstate ื”ืžืงื•ืžื™, ืืš ื‘ืžื™ื“ืช ื”ืฆื•ืจืš, ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืื—ืกื•ืŸ ืžืจื—ื•ืง ืœืขื‘ื•ื“ืช ืฆื•ื•ืช.

ืืชื” ื™ื›ื•ืœ ื’ื ืœื™ื™ื‘ื ืžืฉืื‘ื™ ืคืœื˜ืคื•ืจืžื” ื ื•ื›ื—ื™ื™ื ืœืžืฆื‘ ื›ื“ื™ ืœื™ืฆื•ืจ ืื™ื ื˜ืจืืงืฆื™ื” ื ื•ืกืคืช ืขื ืžืฉืื‘ื™ื ืื—ืจื™ื ืฉื ื•ืฆืจื• ื‘ืชื•ืจื ืœืœื ืขื–ืจืช Terraform.  

2. ื™ืฆื™ืจืช ืชืฉืชื™ืช

ื”ืจื›ื™ื‘ื™ื ืžืกื•ื“ืจื™ื, ื›ืขืช ื‘ืืžืฆืขื•ืช Terraform ื ื™ืฆื•ืจ ื‘ื”ื“ืจื’ื” ืชืฉืชื™ืช ืขื ืฉืœื•ืฉ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช. ื”ืจืืฉื•ืŸ ืขื ืฉืจืช ื”-proxy nginx ืžื•ืชืงืŸ, ื”ืฉื ื™ ืขื ืื—ืกื•ืŸ ืงื‘ืฆื™ื ื”ืžื‘ื•ืกืก ืขืœ Nextcloud ื•ื”ืฉืœื™ืฉื™ ืขื CMS Bitrix.

ื ื›ืชื•ื‘ ืงื•ื“ ื•ื ื‘ืฆืข ืื•ืชื• ื‘ืืžืฆืขื•ืช ื”ื“ื•ื’ืžื” ืฉืœื ื• ืขื ื ื™ื ื‘-VMware vCloud Director. ื”ืžืฉืชืžืฉื™ื ืฉืœื ื• ืžืงื‘ืœื™ื ื—ืฉื‘ื•ืŸ ืขื ื–ื›ื•ื™ื•ืช ืžื ื”ืœ ืืจื’ื•ืŸ. ืื ืืชื” ืžืฉืชืžืฉ ื‘ื—ืฉื‘ื•ืŸ ืขื ืื•ืชืŸ ื–ื›ื•ื™ื•ืช ื‘ืขื ืŸ ืื—ืจ ืฉืœ VMware, ืชื•ื›ืœ ืœืฉื—ื–ืจ ืืช ื”ืงื•ื“ ืžื”ื“ื•ื’ืžืื•ืช ืฉืœื ื•. ืœืœื›ืช!

ืจืืฉื™ืช, ื‘ื•ืื• ื ื™ืฆื•ืจ ืกืคืจื™ื™ื” ืขื‘ื•ืจ ื”ืคืจื•ื™ืงื˜ ื”ื—ื“ืฉ ืฉืœื ื• ื‘ื” ื™ืžื•ืงืžื• ืงื‘ืฆื™ื ื”ืžืชืืจื™ื ืืช ื”ืชืฉืชื™ืช.

mkdir project01

ืœืื—ืจ ืžื›ืŸ, ื ืชืืจ ืืช ืžืจื›ื™ื‘ื™ ื”ืชืฉืชื™ืช. Terraform ื™ื•ืฆืจ ืงืฉืจื™ื ื•ืžืขื‘ื“ ืงื‘ืฆื™ื ืขืœ ืกืžืš ื”ืชื™ืื•ืจ ื‘ืงื‘ืฆื™ื. ื ื™ืชืŸ ืœืชืช ืฉื ืœืงื‘ืฆื™ื ืขืฆืžื ืขืœ ืกืžืš ืžื˜ืจืช ื”ื‘ืœื•ืงื™ื ื”ืžืชื•ืืจื™ื, ืœืžืฉืœ, network.tf - ืžืชืืจ ืืช ืคืจืžื˜ืจื™ ื”ืจืฉืช ืขื‘ื•ืจ ื”ืชืฉืชื™ืช.

ื›ื“ื™ ืœืชืืจ ืืช ืžืจื›ื™ื‘ื™ ื”ืชืฉืชื™ืช ืฉืœื ื•, ื™ืฆืจื ื• ืืช ื”ืงื‘ืฆื™ื ื”ื‘ืื™ื:

ืจืฉื™ืžืช ืงื‘ืฆื™ื.

main.tf - ืชื™ืื•ืจ ืคืจืžื˜ืจื™ื ืœืกื‘ื™ื‘ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช - ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช, ืงื•ื ื˜ื™ื™ื ืจื™ื ื•ื™ืจื˜ื•ืืœื™ื™ื;

network.tf - ืชื™ืื•ืจ ืฉืœ ืคืจืžื˜ืจื™ื ืฉืœ ืจืฉืช ื•ื™ืจื˜ื•ืืœื™ืช ื•ื›ืœืœื™ NAT โ€‹โ€‹ื•ื—ื•ืžืช ืืฉ;

variables.tf - ืจืฉื™ืžื” ืฉืœ ืžืฉืชื ื™ื ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ื”ื;

vcd.tfvars - ืขืจื›ื™ ืžืฉืชื ื™ ืคืจื•ื™ื™ืงื˜ ืขื‘ื•ืจ ืžื•ื“ื•ืœ VMware vCloud Director.

ืฉืคืช ื”ืชืฆื•ืจื” ื‘- Terraform ื”ื™ื ื“ืงืœืจื˜ื™ื‘ื™ืช ื•ืกื“ืจ ื”ื‘ืœื•ืงื™ื ืœื ืžืฉื ื”, ืœืžืขื˜ ื‘ืœื•ืงื™ื ืฉืœ ื”ืคืจืกืคืงื˜, ื›ื™ ื‘ื‘ืœื•ืง ื–ื” ืื ื• ืžืชืืจื™ื ืืช ื”ืคืงื•ื“ื•ืช ืฉื™ืฉ ืœื‘ืฆืข ื‘ืขืช ื”ื›ื ืช ื”ืชืฉืชื™ืช ื•ื”ืŸ ื™ื‘ื•ืฆืขื• ืœืคื™ ื”ืกื“ืจ.

ืžื‘ื ื” ื‘ืœื•ืงื™ื.

<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {

# Block body

<IDENTIFIER> = <EXPRESSION> # Argument

}

ื›ื“ื™ ืœืชืืจ ื‘ืœื•ืงื™ื, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืฉืคืช ื”ืชื›ื ื•ืช ืฉืœื” HCL (HashiCorp Configuration Language); ืืคืฉืจ ืœืชืืจ ืืช ื”ืชืฉืชื™ืช ื‘ืืžืฆืขื•ืช JSON. ืืชื” ื™ื›ื•ืœ ืœืœืžื•ื“ ืขื•ื“ ืขืœ ื”ืชื—ื‘ื™ืจ ืœืงืจื•ื ื‘ืืชืจ ื”ืžืคืชื—.

ืชืฆื•ืจืช ืžืฉืชื ื™ ืกื‘ื™ื‘ื”, variables.tf ื•-vcd.tfvars

ืจืืฉื™ืช, ื‘ื•ืื• ื ื™ืฆื•ืจ ืฉื ื™ ืงื‘ืฆื™ื ืฉืžืชืืจื™ื ืืช ืจืฉื™ืžืช ื›ืœ ื”ืžืฉืชื ื™ื ื‘ืฉื™ืžื•ืฉ ื•ืืช ื”ืขืจื›ื™ื ืฉืœื”ื ืขื‘ื•ืจ ืžื•ื“ื•ืœ VMware vCloud Director. ืจืืฉื™ืช, ื‘ื•ืื• ื ื™ืฆื•ืจ ืืช ื”ืงื•ื‘ืฅ variables.tf.

ืชื•ื›ืŸ ื”ืงื•ื‘ืฅ variables.tf.

variable "vcd_org_user" {

  description = "vCD Tenant User"

}

variable "vcd_org_password" {

  description = "vCD Tenant Password"

}

variable "vcd_org" {

  description = "vCD Tenant Org"

}

variable "vcd_org_vdc" {

  description = "vCD Tenant VDC"

}

variable "vcd_org_url" {

  description = "vCD Tenant URL"

}

variable "vcd_org_max_retry_timeout" {

  default = "60"

}

variable "vcd_org_allow_unverified_ssl" {

  default = "true"

}

variable "vcd_org_edge_name" {

  description = "vCD edge name"

}

variable "vcd_org_catalog" {

  description = "vCD public catalog"

}

variable "vcd_template_os_centos7" {

  description = "OS CentOS 7"

  default = "CentOS7"

}

variable "vcd_org_ssd_sp" {

  description = "Storage Policies"

  default = "Gold Storage Policy"

}

variable "vcd_org_hdd_sp" {

  description = "Storage Policies"

  default = "Bronze Storage Policy"

}

variable "vcd_edge_local_subnet" {

  description = "Organization Network Subnet"

}

variable "vcd_edge_external_ip" {

  description = "External public IP"

}

variable "vcd_edge_local_ip_nginx" {}

variable "vcd_edge_local_ip_bitrix" {}

variable "vcd_edge_local_ip_nextcloud" {}

variable "vcd_edge_external_network" {}

ืขืจื›ื™ื ืžืฉืชื ื™ื ืฉืื ื• ืžืงื‘ืœื™ื ืžื”ืกืคืง.

  • vcd_org_user - ืฉื ืžืฉืชืžืฉ ืขื ื–ื›ื•ื™ื•ืช ืžื ื”ืœ ืืจื’ื•ืŸ,

  • vcd_org_password - ืกื™ืกืžืช ืžืฉืชืžืฉ,

  • vcd_org - ืฉื ื”ืืจื’ื•ืŸ,

  • vcd_org_vdc - ืฉื ืžืจื›ื– ื”ื ืชื•ื ื™ื ื”ื•ื•ื™ืจื˜ื•ืืœื™,

  • vcd_org_url - ื›ืชื•ื‘ืช URL ืฉืœ ืžืžืฉืง API,

  • vcd_org_edge_name - ืฉื ื”ื ืชื‘ ื”ื•ื•ื™ืจื˜ื•ืืœื™,

  • vcd_org_catalog - ืฉื ื”ืกืคืจื™ื™ื” ืขื ืชื‘ื ื™ื•ืช ืžื—ืฉื‘ ื•ื™ืจื˜ื•ืืœื™,

  • vcd_edge_external_ip - ื›ืชื•ื‘ืช IP ืฆื™ื‘ื•ืจื™ืช,

  • vcd_edge_external_network - ืฉื ื”ืจืฉืช ื”ื—ื™ืฆื•ื ื™ืช,

  • vcd_org_hdd_sp โ€” ืฉื ืžื“ื™ื ื™ื•ืช ื”ืื—ืกื•ืŸ ืฉืœ HDD,

  • vcd_org_ssd_sp โ€” ืฉื ืžื“ื™ื ื™ื•ืช ื”ืื—ืกื•ืŸ ืฉืœ SSD.

ื•ื”ื–ืŸ ืืช ื”ืžืฉืชื ื™ื ืฉืœื ื•:

  • vcd_edge_local_ip_nginx - ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืžื—ืฉื‘ ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืขื NGINX,

  • vcd_edge_local_ip_bitrix - ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืžื—ืฉื‘ ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืขื 1C: Bitrix,

  • vcd_edge_local_ip_nextcloud - ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืžื—ืฉื‘ ื”ื•ื•ื™ืจื˜ื•ืืœื™ ืขื Nextcloud.

ืขื ื”ืงื•ื‘ืฅ ื”ืฉื ื™ ืื ื• ื™ื•ืฆืจื™ื ื•ืžืฆื™ื™ื ื™ื ืžืฉืชื ื™ื ืขื‘ื•ืจ ืžื•ื“ื•ืœ VMware vCloud Director ื‘ืงื•ื‘ืฅ vcd.tfvars: ื”ื‘ื” ื ื–ื›ื™ืจ ืฉื‘ื“ื•ื’ืžื” ืฉืœื ื• ืื ื• ืžืฉืชืžืฉื™ื MClouds ื‘ืขื ืŸ ืžืฉืœื•, ืื ืืชื” ืขื•ื‘ื“ ืขื ืกืคืง ืื—ืจ, ื‘ื“ื•ืง ืื™ืชื ืืช ื”ืขืจื›ื™ื. 

ืชื•ื›ืŸ ื”ืงื•ื‘ืฅ vcd.tfvars.

vcd_org_url = "https://vcloud.mclouds.ru/api"

vcd_org_user = "orgadmin"

vcd_org_password = "*"

vcd = "org"

vcd_org_vdc = "orgvdc"

vcd_org_maxretry_timeout = 60

vcd_org_allow_unverified_ssl = true

vcd_org_catalog = "Templates"

vcd_templateos_centos7 = "CentOS7"

vcd_org_ssd_sp = "Gold Storage Policy"

vcd_org_hdd_sp = "Bronze Storage Policy"

vcd_org_edge_name = "MCLOUDS-EDGE"

vcd_edge_external_ip = "185.17.66.1"

vcd_edge_local_subnet = "192.168.110.0/24"

vcd_edge_local_ip_nginx = "192.168.110.1"

vcd_edge_local_ip_bitrix = "192.168.110.10"

vcd_edge_local_ip_nextcloud = "192.168.110.11"

vcd_edge_external_network = "NET-185-17-66-0"

ืชืฆื•ืจืช ืจืฉืช, network.tf.

ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ืžื•ื’ื“ืจื™ื, ื›ืขืช ื ื’ื“ื™ืจ ืืช ืกื›ื™ืžืช ื—ื™ื‘ื•ืจ ื”ืžื›ื•ื ื” ื”ื•ื•ื™ืจื˜ื•ืืœื™ืช - ื ืงืฆื” ื›ืชื•ื‘ืช IP ืคืจื˜ื™ืช ืœื›ืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ื•ื ืฉืชืžืฉ ื‘-Destination NAT ื›ื“ื™ "ืœื”ืขื‘ื™ืจ" ืืช ื”ื™ืฆื™ืื•ืช ืœืจืฉืช ื”ื—ื™ืฆื•ื ื™ืช. ื›ื“ื™ ืœื”ื’ื‘ื™ืœ ืืช ื”ื’ื™ืฉื” ืœื™ืฆื™ืื•ืช ื ื™ื”ื•ืœ, ื ื’ื“ื™ืจ ื’ื™ืฉื” ืจืง ืขื‘ื•ืจ ื›ืชื•ื‘ืช ื”-IP ืฉืœื ื•.

ื›ื™ืฆื“ ืœื ื”ืœ ืชืฉืชื™ืช ืขื ืŸ ืขื Terraformื“ื™ืื’ืจืžืช ืจืฉืช ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžืช Terraform ืฉื ื•ืฆืจืช

ืื ื• ื™ื•ืฆืจื™ื ืจืฉืช ืืจื’ื•ื ื™ืช ื•ื™ืจื˜ื•ืืœื™ืช ื‘ืฉื net_lan01, ืฉืขืจ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ: 192.168.110.254, ื•ื’ื ืขื ืžืจื—ื‘ ื”ื›ืชื•ื‘ื•ืช: 192.168.110.0/24.

ืื ื• ืžืชืืจื™ื ืจืฉืช ื•ื™ืจื˜ื•ืืœื™ืช.

resource "vcd_network_routed" "net" {

  name = "net_lan01"

  edge_gateway = var.vcd_org_edge_name

  gateway = "192.168.110.254"

  dns1 = "1.1.1.1"

  dns2 = "8.8.8.8"

 static_ip_pool {

start_address = "192.168.110.1"

end_address = "192.168.110.253"

  }

}

ื‘ื•ืื• ื ื™ืฆื•ืจ ื—ื•ืงื™ ื—ื•ืžืช ืืฉ ื”ืžืืคืฉืจื™ื ืœืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืœื’ืฉืช ืœืื™ื ื˜ืจื ื˜. ื‘ืชื•ืš ื‘ืœื•ืง ื–ื”, ืœื›ืœ ื”ืžืฉืื‘ื™ื ื”ื•ื•ื™ืจื˜ื•ืืœื™ื™ื ื‘ืขื ืŸ ืชื”ื™ื” ื’ื™ืฉื” ืœืื™ื ื˜ืจื ื˜:

ืื ื• ืžืชืืจื™ื ืืช ื”ื›ืœืœื™ื ืขื‘ื•ืจ ื’ื™ืฉืช VM ืœืื™ื ื˜ืจื ื˜.

resource "vcd_nsxv_firewall_rule" "fw_internet_access" {

  edge_gateway   = var.vcdorgedgename

  name = "Internet Access"

  source {

gateway_interfaces = ["internal"]

  }

  destination {

gateway_interfaces = ["external"]

  }

  service {

protocol = "any"

  }

  depends_on = [vcdnetworkrouted.net]

}

ืœืื—ืจ ืฉืงื‘ืขื ื• ืืช ื”ืชืœื•ืช ืฉืœืื—ืจ ืขื™ื‘ื•ื“ ื”ื‘ืœื•ืง vcdnetworkrouted.net, ืื ื• ืžืžืฉื™ื›ื™ื ืœื”ื’ื“ื™ืจ ืืช ื”ื‘ืœื•ืง vcdnsxvfirewallrule, ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ ืชืœื•ื™ ื‘. ืื ื• ืžืฉืชืžืฉื™ื ื‘ืืคืฉืจื•ืช ื–ื• ืžื›ื™ื•ื•ืŸ ืฉื—ืœืง ืžื”ืชืœื•ืช ืขืฉื•ื™ื•ืช ืœื”ื™ื•ืช ืžื–ื•ื”ื•ืช ื‘ืื•ืคืŸ ืžืจื•ืžื– ื‘ืชืฆื•ืจื”.

ืœืื—ืจ ืžื›ืŸ, ื ื™ืฆื•ืจ ื›ืœืœื™ื ื”ืžืืคืฉืจื™ื ื’ื™ืฉื” ืœืคื•ืจื˜ื™ื ืžื”ืจืฉืช ื”ื—ื™ืฆื•ื ื™ืช ื•ืžืฆื™ื™ื ื™ื ืืช ื›ืชื•ื‘ืช ื”-IP ืฉืœื ื• ืœื—ื™ื‘ื•ืจ ื“ืจืš SSH ืœืฉืจืชื™ื. ืœื›ืœ ืžืฉืชืžืฉ ืื™ื ื˜ืจื ื˜ ื™ืฉ ื’ื™ืฉื” ืœื™ืฆื™ืื•ืช 80 ื•-443 ื‘ืฉืจืช ื”ืื™ื ื˜ืจื ื˜, ื•ืœืžืฉืชืžืฉ ืขื ื›ืชื•ื‘ืช IP ืฉืœ 90.1.15.1 ื™ืฉ ื’ื™ืฉื” ืœื™ืฆื™ืื•ืช SSH ืฉืœ ื”ืฉืจืชื™ื ื”ื•ื•ื™ืจื˜ื•ืืœื™ื™ื.

ืืคืฉืจ ื’ื™ืฉื” ืœื™ืฆื™ืื•ืช ืžื”ืจืฉืช ื”ื—ื™ืฆื•ื ื™ืช.

resource "vcd_nsxv_firewall_rule" "fwnatports" {

  edge_gateway   = var.vcd_org_edge_name

  name = "HTTPs Access"

  source {

gateway_interfaces = ["external"]

  }

  destination {

  gateway_interfaces = ["internal"]

  }

  service {

protocol = "tcp"

port = "80"

  }

  service {

protocol = "tcp"

port = "443"

  }

  depends_on = [vcd_network_routed.net]

}

resource "vcd_nsxv_firewall_rule" "fw_nat_admin_ports" {

  edge_gateway   = var.vcd_org_edge_name

  name = "Admin Access"

  source {

  ip_addresses = [ "90.1.15.1" ]

  }

  destination {

  gateway_interfaces = ["internal"]

  }

  service {

protocol = "tcp"

port = "58301"

  }

  service {

protocol = "tcp"

port = "58302"

  }

  service {

protocol = "tcp"

port = "58303"

  }

  depends_on = [vcd_network_routed.net]

}

ืื ื• ื™ื•ืฆืจื™ื ื›ืœืœื™ ืžืงื•ืจ NAT ืœื’ื™ืฉื” ืœืื™ื ื˜ืจื ื˜ ืžืจืฉืช ืžืงื•ืžื™ืช ื‘ืขื ืŸ:

ืื ื• ืžืชืืจื™ื ืืช ื›ืœืœื™ ื”ืžืงื•ืจ NAT.

resource "vcd_nsxv_snat" "snat_local" {

edge_gateway = var.vcd_org_edge_name

  network_type = "ext"

  network_name = var.vcdedgeexternalnetwork

  original_address   = var.vcd_edge_local_subnet

translated_address = var.vcd_edge_external_ip

  depends_on = [vcd_network_routed.net]

}

ื•ื›ื“ื™ ืœื”ืฉืœื™ื ืืช ื”ืชืฆื•ืจื” ืฉืœ ื‘ืœื•ืง ื”ืจืฉืช, ืื ื• ืžื•ืกื™ืคื™ื ื›ืœืœื™ NAT โ€‹โ€‹ืฉืœ ื™ืขื“ ืœื’ื™ืฉื” ืœืฉื™ืจื•ืชื™ื ืžื”ืจืฉืช ื”ื—ื™ืฆื•ื ื™ืช:

ื”ื•ืกืคืช ื›ืœืœื™ NAT โ€‹โ€‹ืฉืœ ื™ืขื“.

resource "vcd_nsxv_dnat" "dnat_tcp_nginx_https" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

  description = "NGINX HTTPs"

original_address = var.vcd_edge_external_ip
original_port = 443

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 443
protocol = "tcp"

depends_on = [vcd_network_routed.net]
}
resource "vcd_nsxv_dnat" "dnat_tcp_nginx_http" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "NGINX HTTP"

original_address = var.vcd_edge_external_ip
original_port = 80

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 80
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

ื”ื•ืกืฃ ื›ืœืœ NAT ืœืชืจื’ื•ื ื™ืฆื™ืื•ืช ืœืฉืจืช SSH ืชื—ืช Nginx.

resource "vcd_nsxv_dnat" "dnat_tcp-nginx_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH NGINX"

original_address = var.vcd_edge_external_ip
original_port = 58301

translated_address = var.vcd_edge_local_ip_nginx
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

ื”ื•ืกืฃ ื›ืœืœ NAT ืœืชืจื’ื•ื ืคื•ืจื˜ื™ื ืœืฉืจืช SSH ืขื 1C-Bitrix.

resource "vcd_nsxv_dnat" "dnat_tcp_bitrix_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Bitrix"

original_address = var.vcd_edge_external_ip
original_port = 58302

translated_address = var.vcd_edge_local_ip_bitrix
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

ื”ื•ืกืฃ ื›ืœืœ NAT ืœืชืจื’ื•ื ืคื•ืจื˜ื™ื ืœืฉืจืช SSH ืขื Nextcloud.

resource "vcd_nsxv_dnat" "dnat_tcp_nextcloud_ssh" {
edge_gateway = var.vcd_org_edge_name
network_name = var.vcd_edge_external_network
network_type = "ext"

description = "SSH Nextcloud"

original_address = var.vcd_edge_external_ip
original_port = 58303 translated_address = var.vcd_edge_local_ip_nextcloud
translated_port = 22
protocol = "tcp"

depends_on = [vcd_network_routed.net]

}

ืชืฆื•ืจืช ืกื‘ื™ื‘ื” ื•ื™ืจื˜ื•ืืœื™ืช Main.tf

ื›ืคื™ ืฉืชื›ื ื ื• ื‘ืชื—ื™ืœืช ื”ืžืืžืจ, ื ื™ืฆื•ืจ ืฉืœื•ืฉ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช. ื”ื ื™ื•ื›ื ื• ื‘ืืžืฆืขื•ืช "ื”ืชืืžื” ืื™ืฉื™ืช ืฉืœ ืื•ืจื—". ืื ื• ื ื’ื“ื™ืจ ืืช ืคืจืžื˜ืจื™ ื”ืจืฉืช ื‘ื”ืชืื ืœื”ื’ื“ืจื•ืช ืฉืฆื™ื™ื ื•, ื•ืกื™ืกืžืช ื”ืžืฉืชืžืฉ ืชื™ื•ื•ืฆืจ ืื•ื˜ื•ืžื˜ื™ืช.

ื ืชืืจ ืืช ื”-vApp ื‘ื” ื™ืžื•ืงืžื• ื”ืžื›ื•ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื•ืช ื•ืืช ื”ืชืฆื•ืจื” ืฉืœื”ืŸ.

ื›ื™ืฆื“ ืœื ื”ืœ ืชืฉืชื™ืช ืขื ืŸ ืขื Terraformืชืฆื•ืจืช ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช

ื‘ื•ืื• ื ื™ืฆื•ืจ ืžื™ื›ืœ vApp. ื›ื“ื™ ืฉื ื•ื›ืœ ืœื—ื‘ืจ ืžื™ื“ ืืช ื”-vApp ื•ื”-VM ืœืจืฉืช ื”ื•ื™ืจื˜ื•ืืœื™ืช, ื ื•ืกื™ืฃ ื’ื ืืช ื”ืคืจืžื˜ืจ ืชืœื•ื™_on:

ืฆื•ืจ ืžื™ื›ืœ

resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true" depends_on = [vcd_network_routed.net]

}

ื‘ื•ืื• ื ื™ืฆื•ืจ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืขื ืชื™ืื•ืจ

resource "vcd_vapp_vm" "nginx" {

vapp_name = vcd_vapp.vapp.name

name = "nginx"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nginx

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

ืคืจืžื˜ืจื™ื ืขื™ืงืจื™ื™ื ื‘ืชื™ืื•ืจ ื”-VM:

  • ืฉื - ืฉื ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช,

  • vappname - ืฉื ื”-vApp ืฉืืœื™ื• ื™ืฉ ืœื”ื•ืกื™ืฃ VM ื—ื“ืฉ,

  • ืฉื ืงื˜ืœื•ื’ / ืฉื ืชื‘ื ื™ืช - ืฉื ืงื˜ืœื•ื’ ื•ืฉื ืชื‘ื ื™ืช ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช,

  • storageprofile - ืžื“ื™ื ื™ื•ืช ืื—ืกื•ืŸ ื‘ืจื™ืจืช ืžื—ื“ืœ.

ืคืจืžื˜ืจื™ื ืฉืœ ื—ืกื™ืžืช ืจืฉืช:

  • ืกื•ื’ - ืกื•ื’ ื”ืจืฉืช ื”ืžื—ื•ื‘ืจืช,

  • ืฉื - ืœืื™ื–ื• ืจืฉืช ื•ื™ืจื˜ื•ืืœื™ืช ืœื—ื‘ืจ ืืช ื”-VM,

  • isprimary - ืžืชืื ืจืฉืช ืจืืฉื™,

  • ipallocation_mode โ€” ืžืฆื‘ ื”ืงืฆืืช ื›ืชื•ื‘ืช ื™ื“ื ื™ / DHCP / POOL,

  • ip - ื›ืชื•ื‘ืช IP ืขื‘ื•ืจ ื”ืžื—ืฉื‘ ื”ื•ื™ืจื˜ื•ืืœื™, ืื ื• ื ืฆื™ื™ืŸ ืื•ืชื” ื‘ืื•ืคืŸ ื™ื“ื ื™.

override_template_disk block:

  • sizeinmb - ื’ื•ื“ืœ ื“ื™ืกืง ื”ืืชื—ื•ืœ ืขื‘ื•ืจ ื”ืžื—ืฉื‘ ื”ื•ื•ื™ืจื˜ื•ืืœื™

  • storage_profile - ืžื“ื™ื ื™ื•ืช ืื—ืกื•ืŸ ืขื‘ื•ืจ ื”ื“ื™ืกืง

ื‘ื•ืื• ื ื™ืฆื•ืจ VM ืฉื ื™ ืขื ืชื™ืื•ืจ ืฉืœ ืื—ืกื•ืŸ ื”ืงื‘ืฆื™ื ืฉืœ Nextcloud

resource "vcd_vapp_vm" "nextcloud" {

vapp_name = vcd_vapp.vapp.name

name = "nextcloud"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_nextcloud

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "32768"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

resource "vcd_vm_internal_disk" "disk1" {

vapp_name = vcd_vapp.vapp.name

vm_name = "nextcloud"

bus_type = "paravirtual"

size_in_mb = "102400"

bus_number = 0

unit_number = 1

storage_profile = var.vcd_org_hdd_sp

allow_vm_reboot = true

depends_on = [ vcd_vapp_vm.nextcloud ]

}

ื‘ืกืขื™ืฃ vcdvminternal_disk ื ืชืืจ ื“ื™ืกืง ื•ื™ืจื˜ื•ืืœื™ ื—ื“ืฉ ืฉืžื—ื•ื‘ืจ ืœืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช.

ื”ืกื‘ืจื™ื ืœื‘ืœื•ืง vcdvminternaldisk:

  • bustype - ืกื•ื’ ื‘ืงืจ ื“ื™ืกืง

  • sizeinmb - ื’ื•ื“ืœ ื“ื™ืกืง

  • busnumber / unitnumber - ืžื™ืงื•ื ื—ื™ื‘ื•ืจ ื‘ืžืชืื

  • storage_profile - ืžื“ื™ื ื™ื•ืช ืื—ืกื•ืŸ ืขื‘ื•ืจ ื”ื“ื™ืกืง

ื‘ื•ืื• ื ืชืืจ ืืช ื”-VM ื”ืื—ืจื•ืŸ ื‘-Bitrix

resource "vcd_vapp_vm" "bitrix" {

vapp_name = vcd_vapp.vapp.name

name = "bitrix"

catalog_name = var.vcd_org_catalog

template_name = var.vcd_template_os_centos7

storage_profile = var.vcd_org_ssd_sp

memory = 8192

cpus = 1

cpu_cores = 1

network {

type = "org"

name = vcd_network_routed.net.name

is_primary = true

adapter_type = "VMXNET3"

ip_allocation_mode = "MANUAL"

ip = var.vcd_edge_local_ip_bitrix

}

override_template_disk {

bus_type = "paravirtual"

size_in_mb = "81920"

bus_number = 0

unit_number = 0

storage_profile = var.vcd_org_ssd_sp

}

}

ืขื“ื›ื•ืŸ ืžืขืจื›ืช ื”ื”ืคืขืœื” ื•ื”ืชืงื ืช ืกืงืจื™ืคื˜ื™ื ื ื•ืกืคื™ื

ื”ืจืฉืช ืžื•ื›ื ื”, ื”ืžื›ื•ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื•ืช ืžืชื•ืืจื•ืช. ืœืคื ื™ ื™ื™ื‘ื•ื โ€‹โ€‹ื”ืชืฉืชื™ืช ืฉืœื ื•, ื ื•ื›ืœ ืœื‘ืฆืข ื”ืงืฆืื” ืจืืฉื•ื ื™ืช ืžืจืืฉ ื‘ืืžืฆืขื•ืช ื‘ืœื•ืงื™ื ืฉืœ ืืกืคืงื” โ€‹โ€‹ื•ืœืœื ืฉื™ืžื•ืฉ ื‘-Ansible.

ื‘ื•ืื• ื ืกืชื›ืœ ื›ื™ืฆื“ ืœืขื“ื›ืŸ ืืช ืžืขืจื›ืช ื”ื”ืคืขืœื” ื•ืœื”ืคืขื™ืœ ืืช ืกืงืจื™ืคื˜ ื”ื”ืชืงื ื” ืฉืœ CMS Bitrix ื‘ืืžืฆืขื•ืช ื‘ืœื•ืง ื”ืคืจืกืคืงื˜.

ืจืืฉื™ืช, ื‘ื•ืื• ื ืชืงื™ืŸ ื—ื‘ื™ืœื•ืช ืขื“ื›ื•ืŸ CentOS.

resource "null_resource" "nginx_update_install" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip" ]

}

}

}

ื™ื™ืขื•ื“ ืจื›ื™ื‘ื™ื:

  • provisioner "remote-exec" - ื—ื‘ืจ ืืช ื‘ืœื•ืง ื”ื”ืงืฆืื” ืžืจื—ื•ืง

  • ื‘ื‘ืœื•ืง ื”ื—ื™ื‘ื•ืจ ืื ื• ืžืชืืจื™ื ืืช ื”ืกื•ื’ ื•ื”ืคืจืžื˜ืจื™ื ืฉืœ ื”ื—ื™ื‘ื•ืจ:

  • type โ€” ืคืจื•ื˜ื•ืงื•ืœ, ื‘ืžืงืจื” ืฉืœื ื• SSH;

  • ืžืฉืชืžืฉ - ืฉื ืžืฉืชืžืฉ;

  • ืกื™ืกืžื” - ืกื™ืกืžืช ืžืฉืชืžืฉ. ื‘ืžืงืจื” ืฉืœื ื•, ืื ื• ืžืฆื‘ื™ืขื™ื ืขืœ ื”ืคืจืžื˜ืจ vcdvappvm.nginx.customization[0].admin_password, ื”ืžืื—ืกืŸ ืืช ื”ืกื™ืกืžื” ืฉื ื•ืฆืจื” ืขื‘ื•ืจ ืžืฉืชืžืฉ ื”ืžืขืจื›ืช.

  • ืžืืจื— - ื›ืชื•ื‘ืช IP ื—ื™ืฆื•ื ื™ืช ืœื—ื™ื‘ื•ืจ;

  • ื™ืฆื™ืื” - ื™ืฆื™ืื” ืœื—ื™ื‘ื•ืจ, ืฉืฆื•ื™ื ื” ื‘ืขื‘ืจ ื‘ื”ื’ื“ืจื•ืช ื”-DNAT;

  • inline - ืจืฉื•ื ืืช ืจืฉื™ืžืช ื”ืคืงื•ื“ื•ืช ืฉื™ื•ื–ื ื•. ื”ืคืงื•ื“ื•ืช ื™ื•ื–ื ื• ืœืคื™ ื”ืกื“ืจ ื›ืคื™ ืฉืžืฆื•ื™ืŸ ื‘ืกืขื™ืฃ ื–ื”.

ื›ื“ื•ื’ืžื”, ื‘ื•ื ื ื‘ืฆืข ื‘ื ื•ืกืฃ ืืช ืกืงืจื™ืคื˜ ื”ื”ืชืงื ื” ืฉืœ 1C-Bitrix. ื”ืคืœื˜ ืฉืœ ืชื•ืฆืืช ื‘ื™ืฆื•ืข ื”ืกืงืจื™ืคื˜ ื™ื”ื™ื” ื–ืžื™ืŸ ื‘ื–ืžืŸ ืฉื”ืชื•ื›ื ื™ืช ืคื•ืขืœืช. ื›ื“ื™ ืœื”ืชืงื™ืŸ ืืช ื”ืกืงืจื™ืคื˜, ืจืืฉื™ืช ื ืชืืจ ืืช ื”ื‘ืœื•ืง:

ื‘ื•ืื• ื ืชืืจ ืืช ื”ื”ืชืงื ื” ืฉืœ 1C-Bitrix.

provisioner "file" {

source = "prepare.sh"

destination = "/tmp/prepare.sh"

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.nginx.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58301"

timeout = "30s"

}

}

provisioner "remote-exec" {

inline = [

"chmod +x /tmp/prepare.sh", "./tmp/prepare.sh"

]

}

ื•ืžื™ื“ ื ืชืืจ ืืช ืขื“ื›ื•ืŸ ื”ื‘ื™ื˜ืจื™ืงืก.

ื“ื•ื’ืžื” ืœื”ืงืฆืืช 1C-Bitrix.

resource "null_resource" "install_update_bitrix" {

provisioner "remote-exec" {

connection {

type = "ssh"

user = "root"

password = vcd_vapp_vm.bitrix.customization[0].admin_password

host = var.vcd_edge_external_ip

port = "58302"

timeout = "60s"

}

inline = [

"yum -y update && yum -y upgrade",

"yum -y install wget nano epel-release net-tools unzip zip",

"wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh -O /tmp/bitrix-env.sh",

"chmod +x /tmp/bitrix-env.sh",

"/tmp/bitrix-env.sh"

]

}

}

ื—ึธืฉืื•ึผื‘! ื™ื™ืชื›ืŸ ืฉื”ืกืงืจื™ืคื˜ ืœื ื™ืขื‘ื•ื“ ืื ืœื ืชื‘ื˜ืœ ืืช SELinux ืžืจืืฉ! ืื ืืชื” ืฆืจื™ืš ืžืืžืจ ืžืคื•ืจื˜ ืขืœ ื”ืชืงื ื” ื•ื”ื’ื“ืจื” ืฉืœ CMS 1C-Bitrix ื‘ืืžืฆืขื•ืช bitrix-env.sh, oo ืืชื” ื™ื›ื•ืœ ื”ืฉืชืžืฉ ื‘ืžืืžืจ ื”ื‘ืœื•ื’ ืฉืœื ื• ื‘ืืชืจ.

3. ืืชื—ื•ืœ ืชืฉืชื™ืช

ื›ื™ืฆื“ ืœื ื”ืœ ืชืฉืชื™ืช ืขื ืŸ ืขื Terraformืืชื—ื•ืœ ืžื•ื“ื•ืœื™ื ื•ืชื•ืกืคื™ื

ืœืขื‘ื•ื“ื”, ืื ื• ืžืฉืชืžืฉื™ื ื‘"ืขืจื›ืช ื’'ื ื˜ืœืžืŸ" ืคืฉื•ื˜ื”: ืžื—ืฉื‘ ื ื™ื™ื“ ืขื ืžืขืจื›ืช ื”ื”ืคืขืœื” Windows 10 ื•ืขืจื›ืช ื”ืคืฆื” ืžื”ืืชืจ ื”ืจืฉืžื™ terraform.io. ื‘ื•ื ื ืคืจื•ืง ื•ืืชื—ื•ืœ ื‘ืืžืฆืขื•ืช ื”ืคืงื•ื“ื”: terraform.exe init

ืœืื—ืจ ืชื™ืื•ืจ ืชืฉืชื™ืช ื”ืžื—ืฉื•ื‘ ื•ื”ืจืฉืช, ืื ื• ืžืฉื™ืงื™ื ืชื›ื ื•ืŸ ืœื‘ื“ื™ืงืช ื”ืชืฆื•ืจื” ืฉืœื ื•, ืฉื ื ื•ื›ืœ ืœืจืื•ืช ืžื” ื™ื™ื•ื•ืฆืจ ื•ื›ื™ืฆื“ ื”ื™ื ืชืชื—ื‘ืจ ื–ื” ืœื–ื”.

  1. ื‘ืฆืข ืืช ื”ืคืงื•ื“ื” - terraform plan -var-file=vcd.tfvars.

  2. ืื ื—ื ื• ืžืงื‘ืœื™ื ืืช ื”ืชื•ืฆืื” - Plan: 16 to add, 0 to change, 0 to destroy. ื›ืœื•ืžืจ, ืขืœ ืคื™ ืชื›ื ื™ืช ื–ื• ื™ื™ื•ื•ืฆืจื• 16 ืžืฉืื‘ื™ื.

  3. ืื ื—ื ื• ืžืฉื™ืงื™ื ืืช ื”ืชื•ื›ื ื™ืช ื‘ืคืงื•ื“ื” - terraform.exe apply -var-file=vcd.tfvars.

ื™ื™ื•ื•ืฆืจื• ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช, ื•ืื– ื”ื—ื‘ื™ืœื•ืช ืฉืจืฉืžื ื• ื™ื‘ื•ืฆืขื• ื‘ืชื•ืš ืกืขื™ืฃ ื”-Provisioner - ืžืขืจื›ืช ื”ื”ืคืขืœื” ืชืชืขื“ื›ืŸ ื•ื”-CMS Bitrix ื™ื•ืชืงืŸ.

ืงื‘ืœืช ืžื™ื“ืข ืขืœ ื—ื™ื‘ื•ืจ

ืœืื—ืจ ื‘ื™ืฆื•ืข ื”ืชื•ื›ื ื™ืช, ืื ื• ืจื•ืฆื™ื ืœืงื‘ืœ ื ืชื•ื ื™ื ื‘ืฆื•ืจืช ื˜ืงืกื˜ ืœื—ื™ื‘ื•ืจ ืœืฉืจืชื™ื, ืœืฉื ื›ืš ื ืขืฆื‘ ืืช ืงื˜ืข ื”ืคืœื˜ ื‘ืื•ืคืŸ ื”ื‘ื:

output "nginxpassword" {

 value = vcdvappvm.nginx.customization[0].adminpassword

}

ื•ื”ืคืœื˜ ื”ื‘ื ืื•ืžืจ ืœื ื• ืืช ื”ืกื™ืกืžื” ืขื‘ื•ืจ ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืฉื ื•ืฆืจื”:

Outputs: nginx_password = F#4u8!!N

ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืงื‘ืœื™ื ื’ื™ืฉื” ืœืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืขื ืžืขืจื›ืช ื”ืคืขืœื” ืžืขื•ื“ื›ื ืช ื•ื—ื‘ื™ืœื•ืช ืžื•ืชืงื ื•ืช ืžืจืืฉ ืœื”ืžืฉืš ื”ืขื‘ื•ื“ื” ืฉืœื ื•. ื”ื›ืœ ืžื•ื›ืŸ!

ืื‘ืœ ืžื” ืื ื›ื‘ืจ ื™ืฉ ืœืš ืชืฉืชื™ืช ืงื™ื™ืžืช?

3.1. ืขื‘ื•ื“ื” Terraform ืขื ืชืฉืชื™ืช ืงื™ื™ืžืช

ื–ื” ืคืฉื•ื˜, ืืชื” ื™ื›ื•ืœ ืœื™ื™ื‘ื ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื ื•ื›ื—ื™ื•ืช ื•ืžื›ื•ืœื•ืช vApp ืฉืœื”ืŸ ื‘ืืžืฆืขื•ืช ืคืงื•ื“ืช import.

ื‘ื•ืื• ื ืชืืจ ืืช ืžืฉืื‘ ื”-vAPP ื•ืืช ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช.

resource "vcd_vapp" "Monitoring" {

name = "Monitoring"

org = "mClouds"

vdc = "mClouds"

}

resource "vcd_vapp_vm" "Zabbix" {

name = "Zabbix"

org = "mClouds"

vdc = "mClouds"

vapp = "Monitoring"

}

ื”ืฉืœื‘ ื”ื‘ื ื”ื•ื ืœื™ื™ื‘ื ืืช ื”ืžืืคื™ื™ื ื™ื ืฉืœ ืžืฉืื‘ื™ vApp ื‘ืคื•ืจืžื˜ vcdvapp.<vApp> <org>.<orgvdc>.<vApp>, ืฉื‘ื•

  • vApp - ืฉื vApp;

  • org - ืฉื ื”ืืจื’ื•ืŸ;

  • org_vdc - ืฉื ืžืจื›ื– ื”ื ืชื•ื ื™ื ื”ื•ื•ื™ืจื˜ื•ืืœื™.

ื›ื™ืฆื“ ืœื ื”ืœ ืชืฉืชื™ืช ืขื ืŸ ืขื Terraformื™ื™ื‘ื•ื โ€‹โ€‹ืžืืคื™ื™ื ื™ ืžืฉืื‘ vAPP

ื‘ื•ืื• ืœื™ื™ื‘ื ืืช ื”ืžืืคื™ื™ื ื™ื ืฉืœ ืžืฉืื‘ื™ VM ื‘ืคื•ืจืžื˜: vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>, ืฉื‘ื•:

  • VM - ืฉื VM;

  • vApp - ืฉื vApp;

  • org - ืฉื ื”ืืจื’ื•ืŸ;

  • orgvdc ื”ื•ื ื”ืฉื ืฉืœ ืžืจื›ื– ื”ื ืชื•ื ื™ื ื”ื•ื•ื™ืจื˜ื•ืืœื™.

ื”ื™ื™ื‘ื•ื โ€‹โ€‹ื”ืฆืœื™ื—

C:UsersMikhailDesktopterraform>terraform import vcd_vapp_vm.Zabbix mClouds.mClouds.Monitoring.Zabbix

vcd_vapp_vm.Zabbix: Importing from ID "mClouds.mClouds.Monitoring.Zabbix"...

vcd_vapp_vm.Zabbix: Import prepared!

Prepared vcd_vapp_vm for import

vcd_vapp_vm.Zabbix: Refreshing state... [id=urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f]

Import successful!

The resources that were imported are shown above. These resources are now in
your Terraform state and will henceforth be managed by Terraform.

ื›ืขืช ืื ื• ื™ื›ื•ืœื™ื ืœื”ืกืชื›ืœ ืขืœ ื”ืžืฉืื‘ ื”ืžื™ื•ื‘ื ื”ื—ื“ืฉ:

ืžืฉืื‘ ืžื™ื•ื‘ื

> terraform show

...

# vcd_vapp.Monitoring:

resource "vcd_vapp" "Monitoring" {

guest_properties = {}

href = "https://vcloud.mclouds.ru/api/vApp/vapp-fe5db285-a4af-47c4-93e8-55df92f006ec"

id = "urn:vcloud:vapp:fe5db285-a4af-47c4-93e8-55df92f006ec"

ip = "allocated"

metadata = {}

name = "Monitoring"

org = "mClouds"

status = 4

status_text = "POWERED_ON"

vdc = "mClouds"

}

โ€ฆ

# vcd_vapp_vm.Zabbix:

resource "vcd_vapp_vm" "Zabbix" {

computer_name = "Zabbix"

cpu_cores = 1

cpus = 2

expose_hardware_virtualization = false

guest_properties = {}

hardware_version = "vmx-14"

href = "https://vcloud.mclouds.ru/api/vApp/vm-778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

id = "urn:vcloud:vm:778f4a89-1c8d-45b9-9d94-0472a71c4d1f"

internal_disk = [

{

bus_number = 0

bus_type = "paravirtual"

disk_id = "2000"

iops = 0

size_in_mb = 122880

storage_profile = "Gold Storage Policy"

thin_provisioned = true

unit_number = 0

},

]

memory = 8192

metadata = {}

name = "Zabbix"

org = "mClouds"

os_type = "centos8_64Guest"

storage_profile = "Gold Storage Policy"

vapp_name = "Monitoring"

vdc = "mClouds"

customization {

allow_local_admin_password = true

auto_generate_password = true

change_sid = false

enabled = false

force = false

join_domain = false

join_org_domain = false

must_change_password_on_first_login = false

number_of_auto_logons = 0

}

network {

adapter_type = "VMXNET3"

ip_allocation_mode = "DHCP"

is_primary = true

mac = "00:50:56:07:01:b1"

name = "MCLOUDS-LAN01"

type = "org"

}

}

ืขื›ืฉื™ื• ืื ื—ื ื• ื‘ื”ื—ืœื˜ ืžื•ื›ื ื™ื - ืกื™ื™ืžื ื• ืขื ื”ื ืงื•ื“ื” ื”ืื—ืจื•ื ื” (ื™ื™ื‘ื•ื โ€‹โ€‹ืœืชืฉืชื™ืช ืงื™ื™ืžืช) ื•ืฉืงืœื ื• ืืช ื›ืœ ืขื™ืงืจื™ ื”ืขื‘ื•ื“ื” ืขื Terraform. 

ื”ื›ืœื™ ื”ืชื‘ืจืจ ื›ื ื•ื— ืžืื•ื“ ื•ืžืืคืฉืจ ืœืš ืœืชืืจ ืืช ื”ืชืฉืชื™ืช ืฉืœืš ื›ืงื•ื“, ื”ื—ืœ ืžืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ืฉืœ ืกืคืง ืขื ืŸ ืื—ื“ ื•ืขื“ ืœืชื™ืื•ืจ ื”ืžืฉืื‘ื™ื ืฉืœ ืจื›ื™ื‘ื™ ื”ืจืฉืช.

ื™ื—ื“ ืขื ื–ืืช, ืขืฆืžืื•ืช ืžื”ืกื‘ื™ื‘ื” ืžืืคืฉืจืช ืœืขื‘ื•ื“ ืขื ืžืฉืื‘ื™ื ืžืงื•ืžื™ื™ื, ื‘ืขื ืŸ, ื•ืืฃ ืœื ื”ืœ ืืช ื”ืคืœื˜ืคื•ืจืžื”. ื•ืื ืื™ืŸ ืคืœื˜ืคื•ืจืžื” ื ืชืžื›ืช ื•ืืชื” ืจื•ืฆื” ืœื”ื•ืกื™ืฃ ืคืœื˜ืคื•ืจืžื” ื—ื“ืฉื”, ืืชื” ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืกืคืง ืžืฉืœืš ื•ืœื”ืฉืชืžืฉ ื‘ื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”