Desired State Configuration

V minulém článku jsem začal pojmy jako například Infrastructure as Code či Configuration Management. Dnes se v této oblasti podíváme na nástroj, který vám Microsoft nabízí jako součást PowerShellu. Jedná se o Desired State Configuration (DSC). Možná už jste tento pojem slyšeli, ačkoli mne stále překvapuje, jak málo je DSC mezi firmami rozšířeno. Co nám DSC nabízí:

· Konfigurační management bez nutnosti instalací dalších nástrojů – jedná se o součást Windows OS

· Využití mechanismů Standards-based managementu, které jsou standardem pro vzdálenou správu serverů (WMI, CIM, WS-Management)

· Možnost definovat konfiguraci pomocí tzv. deklarativní syntaxe (více viz níže)

· Použití předpřipravených konfiguračních celků, zdrojů, (tzv. resources) bez nutnosti detailní znalosti toho, co je „pod pokličkou“

· Pomocí těchto zdrojů můžete nastavovat mnoho parametrů OS, jedná se například o správu rolí, registrů, souborů, instalace MSI balíčků, správu uživatelů a skupin

· Volně dostupných zdrojů existuje velké množství

· PowerShell-like syntaxe, znalost PowerShellu je velkou výhodou, nicméně ne nutnou podmínkou pro tvorbu konfiguračních dokumentů. Na druhou stranu – nedokážu si představit, že DSC konfigurace necháte vytvářet členy vašeho HR oddělení (dosaďte libovolné non-IT oddělění)

Pojďme si DSC ukázat na krátkém příkladu. Budeme chtít vytvořit soubor, který bude obsahovat daný text. Pomocí DSC konfigurace můžeme tento úkol zapsat následovně:

m1

Ha! Možná jste očekávali Set-Content nebo Out-File na jednu řádku. Pojďme si nejdříve přeložit předchozí kód a poté si řekneme o jeho výhodách.

· Configuration je klíčová slovo uvozující celou konfiguraci. Představte si jej jako kdybyste ve fukci použili function.

· DemoSoubor je jméno konfigurace.

· Node určuje, na kterém serveru bude tato konfigurace aplikována. Zde ji použijeme na lokálním počítači.

· File je jméno zdroje, který používáme. Zde použijeme zdroj typu File a nazveme jej NejakySoubor pro snadnou pozdější referenci.

· Konfigurace ve složených závorkách už pouze popisuje, jakou akci budeme se souborem provádět. Ujistíme se, že soubor existuje (pokud ne, bude vytvořen) v dané cestě a má daný obsah.

Nyní nás čekají dva kroky:

1. Soubor s konfigurací musíme zkompilovat

2. Zkompilovanou konfiguraci doručíme na cílový server.

Kompilace probíhá do MOF souboru. Tento formát vám asi není neznámý a pokud jste někdy pracovali například se System Center Configuration Managerem, je MOF váš denní chléb. Kompilaci si představte jako volání funkce, načteme ji do paměti a zavoláme. Soubor s konfigurací jsem si uložil do souboru, který jsem nazval konfigurace.ps1.

m5

Do aktuální session PowerShellu si načtu naši konfiguraci a příkazem Get-Command si ji mohu zobrazit.

m6

Nyní mohu tuto konfiguraci zavolat. Automaticky se mi zkompiluje do MOF souboru.

m7

Tento MOF soubor se uloží do podadresáře dle jména konfigurace a pro daný server vytvoří MOF se jménem souboru. Zde se tedy vytvořil soubor localhost.mof. Pokud se podíváme na jeho obsah uvidíme čitelný text s danou konfigurací:

m2

Nyní si můžeme tento soubor spustit. Zatím nechám na další pokračování podrobnější informace o tom, co se vlastně děje na pozadí.

m8

Pomocí Start-DscConfiguration spouštím danou konfiguraci. Zde jsem nepoužil žádný jiný parametr, než cestu ke konfiguračnímu MOF souboru. DSC si vzalo MOF soubor a provedlo akci, která je uvnitř definována. Vše běží na pozadí za využití Background Jobs. Výsledkem by tedy měl být soubor s námi nakonfigurovanými parametry.

m9

Jak je vidět, soubor se vytvořil a obsahuje text, který jsme určili.

Nyní přichází důležitá otázka – v čem je toto řešení lepší než např. již zmiňovaný Out-File? Zde přichází ke slovu základní princip konfiguračního managementu. Konfigurační management je neustálé kolečko doručování konfigurací na cílové servery. V konfiguračním managementu odlišujete vlastní kód pro aktuální změnu od konfigurace této změny. Pokud byste měli složitější příklad než textový soubor, mohla by změna konfigurace znamenat i několik (desítek) řádek PowerShell skriptu. Při použití konfiguračního souboru nesaháte do kódu, který změnu dělá, ale upravujete pouze konfiguraci.

Již nyní určitě píšete skripty tak, aby logika byla oddělena od dat. Ať již pomocí vstupních parametrů nebo např. celých konfiguračních souborů. Stejně tak budete postupovat i v tomto případě. Upravujete pouze konfigurační soubor a nezajímá vás (nemusíte se starat) jak je tato konfigurace doručena na cílový server. Změnou jedné řádky v konfiguraci měníte nastavení cílových serverů.

Pokud potřebujeme změnit text uvnitř našeho souboru, můžeme to provést změnou konfigurace:

m10

Nejprve změníme obsah v našem souboru s konfigurací a nahradíme starý text textem novým.

m11

Konfiguraci opět načteme do paměti a spustíme.

m12

Pokud si vypíšeme obsah souboru nyní, vidíme, že se změnil.

m13

Tímto způsobem dokážete naprosto precizně oddělit konfiguraci tak, abyste přenesli jednotlivé části vytváření a správy na konkrétní lidi bez starosti o to, zda vám někdo neudělá změnu do kódu a nerozbije vám váš dlouho budovaný skript.

V příštím pokračování se podíváme pod pokličku DSC tak, abyste věděli, co se vlastně děje při spuštění cmdletu Start-DscConfiguration.

- David Moravec

Mohlo by vás též zajímat:

Getting Started with PowerShell Desired State Configuration (DSC): (02) Performing a Push Deployment