API - Powershell Create host and Deploy task script
-
I hope this helps someone out. I am using this to deploy physicals from a Cloud Management Platform. I am sure others will have similar uses while integrating to other systems/tools.
<# Description: Script that calls out to Fog Pxe Imaging Server to create a Host entry and start a deploy imaging task. Requirements: -vComamnder 6.1.X or higher https://www.embotics.com -Powershell V4 or greater -Fog Version 1.4.4 or greater https://fogproject.org/ Note: Your Environment may require additional or diffrent settings. vCommander workflow Run Syntax: powershell.exe c:\Scripts\fog\DeployImage.ps1 -MachineName "#{target.settings.customAttribute['Name']}" -MacAddress "#{target.settings.customAttribute['MAC Address']}" -imagename "#{target.settings.customAttribute['Image']}" #> [CmdletBinding()] param( [switch]$Elevated, [Parameter(Mandatory=$True)] [String] $MachineName = $(Throw "Provide the target machines Name"), [String] $MacAddress = $(Throw "Provide the target machines MAC Address"), [String] $ImageName = $(Throw "Provide the Image Name to assign to the new target host") ) ####################################################################################################################### # Configure the variables below for the Fog Server ####################################################################################################################### #FogServer $fogApiToken = 'Fog Api Token' $fogUserToken = 'Fog User Token' $fogServer = "fog IP addrress" $Description = "Created by vCommander" ######################################################################################################################## # Nothing to configure below this line - Starting the main function of the script ######################################################################################################################## ######################################################################################################################## # Setting Cert Policy - required for successful auth with the phpipam API if set to https ######################################################################################################################## add-type @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12; ######################################################################################################################## #Setup Auth headers and base url for FogServer $headers = @{}; $headers.Add('fog-api-token', $fogApiToken); $headers.Add('fog-user-token', $fogUserToken); $baseUri = "http://$fogServer/fog" #Get Image List From Fog Server Try{ $ImageURL = $baseUri+"/image/" $ImageResult = Invoke-RestMethod -Uri $ImageURL -Method GET -Headers $headers -ContentType "application/json" $Image = $ImageResult.images | Select-object imageTypeID,id,name | Where-object {$_.name -eq $ImageName} }Catch{Write-Host "Failed to get Image data from Fog" -ForegroundColor Red $error[0] | Format-List -Force Exit 1 } #GetHost List from fog Server ***Not nessicary but nice to have incase you want to use it for other data checks*** Try{ $HostURL = $baseUri +"/host/" $HostResult = Invoke-RestMethod -Uri $HostURL -Method GET -Headers $headers -ContentType "application/json" }Catch{Write-Host "Failed to get HostList from Fog" -ForegroundColor Red $error[0] | Format-List -Force Exit 1 } #Create Host entry from vCommander $HostJson = @{ "name"= $MachineName "description"= $Description "macs" = @($MacAddress) "imageID"= $Image.id "imagename" = $ImageName } Try{ $CreateHostJson = ConvertTo-Json($HostJson) $createHostURL = $baseUri +"/host/create" $createHostResult = Invoke-RestMethod -Uri $createHostURL -Method POST -body $CreateHostJson -Headers $headers -ContentType "application/json" }Catch{Write-Host "Failed to create host in Fog" -ForegroundColor Red $error[0] | Format-List -Force Exit 1 } #Get Task types to confirm Structure Try{ $TasktypesURL = $baseUri + "/tasktype" $TasktypesResult = Invoke-RestMethod -Uri $TasktypesURL -Method GET -Headers $headers -ContentType "application/json" $TasktypeID = ($TasktypesResult.tasktypes | Select-object name,id | Where-object {$_.name -eq "Deploy"}).id }Catch{Write-Host "Failed to get Task types from Fog" -ForegroundColor Red $error[0] | Format-List -Force Exit 1 } #Create Task to Image Host $ImageID = $image.id $HostID = $createHostResult.id $TaskURL = $baseUri + "/host/" + $HostID + "/task" $TaskdataSet = @{ "hostname" = $createHostResult.name "taskTypeID" = $TasktypeID } Try{ $taskdataToSend = ConvertTo-JSON($TaskdataSet) $TaskResult = Invoke-RestMethod -Method Post -Uri $TaskURL -Headers $headers -Body $taskdataToSend -ContentType "application/json" }Catch{Write-Host "Failed to create Deploy Task in Fog" -ForegroundColor Red $error[0] | Format-List -Force Exit 1 }
-
Great job man, really! It’s so nice to see people using the API.
-
This was very helpful! Thanks for sharing this.
I used it with Microsoft Forms which goes back a SharePoint list, then talks to Microsoft
Orchestrator with all the variables, ex; image name, MAC, etc… -