З чого починається будь-який масштабний проект в інтернеті, з серверів та іншого устаткування, а так як тепер важливо 100% можливість відтворити всю інфраструктуру з коду то й використання terraform для побудови такої інфраструктури буде ідеальним рішенням, так як використання git як source of truth є логічним і правильним і коли у нас є велика кількість providers для того ж terraform ( libvirt, xen та інших ) також можливо розробити свого провайдера котрий для прикладу налаштує маршрутизатор чи коммутатор.
Розглянемо простоту конфігурації для libvirt( kvm ) віртуалізації :
- Створимо файл main.tf з наступним контентом :
terraform {
required_providers {
libvirt = {
source = "dmacvicar/libvirt"
}
}
}
provider "libvirt" {
uri = "qemu:///system"
}
resource "libvirt_domain" "terraform_test" {
name = "terraform_test"
}
2. далі нам потрібно запустити terraform init
3. після запускаємо terraform plan
у данному прикладі ми створюємо віртуальну машину terraform_test
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:
# libvirt_domain.terraform_test will be created
+ resource "libvirt_domain" "terraform_test" {
+ arch = (known after apply)
+ emulator = (known after apply)
+ fw_cfg_name = "opt/com.coreos/config"
+ id = (known after apply)
+ machine = (known after apply)
+ memory = 512
+ name = "terraform_test"
+ qemu_agent = false
+ running = true
+ vcpu = 1
}
Plan: 1 to add, 0 to change, 0 to destroy.
4. далі створюємо віртуальну машину за допомогою terraform давши команду terraform apply:
terraform apply
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:
# libvirt_domain.terraform_test will be created
+ resource "libvirt_domain" "terraform_test" {
+ arch = (known after apply)
+ emulator = (known after apply)
+ fw_cfg_name = "opt/com.coreos/config"
+ id = (known after apply)
+ machine = (known after apply)
+ memory = 512
+ name = "terraform_test"
+ qemu_agent = false
+ running = true
+ vcpu = 1
}
Plan: 1 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
libvirt_domain.terraform_test: Creating...
libvirt_domain.terraform_test: Creation complete after 1s [id=cd2f61a8-cf03-432b-b5f5-d4d623be374b]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
5. переконаємось що віртуальну машину було створено за допомогою команди virsh list :
virsh list
Id Name State
----------------------------------------------------
2 terraform_test running
Як ми побачили створилась віртуальна машина, тепер заберемо цю віртуальну машину за допомогою terraform destroy :
terraform destroy
libvirt_domain.terraform_test: Refreshing state... [id=cd2f61a8-cf03-432b-b5f5-d4d623be374b]
Note: Objects have changed outside of Terraform
Terraform detected the following changes made outside of Terraform since the last "terraform apply":
# libvirt_domain.terraform_test has been changed
~ resource "libvirt_domain" "terraform_test" {
+ cmdline = []
id = "cd2f61a8-cf03-432b-b5f5-d4d623be374b"
name = "terraform_test"
# (8 unchanged attributes hidden)
}
Unless you have made equivalent changes to your configuration, or ignored the relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
# libvirt_domain.terraform_test will be destroyed
- resource "libvirt_domain" "terraform_test" {
- arch = "x86_64" -> null
- cmdline = [] -> null
- emulator = "/usr/libexec/qemu-kvm" -> null
- fw_cfg_name = "opt/com.coreos/config" -> null
- id = "cd2f61a8-cf03-432b-b5f5-d4d623be374b" -> null
- machine = "pc" -> null
- memory = 512 -> null
- name = "terraform_test" -> null
- qemu_agent = false -> null
- running = true -> null
- vcpu = 1 -> null
}
Plan: 0 to add, 0 to change, 1 to destroy.
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
Все це доволі просто, а запитання як змінити параметри ? – ви їх бачите в конфігурації ( name,memory,vcpu,cmdline etc.) для прикладу ви можете вказати більшу кількість пам’яті чи створити декілька віртуальних машин, чи взагалі змінити ім’я цієї машини і таке інше, можливостей купа