Overzicht Desired State Configuration voor technici
Dit document is bedoeld voor ontwikkelaars en operationele teams om inzicht te krijgen in de voordelen van PowerShell Desired State Configuration (DSC). Zie Overzicht voor besluitvormers voor een weergave op Desired State Configuration niveau van de waarde die DSC biedt
Voordelen van Desired State Configuration
DSC bestaat voor:
- De complexiteit van het uitvoeren van scripts in Windows
- De snelheid van iteratie verhogen
Het concept van continue implementatie wordt steeds belangrijker. Continue implementatie betekent de mogelijkheid om vaak, mogelijk meerdere keren per dag, te implementeren. Het doel van deze implementaties is niet om iets op te lossen, maar om snel iets te publiceren. Door nieuwe functies zo soepel en betrouwbaar mogelijk te ontwikkelen, vermindert u de time-to-value van nieuwe bedrijfslogica.
De overstap naar cloud-computing impliceert een implementatieoplossing die gebruikmaakt van een 'declaratief' sjabloonmodel, waarbij een eindtoestandomgeving wordt gedeclareerd als tekst en wordt gepubliceerd naar een implementatie-engine. Deze implementatietechniek maakt snelle wijziging op schaal mogelijk met tolerantie tegen een storingsbedreiging, omdat de implementatie op elk moment consistent kan worden herhaald om een eindtoestand te garanderen. Het maken van hulpprogramma's en services die ondersteuning bieden voor deze stijl van bewerkingen via automatisering is een reactie op deze wijzigingen.
DSC is een platform dat declaratieve en idempotente (herhaalbare) implementatie, configuratie en conformiteit biedt. Met het DSC-platform kunt u ervoor zorgen dat de onderdelen van uw datacenter de juiste configuratie hebben, waardoor fouten worden voorkomen en kostbare implementatiefouten worden voorkomen. Door DSC-configuraties te behandelen als onderdeel van toepassingscode, maakt DSC continue implementatie mogelijk. De DSC-configuratie moet worden bijgewerkt als onderdeel van de toepassing, zodat de kennis die nodig is om de toepassing te implementeren altijd up-to-date is en klaar is om te worden gebruikt.
"Ik heb PowerShell, waarom heb ik Desired State Configuration?"
DSC-configuraties scheiden intenties, of 'wat ik wil doen', van uitvoering of 'hoe ik dit wil doen'. Dit betekent dat de uitvoeringslogica is opgenomen in de resources. Gebruikers moeten niet weten hoe ze een functie moeten implementeren of implementeren wanneer een DSC-resource voor die functie beschikbaar is. Hierdoor kan de gebruiker zich richten op de structuur van de implementatie.
PowerShell-scripts moeten er bijvoorbeeld als volgende uitzien:
# Create a share in Windows Server 8
New-SmbShare -Name MyShare -Path C:\Demo\Temp -FullAccess Alice -ReadAccess Bob
Dit script is eenvoudig, begrijpelijk en eenvoudig. Als u dit script echter in productie probeert te nemen, hebt u te maken met verschillende problemen. Wat gebeurt er als dat script twee keer achter elkaar wordt uitgevoerd? Wat gebeurt er als Bob eerder volledige toegang tot de share had?
Om deze problemen te compenseren, komt een 'echte' versie van het script dichter bij iets als:
# But actually creating a share in an idempotent way would be
$shareExists = $false
$smbShare = Get-SmbShare -Name $Name -ErrorAction SilentlyContinue
if($smbShare -ne $null)
{
Write-Verbose -Message "Share with name $Name exists"
$shareExists = $true
}
if ($shareExists -eq $false)
{
Write-Verbose "Creating share $Name to ensure it is Present"
New-SmbShare @PSBoundParameters
}
else
{
# Need to call either Set-SmbShare or *ShareAccess cmdlets
if ($PSBoundParameters.ContainsKey("ChangeAccess"))
{
#...etc, etc, etc
}
}
Dit script is complexer, met veel logica en foutafhandeling. Het script is complexer omdat u niet langer vermeldt wat u wilt doen, maar hoe u dit doet.
Met DSC kunt u zeggen wat u wilt doen en wordt de onderliggende logica verwijderd.
# A configuration is a special kind of PowerShell function
Configuration Sample_Share
{
Import-DscResource -Module xSmbShare
# Nodes are the endpoint we wish to configure
# A Configuration block can have zero or more Node blocks
Node $NodeName
{
# Next, specify one or more resource blocks
# Resources are simply PowerShell modules that
# implement the logic of "how" to execute a task
xSmbShare MySMBShare
{
Ensure = "Present"
Name = "MyShare"
Path = "C:\Demo\Temp"
ReadAccess = "Bob"
FullAccess = "Alice"
Description = "This is an updated description for this share"
}
}
}
#Run the function to compile the configuration
Sample_Share
#Pass the configuration to the nodes we defined and configure them
Start-DscConfiguration Sample_Share
Dit script is overzichtelijk opgemaakt en eenvoudig te lezen. De logische paden en foutafhandeling zijn nog steeds aanwezig in de implementatie van de resource, maar onzichtbaar voor de scriptauteur.
Omgeving scheiden van structuur
Een veelvoorkomende patroon in DevOps is het hebben van meerdere omgevingen voor implementatie. Er kan bijvoorbeeld een 'dev'-omgeving worden gebruikt om snel een prototype van nieuwe code te maken. De code uit de 'dev'-omgeving gaat naar een testomgeving, waar andere mensen de nieuwe functionaliteit controleren. Ten slotte gaat de code naar 'prod' of de productieomgeving van de livesite.
DSC-configuraties zijn geschikt voor deze dev-test-prod-pijplijn door gebruik te maken van configuratiegegevens.
Hiermee wordt het verschil tussen de structuur van de configuratie verder geabstraheerd van de knooppunten die worden beheerd. U kunt bijvoorbeeld een configuratie definiƫren die een SQL server, een IIS-server en een server in de middelste laag vereist. Ongeacht welke knooppunten de verschillende onderdelen van deze configuratie ontvangen, zijn deze drie elementen altijd aanwezig. U kunt configuratiegegevens gebruiken om alle drie de elementen naar dezelfde machine te laten wijzen voor een dev-omgeving, de drie elementen te scheiden van drie verschillende machines voor een testomgeving en ten slotte naar alle productieservers voor de prod-omgeving. Als u wilt implementeren in de verschillende omgevingen, kunt u Start-DscConfiguration aanroepen met de juiste configuratiegegevens voor de omgeving die u wilt targeten.