SDInputs.psm1

Function Add-SDServerInfo {

    Write-Host "We will be Entering Server Information for the deployment in this section."
    Write-Host "You will be prompted to enter information, at the end all that info will be displayed for you to verify."
    Write-Host "You may enter the MAC Address with colons or without. The program will add colon if you choose not to enter them."
    Write-Host ""
    Read-Host "Press any Key to Continue"
    Clear-Host
    $site = $config.config.SiteNumber
    $siteNumberIP = (Set-SiteIPFormat -site $site)

    do {

        $lastserver = $false
        $mgmtMAC = Read-Host "Enter the MGMT Port MAC Address"
        $lan1MAC = Read-Host "Enter the LAN1 MAC Address"
        $hostname = Read-Host "Enter the Hostname the Server"
        $serialnumber = Read-Host "Enter the Serial Number of the Server"

        do {

            $i = 0
            Try {
                [ValidatePattern('^((1?[0-9]?[0-9])?|(25[0-5])?|(2[0-4][0-9])?)$')]$vmwareIP = read-host "Enter the last IP Octet for VMWare Mgmt on the Server" -ErrorAction Stop
            }
            Catch {
                Write-Error -Message "You must only enter the last octet between 0-255"
                continue
            }
            break  
            
        }until($i -eq 1)

        do {

            $i = 0
            Try {
                [ValidatePattern('^((1?[0-9]?[0-9])?|(25[0-5])?|(2[0-4][0-9])?)$')]$imcIP = read-host "Enter the last IP Octet for IMC Mgmt on the Server" -ErrorAction Stop
            }
            Catch {
                Write-Error -Message "You must only enter the last octet between 0-255"
                continue
            }
            break  
            
        }until($i -eq 1)

        $IMCDHCPAddress = Get-DhcpServerv4Lease -ScopeId 172.29.$siteNumberIP.0 | Where-Object -Property Hostname -Match $serialNumber | Select-Object -ExpandProperty IPAddress

        $server = New-Object psobject -Property @{
            "MGMTMAC"         = (Set-SDNormalizedMac -mac $mgmtMAC)
            "LAN1MAC"         = (Set-SDNormalizedMac -mac $lan1MAC)
            "Hostname"        = $hostname
            "VMwareIPAddress" = "10.$siteNumberIP.4.$vmwareIP"
            "IMCIP"           = "172.29.$siteNumberIP.$imcIP"
            "SerialNumber"    = $serialnumber
            "IMCDHCPAddress"  = $IMCDHCPAddress
        }

        $server
        do {

            $i = 0
            Try {
                [ValidatePattern('^(?i)Y?N?$')]$correct = read-host 'Is this Correct (Y/N)' -ErrorAction Stop
            }
            Catch {
                Write-Error -Message "You must enter Y for yes and N for no"
                continue
            }
            break  
            
        }until($i -eq 1)

        if ($correct -eq "Yes" -or $correct -eq "Y") {

            Set-Variable -Name servers -Value ($servers + ($server | Select-Object MGMTMAC, LAN1MAC, Hostname, VMwareIPAddress, IMCIP, IMCDHCPAddress, SerialNumber))
            
            do {

                $i = 0
                Try {
                    [ValidatePattern('^(?i)Y?N?$')]$checkLastServer = read-host 'Is this the last server (Y/N)' -ErrorAction Stop
                }
                Catch {
                    Write-Error -Message "You must enter Y for yes and N for no"
                    continue
                }
                break  
                
            }until($i -eq 1)

            if ($checkLastServer -eq "Yes" -or $checkLastServer -eq "Y") {
                $lastserver = $true
            }
            if ($checkLastServer -eq "n" -or $checkLastServer -eq "no" ) {
                continue
            }
        }
        if ($correct -eq "n" -or $correct -eq "no" ) {
            Clear-Host
            Write-Host "Please re-enter information"
            Start-Sleep -Seconds 3
            Clear-Host
            continue
        }
    } until (
        $lastServer -eq $true
    )
    "Deployment:" | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml
    foreach ($server in $servers) {
        " Server:" | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml -Append
        " LAN1Mac: " + $server.LAN1MAC | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml -Append
        " Hostname: " + $server.Hostname | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml -Append
        " VMwareIPAddress: " + $server.VMwareIPAddress | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml -Append
        " IMCIP: " + $server.IMCIP | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml -Append
        " IMCDHCPAddress: " + $server.IMCDHCPAddress | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml -Append
        " SerialNumber: " + $server.SerialNumber | Out-File C:\StackDeploy\Deployments\$SiteNumber.yml -Append
    }
    Clear-Host
    New-SDSRVInfo
}
Function Get-SDServerInfo {

    $siteNumber = $global:config.config.SiteNumber
    Get-Content C:\StackDeploy\Deployments\$siteNumber.yml

    Read-host "Press any key to Continue"
    New-SDSRVInfo
}
Function Import-SDServerInfo {
    <#
        .DESCRIPTION
            This Function prompts the user to select a CSV or YAML file for Servers to be imported.
 
    #>

    
    $siteNumber = $config.config.siteNumber

    #Imports Servers from the CSV File and converts it to YAML
    $servers = Import-Csv C:\StackDeploy\Deployments\$siteNumber-Servers.csv

    "Deployment:" | Out-File C:\StackDeploy\Deployments\$siteNumber.yml

    foreach ($server in $servers) {
        " Server:" | Out-File C:\StackDeploy\Deployments\$siteNumber.yml -Append
        " LAN1Mac: " + $server.LAN1MAC | Out-File C:\StackDeploy\Deployments\$siteNumber.yml -Append
        " Hostname: " + $server.Hostname | Out-File C:\StackDeploy\Deployments\$siteNumber.yml -Append
        " VMwareIPAddress: " + $server.VMwareIPAddress | Out-File C:\StackDeploy\Deployments\$siteNumber.yml -Append
        " IMCIP: " + $server.IMCIP | Out-File C:\StackDeploy\Deployments\$siteNumber.yml -Append
        " IMCDHCPAddress: " + $server.IMCDHCPAddress | Out-File C:\StackDeploy\Deployments\$siteNumber.yml -Append
        " SerialNumber: " + $server.SerialNumber | Out-File C:\StackDeploy\Deployments\$siteNumber.yml -Append
    }
    New-SDSRVInfo
}

# Export Module Members
Export-ModuleMember Add-SDServerInfo
Export-ModuleMember Get-SDServerInfo
Export-ModuleMember Import-SDServerInfo
Export-ModuleMember Get-SDServerInfo
Export-ModuleMember Import-SDServerInfo