Using the Embotics® vCommander™ REST API, you can interact with the Service Catalog using several methods. For each method, one or more powershell examples are provided.


GET Method

 

Get All Published Services 

 

$collection = Get-PublishedServices

 

Get Published Service by ID

  

$ps = Get-PublishedServiceById -psId 24555

 

 

Get Published Service by Name

 

$ps = Get-PublishedServiceByName -name "Service #1"

 


NEW Method

 

Create a Published Service 

#Assuming you have a VM with this name
$vm = Get-VMs -vmName "TestVM_catalogueEntry"
$psDTO = New-DTOTemplateObject -DTOTagName "PublishedService"

#Create a published service component, backed by a VM inventory
$psc = New-DTOTemplateObject -DTOTagName "PublishedServiceComponent"
$psc.PublishedServiceComponent.ref.id = $vm.VirtualMachineCollection.VirtualMachines[0].id
$psc.PublishedServiceComponent.ref.type = $vm.VirtualMachineCollection.VirtualMachines[0].type

#To add instance types (for public clouds)
#$allInstanceTypes = Get-VMInstanceTypesByManagementServerType -mstype "HP_CLOUD"
#$xsmallInstanceType = $allInstanceTypes.VMInstanceTypeCollection.VMInstanceTypes | Where-Object
{$_.name -match "standard.xsmall"}
#$smallInstance = $allInstanceTypes.VMInstanceTypeCollection.VMInstanceTypes | Where-Object {$_.name
-match "standard.small"}
#$instanceTypes = ($xsmallInstanceType.instanceType,$smallInstance.instanceType)
#Add-Member -InputObject $psc.PublishedServiceComponent -MemberType NoteProperty -Name "instanceTypes"
-Value $instanceTypes -Force

$psDTO.PublishedService.serviceComponents = @()
$psDTO.PublishedService.serviceComponents += $psc.PublishedServiceComponent

#Create a user; the only information we need is the loginId
$userDTO = New-DTOTemplateObject -DTOTagName "OwnerInfo"
$userDTO.OwnerInfo.id = -1
$userDTO.OwnerInfo.loginId = "superuser"
$userDTO.OwnerInfo.itContact = $false
$userDTO.OwnerInfo.primary = $false
$userDTO.OwnerInfo.email = $null
$userDTO.OwnerInfo.displayName = $null

#Clear out user(s); add new one we just created
$psDTO.PublishedService.serviceUsers = @()
$psDTO.PublishedService.serviceUsers += $userDTO.OwnerInfo

$createPS = New-PublishedService -psDto $psDTO

 

Create a Published Service from Azure


 

#set variables
$source_component_name = “azure-img-1″
$assigned_user = “Jim”
$published_service_name = “azure catalog item”
$availabilityset_name = “as1″
#Lookup source
$vm = Get-VMs -vmName $source_component_name
#Create a published service component DTO, backed by the VM we just found
$pscDTO = New-DTOTemplateObject -DTOTagName “PublishedServiceComponent”
$pscDTO.PublishedServiceComponent.name = $vm.VirtualMachineCollection.VirtualMachines[0].name
$pscDTO.PublishedServiceComponent.ref.displayName = $vm.VirtualMachineCollection.VirtualMachines[0].displayName
$pscDTO.PublishedServiceComponent.ref.id = $vm.VirtualMachineCollection.VirtualMachines[0].id
$pscDTO.PublishedServiceComponent.ref.type = $vm.VirtualMachineCollection.VirtualMachines[0].type
#Lookup all Azure instance types
$allInstanceTypes = Get-VMInstanceTypesByManagementServerType -mstype “MS_AZURE”
#Select only the first one (Basic_A0)
Add-Member -InputObject $pscDTO.PublishedServiceComponent -MemberType NoteProperty -Name “instanceTypes” -Value $allInstanceTypes.VMInstanceTypeCollection.VMInstanceTypes[0].instanceType -Force
#Add availability set
Add-Member -InputObject $pscDTO.PublishedServiceComponent -MemberType NoteProperty -Name “availabilitySet” -Value $availabilityset_name -Force
#Add endpoints
$endpoint1 = New-DTOTemplateObject -DTOTagName “VMEndpoint”
$endpoint1.VMEndpoint.name = “SSH”
$endpoint1.VMEndpoint.privatePort = “22”
$endpoint1.VMEndpoint.protocol = “tcp”
$endpoint1.VMEndpoint.publicPort = “33”
$endpoint2 = New-DTOTemplateObject -DTOTagName “VMEndpoint”
$endpoint2.VMEndpoint.name = “Custom Endpoint”
$endpoint2.VMEndpoint.privatePort = “54321”
$endpoint2.VMEndpoint.protocol = “udp”
$endpoint2.VMEndpoint.publicPort = $null #Set to null to have the public port be AUTO
$endpoints = @($endpoint1.VMEndpoint, $endpoint2.VMEndpoint)
Add-Member -InputObject $pscDTO.PublishedServiceComponent -MemberType NoteProperty -Name “endpoints” -Value $endpoints -Force
#Create a published service DTO and add the component to it
$psDTO = New-DTOTemplateObject -DTOTagName “PublishedService”
$psDTO.PublishedService.name = $published_service_name
$psDTO.PublishedService.deployType = “VAPP” #Configure to deploy as vApp
$psDTO.PublishedService.serviceComponents = @()
$psDTO.PublishedService.serviceComponents += $pscDTO.PublishedServiceComponent
#Create a user DTO; the only information we need is the loginId
$userDTO = New-DTOTemplateObject -DTOTagName “OwnerInfo”
$userDTO.OwnerInfo.loginId = $assigned_user
#Clear out user(s); add new one we just created
$psDTO.PublishedService.serviceUsers = @()
$psDTO.PublishedService.serviceUsers += $userDTO.OwnerInfo
#Add the service to the service catalog
$createPS = New-PublishedService -psDto $psDTO 


Create a Published Service from VMware

 

##### Creating a VMWare service
# Single component
# Have request attributes tie to component
#Locate the VM to use as published service component
$vms = Get-VMs -vmName “DevVM – 001″
$vm = $vms.VirtualMachineCollection.VirtualMachines[0]
#Create a published service component template
$psDTO = New-DTOTemplateObject -DTOTagName “PublishedService”
#Create a published service component, backed by a VM inventory
$psc = New-DTOTemplateObject -DTOTagName “PublishedServiceComponent”
$psc.PublishedServiceComponent.ref.id = $vm.id
$psc.PublishedServiceComponent.ref.type = $vm.type
$psDTO.PublishedService.serviceComponents = @()
$psDTO.PublishedService.serviceComponents += $psc.PublishedServiceComponent
#Create a user; the only information we need is the loginId
$userDTO = New-DTOTemplateObject -DTOTagName “OwnerInfo”
$userDTO.OwnerInfo.id = -1
$userDTO.OwnerInfo.loginId = “superuser”
$userDTO.OwnerInfo.itContact = $false
$userDTO.OwnerInfo.primary = $false
$userDTO.OwnerInfo.email = $null
$userDTO.OwnerInfo.displayName = $null
#Clear out user(s); add new one we just created
$psDTO.PublishedService.serviceUsers = @()
$psDTO.PublishedService.serviceUsers += $userDTO.OwnerInfo
$vmRequestAttribute1Template = New-DTOTemplateObject -DTOTagName “VMRequestAttribute”
$vmRequestAttribute2Template = New-DTOTemplateObject -DTOTagName “VMRequestAttribute”
$vmRequestAttribute3Template = New-DTOTemplateObject -DTOTagName “VMRequestAttribute”
#Attributes for the service component
$vmRequestAttribute1Template.VMRequestAttribute.attributeName = “SLA”
$vmRequestAttribute1Template.VMRequestAttribute.value = “Gold”
$vmRequestAttribute2Template.VMRequestAttribute.attributeName = “Cost Center”
$vmRequestAttribute2Template.VMRequestAttribute.value = “Toronto CS”
$vmRequestAttribute3Template.VMRequestAttribute.attributeName = “Primary Application”
$vmRequestAttribute3Template.VMRequestAttribute.value = “CIS App”
#Add the request attributes to service component
$requestAttributes = @($vmRequestAttribute1Template.VMRequestAttribute, $vmRequestAttribute2Template.VMRequestAttribute, $vmRequestAttribute3Template.VMRequestAttribute)
Add-Member -InputObject $psc.PublishedServiceComponent.serviceComponentSettings -MemberType NoteProperty -Name “requestAttributes” -Value $requestAttributes -Force
#Create the published service
$createPS = New-PublishedService -psDto $psDTO

 


Create a Published Service with Fencing from VMware

 

Port forwarding, external address via IP pool, DHCP

 

#Locate the VM to use as published servie component
$vms = Get-VMs -vmName “DevVM – 001″
$vm = $vms.VirtualMachineCollection.VirtualMachines[0]
#Create a published service component template
$psDTO = New-DTOTemplateObject -DTOTagName “PublishedService”
#Create a published service component, backed by a VM inventory
$psc = New-DTOTemplateObject -DTOTagName “PublishedServiceComponent”
$psc.PublishedServiceComponent.ref.id = $vm.id
$psc.PublishedServiceComponent.ref.type = $vm.type
$psDTO.PublishedService.serviceComponents = @()
$psDTO.PublishedService.serviceComponents += $psc.PublishedServiceComponent
#Create a user; the only information we need is the loginId
$userDTO = New-DTOTemplateObject -DTOTagName “OwnerInfo”
$userDTO.OwnerInfo.id = -1
$userDTO.OwnerInfo.loginId = “superuser”
$userDTO.OwnerInfo.itContact = $false
$userDTO.OwnerInfo.primary = $false
$userDTO.OwnerInfo.email = $null
$userDTO.OwnerInfo.displayName = $null
#Clear out user(s); add new one we just created
$psDTO.PublishedService.serviceUsers = @()
$psDTO.PublishedService.serviceUsers += $userDTO.OwnerInfo
#Grab one of the VM nics
$vmNic1 = $vm.networkCards | Where-Object {$_.label -eq “Network adapter 1″}
#Setup network fencing service properties
$psDTO.PublishedService.fenced = $true
$psDTO.PublishedService.internalRouterIp = “192.168.1.1”
$psDTO.PublishedService.externalRouterStaticallyAssigned = $true
#Setup port forward pairs
$portForwardPairTemplate1 = New-DTOTemplateObject -DTOTagName “PortForwardPair”
$portForwardPairTemplate1.PortForwardPair.publicPort = 80
$portForwardPairTemplate1.PortForwardPair.privatePort = 8080
$portForwardPairTemplate2 = New-DTOTemplateObject -DTOTagName “PortForwardPair”
$portForwardPairTemplate2.PortForwardPair.publicPort = 443
$portForwardPairTemplate2.PortForwardPair.privatePort = 8443
#Setup component NIC parameters
$componentNICTemplate = New-DTOTemplateObject -DTOTagName “PublishedServiceComponentNIC”
$componentNICTemplate.PublishedServiceComponentNIC.accessMode = “OUT_ONLY”
$componentNICTemplate.PublishedServiceComponentNIC.addressMode=”DHCP”
$componentNICTemplate.PublishedServiceComponentNIC.mac = $vmNic1.macAddress
$componentNICTemplate.PublishedServiceComponentNIC.hostName=””
$componentNICTemplate.PublishedServiceComponentNIC.portForwardPairs=@($portForwardPairTemplate1.PortForwardPair, $portForwardPairTemplate2.PortForwardPair)
#Add the component nic to the published service component
Add-Member -InputObject $psc.PublishedServiceComponent -MemberType NoteProperty -Name “componentNics” -Value @($componentNICTemplate.PublishedServiceComponentNIC) -Force
#Create the published service
$createPS = New-PublishedService -psDto $psDTO

 

No port forwarding, external address via DHCP, static assign address mode

 

#Locate the VM to use as published service component
$vms = Get-VMs -vmName “DevVM – 001″
$vm = $vms.VirtualMachineCollection.VirtualMachines[0]
#Create a published service component template
$psDTO = New-DTOTemplateObject -DTOTagName “PublishedService”
#Create a published service component, backed by a VM inventory
$psc = New-DTOTemplateObject -DTOTagName “PublishedServiceComponent”
$psc.PublishedServiceComponent.ref.id = $vm.id
$psc.PublishedServiceComponent.ref.type = $vm.type
$psDTO.PublishedService.serviceComponents = @()
$psDTO.PublishedService.serviceComponents += $psc.PublishedServiceComponent
#Create a user; the only information we need is the loginId
$userDTO = New-DTOTemplateObject -DTOTagName “OwnerInfo”
$userDTO.OwnerInfo.id = -1
$userDTO.OwnerInfo.loginId = “superuser”
$userDTO.OwnerInfo.itContact = $false
$userDTO.OwnerInfo.primary = $false
$userDTO.OwnerInfo.email = $null
$userDTO.OwnerInfo.displayName = $null
#Clear out user(s); add new one we just created
$psDTO.PublishedService.serviceUsers = @()
$psDTO.PublishedService.serviceUsers += $userDTO.OwnerInfo
#Grab one of the VM nics
$vmNic1 = $vm.networkCards | Where-Object {$_.label -eq “Network adapter 1″}
#Setup network fencing service properties
$psDTO.PublishedService.fenced = $true
$psDTO.PublishedService.internalRouterIp = “192.168.1.1”
$psDTO.PublishedService.externalRouterStaticallyAssigned = $false
#Setup component NIC parameters
$componentNICTemplate = New-DTOTemplateObject -DTOTagName “PublishedServiceComponentNIC”
$componentNICTemplate.PublishedServiceComponentNIC.accessMode = “OUT_ONLY”
$componentNICTemplate.PublishedServiceComponentNIC.addressMode=”STATIC_PUSH”
$componentNICTemplate.PublishedServiceComponentNIC.staticIp = “192.168.1.2”
$componentNICTemplate.PublishedServiceComponentNIC.mac = $vmNic1.macAddress
$componentNICTemplate.PublishedServiceComponentNIC.hostName=”test”
$componentNICTemplate.PublishedServiceComponentNIC.portForwardPairs=@()
#Add the component nic to the published service component
Add-Member -InputObject $psc.PublishedServiceComponent -MemberType NoteProperty -Name “componentNics” -Value @($componentNICTemplate.PublishedServiceComponentNIC) -Force
#Create the published service
$createPS = New-PublishedService -psDto $psDTO

 

UPDATE Method

 

Update Published Service Name

 

$existingPS = Get-PublishedServiceByName -name “Published Service #1″
$existingPS.PublishedService.name = “New Name”
$updatedPublishedService = Update-PublishedService -psId $existingPS.PublishedService.id -updatePs $existingPS

 


Change Published Service Instance Type

 

#Changing instance types
$existingPS = Get-PublishedServiceByName -name “Published Service #1″
$serviceComponent = $existingPS.PublishedService.serviceComponents | Where-Object {$_.name -match “Windows 2008 R2 – webserver”}
#Dealing with instances type
#$allInstanceTypes = Get-VMInstanceTypesByManagementServerType -mstype “HP_CLOUD”
#$xsmallInstanceType = $allInstanceTypes.VMInstanceTypeCollection.VMInstanceTypes | Where-Object {$_.name -match “standard.xsmall”}
#$smallInstance = $allInstanceTypes.VMInstanceTypeCollection.VMInstanceTypes | Where-Object {$_.name -match “standard.small”}
#Override with said instance types
#$serviceComponent.instanceTypes =@($xsmallInstanceType.instanceType,$smallInstance.instanceType)
#or add to
#$serviceComponent.instanceTypes +=($xsmallInstanceType.instanceType,$smallInstance.instanceType)
$updatedPublishedService = Update-PublishedService -psId $existingPS.PublishedService.id -updatePs $existingPS

 

Remove Method

 

Delete a Published Service By ID

 

Remove-PublishedService -psId 304299