DOCS : Docs overview | hashicorp/vsphere | Terraform | Terraform Registry
Terraform Registry
registry.terraform.io
1. 프로젝트 폴더 생성 하기 - 원하는곳에 폴더 만들어서 선택
STEP 1. 폴더에 파일 만들기. provider.tf & 내용 채우기
프로바이더는 인프라 제공자를 말하며, 그 중 vsphere 를 택했다.
이유는 사내에 구성이 되있기 때문
나는 인프라 엔지니어가 아니라서, 따로 구성해본적이 없기 때문에 어쩔 수 없다.
provider.tf 에 들어갈 내용이다.
terraform {
required_providers {
vsphere = {
source = "hashicorp/vsphere"
version = "2.4.1"
}
}
}
provider "vsphere" {
user = "{vsphere.username}"
password = "{vsphere.password}"
vsphere_server = "{vsphere.address}"
allow_unverified_ssl = true
}
가장 위의 블럭은 프로바이더 제공자의 required 요소인데, 당연히 제공자 이름이 들어가야하고, 어떤 SDK 기반으로 컴파일 할 것인지 정보가 들어간다.
다음 블럭은 "프로바이더이름", vsphere 로그인정보와 주소가 들어간다.
여기서 terraform init 명령을 입력해보자.
이렇게나온다.
Initializing provider plugins.... 프로바이더와 버전에 맞는 SDK 를 다운받는 것이다.
없던 파일이 생겨났다.
여기까지하면, 나는 테라폼으로 vsphere 를 제어할껀데, 필요한 sdk 를 받을꺼라는 것을 provider.tf 에 적어준것이고
terraform init 명령으로 다운받기 까지 완료한 상태이다.
STEP 2. main.tf 파일 생성후 내용 채우기
data 명령줄에는 vsphere 의 리소스 위치를 선택할 수 있다.
UI 로 따지면, 상위 카테고리에서 하위카테고리로 선택해서 들어가면서 위치와 옵션을 선택하는 과정이라 보면 된다.
resource 는 서버에서 할당할 수 있는 리소스를 의미한다.
VM 을 만든다면, 여기에 할당할 리소스들 "cpu, disk, ram, network" 등이 되겠다.
name = "실제 이름" 이 들어간다.
data "vsphere_datacenter" "datacenter" {
name = "Datacenter"
}
data "vsphere_compute_cluster" "cluster" {
name = "Arista"
datacenter_id = data.vsphere_datacenter.datacenter.id
}
data "vsphere_datastore" "datastore" {
name = "Fujitsu03"
datacenter_id = data.vsphere_datacenter.datacenter.id
}
data "vsphere_network" "network" {
name = "VM Network"
datacenter_id = data.vsphere_datacenter.datacenter.id
}
data "vsphere_virtual_machine" "template" {
name = "win2019"
datacenter_id = data.vsphere_datacenter.datacenter.id
}
resource "vsphere_virtual_machine" "vm" {
name = "win2019-terraform1"
resource_pool_id = data.vsphere_compute_cluster.cluster.resource_pool_id
datastore_id = data.vsphere_datastore.datastore.id
num_cpus = 4
memory = 8196
guest_id = data.vsphere_virtual_machine.template.guest_id
scsi_type = data.vsphere_virtual_machine.template.scsi_type
network_interface {
network_id = data.vsphere_network.network.id
adapter_type = data.vsphere_virtual_machine.template.network_interface_types[0]
}
disk {
label = "disk0"
size = data.vsphere_virtual_machine.template.disks.0.size
thin_provisioned = data.vsphere_virtual_machine.template.disks.0.thin_provisioned
}
firmware = "efi"
clone {
template_uuid = data.vsphere_virtual_machine.template.id
linked_clone = "true"
customize {
windows_options {
computer_name = "ssssss"
}
network_interface {
ipv4_address = "192.168.123.239"
ipv4_netmask = 24
}
ipv4_gateway = "192.168.123.1"
}
}
}
STEP 3. terraform apply
PS C:\Users\jaeyo\Desktop\terraform> terraform apply
data.vsphere_datacenter.datacenter: Reading...
data.vsphere_datacenter.datacenter: Read complete after 0s [id=datacenter-1001]
data.vsphere_compute_cluster.cluster: Reading...
data.vsphere_network.network: Reading...
data.vsphere_virtual_machine.template: Reading...
data.vsphere_datastore.datastore: Reading...
data.vsphere_network.network: Read complete after 0s [id=network-1016]
data.vsphere_datastore.datastore: Read complete after 0s [id=datastore-1014]
data.vsphere_compute_cluster.cluster: Read complete after 0s [id=domain-c1050]
data.vsphere_virtual_machine.template: Read complete after 0s [id=423e0473-2b46-603b-852b-c97d2d48fa85]
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# vsphere_virtual_machine.vm will be created
+ resource "vsphere_virtual_machine" "vm" {
+ annotation = (known after apply)
+ boot_retry_delay = 10000
+ change_version = (known after apply)
+ cpu_limit = -1
+ cpu_share_count = (known after apply)
+ cpu_share_level = "normal"
+ datastore_id = "datastore-1014"
+ default_ip_address = (known after apply)
+ ept_rvi_mode = "automatic"
+ extra_config_reboot_required = true
+ firmware = "efi"
+ force_power_off = true
+ guest_id = "windows2019srv_64Guest"
+ guest_ip_addresses = (known after apply)
+ hardware_version = (known after apply)
+ host_system_id = (known after apply)
+ hv_mode = "hvAuto"
+ id = (known after apply)
+ ide_controller_count = 2
+ imported = (known after apply)
+ latency_sensitivity = "normal"
+ memory = 8196
+ memory_limit = -1
+ memory_share_count = (known after apply)
+ memory_share_level = "normal"
+ migrate_wait_timeout = 30
+ moid = (known after apply)
+ name = "win2019-terraform-20231113"
+ num_cores_per_socket = 1
+ num_cpus = 4
+ power_state = (known after apply)
+ poweron_timeout = 300
+ reboot_required = (known after apply)
+ resource_pool_id = "resgroup-1051"
+ run_tools_scripts_after_power_on = true
+ run_tools_scripts_after_resume = true
+ run_tools_scripts_before_guest_shutdown = true
+ run_tools_scripts_before_guest_standby = true
+ sata_controller_count = 0
+ scsi_bus_sharing = "noSharing"
+ scsi_controller_count = 1
+ scsi_type = "lsilogic-sas"
+ shutdown_wait_timeout = 3
+ storage_policy_id = (known after apply)
+ swap_placement_policy = "inherit"
+ tools_upgrade_policy = "manual"
+ uuid = (known after apply)
+ vapp_transport = (known after apply)
+ vmware_tools_status = (known after apply)
+ vmx_path = (known after apply)
+ wait_for_guest_ip_timeout = 0
+ wait_for_guest_net_routable = true
+ wait_for_guest_net_timeout = 5
+ clone {
+ linked_clone = true
+ template_uuid = "423e0473-2b46-603b-852b-c97d2d48fa85"
+ timeout = 30
+ customize {
+ ipv4_gateway = "192.168.123.1"
+ timeout = 10
+ network_interface {
+ ipv4_address = "192.168.123.240"
+ ipv4_netmask = 24
}
+ windows_options {
+ auto_logon_count = 1
+ computer_name = "win2019-20231113"
+ full_name = "Administrator"
+ organization_name = "Managed by Terraform"
+ time_zone = 85
}
}
}
+ disk {
+ attach = false
+ controller_type = "scsi"
+ datastore_id = "<computed>"
+ device_address = (known after apply)
+ disk_mode = "persistent"
+ disk_sharing = "sharingNone"
+ eagerly_scrub = false
+ io_limit = -1
+ io_reservation = 0
+ io_share_count = 0
+ io_share_level = "normal"
+ keep_on_remove = false
+ key = 0
+ label = "disk0"
+ path = (known after apply)
+ size = 90
+ storage_policy_id = (known after apply)
+ thin_provisioned = false
+ unit_number = 0
+ uuid = (known after apply)
+ write_through = false
}
+ network_interface {
+ adapter_type = "e1000e"
+ bandwidth_limit = -1
+ bandwidth_reservation = 0
+ bandwidth_share_count = (known after apply)
+ bandwidth_share_level = "normal"
+ device_address = (known after apply)
+ key = (known after apply)
+ mac_address = (known after apply)
+ network_id = "network-1016"
}
}
Plan: 1 to add, 0 to change, 0 to destroy.
![](https://blog.kakaocdn.net/dn/bIfRGj/btsAamBGLvx/Ap7sxTCXlNJy96kWDFdoj0/img.png)
배포가 성공하면, TEMPLATE 으로 복제 배포가 완료된다.
'ARCHIVE(완료, 보류, 관심x) > Terraform' 카테고리의 다른 글
[Terraform] - 테라폼 - vsphere provider 로 vm 생성해보기 1 (0) | 2023.11.13 |
---|---|
[IaC, Terraform] - 테라폼 (0) | 2023.11.10 |