API - Create Host Deploy Task "error": "Invalid tasking type passed"



  • After Creating hosts and Assigning the image now trying to create a deploy task. I am getting “Invalid tasking type passed” This is what i am running:

    $TaskURL = $baseUri + "/host/" + $HostID + "/task"
            $TaskdataSet = @{
                "imageID" = $Image.id
                "type" = "1"
                "typeID" = $TasktypeID
                "stateID" = 1
                }
            $taskdataToSend = ConvertTo-JSON($TaskdataSet)
            $TaskResult = Invoke-RestMethod -Method Post -Uri $TaskURL -Headers $headers  -Body $taskdataToSend -ContentType "application/json"
    

  • Moderator

    #wiki worthy



  • Figured this out, I hope it helps someone out… this PS Script creates a Host and then creates a deploy task to the Image specified when the host was created.

    $vmname = "vmname"
    $MacAddress = "00:00:00:00:00:00"
    $ImageName = "ImageName"
    
    #######################################################################################################################
    # Configure the variables below for the Fog Server
    #######################################################################################################################
        #FogServer
            $fogApiToken = 'your token'
            $fogUserToken = 'your user token'
            $fogServer = "fog server IP or dns name"
            $Description = "Created by vCommander"   # www.embotics.com
        
    ########################################################################################################################
    # Nothing to configure below this line - Starting the main function of the script
    ########################################################################################################################
    
    ########################################################################################################################
    # Setting Cert Policy - required for successful auth with the server 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
            $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}
           
    
        #GetHost List from fog Server
            $HostURL = $baseUri +"/host/"
            $HostResult = Invoke-RestMethod -Uri $HostURL -Method GET -Headers $headers -ContentType "application/json"
    
        #Create Host entry from vCommander
           $HostJson = @{
                               "name"=  $vmname
                               "description"=  $Description
                               "macs" =  @($MacAddress)
                               "imageID"= $Image.id
                               "imagename" =  $ImageName  
                               }
            $CreateHostJson = ConvertTo-Json($HostJson)
            $createHostURL = $baseUri +"/host/create"
            $createHostResult = Invoke-RestMethod -Uri $createHostURL -Method POST -body $CreateHostJson -Headers $headers -ContentType "application/json"
    
        #Get Task types to confirm Structure
             $TasktypesURL = $baseUri + "/tasktype"
             $TasktypesResult = Invoke-RestMethod -Uri $TasksURL -Method GET -Headers $headers -ContentType "application/json"
             $TasktypeID = ($TasktypesResult.tasktypes | Select-object name,id | Where-object {$_.name -eq "Deploy"}).id
    
        #Create Task to Image Host    
            $ImageID = $image.id
            $HostID = $createHostResult.id  
    
            $TaskURL = $baseUri + "/host/" + $HostID + "/task"
            $TaskdataSet = @{
                "hostname" = $createHostResult.name
                "taskTypeID" = $TasktypeID
                }
            $taskdataToSend = ConvertTo-JSON($TaskdataSet)
            $TaskResult = Invoke-RestMethod -Method Post -Uri $TaskURL -Headers $headers -Body $taskdataToSend -ContentType "application/json"
    


  • @george1421
    Correct, this will be API specific and I am getting the ID of the Deploy task type form another api call. the raw json I am passing is this:

    {
        "typeID":  "1",
        "imageID":  "1",
        "type":  "1",
        "stateID":  1
    }
    

    I saw a Sample to run a single Snapin Task as :

    since I am only running a Deploy Task I would assume to meed the hostID in the URL as i am

    http://10.10.12.24/fog/host/12/task
    

    my ImageID is 1 since it’s the first one I have created and type is 1 for Deploy task… I was just guessing at TypeID and StateID.


  • Moderator

    looking at the API docs, I’m not sure but you might be in the wrong tree to create a new task??

    https://news.fogproject.org/simplified-api-documentation/

    specifically

    2. /fog/<object>/create Create new object. 
    

    but again I can only guess.


  • Moderator

    @scottybullet Ok (first I’m a db guy not an api guy, so everything I see is sql).

    If you look at the table def. There is no type but there is a taskTypeID which appears to be a foreign key to the taskType table.

    +---------------+-----------------------------+------+-----+---------+----------------+
    | Field         | Type                        | Null | Key | Default | Extra          |
    +---------------+-----------------------------+------+-----+---------+----------------+
    | ttID          | mediumint(9)                | NO   | PRI | NULL    | auto_increment |
    | ttName        | varchar(30)                 | NO   | UNI | NULL    |                |
    | ttDescription | text                        | NO   |     | NULL    |                |
    | ttIcon        | varchar(30)                 | NO   |     | NULL    |                |
    | ttKernel      | varchar(100)                | NO   |     | NULL    |                |
    | ttKernelArgs  | text                        | NO   |     | NULL    |                |
    | ttType        | enum('fog','user')          | NO   |     | user    |                |
    | ttIsAdvanced  | enum('0','1')               | NO   |     | 0       |                |
    | ttIsAccess    | enum('both','host','group') | NO   |     | both    |                |
    +---------------+-----------------------------+------+-----+---------+----------------+
    
    

    If you run the command select ttID, ttName, ttType from taskTypes; this is the results

    +------+-------------------------+--------+
    | ttID | ttName                  | ttType |
    +------+-------------------------+--------+
    |    1 | Deploy                  | fog    |
    |    2 | Capture                 | fog    |
    |    3 | Debug                   | fog    |
    |    4 | Memtest86+              | fog    |
    |    5 | Test Disk               | fog    |
    |    6 | Disk Surface Test       | fog    |
    |    7 | Recover                 | fog    |
    |    8 | Multi-Cast              | fog    |
    |   10 | Hardware Inventory      | fog    |
    |   11 | Password Reset          | fog    |
    |   12 | All Snapins             | fog    |
    |   13 | Single Snapin           | fog    |
    |   14 | Wake-Up                 | fog    |
    |   15 | Deploy - Debug          | fog    |
    |   16 | Capture - Debug         | fog    |
    |   17 | Deploy - No Snapins     | fog    |
    |   18 | Fast Wipe               | fog    |
    |   19 | Normal Wipe             | fog    |
    |   20 | Full Wipe               | fog    |
    |   21 | Virus Scan              | fog    |
    |   22 | Virus Scan - Quarantine | fog    |
    +------+-------------------------+--------+
    
    

    What I don’t know from the API side is type the ttID value or the ttType.



  • This is what a qued deploy task looks like from the api:

    
    id                 : 2
    name               : Deploy Task
    checkInTime        : 0000-00-00 00:00:00
    hostID             : 2
    stateID            : 1
    createdTime        : 2017-12-06 18:35:47
    createdBy          : fog
    isForced           : 0
    scheduledStartTime : 0000-00-00 00:00:00
    typeID             : 1
    pct                : 0000000000
    bpm                : 
    timeElapsed        : 
    timeRemaining      : 
    dataCopied         : 
    percent            : 
    dataTotal          : 
    storagegroupID     : 1
    storagenodeID      : 1
    NFSFailures        : 
    NFSLastMemberID    : 0
    shutdown           : 
    passreset          : 
    isDebug            : 0
    imageID            : 1
    wol                : 1
    image              : @{imageTypeID=1; imagePartitionTypeID=1; id=1; name=Ubuntu1604minimal; description=Base Ubuntu 16.04 Image; path=Ubuntu1604minimal; createdTime=2017-12-06 15:07:51; createdBy=fog; building=0; size=60477440.000000:20961034240.000000:; 
                         osID=50; deployed=2017-12-06 15:55:46; format=0; magnet=; protected=0; compress=6; isEnabled=1; toReplicate=1; srvsize=984037345; os=; imagepartitiontype=; imagetype=; imagetypename=Single Disk - Resizable; 
                         imageparttypename=Everything; osname=Linux; storagegroupname=default; hosts=System.Object[]; storagegroups=System.Object[]}
    host               : @{id=2; name=005056a47ffc; description=Created by FOG Reg on December 6, 2017, 3:37 pm; ip=; imageID=1; building=0; createdTime=2017-12-06 15:37:39; deployed=0000-00-00 00:00:00; createdBy=fog; useAD=; ADDomain=; ADOU=; ADUser=; 
                         ADPass=; ADPassLegacy=; productKey=; printerLevel=; kernelArgs=; kernel=; kernelDevice=; init=; pending=; pub_key=; sec_tok=; sec_time=0000-00-00 00:00:00; pingstatus=<i class="icon-ping-down fa fa-exclamation-circle red fa-1x" 
                         title="No such device or address"></i>; biosexit=; efiexit=; enforce=; primac=00:50:56:a4:7f:fc; imagename=Ubuntu1604minimal; hostscreen=; hostalo=; inventory=; macs=System.Object[]}
    type               : @{id=1; name=Deploy; description=Deploy action will send an image saved on the FOG server to the client computer with all included snapins.; icon=download; kernel=; kernelArgs=type=down; type=fog; isAdvanced=0; access=both}
    state              : @{id=1; name=Queued; description=Task has been created and FOG is waiting for the Host to check-in.; order=1; icon=bookmark-o}
    storagenode        : @{id=1; name=DefaultMember; description=Auto generated fog nfs group member; isMaster=1; storagegroupID=1; isEnabled=1; isGraphEnabled=1; path=/images/; ftppath=/images/; bitrate=; snapinpath=/opt/fog/snapins; 
                         sslpath=/opt/fog/snapins/ssl; ip=10.10.12.24; maxClients=10; user=fog; pass=I1MKdP3eIKFmA4jgrbHjO9+J3LohoizYUag9qOqj4Rg=; key=; interface=ens160; bandwidth=0; webroot=/fog/; storagegroup=}
    storagegroup       : @{id=1; name=default; description=Auto generated fog nfs group}
    

  • Moderator

    I can only shoot in the dark here since I have not personally used the API. But I think the API in this case is referencing the tasks table in mysql. If that is the case, I don’t see a “type” field in the table. I don’t know if there is a one for one relationship between the API json request and the database table.

    +------------------------+---------------------------+------+-----+-------------------+----------------+
    | Field                  | Type                      | Null | Key | Default           | Extra          |
    +------------------------+---------------------------+------+-----+-------------------+----------------+
    | taskID                 | int(11)                   | NO   | PRI | NULL              | auto_increment |
    | taskName               | varchar(250)              | NO   |     | NULL              |                |
    | taskCreateTime         | timestamp                 | NO   |     | CURRENT_TIMESTAMP |                |
    | taskCheckIn            | datetime                  | NO   | MUL | NULL              |                |
    | taskHostID             | int(11)                   | NO   | MUL | NULL              |                |
    | taskImageID            | int(11)                   | NO   |     | NULL              |                |
    | taskStateID            | int(11)                   | NO   | MUL | NULL              |                |
    | taskIsDebug            | mediumint(9)              | NO   |     | NULL              |                |
    | taskCreateBy           | varchar(200)              | NO   |     | NULL              |                |
    | taskForce              | varchar(1)                | NO   | MUL | NULL              |                |
    | taskScheduledStartTime | datetime                  | NO   |     | NULL              |                |
    | taskTypeID             | mediumint(9)              | NO   | MUL | NULL              |                |
    | taskPCT                | int(10) unsigned zerofill | NO   |     | NULL              |                |
    | taskBPM                | varchar(250)              | NO   |     | NULL              |                |
    | taskTimeElapsed        | varchar(250)              | NO   |     | NULL              |                |
    | taskTimeRemaining      | varchar(250)              | NO   |     | NULL              |                |
    | taskDataCopied         | varchar(250)              | NO   |     | NULL              |                |
    | taskPercentText        | varchar(250)              | NO   |     | NULL              |                |
    | taskDataTotal          | varchar(250)              | NO   |     | NULL              |                |
    | taskNFSGroupID         | int(11)                   | NO   | MUL | NULL              |                |
    | taskNFSMemberID        | int(11)                   | NO   | MUL | NULL              |                |
    | taskNFSFailures        | char(1)                   | NO   | MUL | NULL              |                |
    | taskLastMemberID       | int(11)                   | NO   | MUL | NULL              |                |
    | taskWOL                | enum('0','1')             | NO   |     | NULL              |                |
    | taskPassreset          | varchar(250)              | NO   |     | NULL              |                |
    | taskShutdown           | char(1)                   | NO   |     | NULL              |                |
    +------------------------+---------------------------+------+-----+-------------------+----------------+
    

Log in to reply
 

457
Online

39.4k
Users

11.1k
Topics

105.4k
Posts

Looks like your connection to FOG Project was lost, please wait while we try to reconnect.