Framework/Core/SVT/Services/ContainerInstances.ps1
Set-StrictMode -Version Latest class ContainerInstances: SVTBase { hidden [PSObject] $ResourceObject; ContainerInstances([string] $subscriptionId, [string] $resourceGroupName, [string] $resourceName): Base($subscriptionId, $resourceGroupName, $resourceName) { $this.GetResourceObject(); } ContainerInstances([string] $subscriptionId, [SVTResource] $svtResource): Base($subscriptionId, $svtResource) { $this.GetResourceObject(); } hidden [PSObject] GetResourceObject() { if (-not $this.ResourceObject) { # $this.ResourceObject = Get-AzureRmContainerGroup -Name $this.ResourceContext.ResourceName ` #-ResourceGroupName $this.ResourceContext.ResourceGroupName -ErrorAction SilentlyContinue $this.ResourceObject = Get-AzResource -Name $this.ResourceContext.ResourceName ` -ResourceGroupName $this.ResourceContext.ResourceGroupName -ExpandProperties if(-not $this.ResourceObject) { throw ([SuppressedException]::new(("Resource '{0}' not found under Resource Group '{1}'" -f ($this.ResourceContext.ResourceName), ($this.ResourceContext.ResourceGroupName)), [SuppressedExceptionType]::InvalidOperation)) } } return $this.ResourceObject; } hidden [ControlResult] CheckPublicIPAndPorts([ControlResult] $controlResult) { if([Helpers]::CheckMember($this.ResourceObject, "properties.ipAddress")) { $controlResult.VerificationResult = [VerificationResult]::Verify; $controlResult.SetStateData("Public IP address and ports assigned to the container", $this.ResourceObject.properties.ipAddress); $controlResult.AddMessage([MessageData]::new("Review following public IP address and ports assignment to the container - ["+ $this.ResourceContext.ResourceName +"]", $this.ResourceObject.properties.ipAddress)); } else { $controlResult.AddMessage([VerificationResult]::Passed, [MessageData]::new("No public IP address has been assigned to the container - ["+ $this.ResourceContext.ResourceName +"]")); } return $controlResult; } hidden [ControlResult] CheckContainerImage([ControlResult] $controlResult) { $controlResult.VerificationResult = [VerificationResult]::Verify; if([Helpers]::CheckMember($this.ResourceObject, "properties.containers")) { $containerImages = @(); $containerImages += $this.ResourceObject.properties.containers | Select-Object name, @{ Label="image"; Expression={ $_.properties.image } }; if($containerImages.Count -ne 0) { $controlResult.SetStateData("Containers and their images", $containerImages); $controlResult.AddMessage([MessageData]::new("Review following images utilized by containers. Make sure their source is trustworthy.", $containerImages)); } else { $controlResult.AddMessage([MessageData]::new("No containers are found under container group - ["+ $this.ResourceContext.ResourceName +"]")); } } else { $controlResult.AddMessage([MessageData]::new("No containers are found under container group - ["+ $this.ResourceContext.ResourceName +"]")); } return $controlResult; } hidden [ControlResult] CheckRegistry([ControlResult] $controlResult) { $controlResult.VerificationResult = [VerificationResult]::Verify; if([Helpers]::CheckMember($this.ResourceObject, "Properties.imageRegistryCredentials")) { $registry = @(); $registry += $this.ResourceObject.Properties.imageRegistryCredentials | Select-Object server | Select-Object -ExpandProperty server -Unique; if($registry.Count -ne 0) { $controlResult.SetStateData("Container registry", $registry); $controlResult.AddMessage([MessageData]::new("Make sure the following registry is trustworthy.", $registry)); } else { $controlResult.AddMessage([MessageData]::new("Containers are utilizing default public registry for container group - ["+ $this.ResourceContext.ResourceName +"]")); } } else { $controlResult.AddMessage([MessageData]::new("Containers are utilizing default public registry for container group - ["+ $this.ResourceContext.ResourceName +"]")); } return $controlResult; } hidden [ControlResult] CheckContainerTrust([ControlResult] $controlResult) { if([Helpers]::CheckMember($this.ResourceObject, "properties.containers")) { $containers = @(); $containers += $this.ResourceObject.properties.containers | Select-Object name | Select-Object -ExpandProperty name; if($containers.Count -gt 1) { $controlResult.SetStateData("Containers", $containers); $controlResult.AddMessage([VerificationResult]::Verify, [MessageData]::new("Make sure that following containers trust each other.", $containers)); } elseif($containers.Count -eq 1) { $controlResult.AddMessage([VerificationResult]::Passed, [MessageData]::new("Only 1 container is found under container group - ["+ $this.ResourceContext.ResourceName +"]", $containers)); } else { $controlResult.AddMessage([VerificationResult]::Passed, [MessageData]::new("No containers are found under container group - ["+ $this.ResourceContext.ResourceName +"]")); } } else { $controlResult.AddMessage([VerificationResult]::Passed, [MessageData]::new("No containers are found under container group - ["+ $this.ResourceContext.ResourceName +"]")); } return $controlResult; } } |