Minęły zaledwie cztery miesiące od wydania Terraform 0.13. W międzyczasie doczekaliśmy się dużej konferencji organizowanej przez Hashicorp, twórcę Terraforma, na której ogłoszono między innymi Terraform Cloud. Programiści nie dostosowali swoich skryptów do wersji 0.13, a już z początkiem grudnia w nasze ręce oddany został Terraform 0.14. Jakie zmiany zostały wprowadzone wraz z nową wersją?
Powoli do przodu, czyli mało nowości w Terraform 0.14
Lista zmian nie jest imponująca i są to zmiany w dużej mierze kosmetyczne i funkcjonalne w stosunku do poprzedniej wersji. Większość przedsiębiorstw nadal używa wersji 0.11 oraz 0.12. Niektóre powoli migrują do wersji 0.13, w której wprowadzono nieco zmian w języku HCL. Aktualizacja do nowej wersji wymaga zatem dostosowania wykorzystywanych obecnie skryptów.
Jedną z funkcjonalności, którą zaliczałem zawsze do niedostatecznie rozwiniętych była możliwość oznaczania wartości jako sensitive. Flaga ta ma zabezpieczyć nas na przykład przed przypadkowym wypisaniem hasła na ekranie konsoli. Powoli z wersji na wersję rozszerzany jest katalog obiektów, którym atrybut ten może zostać przypisany. Zdefiniowanie zmiennej wejściowej jako „wrażliwej” spowoduje, że Terraform nie wyświetli nigdy jej wartości na konsoli. To samo dotyczy danych wyjściowych z modułu. W niektórych przypadkach, na przykład gdy w zagnieżdżonym bloku używana jest wrażliwa zmienna, można oznaczyć tak cały blok. Dzieje się tak w przypadku zasobów, które mogą mieć wiele bloków tego samego typu, przy czym wartości muszą być unikalne.
Poniżej przykład użycia zmiennej z flagą sensitive:
variable "user" { type = object({ name = string passsword = string API = string }) sensitive = true }
Wyświetlanie podsumowania zmian
Jedną z uciążliwości pracy z Terraformem była ilość informacji wypisywanych na konsoli jako efekt wykonania poleceń. Informacje o wprowadzanych zmianach prezentowane są w formacie diff – popularnego narzędzia do porównywania dwóch plików tekstowych. Podejście moim zdaniem słuszne, gdyż każdy nie tylko programista powinien umieć posługiwać się diffem i rozumieć prezentowany w jego formacie wynik porównania. Niestety podsumowanie zmian wyświetlane prze Terraforma często było nieczytelne ze względu na ilość informacji w nich zawartych, nie tylko tych dotyczących samej zmiany. Bardzo łatwo było przegapić istotne informacje.
Terraform 0.14 zawiera nowy eksperymentalny mechanizm renderujący różnice. Jest on domyślnie włączony. Nowe zachowanie zostało zaprojektowane, aby pomóc praktykom szybko zrozumieć, jakie zmiany Terraform zamierza wprowadzić w istniejącej infrastrukturze. Podstawowa zmiana polega na tym, że nieistotne pola czy informacje o obiektach, które nie ulegają zmianie, są teraz ukryte i nie zobaczymy ich na ekranie. Zapewnia to, że diff wyraźnie wyświetla tylko podzbiór zasobów związanych z wprowadzaną zmianą. Informacje o liczbie niezmienionych w danym obiekcie elementach będą wyświetlane w podsumowaniu. Nowy sposób wyświetlania zmian bardzo dobrze oddaje przykład z dokumentacji:
~ words = [ # (3 unchanged elements hidden) - "delta", + "data", "echo", # (5 unchanged elements hidden) "kilo", - "Lima", + "London", "Mike", " (13 unchanged elements hidden) ]
Chcesz poznać Terraforma?
Na koniec mam coś zarówno dla samouków, jak i osób szukających zorganizowanych kursów. W inleo mamy własne podejście do realizacji szkoleń i warsztatów. Uważamy, że największą wartością nie jest ukrywany przed światem scenariusz ćwiczeń, ale właśnie praca z instruktorem. Dlatego nasze workbooki są w pełni jawne. Dla samouków to doskonała okazja, aby w usystematyzowany sposób rozpocząć swoją przygodę i samodzielną naukę. Dla osób szukających prowadzonych przez instruktora szkoleń materiał referencyjny, jak takie warsztaty, często dostosowane do specyficznych potrzeb, mogą wyglądać.
Na GitHub inleo znajdziecie między innymi nasze nowe szkolenie Terraform Fundamentals. Możecie przelabować scenariusz samodzielnie, a jeżeli chcecie byśmy w Waszej firmie przeprowadzili to, lub jakiekolwiek inne szkolenie (on-line lub stacjonarnie), to napiszcie do mnie.