• Recent
  • Unsolved
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login
  • Recent
  • Unsolved
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login

API - Powershell Create host and Deploy task script

Scheduled Pinned Locked Moved
Tutorials
3
3
2.0k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S
    scottybullet
    last edited by scottybullet Dec 8, 2017, 9:02 AM Dec 7, 2017, 6:22 PM

    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
                    }
    
    
    
    J 1 Reply Last reply Mar 12, 2021, 3:41 PM Reply Quote 1
    • W
      Wayne Workman
      last edited by Dec 8, 2017, 12:26 AM

      Great job man, really! It’s so nice to see people using the API.

      Please help us build the FOG community with everyone involved. It's not just about coding - way more we need people to test things, update documentation and most importantly work on uniting the community of people enjoying and working on FOG!
      Daily Clean Installation Results:
      https://fogtesting.fogproject.us/
      FOG Reporting:
      https://fog-external-reporting-results.fogproject.us/

      1 Reply Last reply Reply Quote 0
      • J
        Jamaal @scottybullet
        last edited by Mar 12, 2021, 3:41 PM

        @scottybullet

        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…

        1 Reply Last reply Reply Quote 0
        • K KaterKarlo99 referenced this topic on Mar 31, 2023, 1:40 PM
        • 1 / 1
        • First post
          Last post

        170

        Online

        12.0k

        Users

        17.3k

        Topics

        155.2k

        Posts
        Copyright © 2012-2024 FOG Project