function Get-EnvironmentData { <# .SYNOPSIS Get basic data about the environment. Called by Get-ServerPackageInformation as part of the Classify_Packages part of the Deploy pipeline .PARAMETER PackageMetadata Packages object to populate .LINK Get-ServerPackageInformation .LINK Test-IsEclairInstalled #> [CmdletBinding()] param( [PSObject]$PackageMetadata ) $loglead = Get-LogLeadName $PackageMetadata.ServersToQuery = ( @($PackageMetadata.WebServers) + @($PackageMetadata.AppServers) + @($PackageMetadata.MicServers) + @($PackageMetadata.SelectedFabServer) ) | Where-Object { $_ } $serverToQuery = $PackageMetadata.ServersToQuery | Select-Object -First 1 # Read the machine.config into a variable to avoid going across the network to read # it every time we call Get-AppSetting... which we were doing before... :/ $dncPath = Get-DotNetConfigPath $dncUncPath = Get-UncPath -ComputerName $serverToQuery -filePath $dncPath -IgnoreLocalPaths $machineConfigContent = Read-XMLFile -xmlPath $dncUncPath # Map from $packageMetadata KEY to machine.config KEY $envDataKeyMap = @{ EnvironmentName = "Environment.Name" EnvironmentType = "Environment.Type" EnvironmentHosting = "Environment.Hosting" EnvironmentNameSafeDesignation = "Environment.NameSafeDesignation" } foreach ($envDataKey in $envDataKeyMap.keys) { Write-Host "$loglead : deployData Key: $envDataKey" $mcKey = $envDataKeyMap[$envDataKey] Write-Host "$loglead : Machine config key: $mcKey" $mcValue = Get-AppSetting -Key $mcKey -XmlDocument $machineConfigContent -SuppressWarnings Write-Host "$loglead : Machine config value: $mcValue" $packageMetadata.$envDataKey = $mcValue } if ($PackageMetadata.EnvironmentNameSafeDesignation) { Write-Host "$loglead : EnvironmentNameSafeDesignation: $($PackageMetadata.EnvironmentNameSafeDesignation)" } else { Write-Warning "$loglead : NameSafeDesignation MISSING from the machine.config. Getting from tags..." $tags = Get-InstanceTags -ServerToTest $serverToQuery foreach ($tag in $tags) { if ($tag.Key -eq "alk:env") { $designation = Get-DesignationTagNameByEnvironment $tag.Value } } if ($designation) { foreach ($tag in $tags) { if ($tag.Key -eq "alk:$designation") { $PackageMetadata.EnvironmentNameSafeDesignation = $tag.Value.Replace('.', '-').Trim().ToLower() } } } if (!$designation -or !$PackageMetadata.EnvironmentNameSafeDesignation) { Write-Error "$loglead : Did not find a Designation tag. This server ($serverToQuery) is missing both machine.config values and tags. Investigation is required." } } if ($PackageMetadata.EnvironmentHosting) { Write-Host "$loglead : EnvironmentHosting: $($PackageMetadata.EnvironmentHosting)" } else { Write-Warning "$loglead : Could not obtain a EnvironmentHosting. This will result in no Infrastructure Migrations being run." } #region IsEclairInstalled $sbIsEclairInstalled = { param($server) try { $results = @{ Hostname = $server IsEclairInstalled = $false Error = $null Success = $false } $ei = Test-IsEclairInstalled -ComputerName $server $results.IsEclairInstalled = $ei $results.Success = $true } catch { $ex = $_ $msg = $_.Exception.Message Write-Warning "$loglead : There was an error testing for Eclair" Write-Warning "$msg" $results.Error = $ex $results.Success = $false } return $results } $ieiResults = Invoke-Parallel -objects $PackageMetadata.ServersToQuery -script $sbIsEclairInstalled $isEclairInstalledOnAllHosts = $ieiResults.IsEclairInstalled -notcontains $false Write-Host "$loglead : Is Eclair installed on all hosts: $isEclairInstalledOnAllHosts" $PackageMetadata.IsEclairInstalledOnAllHosts = $isEclairInstalledOnAllHosts # Trim out crap from (RunspaceId, PSSourceJobInstanceId, etc.) ReceiveJob so the Classify Packages tests will pass $trimmedResults = @() foreach($result in $ieiResults) { $hash = @{} foreach($enum in $result.GetEnumerator()) { $hash.add($enum.key, $enum.value) } $trimmedResults += $hash } $PackageMetadata.EclairInstallData = $trimmedResults #endregion IsEclairInstalled return $PackageMetadata }