á€áá±á¬ááºážáá«ážááœáẠáá»áœááºá¯ááºááá¯á·ááẠTerraform áá«áááºáááºáá»á¬ážááá¯ááŒáá·áºááŸá¯áááºááŒá
áºááŒá®áž áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯ááºá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááá¯áááºáž áááŒááºážááŒááºážá
áááºáá¯ááºáá±á¬ááºáá«áááºá
á¡áá¬á¡á¬ážáá¯á¶ážá¡ááŒá±á¬ááºážá¡áá±ážá áááºááŸáá·áº á¡ááá·áºáá¯á¶ážááá·áºááŒáá·áº
-
á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážáááºáá®ážááŒááºážá -
á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠ á áááºááŒááºáž
1. Terraform - áá±á¬áºááŒáá»ááºá á¡á¬ážáá¬áá»ááºáá»á¬ážááŸáá·áº á¡á áááºá¡ááá¯ááºážáá»á¬áž
Terraform ááẠáá¯ááºááá¯á¡áá¯á¶ážááŒá¯á virtual á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážáááºáá±á¬ááºááŒááºážááŸáá·áº á á®áá¶ááá·áºááœá²ááŒááºážá¡ááœáẠIaC (Infrastructure-as-Code) áááááá¬áá áºáá¯ááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·ááẠtool ááŒáá·áºáá¯ááºáá±á¬ááºáá¬ááœáẠá¡á¬ážáá¬áá»ááºáá»á¬ážá áœá¬ááᯠááŸááºáá¬ážáá¬ážáááº-
-
á¡áááºááŸá¬ážá¡áá áºáá»á¬ážá ááŒáá·áºáá»ááºááŸá¯ á¡ááŸáááºá¡áá¯áẠ(á áááºááŒáá¯áẠvirtual áááºáááºážáá»ááºáá»á¬áž)á áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá áá±á¬ááºáááºá¡áá áºáá»á¬áž áá»á¬ážáá±áá±á á¡áááºážá¡ááŒá áºá¡áá áºáá»á¬áž áá¯ááºáá±ááẠáááºážááá¬ááá¯ááºáᬠáá¶á·ááá¯ážáá°áá®áá±áž áááºáááºážáá»á¬áž ááá¯á¡ááºááá·áº âááá áºááŸáááºááŒááºážâ áá»á¬áž ááá¯áá»á¬ážáá±ááŒá áºáááºá Terraform ááŒáá·áº á¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠáááºážááá¬ááá¯ááºážááá¯ááºáá¬áá¶á·ááá¯ážááŸá¯áááá¯á¡ááºáá² á ááºááá¯ááááºááŒááºáž ááá¯á·ááá¯áẠá ááºááá¯ááºááá¯ááºááááºááŒááºážáááŒá¯áá² (á¥ááá¬á OS ááᯠá¡ááá¯á¡áá»á±á¬ááºááááºááŒááºážááŸáá·áº virtual disk partition ááá¯ááá¯ážááŒáŸáá·áºááŒááºáž) ááᯠá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠvirtual machine settings ááá¯ááŒá±á¬ááºážáá²ááá¯ááºáááºá
-
á¡áááºááœááºážááŒááºážá¡á á®á¡á ááºááᯠáá»ááºááŒááºážá¡áááºááŒá¯ááŒááºážá Tennant á¡áá áºá á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá¯ááºááá±á¬áºááŒáá»ááºá¡á¬ážá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áºá áááºááá·áºá¡áá¬á áááºááá·áºáááºá áááºááá·áºá¡á á®á¡á á¥áºááœáẠáááºáá²á·ááá¯á·áá±á¬ áá±á¬ááºáá¯á¶ážá¡ááŒá±á¡áá±ááœááºá ááá¯á·ááá¯áẠá¡ááá¯áá« virtual machine ááá¯á·ááá¯áẠvirtual machines ááá¯á·áá»áááºáááºááŸá¯ááŸááá±á¬ virtual network ááŒá áºáááºááᯠáá»ááºáá»ááºážá á áºáá±ážááá¯ááºáá«áááºá
-
áá°ááŒáá¯ááºá¡áá»á¬ážáá¯á¶áž cloud ááááºáá±á¬ááºážáá»á¬ážááᯠáá±á¬áºááŒááá¯ááºááŸá¯á ááẠtool ááá¯áá¯á¶ážááá¯ááºáááºá Amazon ááŸáá·áº Google Cloud á០IaaSá SaaS ááŸáá·áº PaaS ááŒá±ááŸááºážáá»ááºáá»á¬ážá¡ááœááºáž áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáá±ážáá±á¬ááºááá·áº VMware vCloud áá«ááá¯ááºáá¬á¡áá±á«áº á¡ááŒá±áá¶ááá·áº áá¯áá¹ááááááááºáá±á¬ááºážáá»á¬ážá¡ááá
-
cloud áááºáá±á¬ááºááŸá¯áá±ážáá°á¡áá»á¬ážá¡ááŒá¬ážááᯠá á®áá¶ááá·áºááœá²áá«á cloud á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááºáá®ážáááºá ááŸá¬ááœá±áá±á¬áºáá¯ááºáááºááŸáá·áº á á®áá¶ááá·áºááœá²ááẠáá áºáá¯áááºážáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á á¶áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯á á¡ááŸá¬ážáá¶ááá¯ááºáááºááᯠááŒáŸáá·áºáááºáááºá¡ááœáẠáááºážááá¯á·á¡ááŒá¬áž á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶áá»á¬ážááᯠááŒáá·áºáá±áá«á
-
ááá¯ááºááŒáá¯á¶áá»á¬áž áááºáá®ážáááºá¡ááœáẠá¡áááºááŒá±á áœá¬ á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá áá±á¬á·ááºáá²á ááºážáááºááŒááºážááŸáá·áº á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážá¡ááœááºá áááºááẠá ááºážáááºááŸá¯áá¬áá¡ááœáẠá¡ááá¯áá±á¬ááºá ááá°áá®áá±á¬áááºáááºážáá»ááºáá»á¬ážááœáẠá ááºážáááºáá±á¬á·ááºáá²ááᯠá¡ááŒáá¯ááºáááºáá®ážááá¯ááºááŒá®áž á¡áááºážá¡ááŒá áºáááºáá±á¬ááºááŸá¯á¡á á®á¡á ááºáá áºáá¯áááºážááᯠáááºáá®ážááŒááºážááŒáá·áº á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáá»ááºáá»ááºážááŒá±á¬ááºážáá²áᬠáá»ááºáá áºááá¯ááºáááºá
"Terrarium" Terraform
áá»áœááºá¯ááºááá¯á·ááẠáááááá¬á á¡á¬ážáá¬áá»ááºáá»á¬ážááᯠá¡ááá¯áá»á¯ááºááŒá±á¬áá²á·ááŒá®ážá ááᯠáááºážááᯠáááºážá á¡á áááºá¡ááá¯ááºážáá»á¬ážá¡ááŒá Ạááœá²ááŒáá·áºááŒáá«á áá¯á·
áá¶á·ááá¯ážáá±ážáááºá
Terraform ááœááºá áááºááá·áºá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ á¡áá»áá¯ážá¡á á¬ážáá®ážáá«ážááᯠá¡áááºážá¡ááŒá áºá¡ááŒá Ạááá¯ááºá á¬ážááŒá¯ááá¯ááºáááºá á¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº API ááááºáá±á¬ááºážá¡ááŒá¬áž áá»áááºáááºááŸá¯ááᯠáá¶á·ááá¯ážáá±ážáá° module áá»á¬ážá០áá¶á·ááá¯ážáá±ážáá¬ážááŒá®ážá á¥ááá¬á Azure ááá¯á·ááá¯áẠVMware vCloud Director ááẠáá®ážááŒá¬ážááááºáá±á¬ááºážáá áºáá¯á¡ááœááºáž á¡áááºážá¡ááŒá áºáá»á¬ážááᯠáááºáá®ážááá¯ááºá á±áá«áááºá
ááá±á¬áá»ááºááá áºá áááºáá áºááá¯ááºážá¡áá±ááŒáá·áº áááºááẠááá°áá®áá±á¬ááááºáá±á¬ááºážáá»á¬ážááœáẠááá°áá®áá±á¬áááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážááŸáá·áº á¡ááŒááºá¡ááŸáẠáá¯á¶á·ááŒááºááá¯ááºáá«áááºá
á¡áááºážá¡ááŒá áºáá»á¬áž (resource description)á
á¡áááºážá¡ááŒá áºáá»á¬ážá áá±á¬áºááŒáá»ááºááẠááá·áºá¡á¬áž virtual machines ááá¯á·ááá¯áẠnetworks áá»á¬ážáá²á·ááá¯á· platform á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠá á®áá¶ááá·áºááœá²ááá¯ááºá á±áá«áááºá
áááºááẠVMware vCloud áá«ááá¯ááºáá¬áááºáá±á¬ááºááŸá¯áá±ážáá°á¡ááœáẠá¡áááºážá¡ááŒá áºáá±á¬áºááŒáá»ááºáá áºáá¯ááᯠáááºááá¯ááºááá¯ááºáááºáá®ážááá¯ááºááŒá®áž vCloud Director ááá¯á¡áá¯á¶ážááŒá¯ááá·áº áááºááá·áº hosting áááºáá±á¬ááºááŸá¯áá±ážáá°ááŸáá·áºáááᯠá¡áááºážá¡ááŒá áºáá»á¬ážáááºáá®ážááẠá€áá±á¬áºááŒáá»ááºááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá ááá¯á¡ááºáá±á¬ hosting áááºáá±á¬ááºááŸá¯áá±ážáá°áá¶ááá¯á· á¡áá±á¬ááºá¡áá¬ážá áá á áºááŒááºáž áá±á¬ááºáá»á¬ážááŸáá·áº ááœááºáááºáá»áááºáááºááŸá¯ áá±á¬ááºáá»á¬ážááá¯áᬠááŒá±á¬ááºážáá²ááẠááá¯á¡ááºáááºá
á á®áá¶áá±ážáááºá
á€á¡á áááºá¡ááá¯ááºážááẠvirtual machines áá»á¬ážááá¯áááºáá®ážááŒá®ážáá±á¬áẠáááºáááºááŸá¯á áá áºá áááŠážáááºáááºááŒááºážááŸáá·áº ááááºážááááºážááŒááºážá¡ááœáẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºááá¯ááºá á±áááºá áááºááẠvirtual machine áááºážááŒá áºááᯠáááºáá®ážááŒá®ážáááºááŸáá·áºá áááºááẠSSH ááŸáá áºááá·áº configure áá¯ááºááŒá®áž áá»áááºáááºáááºá áááºáááºááŸá¯á áá áºááᯠá¡ááºááááºáá¯ááºááŒá®áž script áá áºáá¯ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž run ááẠprovisioners ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
Input ááŸáá·áº Output variable áá»á¬ážá
Input variables - áááºááá·áº block á¡áá»áá¯ážá¡á á¬ážáá»á¬ážá¡ááœáẠááá·áºááœááºáž variables áá»á¬ážá
Output variables áá»á¬ážááẠááá·áºá¡á¬áž á¡áááºážá¡ááŒá áºáá»á¬ážáááºáá®ážááŒá®ážáá±á¬áẠáááºááá¯ážáá»á¬ážááᯠááááºážáááºážááá¯ááºá á±ááŒá®áž á¥ááá¬á Provisioners block ááœáẠá¡ááŒá¬ážáá±á¬ module áá»á¬ážááœáẠinput variables á¡ááŒá Ạá¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá
ááááº.
States ááá¯ááºáá»á¬ážááẠáááºáá±á¬ááºááŸá¯áá±ážáá° ááááºáá±á¬ááºáž áááºážááŒá áºáá»á¬áž ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááá¯ááºáᬠá¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážáá¬ážáááºá ááááºáá±á¬ááºážááᯠááááá¯á¶ážáááºáá®ážáá±á¬á¡áá«ááœáẠá¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áºáááºáááºááŒá®áž ááááºážá¡áá»ááºá¡áááºáááŸáááá·áºá¡ááŒáẠáááºááá·áºáá¯ááºáááºážáá»áŸááá¯ááºáá±á¬ááºáá®ááœááºá Terraform ááẠáá±á¬áºááŒáá¬ážááŒá®ážááŒá áºáá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážá á¡á á áºá¡ááŸááºá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááŒáá·áº ááŒááºáááºááᯠá¡ááºááááºáá¯ááºáááºá
ááŒááºáááºáá»á¬ážá á¡ááááááºááœááºáá»ááºááŸá¬ ááááºáá±á¬ááºážááᯠáááºáá«ááá²áá² áááºáá®ážááŒááºážááŸáá·áº á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŸá±á¬ááºááŸá¬ážáááºá¡ááœáẠáááºáá±á¬ááºážááá·áºáá¬ážáá±á¬ áááºážááŒá áºáá»á¬ážááŸáá·áº á¡áá¬ááá¹áá¯áá»á¬ážá ááœá²á·á ááºážááŸá¯áá¯á¶á á¶ááᯠááŸáá¯ááºážááŸááºááẠáááºáá®ážáá¬ážááŒá®ážáá±á¬ á¡áááºážá¡ááŒá áºáá»á¬ážá á¡áá¬ááá¹áá¯áá»á¬ážááᯠááááºážáááºážáááºááŒá áºáááºá
áá°áááºážá¡á¬ážááŒáá·áºá ááŒááºáááºá¡áá»ááºá¡áááºáá»á¬ážááᯠáá±áááœááºáž terraform.tfstate ááá¯ááºááœáẠááááºážáááºážáá¬ážáá±á¬áºáááºáž ááá¯á¡ááºáá«á á¡ááœá²á·á¡áá¯ááºá¡ááœáẠá¡áá±ážááááºážááá¯ááŸá±á¬ááºááŸá¯ááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
Terraform áá¡áá°á¡áá®ááá«áá² áááºáá®ážáá¬ážáá±á¬ á¡ááŒá¬ážá¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº áááºáá±á¬ááºážá¡ááŒááºá¡ááŸáẠá¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºáááºá¡ááœáẠáááºááŸáááááºáá±á¬ááºážá¡áááºážá¡ááŒá áºáá»á¬ážááᯠááŒááºáááºá¡ááŒá Ạáááºááœááºážááá¯ááºáááºá
2. á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážáááºáá®ážááŒááºážá
á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠááœá²áá¯ááºááŒá®ážáá«ááŒá®á ááᯠTerraform ááᯠá¡áá¯á¶ážááŒá¯á áá»áœááºá¯ááºááá¯á·ááẠvirtual machine áá¯á¶ážáá¯ááŒáá·áº á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá áºáá¯ááᯠáááŒááºážááŒááºáž áááºáá®ážáá«áááºá áááááŸá¬ nginx ááá±á¬ááºá á®áá¬áá¬ááŒáá·áº ááá·áºááœááºážáá¬ážááŒá®ážá áá¯áááááŸá¬ Nextcloud ááá¯á¡ááŒá±áá¶ááá·áº ááá¯ááºááá¯ááŸá±á¬ááºááŸá¯ááŸáá·áº ááááááŸá¬ CMS Bitrix ááŒáá·áº ááŒá áºáááºá
áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¥ááá¬ááá¯á¡áá¯á¶ážááŒá¯á áá¯ááºááá¯áá±ážááŒá®áž áááºážááá¯áá¯ááºáá±á¬ááºáá«áááºá
áŠážá áœá¬á áá»áœááºá¯ááºááá¯á·á ááá±á¬áá»ááºá¡áá áºá¡ááœáẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠááᯠáá±á¬áºááŒááá·áºááá¯ááºáá»á¬áž áá¬ážááŸáááá·áº áááºážááœáŸááºáá áºáᯠáááºáá®ážááŒáá«á áá¯á·á
mkdir project01
áá±á¬ááºáá áºáá¯ááá±á¬á· á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ á¡á áááºá¡ááá¯ááºážááœá±ááᯠáá±á¬áºááŒáá«áááºá Terraform ááẠááá¯ááºáá»á¬ážááœáẠáá±á¬áºááŒáá»ááºá¡áá±á«áº á¡ááŒá±áá¶á áááºáá¶áá±ážáá»á¬ážááᯠáááºáá®ážááŒá®áž ááá¯ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáááºá áá±á¬áºááŒáá¬ážáá±á¬ ááááºááá¯á·áá¬ážáá±á¬ áááºááœááºáá»ááºá¡áá±á«áº á¡ááŒá±áá¶á ááá¯ááºáá»á¬ážááᯠáááºážááá¯á·ááá¯ááºááá¯áẠá¡áááºáá±ážááá¯ááºáá«áááºá á¥ááá¬á network.tf - á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠá¡ááœáẠááœááºáááºáá±á¬ááºáá»á¬ážááᯠáá±á¬áºááŒáááºá
áá»áœááºá¯ááºááá¯á·á á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠá á¡á áááºá¡ááá¯ááºážáá»á¬ážááᯠáá±á¬áºááŒáááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡á±á¬ááºáá«ááá¯ááºáá»á¬ážááᯠáááºáá®ážáá²á·áááº-
ááá¯ááºáá»á¬ážá á¬áááºážá
main.tf - á¡áá¯áááºáááºážáá»ááºá¡ááœáẠááá·áºáááºáá»ááºáá»á¬ážáá±á¬áºááŒáá»áẠ- á¡áá¯á¡áá±á¬ááºá ááºáá»á¬ážá
network.tf - virtual network parameters áá»á¬ážááŸáá·áº NAT ááŸáá·áº Firewall á ááºážáá»ááºážáá»á¬ážá áá±á¬áºááŒáá»ááºá
variables.tf - áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá±á¬ ááááºážááŸááºáá»á¬ážá á¬áááºážá
vcd.tfvars - VMware vCloud áá«ááá¯ááºáᬠmodule á¡ááœáẠááá±á¬áá»ááºááŒá±á¬ááºážááá¯ááºáá±á¬ áááºááá¯ážáá»á¬ážá
Terraform ááœááºááœá²á·á ááºážáá¯á¶áá¬áá¬á áá¬ážááẠááŒá±ááŒá¬áá»ááºááŒá áºááŒá®ážá á á®áá¶áá±ážáá°áá¯ááºááœááºáá»á¬ážááŸááœá²á áá¯á¶ážáá»á¬ážáá¡á á®á¡á á¥áºááẠá¡áá±ážáááŒá®ážáá±á¬ááŒá±á¬áá·áºá á€ááá±á¬ááºááœáẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠááŒááºáááºááá·áºá¡áá«ááœáẠáá¯ááºáá±á¬ááºáááá·áº á¡áááá·áºáá»á¬ážááᯠáá±á¬áºááŒááŒá®áž áááºážááá¯á·ááᯠá áá áºááá» áá¯ááºáá±á¬ááºáááºááŒá áºáááºá
ááááºááá¯á·áá¬áá²á
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
Blocks áá»á¬ážááá¯áá±á¬áºááŒáááºá áááºážáááá¯ááºááá¯ááºáááá¯ááááºážáááºážáá¬áá¬á
áá¬áž HCL (HashiCorp Configuration Language) ááá¯á¡áá¯á¶ážááŒá¯áááºá JSON ááá¯á¡áá¯á¶ážááŒá¯á á¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááá¯áá±á¬áºááŒáááºááŒá
áºááá¯ááºáááºá syntax á¡ááŒá±á¬ááºáž ááá¯ááá¯áá±á·áá¬ááá¯ááºáá«áááºá
áááºáááºážáá»áẠááŒá±á¬ááºážáá²ááá¯ááºáá±á¬ ááœá²á·á ááºážááŸá¯áá¯á¶á á¶á variables.tf ááŸáá·áº vcd.tfvars
áŠážá áœá¬á VMware vCloud Director module á¡ááœáẠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ variable áá»á¬ážá¡á¬ážáá¯á¶ážááŸáá·áº áááºážááá¯á·ááááºááá¯ážáá»á¬ážááᯠáá±á¬áºááŒááá·áº ááá¯ááºááŸá áºáá¯ááᯠáááºáá®ážááŒáá«á áá¯á·á á¡áááºáá¯á¶áž 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 â virtual áá±áá¬á ááºáá¬á¡áááºá
-
vcd_org_url - API URLá
-
vcd_org_edge_name â virtual router áá¡áááºá
-
vcd_org_catalog â virtual machine templates ááŸáá·áº directory á¡áááºá
-
vcd_edge_external_ip â á¡áá»á¬ážáá°ááŸá¬ IP ááááºá á¬á
-
vcd_edge_external_network â ááŒááºáááœááºáááºá¡áááºá
-
vcd_org_hdd_sp â HDD ááá¯ááŸá±á¬ááºááŸá¯áá°áá«áá¡áááºá
-
vcd_org_ssd_sp â SSD ááá¯ááŸá±á¬ááºááŸá¯áá°áá«áá á¡áááºá
ááŒá®ážáá»áŸáẠáá»áœááºá¯ááºááá¯á·á ááááºážááŸááºáá»á¬ážááᯠááá·áºáá«-
-
vcd_edge_local_ip_nginx â NGINX ááŒáá·áº virtual machine á IP ááááºá á¬á
-
vcd_edge_local_ip_bitrix - 1C áá«áá±á¬ virtual machine á IP ááááºá á¬- Bitrixá
-
vcd_edge_local_ip_nextcloud â Nextcloud ááŒáá·áº virtual machine á IP ááááºá á¬á
áá¯áááááá¯ááºááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠvcd.tfvars ááá¯ááºááŸá VMware vCloud áá«ááá¯ááºáᬠmodule á¡ááœáẠááááºážááŸááºáá»á¬ážááᯠáááºáá®ážááŒá®áž áááºááŸááºáááºááŸááºáá±ážáááº- áá»áœááºá¯ááºááá¯á·áá¥ááá¬ááœáẠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá¬ážáááºááᯠááŒááºáááºááááááŒáá«á
áá¯á·á
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á
áááºáááºážáá»áẠááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááᯠáááºááŸááºááŒá®ážáá«ááŒá®á ááᯠáá»áœááºá¯ááºááá¯á·ááẠvirtual machine connection scheme ááᯠá áááºáááºááŸááºááá¯ááºáá«ááŒá® - áá»áœááºá¯ááºááá¯á·ááẠvirtual machine áá áºáá¯á á®ááá¯á· áá®ážááá·áº IP ááááºá á¬áá áºáá¯ááᯠáááºááŸááºáá±ážáááºááŒá áºááŒá®áž ááŒááºáááœááºáááºáá»á¬ážááá¯á· ports áá»á¬ážááᯠ" forward" áááºá¡ááœáẠDestination NAT ááá¯á¡áá¯á¶ážááŒá¯áá«áááºá á á®áá¶ááá·áºááœá²ááŸá¯ ááááºáááºážáá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºááᯠááá·áºáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á IP ááááºá á¬á¡ááœááºáᬠáááºáá±á¬ááºááœáá·áºááᯠáááºááŸááºáá«áááºá
áááºáá®ážáá±ááá·áº Terraform ááááºáá±á¬ááºážá¡ááœáẠááœááºáááºáá¯á¶ááŒááºáž
áá»áœááºá¯ááºááá¯á·ááẠnet_lan01 á¡áááºááŒáá·áºá áá¯á¶áá±áá¶áá«ážáá±á«ááº- 192.168.110.254 ááŸáá·áº ááááºá á¬áá±áá¬- 192.168.110.0/24 ááá¯á·ááŸáá·áºá¡áá° á¡áá¯á¡áá±á¬ááºá¡ááœá²á·á¡á ááºážááœááºáááºáá áºáá¯ááᯠáááºáá®ážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááẠvirtual network ááá¯áá±á¬áºááŒáááºá
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"
}
}
virtual machines ááœá±ááᯠá¡ááºáá¬áááºáá¯á¶ážááœáá·áºáá±ážáá²á· firewall á ááºážáá»ááºážááœá±ááᯠáááºáá®ážááŒáá«á áá¯á·á á€ááááºááá¯á·ááŸá¯á¡ááœááºážá cloud ááŸá virtual á¡áááºážá¡ááŒá áºáá»á¬ážá¡á¬ážáá¯á¶ážááẠá¡ááºáá¬áááºááá¯á· áááºáá±á¬ááºááœáá·áºááŸááááá·áºáááº-
áá»áœááºá¯ááºááá¯á·ááẠá¡ááºáá¬áááºááá¯á· 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 ááááºááá¯á·ááŒááºážááᯠconfigure áá¯ááºáááºá¡ááœáẠááŸá®ááá¯ááŸá¯ááᯠáááºáá±á¬ááºáá¬ážááŒááºážááŒá áºáááºá, á¡áá¯á¶ážááŒá¯ áá°áááºáááºá á¡áá»áá¯á·áá±á¬ ááŸá®ááá¯á¡á¬ážáá¬ážááŸá¯áá»á¬ážááᯠá á®á ááºááœá²á·á ááºážááŸá¯ááœáẠááœááºááá¯ááºá áœá¬á¡ááá¡ááŸááºááŒá¯ááá¯ááºáá±á¬ááŒá±á¬áá·áº á€ááœá±ážáá»ááºááŸá¯ááᯠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯áá«áááºá
ááá¯á·áá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠááŒááºáááœááºáááºáá»á¬ážá០ááááºáááºážáá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºááœáá·áºááŒá¯ááá·áº á ááºážáá»ááºážáá»á¬ážááᯠáááºáá®ážááŒá®áž SSH ááŸáá áºááá·áº áá¬áá¬áá»á¬ážááá¯á· áá»áááºáááºáááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·á IP ááááºá á¬ááᯠááœáŸááºááŒáá«áááºá áááºááá·áºá¡ááºáá¬áááºá¡áá¯á¶ážááŒá¯áá°áááᯠáááºáá¬áá¬áá±á«áºááŸá ports 80 ááŸáá·áº 443 ááá¯á·áááºáá±á¬ááºááœáá·áºááŸáááŒá®áž IP ááááºá ᬠ90.1.15.1 ááŸááá±á¬á¡áá¯á¶ážááŒá¯áá°áá áºáŠážááẠvirtual servers áá»á¬ážá SSH ports áá»á¬ážááá¯á·áááºáá±á¬ááºááœáá·áºááŸááááºá
ááŒááºáááœááºáááºá០ááááºáááºážáá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºááŒá¯áá«á
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]
}
áá»áœááºá¯ááºááá¯á·ááẠcloud local network áá áºáá¯ááŸá¡ááºáá¬áááºááá¯áááºáá±á¬ááºááŒááºážá¡ááœáẠSource 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]
}
ááœááºáááºááááºááá¯á·ááŒááºážáááœá²á·á ááºážáá¯á¶ááᯠá¡ááŒá®ážáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠááŒááºáááœááºáááºá០áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠáááºáá±á¬ááºááŒááºážá¡ááœáẠDestination NAT á ááºážáá»ááºážáá»á¬ážááᯠáá±á«ááºážááá·áºáááº-
Destination 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]
}
Nginx á¡á±á¬ááºááŸá SSH áá¬áá¬ááá¯á· port áá¬áá¬ááŒááºááŒááºážá¡ááœáẠNAT á ááºážáá»ááºážááᯠááá·áºáá«á
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]
}
1C-Bitrix ááŒáá·áº SSH áá¬áá¬ááá¯á· ááááºáááºážáá¬áá¬ááŒááºááŒááºážá¡ááœáẠNAT á ááºážáá»ááºážááᯠááá·áºáá«á
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]
}
Nextcloud ááŒáá·áº SSH áá¬áá¬ááá¯á· port áá¬áá¬ááŒááºááŒááºážá¡ááœáẠNAT á ááºážáá»ááºážááᯠááá·áºáá«á
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 á¡áá¯áááºáááºážáá»áẠááœá²á·á ááºážááŸá¯
áá±á¬ááºážáá«ážá¡á ááœáẠáá»áœááºá¯ááºááá¯á· á á®á ááºáá¬ážááá·áºá¡ááá¯ááºážá áá»áœááºá¯ááºááá¯á·ááẠvirtual machine áá¯á¶ážáá¯ááᯠáááºáá®ážáá«áááºá "Guest Customization" ááᯠá¡áá¯á¶ážááŒá¯á ááŒááºáááºáá«áááºá áá»áœááºá¯ááºááá¯á·áááºááŸááºáá¬ážáá±á¬áááºáááºáá»á¬ážá¡ááá¯ááºáž ááœááºáááºáá±á¬ááºáá»á¬ážááᯠáááºááŸááºáá±ážáááºááŒá áºááŒá®áž á¡áá¯á¶ážááŒá¯áá°á áá¬ážááŸááºááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±ážáááºááŒá áºáááºá
virtual machines áá»á¬ážáááºááŸáááá·áº vApp ááŸáá·áº áááºážááá¯á·á configuration ááá¯áá±á¬áºááŒááŒáá«á áá¯á·á
á ááºá¡áá¯áá¯á¶á á¶ááœá²á·á ááºážááŸá¯
vApp container áá áºáá¯áááºáá®ážááá¯ááºáá¡á±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠvApp ááŸáá·áº VM ááᯠvirtual network ááá¯á· áá»ááºáá»ááºážáá»áááºáááºááá¯ááºá á±áááºá áá»áœááºá¯ááºááá¯á·ááẠááŸá®ááá¯ááŸá¯ááá¯ááºáᬠááá·áºáááºáá±á¬ááºááᯠáá±á«ááºážááá·áºáá«áááºá
ááœááºááááºáá¬áá áºáá¯áááºáá®ážáá«á
resource "vcd_vapp" "vapp" {
name = "web"
power_on = "true"
depends_on = [vcd_network_routed.net]
}
áá±á¬áºááŒáá»ááºááŸáá·áºá¡áá° virtual machine áá áºáá¯áááºáá®ážááŒáá«á áá¯á·
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 áá±á¬áºááŒáá»ááºááŸá á¡ááá áá±á¬ááºáá»á¬áž-
-
á¡ááẠâ virtual machine á¡áááºá
-
vappname - VM á¡áá áºáá áºáá¯ááá·áºááá·áº vApp áá¡áááºá
-
catalogname / templatename - áááºááá±á¬ááºá¡ááẠááŸáá·áº virtual machine template á¡áááºá
-
storageprofile - áá°áááºážááá¯ááŸá±á¬ááºááŸá¯áá°áá«áá
ááœááºáááºááááºááá¯á·ááŒááºáž áá±á¬ááºáá»á¬áž-
-
á¡áá»áá¯ážá¡á á¬áž â áá»áááºáááºáá¬ážáá±á¬ááœááºáááºá¡áá»áá¯ážá¡á á¬ážá
-
á¡ááẠâ VM ááá¯áá»áááºáááºááẠáááºááá·áº virtual network á
-
isprimary - áááºáááœááºááẠá¡áááºáá¬á
-
ipallocation_mode â áááºá áœá² / DHCP / POOL ááááºá ᬠááœá²áá±ááŸá¯áá¯ááºá
-
ip â virtual machine á¡ááœáẠIP ááááºá á¬á áá»áœááºá¯ááºááá¯á· áááºážááᯠááá¯ááºááá¯áẠáááºááŸááºáá±ážáá«áááºá
override_template_disk ááááºááá¯á·ááŒááºáž-
-
sizeinmb â virtual machine á¡ááœáẠboot disk á¡ááœááºá¡á á¬áž
-
storage_profile â áá áºá¡ááœáẠááá¯ááŸá±á¬ááºááŸá¯áá°áá«á
Nextcloud ááá¯ááºááá¯ááŸá±á¬ááºááŸá¯á áá±á¬áºááŒáá»ááºááŒáá·áº áá¯ááá VM áá áºáá¯ááᯠáááºáá®ážááŒáá«á áá¯á·
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 ááá¹áááœáẠáá»áœááºá¯ááºááá¯á·ááẠvirtual machine ááŸáá·áº áá»áááºáááºáá¬ážáá±á¬ virtual disk á¡áá áºáá áºáá¯ááᯠáá±á¬áºááŒáá«áááºá
vcdvminternaldisk block á ááŸááºážáááºážáá»ááº
-
bustype - disk controller á¡áá»áá¯ážá¡á á¬áž
-
sizeinmb â disk á¡ááœááºá¡á á¬áž
-
busnumber / unitnumber - adapter á¡ááœááºážááŸá áá»áááºáááºááŸá¯áááºáá±áá¬
-
storage_profile â áá áºá¡ááœáẠááá¯ááŸá±á¬ááºááŸá¯áá°áá«á
Bitrix ááœáẠáá±á¬ááºáá¯á¶ážááœáẠVM ááᯠáá±á¬áºááŒááŒáá«á áá¯á·
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
}
}
OS ááᯠá¡ááºááááºáá¯ááºááŒá®áž áá±á¬ááºááẠscript áá»á¬ážááᯠááá·áºááœááºážááŒááºážá
ááœááºáááºááᯠááŒááºáááºáá¬ážááŒá®ážá virtual machines áá»á¬ážááᯠáá±á¬áºááŒáá¬ážáá«áááºá áá»áœááºá¯ááºááá¯á·á á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠáá»á¬ážááᯠááááºááœááºážáá®á áá»áœááºá¯ááºááá¯á·ááẠá á®áá¶áá±ážáá°áá¯ááºááœááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á Ansible ááᯠá¡áá¯á¶ážáááŒá¯áá² ááŒáá¯áááºá á®áá¶áá±á¬ááºááœááºáá±ážááá¯ááºáá«áááºá
OS ááᯠá¡ááºááááºáá¯ááºáááºážááᯠááŒáá·áºááŒá®áž CMS Bitrix áááºáááºááŸá¯ script ááᯠprovisioner block ááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá±á¬ááºáá¯á¶ááᯠááŒáá·áºááŒáá«á áá¯á·á
áŠážá áœá¬á CentOS update packages áá»á¬ážááᯠááá·áºááœááºážááŒáá«á áá¯á·á
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" ]
}
}
}
á¡á áááºá¡ááá¯ááºážáá»á¬áž áááºááŸááºááŒááºáž-
-
áá¶á·ááá¯ážáá±ážáá° âá¡áá±ážááááºáž-execâ - áá±ážáá¶áá±á«ááºáá®áá±á¬ á á®áá¶áá±á¬ááºááœááºáá±ážááá·áº ááá±á¬ááºááᯠáá»áááºáááºáá«á
-
áá»áááºáááºááŸá¯ááááºááá¯á·ááŒááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá»áááºáááºááŸá¯á¡ááœáẠá¡áá»áá¯ážá¡á á¬ážááŸáá·áº ááá·áºáááºáá»ááºáá»á¬ážááᯠáá±á¬áºááŒáááº-
-
á¡áá»áá¯ážá¡á á¬áž â áááá¯ááá¯áá±á¬á áá»áœááºá¯ááºááá¯á·áááá á¹á ááœáẠSSH;
-
á¡áá¯á¶ážááŒá¯áá° - á¡áá¯á¶ážááŒá¯áá°á¡áááº;
-
á áá¬ážááŸáẠâ á¡áá¯á¶ážááŒá¯áá° á áá¬ážááŸááºá áá»áœááºá¯ááºááá¯á·áá¡ááŒá±á¡áá±ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá áá áºá¡áá¯á¶ážááŒá¯áá°á¡ááœáẠáá¯ááºáá¯ááºáá¬ážáá±á¬ á áá¬ážááŸááºááᯠááááºážáááºážáá±ážááá·áº ááá·áºáááºáá±á¬áẠvcdvappvm.nginx.customization[0].admin_password ááᯠááœáŸááºááŒáá«áááºá
-
host â áá»áááºáááºááŸá¯á¡ááœáẠááŒááºá IP ááááºá á¬á
-
ááááºáááºáž â DNAT áááºáááºáá»á¬ážááœáẠááááºá áááºááŸááºáá¬ážááá·áº áá»áááºáááºááŸá¯á¡ááœáẠááááºáááºážá
-
inline - ááá·áºááœááºážááá·áº command áá»á¬ážá á¬áááºážááᯠá á¬áááºážááŒá¯á á¯áá«á á€ááá¹áááœáẠáá±á¬áºááŒáá¬ážááá·áºá¡ááá¯ááºáž á¡áááá·áºáá±ážáá»ááºáá»á¬ážááᯠááá·áºááœááºážáá«áááºá
á¥ááá¬á¡áá±ááŒáá·áºá 1C-Bitrix áááºáááºááŸá¯ script ááᯠáááºáá¶áá¯ááºáá±á¬ááºááŒáá«á áá¯á·á á¡á á®á¡á ááºáá¯ááºáá±á¬ááºáá±áá»áááºááœáẠscript execution ááááºá output ááá¯áááŸáááá¯ááºáááºááŒá áºáá«áááºá áá¬ááºááœáŸááºážááᯠááá·áºááœááºážááẠáŠážá áœá¬ áá»áœááºá¯ááºááá¯á·ááẠááááºááá¯á·ááŒááºážááᯠáá±á¬áºááŒáá«-
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"
]
}
áá»áœááºá¯ááºááá¯á·ááẠBitrix á¡ááºááááºááᯠáá»ááºáá»ááºážáá±á¬áºááŒáá«áááºá
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 ááᯠááŒáá¯áááºáááááºáá«á Script á¡áá¯ááºááá¯ááºáá«á bitrix-env.sh ááᯠá¡áá¯á¶ážááŒá¯á CMS 1C-Bitrix ááá·áºááœááºážááŒááºážááŸáá·áº ááŒááºáááºááŒááºážááá¯ááºáᬠá¡áá±ážá
ááẠáá±á¬ááºážáá«ážáá
áºáᯠááá¯á¡ááºáá«áá áááºáá¯ááºááá¯ááºáááº
3. á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠ á áááºááŒááºáž
áá±á¬áºáá»á°ážáá»á¬ážááŸáá·áº ááááºá¡ááºáá»á¬ážááᯠá áááºáá¯ááºáá±á¬ááºááŒááºážá
á¡áá¯ááºá¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ážááŸááºážáá±á¬ âáá°ááŒá®ážáá°áá±á¬ááºáž áááááá¬â ááᯠá¡áá¯á¶ážááŒá¯áááº- Windows 10 OS áá«ááŸáááá·áº áááºááºáá±á¬á·áá
áºáá¯á¶ážááŸáá·áº ááá¬ážáááºáááºááá¯ááºá០ááŒáá·áºáá»á®áá±ážáááááá¬á¡á
á¯á¶ terraform.exe init
ááœááºááŒá°áá¬ááŸáá·áº ááœááºáááºá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááᯠáá±á¬áºááŒááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áááœá²á·á ááºážáá¯á¶ááœá²á·á ááºážáá¯á¶ááᯠá ááºážáááºááẠá¡á á®á¡á á¥áºááᯠá áááºáá¯ááºáá±á¬ááºáááºááŒá áºááŒá®ážá áááºááá·áºá¡áá¬á áááºáá®ážáááºááŸáá·áº áááºážááẠáá áºáá¯ááŸáá·áºáá áºáᯠáááºááá¯á·áá»áááºáááºáááºááᯠáá»áœááºá¯ááºááá¯á·ááŒáá·áºááŸá¯ááá¯ááºáááºááŒá áºáááºá
-
á¡áááá·áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá«á
- terraform plan -var-file=vcd.tfvars
. -
ááááºááᯠáá»áœááºáá±á¬áºááá¯á· áááŸááá«áááºá
- Plan: 16 to add, 0 to change, 0 to destroy.
ááá¯ááá¯áááºááŸá¬ á€á¡á á®á¡á ááºá¡á á¡áááºážá¡ááŒá Ạáá áá¯ááᯠáááºáá®ážáááºááŒá áºáááºá -
áá»áœááºá¯ááºááá¯á·ááẠá¡áááá·áºáá±ážááá·áº á¡á á®á¡á ááºááᯠá áááºáááºá
- terraform.exe apply -var-file=vcd.tfvars
.
á ááºá¡áá¯áá»á¬ážááᯠáááºáá®ážáááºááŒá áºááŒá®ážá ááá¯á·áá±á¬áẠáá»áœááºá¯ááºááá¯á·á á¬áááºážááœááºážáá¬ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠá á®áá¶áá±ážááá·áºááá¹áá¡ááœááºáž áá¯ááºáá±á¬ááºááœá¬ážáá«ááẠ- OS ááᯠá¡ááºááááºáá¯ááºáááºááŒá áºááŒá®áž CMS Bitrix ááᯠááá·áºááœááºážááœá¬ážáá«áááºá
áá»áááºáááºááŸá¯á¡áá»ááºá¡áááºááᯠáááºáá¶ááá°ááŒááºážá
á¡á á®á¡á ááºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®ážáá±á¬ááºá áá¬áá¬áá»á¬ážááá¯á· áá»áááºáááºáááºá¡ááœáẠáá±áá¬ááᯠá á¬áá¬ážáá¯á¶á á¶ááŒáá·áº áááºáá¶ááá°ááá¯áááºá ááá¯á·ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááœááºá¡ááá¯ááºážááᯠá¡á±á¬ááºáá«á¡ááá¯ááºáž áá±á¬áºáááºáá¯ááºáá«áááºá
output "nginxpassword" {
value = vcdvappvm.nginx.customization[0].adminpassword
}
á¡á±á¬ááºáá±á¬áºááŒáá« output ááẠáááºáá®ážáá¬ážáá±á¬ virtual machine á¡ááœáẠá áá¬ážááŸááºááᯠááŒá±á¬ááŒáááº-
Outputs: nginx_password = F#4u8!!N
ááááºá¡áá±ááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·á áá±á¬ááºáááºá¡áá¯ááºá¡ááœáẠááœááºážáá¶áá¬ážáá±á¬ áááºáááºááŸá¯á áá áºááŸáá·áº ááŒáá¯áááºááá·áºááœááºážáá¬ážáá±á¬ áááºáá±á·áá»áºáá»á¬ážááŒáá·áº virtual machines áá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºáááŸááá«áááºá á¡á¬ážáá¯á¶ážá¡áááºááá·áºááŒá áºáá«ááŒá®á
áá«áá±ááá·áº ááá·áºááŸá¬ ááŸáááŒá®ážáá¬áž á¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠááœá± ááŸáááŒá®ážáá¬ážááá¯áááºáá±á¬á
á.áá áááºááŸáá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááŒáá·áº Terraform áá¯ááºáá±á¬ááºááŒááºážá
ááá¯ážááŸááºážáááºá áááºááẠáááºááœááºážááŸá¯á¡áááá·áºááᯠá¡áá¯á¶ážááŒá¯á áááºááŸá virtual machine áá»á¬ážááŸáá·áº áááºážááá¯á·á vApp ááœááºááááºáá¬áá»á¬ážááᯠáááºááœááºážááá¯ááºáááºá
vAPP á¡áááºážá¡ááŒá áºááŸáá·áº virtual machine ááá¯áá±á¬áºááŒááŒáá«á áá¯á·á
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 â virtual áá±áá¬á ááºáá¬áá¡áááºá
vAPP á¡áááºážá¡ááŒá áºáá¯ááºááá¹áááá»á¬ážááᯠáááºááœááºážááŒááºážá
VM á¡áááºážá¡ááŒá
áºáá»á¬ážá áá¯ááºááá¹áááá»á¬ážááᯠáá±á¬áºáááºááŒáá·áº áááºááœááºážááŒáá«á
áá¯á·á vcdvappvm.<VM> <org>.<orgvdc>.<vApp>.<VM>
, ááá¯á¡áá²ááœááº-
-
VM - VM á¡áááº;
-
vApp - vApp á¡áááº;
-
org â á¡ááœá²á·á¡á ááºážá¡áááºá
-
orgdc ááẠvirtual data center áá¡áááºááŒá áºáááºá
áááºááœááºážááŸá¯ á¡á±á¬ááºááŒááºáá²á·áááºá
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 ááŸáá·áºáá¯ááºáá±á¬ááºáááá·áºá¡áááá¡áá»ááºá¡á¬ážáá¯á¶ážááá¯ááá·áºááœááºážá ááºážá á¬ážáá¬ážáá«áááºá
áááááá¬ááẠá¡ááœááºá¡áááºááŒá±áá¬ááŒá®áž ááá·áºá¡á¬áž cloud áááºáá±á¬ááºááŸá¯áá±ážáá°áá áºáŠážá virtual machines ááŸá áááºáᬠáááºáá¡ááŒá±áá¶á¡áá±á¬ááºá¡áŠá¡á¬áž áá¯ááºá¡ááŒá áºáá±á¬áºááŒááẠááœáá·áºááŒá¯áá±ážáá«áááºá
áá áºáá»áááºáááºážááŸá¬áááºá áááºáááºážáá»ááºááŸááœááºáááºááŸá¯ááẠáá±áááœááºážá cloud á¡áááºážá¡ááŒá áºáá»á¬ážááŸáá·áº á¡áá¯ááºáá¯ááºááá¯ááºááŒá®áž ááááºáá±á¬ááºážááá¯ááẠá á®áá¶ááá·áºááœá²ááá¯ááºá á±áá«áááºá áá¶á·ááá¯ážáá±ážáá¬ážááá·áº ááááºáá±á¬ááºážáááŸáá á¡áá áºáá áºáᯠáááºááá·áºááá¯áá«áá áááºááẠáááºáááá¯ááºááá¯ááºáááºáá±á¬ááºááŸá¯áá±ážáá°ááᯠáá±ážááŒá®áž áááºážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
source: www.habr.com