DSCResources/ROSSLabHttps/ROSSLabHttps.schema.psm1
configuration ROSSLabHttps { <# .SYNOPSIS Creates the RES ONE Service Store single node lab deployment using HTTPS. #> [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute('PSAvoidUsingWriteHost', '')] param ( ## RES ONE Service Store database server name/instance (equivalient to DBSERVER). [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $DatabaseServer, ## Microsoft SQL username/password to create (equivalent to DBUSER/DBPASSWORD). [Parameter(Mandatory)] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $Credential, ## Microsoft SQL database credentials used to create the database (equivalient to DBCREATEUSER/DBCREATEPASSWORD). [Parameter(Mandatory)] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $SQLCredential, ## RES ONE Service Store Catalog Services password (equivalient to CATALOGSERVICESPASSWORD). [Parameter(Mandatory)] [System.Management.Automation.PSCredential] [System.Management.Automation.CredentialAttribute()] $CatalogServicesCredential, ## File path containing the RES ONE Service Store MSIs or the literal path to the legacy console/Sync Tool MSI. [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $Path, ## RES ONE Service Store component version to be installed, i.e. 8.0.3.0 [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $Version, ## Host header for the RES ONE Service Store [Parameter(Mandatory)] [ValidateNotNullOrEmpty()] [System.String] $HostHeader, ## RES ONE Service Store default (NetBIOS) domain name. [Parameter(Mandatory)] [System.String] $DefaultDomain, ## Pfx certificate thumbprint [Parameter(Mandatory)] [System.String] $PfxCertificateThumbprint, ## RES ONE Service Store database name (equivalient to DBNAME). [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $DatabaseName = 'RESONEServiceStore', ## NOTE: Only HTTP binding is supported by the installer; HTTPS binding will need to be managed by another DSC resource/configuration. [Parameter()] [System.UInt16] $Port = 80, ## The target node's architecture. [Parameter()] [ValidateSet('x64','x86')] [System.String] $Architecture = 'x64', ## File path to RES ONE Service Store license file. [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $LicensePath, ## File path to RES ONE Service Store building blocks to import. [Parameter()] [ValidateNotNullOrEmpty()] [System.String] $BuildingBlockPath, ## Credential used to import the RES ONE Service Store building blocks. [Parameter()] [ValidateNotNull()] [System.Management.Automation.PSCredential] [System.Management.Automation.Credential()] $BuildingBlockCredential, ## Delete the building block from disk after import. [Parameter()] [System.Boolean] $DeleteBuildingBlock, ## Catalog services hostname [Parameter()] [System.String] $CatalogServicesHost = 'localhost', [Parameter()] [ValidateSet('Present','Absent')] [System.String] $Ensure = 'Present' ) ## [System.Version] does not support just a major number and therefore, we have to roll our own.. $versionSplit = $Version.Split('.'); $productVersion = [PSCustomObject] @{ Major = $versionSplit[0] -as [System.Int32]; Minor = if ($versionSplit[1]) { $versionSplit[1] -as [System.Int32] } else { -1 } Build = if ($versionSplit[2]) { $versionSplit[2] -as [System.Int32] } else { -1 } Revision = if ($versionSplit[3]) { $versionSplit[3] -as [System.Int32] } else { -1 } } if ($productVersion.Major -gt 9) { throw ("Unsupported version '{0}'. ROSSLabHttps requires version 9 or earlier." -f $Version); } Write-Host ' Starting "ROSSLabHttps".' -ForegroundColor Gray; Import-DscResource -ModuleName xWebAdministration; ## Can't import RESONEServiceStore composite resource due to circular references! Import-DscResource -Name ROSSLab; if ($PSBoundParameters.ContainsKey('BuildingBlockPath') -and $PSBoundParameters.ContainsKey('LicensePath')) { Write-Host ' Processing "ROSSLabHttps\ROSSLabHttps" with "BuildingBlockPath" and "LicensePath".' -ForegroundColor Gray; ROSSLab 'ROSSLabHttps' { DatabaseServer = $DatabaseServer; Credential = $Credential; SQLCredential = $SQLCredential; CatalogServicesCredential = $CatalogServicesCredential; CatalogServicesHost = $CatalogServicesHost; Path = $Path; Version = $Version; HostHeader = $HostHeader; DefaultDomain = $DefaultDomain; DatabaseName = $DatabaseName; Port = $Port; LicensePath = $LicensePath; BuildingBlockPath = $BuildingBlockPath; BuildingBlockCredential = $BuildingBlockCredential; DeleteBuildingBlock = $DeleteBuildingBlock; Ensure = $Ensure; } } elseif ($PSBoundParameters.ContainsKey('BuildingBlockPath')) { Write-Host ' Processing "ROSSLabHttps\ROSSLabHttps" with "BuildingBlockPath".' -ForegroundColor Gray; ROSSLab 'ROSSLabHttps' { DatabaseServer = $DatabaseServer; Credential = $Credential; SQLCredential = $SQLCredential; CatalogServicesCredential = $CatalogServicesCredential; CatalogServicesHost = $CatalogServicesHost; Path = $Path; Version = $Version; HostHeader = $HostHeader; DefaultDomain = $DefaultDomain; DatabaseName = $DatabaseName; Port = $Port; BuildingBlockPath = $BuildingBlockPath; BuildingBlockCredential = $BuildingBlockCredential; Ensure = $Ensure; } } elseif ($PSBoundParameters.ContainsKey('LicensePath')) { Write-Host ' Processing "ROSSLabHttps\ROSSLabHttps" with "LicensePath".' -ForegroundColor Gray; ROSSLab 'ROSSLabHttps' { DatabaseServer = $DatabaseServer; Credential = $Credential; SQLCredential = $SQLCredential; CatalogServicesCredential = $CatalogServicesCredential; CatalogServicesHost = $CatalogServicesHost; Path = $Path; Version = $Version; HostHeader = $HostHeader; DefaultDomain = $DefaultDomain; DatabaseName = $DatabaseName; Port = $Port; LicensePath = $LicensePath; Ensure = $Ensure; } } else { Write-Host ' Processing "ROSSLabHttps\ROSSLabHttps".' -ForegroundColor Gray; ROSSLab 'ROSSLabHttps' { DatabaseServer = $DatabaseServer; Credential = $Credential; SQLCredential = $SQLCredential; CatalogServicesCredential = $CatalogServicesCredential; CatalogServicesHost = $CatalogServicesHost; Path = $Path; Version = $Version; HostHeader = $HostHeader; DefaultDomain = $DefaultDomain; DatabaseName = $DatabaseName; Port = $Port; Ensure = $Ensure; } } if ($Architecture -eq 'x64') { $physicalPath = 'C:\Program Files (x86)'; } elseif ($Architecture -eq 'x86') { $physicalPath = 'C:\Program Files'; } Write-Host ' Processing "ROSSLabHttps\ROSSLabHttpsBinding".' -ForegroundColor Gray; xWebSite 'ROSSLabHttpsBinding' { Name = 'IT Store'; PhysicalPath = '{0}\RES Software\IT Store\Web Portal\IT Store' -f $physicalPath; BindingInfo = @( MSFT_xWebBindingInformation { Protocol = 'HTTPS'; Port = 443; HostName = $HostHeader; CertificateThumbprint = $PfxCertificateThumbprint; CertificateStoreName = 'My'; } MSFT_xWebBindingInformation { Protocol = 'HTTP'; Port = 80; HostName = $HostHeader; } ) DependsOn = '[ROSSLab]ROSSLabHttps'; } Write-Host ' Ending "ROSSLabHttps".' -ForegroundColor Gray; } #end configuration ROSSLabHttps |