VMware Horizon Community
ntrippcig
Contributor
Contributor

Horizon REST Call: /inventory/v1/desktop-pools/{id}/action/add-machines

Making a call and I have the pool ID correct and post the body in JSON:

[
  {
    "name""XXXXXXXXX",
    "user_id""S-XXXXXXXXXXXX"
  }
]
 
get this response:
{
    "status""BAD_REQUEST",
    "timestamp"1635764411101,
    "error_message""Desktop pool should be specified naming type"
}
 
Documentation says to send exactly what I am sending. What gives? what is this "Desktop pool should be specified naming type"
Reply
0 Kudos
21 Replies
chrisdhalstead
VMware Employee
VMware Employee

You should be only passing an array of machine ids to add to the pool.  You appear to be posting user details?

https://developer.vmware.com/apis/1169#/Inventory/addMachines 

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
ntrippcig
Contributor
Contributor

How about add-machines-by-name:

/inventory/v1/desktop-pools/{id}/action/add-machines-by-name

That's actually what I was trying first.  I don't see any other calls that can do the user assignment.  

Reply
0 Kudos
chrisdhalstead
VMware Employee
VMware Employee

Are you looking to entitle manual pools or automated pools?

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
Reply
0 Kudos
ntrippcig
Contributor
Contributor

it's a manual persistent pool.  Users have been connecting to these desktops remotely over vpn/rdp and want to keep the desktop but start using Horizon.  They are entitled to the pool by group but I want to add the machine and assign a user to a specific machine because that's where their profiles and apps are. 

Reply
0 Kudos
chrisdhalstead
VMware Employee
VMware Employee

Got it - let me see if there is a REST API for that.  It may only be available with PowerCLI

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
Tags (1)
Reply
0 Kudos
chrisdhalstead
VMware Employee
VMware Employee

This endpoint should do it:

​/inventory​/v1​/machines​/{id}​/action​/assign-users

 

 

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
Reply
0 Kudos
ntrippcig
Contributor
Contributor

I just tried the add-machines call and that is complaining that the machine is not found in the VC:

 

  {
        "id""XXX",
        "status_code"404,
        "error_messages": [
            "Could not find machine on VC"
        ],
        "timestamp"1635870204537
    }
]
 
I've tried by VM name and by the VM ID in vcenter. Is there some other designation I should be using? When I click add in vcenter they are there. 
Reply
0 Kudos
chrisdhalstead
VMware Employee
VMware Employee

It should be this endpoint:  

​/inventory​/v1​/machines​/{id}​/action​/assign-users

You need to get the machine ID from:  ​/inventory​/v1​/machines

 

 

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
Reply
0 Kudos
ntrippcig
Contributor
Contributor

That does return list of machines, but only ones that are already registered in pools.

Reply
0 Kudos
chrisdhalstead
VMware Employee
VMware Employee

Are you trying to add physical machines with the Horizon Agent to a manual pool and then assign users to it?    What type of machine are you trying to add to the manual pool?

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
Reply
0 Kudos
ntrippcig
Contributor
Contributor

VMWare VMs in vcenter the connection servers are connected to

Reply
0 Kudos
chrisdhalstead
VMware Employee
VMware Employee

ok make sure the VMs have a Horizon Agent installed.

Where do you see these machines in the Horizon console today? 

Are they under Inventory | Machines 

or 

Settings | Registered Machines

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
Reply
0 Kudos
ntrippcig
Contributor
Contributor

Agent is installed. The machines don't show in Inventory or Registered machines. I can Add from GUI so I am looking for the REST call to replicate that GUI function. 

Reply
0 Kudos
chrisdhalstead
VMware Employee
VMware Employee

what GUI are you talking about?  The Horizon console?

Are you talking about adding vCenter machines into a manual pool this way?

Screen Shot 2021-11-04 at 4.52.48 PM.png

Chris Halstead
Senior Staff Architect, EUC Technical Marketing
chalstead@vmware.com
Twitter: @chrisdhalstead
Reply
0 Kudos
ntrippcig
Contributor
Contributor

Says I do not have perms to upload images. Desktops -> manual pool -> add

Reply
0 Kudos
ntrippcig
Contributor
Contributor

I have the registration working but assigning users is failing

 

$desktop = Invoke-RestMethod "$($connectionservers)/rest/external/v1/virtual-machines?vcenter_id=$($vcenter_id)" -Method 'GET' -Headers $headers 
$desktop = $desktop | where-object {$_.name -eq $computer}
$pools = Invoke-RestMethod "$($connectionservers)/rest/inventory/v1/desktop-pools" -Method 'GET' -Headers $headers 
$pool_id = ($pools | Where-Object {$_.name -like $pool}).id
$desktopJ = "[
    $($desktop.id | ConvertTo-Json)
    ]"
$machineRegister = Invoke-RestMethod "$($connectionservers)/rest/inventory/v1/desktop-pools/$($pool_id)/action/add-machines" -Method "POST" -Headers $headers -Body ($desktopJ)
Invoke-RestMethod "$($connectionservers)/rest/inventory/v1/machines/$($machineRegister.id)/action/assign-users" -Method "POST" -Body "[`"XXXXXXXXXXXXXXXXXXXXX`"]"
Invoke-RestMethod: 
VMware Horizon
        function toggleError()
        {
            var errorElement = document.getElementById('errorDetails');
            if (errorElement && errorElement.style.display == 'none')
            {
                errorElement.style.display="block";
            }
            else
            {
                errorElement.style.display="none";
            }
        }
        function escapeHTML (str)
        {
            var div = document.createElement('div');
            var text = document.createTextNode(str);
            div.appendChild(text);
            return div.innerHTML;
        }







Error: Unsupported Media Type
The page you requested is not available.
        var url = escapeHTML(location.href);
        if (url.indexOf("http:") == 0 && 415 == "404") {
                document.write(" Try HTTPS instead.");
        }
Show Details
    Error code: 415
Reply
0 Kudos
pillayar
Contributor
Contributor

Did you get this to work? I am in a similar situation - need to add VMs to manual desktop and couldn't figure out where to get the machineID, as the VMs are not registered yet to any pools.

Reply
0 Kudos
JanBolk
Contributor
Contributor

Hello, 

do you find a solution? I've got the same problem. 😞

Reply
0 Kudos
RetouwNL
Enthusiast
Enthusiast

you need to get the machine id from /external/v1/virtual-machines



Previously known as Magneet or Magneet_NL, does things with Horizon api's, see www.retouw.nl