cDscDocker.psm1
enum Ensure { Present Absent } [DscResource()] class cDscDocker { [DscProperty(Key)] [string]$docker [DscProperty(Mandatory)] [Ensure]$Ensure #Equivalent of Set-TargetResource #Executes the current operation necessary to get the system to the desired state [void] Set() { if ($this.Ensure -eq [Ensure]::Present) { if (-not $this.CheckDockerProvider()) #If the docker provider isnt present { $this.InstallDockerProvider() } $this.InstallDocker() #Install docker.. } elseif ($this.Ensure -eq [Ensure]::Absent) { Uninstall-Package -Name docker -Force #Uninstall docker; will move to a function if re-used elsewhere } } #Equivalent of Test-TargetResource #Returns true if system is in the state specified; false if a modification needs to take place [bool] Test() { $dockerPresent = $this.CheckDocker() $returnValue = $false if ($this.Ensure -eq [Ensure]::Present) { if ($dockerPresent) { Write-Verbose "Item exists. Expected present" $returnValue = $true } if (-not $dockerPresent) { Write-Verbose "Item is Absent. Expect Present" $returnValue = $false } } Else { if ($dockerPresent) { Write-Verbose "Item exists. Expect Absent" $returnValue = $false } if (-not $dockerPresent) { Write-Verbose "Item absent. Expect Absent" $returnValue = $true } } return $returnValue } #Equivalent of the Get-TargetResource #Get's the current state of the system in cDscDocker object form [cDscDocker] Get() { if ($this.CheckDocker()) { $this.Ensure = [Ensure]::Present } else { $this.Ensure = [Ensure]::Absent } return $this } #Function for installation of docker [void]InstallDocker() { Install-Package -Name docker -ProviderName DockerMsftProvider -Force } #Function for installation of docker package provider [void]InstallDockerProvider() { Install-Module -Name DockerMsftProvider -Repository psgallery -Force } #Function to check if docker is already present [bool]CheckDocker() { $installed = $false if($this.CheckDockerProvider()) { $packages = Get-Package -ProviderName DockerMsftProvider foreach ($p in $packages) { if ($p.Name -eq 'docker') { $installed = $true } } } return $installed } #Function to verify the appropriate docker package provider is available on the host [bool]CheckDockerProvider() { $available = $false $providers = Get-PackageProvider foreach($provider in $providers) { if ($provider.Name -eq "DockerMsftProvider") { $available = $true } } return $available } } |