Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



20.07.2020

Baramundi

Pomoc w czasie pandemii.
20.07.2020

Stop infekcjom

CloudGuard
17.07.2020

Analiza zagrożeń

Kaspersky Threat Attribution Engine
17.07.2020

Strażnik danych

QGD-1602P
16.07.2020

Dysk przemysłowy

Transcend MTE352T
16.07.2020

Połączenie sił

Fugaku
16.07.2020

Brama bezpieczeństwa

Check Point 1570R
23.06.2020

PLNOG Online

PLNOG Online
23.06.2020

Nowe zagrożenie

Ramsay

Automatyzacja konfiguracji VMware dzięki Terraform

Data publikacji: 16-07-2020 Autor: Maciej Lelusz

W jakim celu automatyzować zadania? Z lenistwa, z chęci rozwoju, z nudów. Słowo „automatyzacja” trochę niepotrzebnie obrosło kultem tajemniczości. Uważane jest za coś przeznaczonego dla dużych i za przesadę dla małych. Niesłusznie, czego postaramy się dowieść w artykule przedstawiającym Terraform w kontekście nowego vSphere 7.0.

 

Na początek kilka słów o tym, czym Terraform jest. Zastosowania można określić poprzez krótki opis sytuacyjny: Oprogramowanie, które ma API, umożliwia automatyczną konfigurację. Posiadając API, możemy wykonywać komendy, które pobudzą API w sposób, który ma nam przynieść konkretny efekt, np. powołać maszynę wirtualną. Natomiast aby wywołać API w sposób, który jest przezeń wymagany, trzeba je poznać. Co ważne, każdy produkt ma inne API. Zatem aby osiągać pożądane efekty, trzeba poznać wiele API, a potem odświeżać swoją wiedzę przy każdej aktualizacji. Postanowiono rozwiązać ten problem poprzez dorzucenie kolejnej warstwy abstrakcji. Nie znasz wielu języków API? Spokojnie, mamy jeden, który będzie na tyle uniwersalny, że w zasadzie nie trzeba będzie znać jakichkolwiek innych. Zatem Terraform jest swoistym interfejsem do różnych API, w naszym wypadku do vSphere 7.0, który umożliwia poprzez specyficzny dla siebie język opisanie ich działania za pomocą kodu.


> INSTALACJA

 

Na Windowsie paczkę terraform można zainstalować za pomocą menedżera pakietów Chocolatey, a na komputerach Apple można w tym celu skorzystać z Homebrew. W przypadku dystrybucji linuksowych najlepszym rozwiązaniem będzie pobranie archiwum tarball z oficjalnego repozytorium Terraform na Git­Hubie i ręczna instalacja. Następnie, dysponując już binarką Terraform ulokowaną w pożądanym miejscu, można zacząć konfigurację od sklonowania repozytorium z przykładowym kodem z naszego repozytorium git:


git clone https://github.com/inleo-pl/
Terraform-VMware-vSphere.git

 

Dzięki temu powstanie folder, w którym znajdziemy wszystkie pliki niezbędne do realizacji naszego scenariusza testowego. Zobaczmy, co jest w środku:


cd Terraform-VMware-vSphere
ls -alh
LICENSE
README.md
vsphere-connection
vsphere-create-dc
vsphere-create-resource-pool
vsphere-add-host-to-cluster
vsphere-add-hosts-to-cluster
vsphere-create-vds
vsphere-deploy-vm
vsphere-deploy-vm-from-template


Zawsze trzeba zacząć od scenariusza, który określi, co chcemy zrealizować, co jest do osiągnięcia tego celu potrzebne, i zdefiniuje ogólne zasady pracy z narzędziem. Na początku więc ustawmy scenę. Przyjmijmy, że w nowo uruchomionym branch offcie naszej organizacji znajduje się serwer ESX i gdzieś lokalnie dysponujemy vCenter. Ważne jest to, że są to wersje pełne, a nie darmowe, ponieważ potrzebujemy API, a ono działa w wersjach płatnych. Zamontowaliśmy serwer w racku, postawiliśmy vSphere 7.0, nadając mu adres IP, i chcemy, aby to była ostatnia rzecz, którą zrobimy ręcznie. Dalej ma pracować za nas Terraform, tworząc Datacenter, klaster i dodając do niego serwer, by następnie skonfigurować sieć i powołać VM z szablonu. Zajrzyjmy więc do pierwszego folderu, czyli vsphere-connection:


cd vsphere-connection
ls -alh
main.tf
terraform.tfvars
variables.tf
versions.tf


Znajdziemy tu cztery pliki, ich omówienie zacznijmy od main.tf bo ten stanowi nasz rdzeń – to w nim znajduje się opis infrastruktury, którą chcemy powołać. Zajrzyjmy do środka:


provider "vsphere" {
user = var.vsphere_user
password = var.vsphere_pass
vsphere_server = var.vsphere_server
allow_unverified_ssl = true
}


Kod ten pokazuje nam, jak się połączyć z serwerem vSphere poprzez użycie providera „vSphere”. Każdy z typów oprogramowania, które Terraform może zautomatyzować, ma swojego providera. Używamy tutaj zmiennych, aby podać hasło. Skrypt tak skonstruowany wymaga zdefiniowania zmiennych w pliku variables.tf:


cat variables.tf
# Provider
variable "vsphere_user" {
type = string
description = "Username of admin/root account."
}
variable "vsphere_pass" {
type = string
description = "Password of admin/root user."
}
variable "vsphere_server" {
type = string
description = "Name/IP for point of mgmt (ESXi/vCenter)."
}


Każda zmienna podana w main.tf musi się tutaj znaleźć. Dzięki temu plikowi możemy zdefiniować, o co poprosić TF podczas wywołania skryptu. Można do każdej z wartości dodać wiersz default = XXXX i wówczas domyślnie, gdy zmienna nie zostanie podana, wypełni ją daną wartością. Jednakże zdecydowanie lepiej jest umieścić wartości w pliku odpowiedzi, czyli terraform.tfvars:


cat terraform.tfvars:
vsphere_user="administrator@vsphere.local"
vsphere_pass="CmentarnaPolk@123"
vsphere_server="vcsa"


Definicja połączenia do hosta, czy też do vCenter jest jednakowa. Niemniej jednak w hoście nie ma za wiele do zrobienia, połączymy się więc z naszym vCenter, w tym przypadku występującym pod nazwą vcsa. Aby połączyć się z vCenter, należy zmienić wartości w tym pliku. W folderze znajduje się również plik versions.tf. Nie jest on wymagany, ale definiuje wersję TF, którą zamierzamy używać. Skoro wiadomo już, co to za pliki i do czego mniej więcej służą, spróbujmy się połączyć. Na początku jednak wywołajmy:


terraform init


Powyższa komenda inicjuje środowisko Terraform w kontekście danego folderu i pozwoli z niego korzystać. Następnie wywołajmy:


terraform plan


Komenda ta pozwoli nam na wykonanie tzw. jazdy na sucho – czyli uruchomi skrypt, wykona jego debug, ale nie uruchomi go w środowisku. Aby faktycznie uruchomić nasz skrypt, użyjemy polecenia:


terraform apply


Połączyliśmy się! Najwyższy czas zrobić coś więcej, np. założyć nowe Datacenter, gdzie umieścimy następnie klaster. Wejdźmy zatem do folderu vsphere-create-dc.
Zestaw plików jest dokładnie taki sam, weźmy jednak na tapet plik main.tf:

 

[..]
resource "vsphere_datacenter" "DC" {
name = var.dc_name }

 

Pojawiły się trzy dodatkowe linie. Definiują one obiekt typu resource o nazwie vsphere_datacenter. Nazwa tego obiektu przechowywana jest tak jak poprzednio w zmiennej zdefiniowanej w pliku variables.tf:

 

[..]
variable "dc_name" {
type = string
description = "Name of your DC." }

 

Wartości można wpisać z palca lub analogicznie dopisać do pliku terraform.tfvars. Wydajemy teraz polecenie:

 

terraform apply

 

Wówczas w vCenter pojawi się nowy obiekt Datacenter o zdefiniowanej nazwie. Tutaj warto podkreślić jedną z ciekawszych funkcji w Terraform, czyli możliwość wycofania wszelkich wprowadzonych zmian. Gdy powołamy infrastrukturę i będziemy ją chcieli „zwinąć”, wystarczy wywołać:

 

terraform destroy

 

Komenda ta pozwoli na usunięcie wszystkiego, co zostało dotąd skonfigurowane. Trzeba być jednak ostrożnym – usunięte zostanie dosłownie wszystko, ni mniej, ni więcej. Czas dodać klaster do naszej konfiguracji. Udajemy się w tym celu do folderu vsphere-create-cluster i drukujemy na ekranie main.tf:

 

[..]
resource "vsphere_datacenter" "dc" {
name = var.dc_name
}
resource "vsphere_compute_cluster" "cluster" {
name = var.cluster_name
datacenter_id = vsphere_datacenter.dc.moid
drs_enabled = true
drs_automation_level = "fullyAutomated"
ha_enabled = false
}

 

[...]

 

Bloger i niezależny konsultant z wieloletnim doświadczeniem w branży IT, specjalizujący się w wirtualizacji i cloud computingu. Posiada tytuły MCP, MCTS, VCP oraz VMware vExpert.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik "IT Professional"