StackDeploy.psm1


Function Start-StackDeploy {
    
    #region Global Variables and Check
    If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) {   
        $arguments = "-Command {Start-StackDeploy}"
        Start-Process "C:\program Files\Powershell\7\pwsh.exe" -Verb runAs -ArgumentList $arguments
        Break
    }
    
    $global:config = $null
    $global:cookie = $null
    $global:servers = @()
    $global:deployserverIP = $null

    Clear-Host
    Get-SDConfig
    New-SDMainMenu
}
#endregion
Function Get-SDWelcome {
    write-host "Welcome to the Data Entry Tool for Network Deployments"
    Write-Host ""
}
Function Get-SDConfig {

    If (!(Test-Path C:\StackDeploy)) {
        New-Item C:\StackDeploy -ItemType Directory
    }

    $pathYAML = "C:\StackDeploy\Config.yml"

    $global:config = (Get-Content $pathYAML -Raw)
    $global:config = ($config | ConvertFrom-YAML)
}
Function Set-SDConfig {

    [CmdletBinding()]
    param (
        # Key to modify
        [Parameter(Mandatory = $true)]
        [String]
        $key,
        # Parameter help description
        [Parameter(Mandatory = $true)]
        [String]
        $value
    )

    $configUpdate = Get-Content 'C:\StackDeploy\Config.yml' -raw | ConvertFrom-YAML
    $configUpdate.config.$key = $value 
    $configUpdate | ConvertTo-Yaml | set-content 'C:\StackDeploy\Config.yml'

}
Function Start-SDInstall {

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false)]
        [int]
        $step = 1,
        # Parameter help description
        [Parameter(Mandatory = $false)]
        [int]
        $StopAfterStep = 0
    )

    $site = $global:config.config.SiteNumber
    
    if (step -eq 1 ) {
        foreach ($server in $servers) {
    
            #Set Inital settings for IMC
            Set-SDIMCSetup -imcip $server.IMCDHCPAddress
    
            #Set Boot Order for
            Set-SDIMCBootOrder -imcip $server.IMCDHCPAddress
    
            New-SDVMwareConfig -vmwareIP $server.VMwareIPAddress -domainName $config.config.DomainName -hostname $server.hostname `
                -rootPw "12qwaszx!@QWASZX" -siteNumberIP $config.config.siteNumber -hypenMAC (Set-SDMacFormat -Format Hypen-Notation -mac $server.LAN1MAC)
    
        }
        Start-Sleep -Seconds 900

        if ($StopAfterStep -eq 1) {
            break
        }
        $step ++
    }

    if ($step -eq 2) {
        New-SDVCenterConfig -esxiIP $servers[0].VMwareIPAddress  
        $exitCode = Install-VCenterServer

        if ($StopAfterStep -eq 1) {
            break
        }
        $step ++
    }

    if ($exitCode -eq 0 -or $step -eq 3) {


        Set-SDVCenterSettings

        if ($StopAfterStep -eq 1) {
            break
        }
        $step ++
    }
    if ($step -eq 4) {
        if ($server.count -le 3) {
            Add-SDVMHost -esxiip $server[1].VMwareIPAddress -witnessHost $false   
        }
        elseif ($server.count -gt 3) {
            Add-SDVMHost -esxiip $server[0].VMwareIPAddress -witnessHost $false
            Add-SDVMHost -esxiip $server[1].VMwareIPAddress -witnessHost $false
            Add-SDVMHost -esxiip $server[2].VMwareIPAddress -witnessHost $false
            Add-SDVMHost -esxiip $server[3].VMwareIPAddress -witnessHost $false
            Add-SDVMHost -esxiip $server[4].VMwareIPAddress -witnessHost $false
            Add-SDVMHost -esxiip $server[5].VMwareIPAddress -witnessHost $false
            Add-SDVMHost -esxiip $server[6].VMwareIPAddress -witnessHost $true
        }
        if ($StopAfterStep -eq 1) {
            break
        }
        $step ++
    }
    if ($step -eq 5) {
        foreach ($server in $servers) {
            Set-SDVMHSettings -esxiip $server.VMwareIPAddress
        }
        if ($StopAfterStep -eq 1) {
            break
        }
        $step ++
    }
    if ($step -eq 6) {
        if ($server.count -le 3) {
            New-SDVsanStretchedClusterWitness
        }
        elseif ($server.count -gt 3) {
            New-SDVsanStretchedClusterWitnessLarge
        }
    }
    if ($step -eq 7) {
        if ($server.count -le 3) {
            New-SDVsanStretchedCluster -Witness "$site-VMH-003v"
        }
        elseif ($server.count -gt 3) {
            New-SDVsanStretchedCluster -Witness "$site-VMH-007v"
        }
    }

    else {
        break
    }


    
    New-SDVsanStretchedClusterWitness
}

#Export Module Members
Export-ModuleMember Start-StackDeploy
Export-ModuleMember Get-SDWelcome
Export-ModuleMember Get-SDConfig
Export-ModuleMember Set-SDConfig
Export-ModuleMember Start-SDInstall