• 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

      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 Reply Quote 1
      • Wayne WorkmanW
        Wayne Workman
        last edited by

        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

          @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
          • 1 / 1
          • First post
            Last post

          155

          Online

          12.0k

          Users

          17.3k

          Topics

          155.2k

          Posts
          Copyright © 2012-2024 FOG Project