11 Oracle Compute REST APIs

This chapter describes the different REST APIs and covers the following:

11.1 Using the REST API Tool

To use the REST API tool, follow these steps:

  1. Use REST tool (for example Chrome's Postman plugin) to visit the Oracle Compute web service. The Oracle Compute web service entry is https://hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure. Before you call the API, you must use a trusted Enterprise Manager certificate.

  2. Set the authorization header, using Basic Auth, enter the Enterprise Manager username and password, and click Refresh Header.

  3. Set the Accept or Content-Type header value to application/json to perform the request.

The following table describes the REST HTTP methods you can use for OPCM objects:

Table 11-1 Rest HTTP Methods

Method Description

POST

Creates an object by using the JSON-formatted data in the request body.

GET

Retrieves information about the object/s specified in the request URI.

PUT

Updates the attributes of an object by using the JSON-formatted data in the request body.

DELETE

Deletes the object specified in the request URI.

11.2 Overview of REST Resources

This section provides an overview of the REST resources.

Table 11-2 REST Resources for Target Type

Target Type URL

Oracle Compute Site

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites

Cluster

/em/websvcs/restful/extws/virtualization/infrastructure/v1/clusters

Virtual Platform

/em/websvcs/restful/extws/virtualization/infrastructure/v1/virtualplatforms

Virtual Server

/em/websvcs/restful/extws/virtualization/infrastructure/v1/virtualservers

Physical Server

/em/websvcs/restful/extws/virtualization/infrastructure/v1/physicalservers

Orchestration

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/services

Table 11-3 Network Resources of Site

Network Resource URL

ServiceNetwork

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/servicenetworks

vEthernet

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/vethernets

Subnet

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/vnets

IP Reservation

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/vnetreservations

Subnet Access

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/vnetaccess

Table 11-4 Storage Resources of Site

Storage Resource URL

StoragePool

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/storagepools

StorageVolume

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/storagevolumes

Table 11-5 Tenancy and Image Management Resources of Site

Resource URL Supported Operations Comments

Tenant

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/tenants

GET, POST, PUT

N/A

User

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/users

GET, POST, PUT, DELETE

N/A

Quota

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/quotas

GET, POST, PUT, DELETE

N/A

Image Templates

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/templates

GET, DELETE

N/A

Image Templates

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<SITE_ID>/templates/swlib

POST

API to add templates through the software library using the software library component URN.

Software Library Components

/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/swlibcomponents

GET

To get the component URN of uploaded software library components.

The cloud framework resources used to create and view service requests, service offerings, service types, and service instances that are required in orchestration.

Table 11-6 Cloud Framework Resources

CFW Resource URL Supported Operations Comments

Service Type

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/servicetypes/

GET

Not required for Orchestration but required to get the Service types. Look forORACLE_NIMBULA_ORCHESTRATION_SERVICE.

Services

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/services/

GET, POST

POST is used to create services (in this case orchestration).GET is used to retrieve service information like GUID that is required for POST requests.

Service Metadata

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/services/{serviceguid}/metadata

GET

Need to invoke this to get the Orchestration job parameters, and use them to build the request json to invoke Create Serivce.(POST of Services)

Service Instances

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/

GET

Gets all the instances for the logged in User, and is used to get the instance guid.

Service Instances

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/{instanceguid}

GET, PUT

GET instance details.PUT is used to execute the action on the Service Instance (requires action id)

Service Actions

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/{instanceguid}/actions/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/{instanceguid}/actions/{actionid}

GET

GET returns all the actions with action ids on the Service Instance.GET returns the action inputs needed to invoke the Action on the Service Instance.

Service Requests

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/servicerequests

GET

Gets the service requests.

Service Request

/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/servicerequests/{requestid}

GET, PUT, DELETE

GET gets the service request details.PUT reschedules the request.DELETE deletes the request.

11.3 Supported Use Cases

11.3.1 Orchestration Use Cases

11.3.1.1 Creating an Orchestration

To create an orchestration, you must make a set of calls using the CFW resources by following these steps:

  1. Call the Services to GET the Service GUID.

    URL: Refer the CFW table and prefix the https://Hostname:port to the url as follows:

    https://<hostname:port>/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/services/

    Input: None

    Output:

    {"name":"Services","type":"Service","totalResults":2,"cfwItems":[{"id":"1","nam
    e":"ORACLE_NIMBULA_ORCHESTRATION_
    TEMPLATE","displayName":"Orchestration","guid":"0E1D6A8E12B70BB5E05303B7F00AE6C
    0","serviceType":"ORACLE_NIMBULA_ORCHESTRATION
    _SERVICE","serviceFamily":"NIMBULA_INFRASTRUCTURE","description":"Create a set
    of Oracle VM instances with customized configuration for multi-tier
    applications","meta":"https://<hostname:port>/em/websvcs/restful/
    extws/cloudservices/ssa/cfw/v2/services/0E1D6A8E12B70BB5E05303B7F00AE6C0/metada
    ta","canonicalLink":{"href":"https://<hostname:port>/em/websvcs/restful/extws/
    cloudservices/ssa/cfw/v2/services/0E1D6A8E12B70BB5E05303B7F00AE6C0"}},{"id":"2
    ","name":"ORACLE_NIMBULA_SIMPLE_ORCHESTRATION_TEMPLATE","displayName":"Simple
    Orchestration","guid":"0E1D6A8E12BA0BB5E05303B7F00AE6C0","serviceType":"ORACLE
    _NIMBULA_ORCHESTRATION_SERVICE","serviceFamily":"NIMBULA
    _INFRASTRUCTURE","description":"Create one or more Oracle VM instances with
    default configuration and minimum
    inputs","meta":"https://<hostname:port>/em/websvcs/restful/extws/cloudservices
    /ssa/cfw/v2/services/0E1D6A8E12BA0BB5E05303B7F00AE6C0/metadata","canonicalLink
    ":{"href":"https://<hostname:port>/em/websvcs/restful/extws/cloudservices/ssa/
    cfw/v2/services/0E1D6A8E12BA0BB5E05303B7F00AE6C0"}}],"canonicalLink":{"href":"
    https://<hostname:port>/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serv
    ices"},"selfLink":{"href":"https://<hostname:port>/em/websvcs/restful/extws/cl
    oudservices/ssa/cfw/v2/services"}}
    
  2. Use the meta link from the above output to get the metadata for the service to form the input.

    URL: Specify the service metadata using the GUID from output in Step 1.

    Input: None

    Output:

    {"configurations":[{"name":"requestId","type":"STRING","description":"Cloud
    Framework Request ID","required":false,"secret":false},{"name":"orch_plan
    _swlib_urn","type":"STRING","description":"Orchestration Plan Software Library
    Component URN","required":false,"secret":false},{"name":"orch
    _plan","type":"LARGEDATA","description":"Orchestration
    Plan","required":false,"secret":false},{"name":"site
    _name","type":"STRING","description":"Oracle Nimbula
    Site","required":true,"secret":true}],"canonicalLink":{"href":"<hostname:port>
    /em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/services/0E1D6A8E12B70BB5E0
    5303B7F00AE6C0/metadata"},"selfLink":{"href":"https://<hostname:port>/em/websv
    cs/restful/extws/cloudservices/ssa/cfw/v2/services/0E1D6A8E12B70BB5E05303B7F00
    AE6C0/metadata"},"instanceName":"<user-input>"}
    

    To build the orch_plan.xml, refer to the XSD in Section 5.4, "References".

  3. Invoke the Create Orchestration Service Instance by building the input using the response parameters from Step 2.

    URL: Use Services URL with POST

    Input: Using the orchestration plan (orch_plan) as the input, build the XML using the values corresponding to the site like (Image List Name , Shape Name, Network, Storage, and so on). Repeat the same for all the ObjectPlans and specify the appropriate site_name value.

    XML

    {"offeringId": "0E1D6A8E12BA0BB5E05303B7F00AE6C0",
      "name": "/cloud/public/OrchtestUi","instanceName": "/cloud/public/OrchtestUi",
      "configurations":[{"name":"orch_plan","value":"<?xml version=&quot;1.0&quot; encoding=&quot;windows-1252&quot; standalone=&quot;yes&quot;?><ns2:ConfigurationData xmlns:ns2=&quot;http://www.oracle.com/sysman/vi/VIDeploymentPlan&quot; version=&quot;0.0.2&quot;><Type>NimbulaImage</Type><PassThroughMode>false</PassThroughMode><OrchestrationDeployment namePrefix=&quot;/cloud/public/OrchtestUi&quot;><InstallEMAgent>false</InstallEMAgent><ObjectPlanDependencyList/><ObjectPlanList><ObjectPlan label=&quot;Lp1&quot;><Type>launchplan</Type><HAPolicy value=&quot;none&quot;/><ObjectMemberList><ObjectMember xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:type=&quot;ns2:LaunchPlanMemberType&quot;><NumberOfInstances>1</NumberOfInstances><ImageList>/oracle/public/linux5_12.2.1.0.0_64</ImageList><ImageListEntry>1</ImageListEntry><DeploymentTarget><Name>slce03</Name><Type>oracle_nimbula_site</Type></DeploymentTarget><DefaultConfiguration><Label>Lp1</Label><ImageList >/oracle/public/linux5_12.2.1.0.0_64</ImageList><Shape><Name>mini</Name><Id>small</Id></Shape><Account/><Quota><Name>quota</Name></Quota><Priority>priority</Priority><Tags></Tags><PlacementRequirements></PlacementRequirements><HaEnabled>false</HaEnabled><Virtio>false</Virtio><Nics><NetworkInterface name=&quot;net0&quot; fromDefinition=&quot;false&quot;><VethernetId>/elcontrol/public/vnet-IPoIB-private</VethernetId></NetworkInterface></Nics><Disks/><Attributes/></DefaultConfiguration><Instances><VirtualMachine name=&quot;vm1&quot;customConfigured=&quot;false&quot;><InstallEMAgent>true</InstallEMAgent><CustomConfiguration><Label>vm1</Label><ImageList>/oracle/public/linux5_12.2.1.0.0_64</ImageList><Shape><Name>mini</Name><Id>mini</Id></Shape><Account/><Quota><Name>quota</Name></Quota><Priority>priority</Priority><Tags></Tags><PlacementRequirements></PlacementRequirements><HaEnabled>false</HaEnabled><Virtio>false</Virtio><Nics><NetworkInterface name=&quot;net0&quot; fromDefinition=&quot;false&quot;><Vnet>/elcontrol/public/vnet-IPoIB-private</Vnet></NetworkInterface></Nics><Disks ><diskname=&quot;disk1&quot;fromDefinition=&quot;false&quot;></disk></Disks><Attributes/></CustomConfiguration></VirtualMachine></Instances><AffinityRelationshipList/></ObjectMember></ObjectMemberList></ObjectPlan></ObjectPlanList></OrchestrationDeployment></ns2:ConfigurationData>"},{"name":"site_name","value":"nimbsite1"}]}
    

    Output: Service Request Id if the request is successful. If unsuccessful, use the Service Request URL to check the service request status.

11.3.1.2 Performing an Orchestration Action

Performing an orchestration action involves the following steps:

  1. Get the Instance ID.

    URL: Use the GET on Service Instances URL and append ?expanded=true -

    /em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances?expanded=true

    Input: None

    Output:

    {"name" : "Service Instances","type" : "Service Instance","totalResults" :
    1,"canonicalLink" : {"href"
    :"https:/hostname:port/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/servi
    ceinstances"},"cfwItems" : [{"name" : "del_2","guid" :
    "51087FBC61473C5477167DAAB6BD1871","serviceFamily" :"NIMBULA
    _INFRASTRUCTURE","serviceType" : "ORACLE_NIMBULA_ORCHESTRATION
    _SERVICE","status" : "STATUS_UP","canonicalLink" : {"href"
    :"https:/hostname:port/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/servi
    ceinstances/51087FBC61473C5477167DAAB6BD1871"}}]}
    
  2. Get the ID of the action to be performed.

    URL: Invoke Service Actions using GET

    https:/hostname:port/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/51087FBC61473C5477167DAAB6BD1871/actions

    Input: None

    Output:

    {"name":"Actions","type":"Action","totalResults":8,"cfwItems":[{"id":"2","name
    ":"DELETE","displayName":"Delete Orchestration","description":"Delete Nimbula
    Orchestration"},{"id":"4","name":"START","displayName":"Start
    Orchestration","description":"Start Oracle Compute
    Orchestration"},{"id":"5","name":"STOP","displayName":"Stop
    Orchestration","description":"Stop Oracle Compute
    Orchestration"},{"id":"6","name":"SHUTDOWNORCHESTRATION","displayName":"Shutdo
    wn Orchestration","description":"Shutdown Oracle Nimbula
    Orchestration"},{"id":"7","name":"RESTARTORCHESTRATION","displayName":"Restart
    Orchestration","description":"Restart Oracle Nimbula
    Orchestration"},{"id":"8","name":"DESTROYORCHESTRATION","displayName":"Destroy
    Orchestration","description":"Destroy Oracle Nimbula
    Orchestration"},{"id":"9","name":"UPDATEORCHESTRATION","displayName":"Update
    Orchestration","description":"Update Oracle Nimbula
    Orchestration"},{"id":"10","name":"SNAPSHOT","displayName":"Snapshot VM
    Instance","description":"Snapshot VM
    Instance"}],"canonicalLink":{"href":"/em/websvcs/restful/extws/cloudservices/s
    sa/cfw/v2/serviceinstances/51087FBC61473C5477167DAAB6BD1871/actions"},"selfLin
    k":{"href":"/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstance
    s/51087FBC61473C5477167DAAB6BD1871/actions"}}
    
  3. Get the inputs for the action

    URL: Invoke GET on Service Actions URL using the Action Id from the output in Step 2.

    /em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/E8E4395513C2B72F01D91E6DB46D1701/actions/2

    Input: None

    Output:

    {"id":"2","name":"DELETE","displayName":"Delete Orchestration","description":"Delete Oracle Compute Orchestration","actionInputs":[{"name":"requestId","type":"STRING","description":"Cloud Framework Request ID","displayName":"requestId","required":false,"secret":false},{"name":"instance_guids","type":"VECTOR","description":"Orchestration Target GUIDs","displayName":"instance_guids","required":false,"secret":false},{"name":"instance_names","type":"VECTOR","description":"Orchestration Target Names","displayName":"instance_names","required":true,"secret":false}],"canonicalLink":{"href":"http://hostname:port/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/E8E4395513C2B72F01D91E6DB46D1701/actions/2"},"selfLink":{"href":"http://hostname:port/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/E8E4395513C2B72F01D91E6DB46D1701/actions/2"}}
    
  4. Invoke the action. Prepare the Input for the action from the above output. As the above case requires four input parameters to perform this action, the request must contain the four elements {"actionId":2,"configurations":

    [{"name":"requestId", "value":"7"},{"name":"site_name","value":"site1"},{"name":"instance_names","value":["/hr/public/simple1"]},{"name":"instance_guids","value":["AC7F041E430A8B913D13B1F47E652580"]}]

    URL: Use PUT to invoke the action.

    /em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/serviceinstances/E8E4395513C2B72F01D91E6DB46D1701

    Input:

    {"actionId":2,"configurations":[{"name":"requestId", "value":"7"},{"name":"site_name","value":"site1"},{"name":"instance_names","value":["/hr/public/simple1"]}]}
    

    Output:

    {"requests": [{"id": "4","actionName": "DELETE","canonicalLink":
    

    {"href":"https://hostname:port/em/websvcs/restful/extws/cloudservices/ssa/cfw/v2/servicerequests/4"}}]}

    Check the status of the service request using the Service Request GET URL.

11.3.2 Service Network Use Cases

11.3.2.1 Create Service Network

Description: Post IPoIB service network JSON data.

Method: POST

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/servicenetworks

Input:

{
"name": "/cloud/public/svcnet",
"type": "IPoIB",
"description": "svcnet",
"foreign_partition": false,
"num_provider_nodes": 1
}

Output/Response:

{
"name": "/cloud/public/svcnet",
"id": "/cloud/public/svcnet",
"type": "ipoib",
"description": "svcnet",
"pkey": "0x1027",
"pkeyFromPool": false,
"infranet": false,
"numProviderNodes": 1,
"foreignPartition": false,
"externalReferece": "http://10.128.25.146/svcnet/cloud/public/svcnet",
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/83E2FB6A3B5688FFA9E76AB78CF7762C/servicenetworks/cloud/public/svcnet",
"rel": "canonical"
}
]
}

11.3.2.2 Update Service Network

Description: PUT the JSON data to the Service Network's URL. The name in the JSON data must be the same as the name in the PUT URL.

Method: PUT

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/servicenetworks/cloud/public/svcnet

Input:

{
"name": "/cloud/public/svcnet",
"id": "/cloud/public/svcnet",
"type": "eoib",
"description": "svcnet - updated",
"pkey": "0x1028"
}

Output/Response:

{
"name": "/cloud/public/svcnet",
"id": "/cloud/public/svcnet",
"type": "eoib",
"pkey": "0x1028",
"pkeyFromPool": false,
"infranet": false,
"foreignPartition": false,
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/83E2FB6A3B5688FFA9E76AB78CF7762C/servicenetworks/cloud/public/svcnet/cloud/public/svcnet",
"rel": "canonical"
}
]
}

11.3.2.3 Delete Service Network

Description: Send a DELETE request to the Service Network's URL.

Method: DELETE

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/servicenetworks/cloud/public/svcnet

Input: None

Output/Response: None

Status Returned: Status 204 No Content

11.3.3 vEthernet Use Cases

11.3.3.1 Create EoIB vEthernet

Description: Post vEthernet JSON data.

Method: POST

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/vethernets

Input:

{
"name": "/cloud/public/eoibveth",
"description": "test",
"svcnet": "/cloud/public/svcnet",
"type": "eoib",
"id": 101,
"switchports": {
"denp07sw-ib03": [
"0A-ETH-1"
],
"denp07sw-ib02": [
"0A-ETH-1"
]
}
}

Output/Response:

{
"name": "/cloud/public/eoibveth",
"id": "/cloud/public/eoibveth",
"type": "eoib",
"description": "test",
"account": "/cloud/default",
"svcnet": "/cloud/public/svcnet",
"switchports": [
"\"denp07sw-ib03\" : [\"0A-ETH-1\"]",
"\"denp07sw-ib02\" : [\"0A-ETH-1\"]"
],
"infranet": false,
"externalReferece": "db://bnet/vethernet/cloud/public/eoibveth",
"vlanId": 101,
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vethernets/cloud/public/eoibveth",
"rel": "canonical"
}
]
}

11.3.3.2 Update EoIB vEthernet

Description: PUT the the JSON data to the vEthernet' s URL. The 'description', 'svcnet', 'id', and 'switchports' are editable. The name in the JSON data must be the same as the name in the PUT URL.

Note:

You can see the difference from the json format of the POST request. In this case, the vlanId attribute is used instead of the id attribute in the POST request.

Method: PUT

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/vethernets/cloud/public/eoibveth

Input:

{
"name": "/cloud/public/eoibveth",
"description": "test3",
"svcnet": "/cloud/public/svcnet",
"type": "eoib",
"vlanId": 103,
"switchports": [
"\"denp07sw-ib02\" : [\"0A-ETH-1\"]",
"\"denp07sw-ib03\" : [\"0A-ETH-1\"]"
]
} 

Output/Response:

{
"name": "/cloud/public/eoibveth",
"id": "/cloud/public/eoibveth",
"type": "eoib",
"description": "test3",
"account": "/cloud/default",
"svcnet": "/cloud/public/svcnet",
"switchports": [
"\"denp07sw-ib03\" : [\"0A-ETH-1\"]",
"\"denp07sw-ib02\" : [\"0A-ETH-1\"]"
],
"infranet": false,
"externalReferece": "db://bnet/vethernet/cloud/public/eoibveth",
"vlanId": 103,
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vethernets/cloud/public/eoibveth/cloud/public/eoibveth",
"rel": "canonical"
}
]
}

11.3.3.3 Delete EoIB vEthernet

Description: Send a DELETE request to the vEthernet's URL.

Method: DELETE

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/vethernets/cloud/public/eoibveth

Output/Response: Status 204 No Content

11.3.4 Subnet Use Cases

11.3.4.1 Create EoIB Subnet

Description: Post EoIB Subnet JSON data.

Method: POST

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets

Output/Response:

{
"name": "/cloud/public/eoibsubnet",
"id": "/cloud/public/eoibsubnet",
"description": "/cloud/public/eoibsubnet",
"gateway": "10.242.80.1",
"account": "/cloud/default",
"infranet": false,
"vethernet": "/cloud/public/eoibveth",
"cidr": "10.242.80.0/21",
"ipranges": [
"10.242.84.132",
"10.242.84.133"
],
"ethIndex": -1,
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets/cloud/public/eoibsubnet",
"rel": "canonical"
}
]

11.3.4.2 Create IPoIB Subnet

Description: Post IPoIB Subnet JSON data.

Creating an IPoIB Subnet in Global IP mode.

URL:

https:/<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets

Input:

{
 
"name": "/cloud/public/ipoibsubnet_ip",
"vethernet": "/cloud/public/ipoibveth", //choose an IPoIB vEthernet
"description": "/cloud/public/ipoibsubnet global ip mode",
"global_ip_num": 10
}

Output/Response:

{
"name": "/cloud/public/ipoibsubnet_ip",
"id": "/cloud/public/ipoibsubnet_ip",
"description": "/cloud/public/ipoibsubnet global ip mode",
"account": "/cloud/default",
"infranet": false,
"vethernet": "/cloud/public/ipoibveth",
"cidr": "192.168.96.112/28",
"ipranges": [
"192.168.96.113-192.168.96.126"
],
"global_ip_num": 14,
"ethIndex": -1,
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets/cloud/public/ipoibsubnet_ip",
"rel": "canonical"
}
]
}

Creating IPoIB Subnet in CIDR mode

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets

Input

{
 
"name": "/cloud/public/ipoibsubnet_cidr",
"vethernet": "/cloud/public/ipoibveth", //choose an IPoIB vEthernet
"description": "/cloud/public/ipoibsubnet CIDR mode",
"cidr": "192.168.220.1/24",
"ipranges": [
"192.168.220.2",
"192.168.220.20"
]
}

Output/Response:

{
"name": "/cloud/public/ipoibsubnet_cidr",
"id": "/cloud/public/ipoibsubnet_cidr",
"description": "/cloud/public/ipoibsubnet CIDR mode",
"account": "/cloud/default",
"infranet": false,
"vethernet": "/cloud/public/ipoibveth",
"cidr": "192.168.220.1/24",
"ipranges": [
"192.168.220.2",
"192.168.220.20"
],
"ethIndex": -1,
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets/cloud/public/ipoibsubnet_cidr",
"rel": "canonical"
}
]
}

11.3.4.3 Update Subnet

Description: PUT the JSON data to the Subnet' s URL. The description, global_ip_num, cidr, gateway, ipranges, and vethernet fields are editable. The name in the JSON data must be the same as the name in the PUT URL..

Method: PUT

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets/cloud/public/ipoibsubnet_ip

Input:

{
"name": "/cloud/public/ipoibsubnet_ip",
"vethernet": "/cloud/public/ipoibveth", //choose an IPoIB vEthernet
"description": "/cloud/public/ipoibsubnet global ip mode - Updated",
"global_ip_num": 15
}

Output/Response:

{
"name": "/cloud/public/ipoibsubnet_ip",
"id": "/cloud/public/ipoibsubnet_ip",
"description": "/cloud/public/ipoibsubnet global ip mode - Updated",
"account": "/cloud/default",
"infranet": false,
"vethernet": "/cloud/public/ipoibveth",
"cidr": "192.168.96.128/27",
"ipranges": [
"192.168.96.129-192.168.96.158"
],
"global_ip_num": 30,
"ethIndex": -1,
"links": [
{
"href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets/cloud/public/ipoibsubnet_ip/cloud/public/ipoibsubnet_ip",
"rel": "canonical"
}
]
}

11.3.4.4 Delete Subnet

Description: Send a DELETE request to the Subnet URL.

Method: DELETE

URL:

https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnets/cloud/public/ipoibsubnet_ip

Output/Response: Status 204 No Content

11.3.5 IP Reservation Use Cases

  1. Create IP Reservation

    Description: Post IP reservation JSON data.

    Method: POST

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnetreservations

    Input:

    {
     
    "name": "/<tenant>/public/192_168_220_2",
    "ip": "192.168.220.2",
    "vnet": "/cloud/public/ipoibsubnet_cidr" //choose a subnet
     
    }
    

    Output/Response:

    {
    "name": "/satheesh/public/192_168_220_2",
    "id": "/satheesh/public/192_168_220_2",
    "used": false,
    "quota": "/satheesh",
    "ip": "192.168.220.2",
    "vnet": "/cloud/public/ipoibsubnet_cidr",
    "externalReferece": "http://10.88.235.144/vnetreservation/satheesh/public/192_168_220_2",
    "links": [
    {
    "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnetreservations/satheesh/public/192_168_220_2",
    "rel": "canonical"
    }
    ]
    }
    
  2. Delete IP Reservation

    Description: Send a DELETE request to the IP Reservation URL.

    Method: DELETE

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/vnetaccess/<tenant>/public/vnetaccess_cidr

    Output/Response: Status 204 No Content

11.3.6 Subnet Access Use Cases

  1. Create Subnet Access

    Description: Post Subnet Access JSON data.

    Method: POST

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnetaccess

    Input:

    {
     
    "name": "/<tenant>/public/vnetaccess_cidr",
    "vnet": "/cloud/public/ipoibsubnet_cidr", //choose a subnet
    "provider": true
    }
    

    Output/Response:

    {
    "name": "<tenant>",
    "id": "<tenant>",
    "provider": true,
    "vnet": "/cloud/public/ipoibsubnet_cidr",
    "externalReferece": "http://10.88.235.144/vnetaccess/satheesh/public/vnetaccess_cidr",
    "links": [
    {
    "href": "<tenant>",
    "rel": "canonical"
    }
    ]
    }
    
  2. Delete Subnet Access

    Description: Send a DELETE request to the Subnet Access URL.

    Method: DELETE

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/vnetreservations/<tenant>/public/192_168_220_2

    Output/Response: Status 204 No Content

11.3.7 Storage Volume Use Cases

  1. Create Storage Volume

    Description: Post Storage Volume JSON data.

    Method: POST

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/storagevolumes

    Input:

    {
     
    "name": "/<tenant>/public/storage/volume1",
    "description" :"test volume",
    "size": "1G"
     
    }
    

    Output/Response:

    {
    "name": "/<tenant>/public/storage/volume1",
    "properties": [
    "/oracle/public/storage/default"
    ],
    "id": "/<tenant>/public/storage/volume1",
    "size": 1073741824,
    "description": "test volume",
    "status": "Initializing",
    "imageListEntryVersion": -1,
    "externalReferece": "http://10.88.235.144/storage/volume/<tenant>/public/storage/volume1",
    "bootable": false,
    "links": [
    {
    "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/storagevolumes/<tenant>/public/storage/volume1",
    "rel": "canonical"
    }
    ]
    
  2. Delete Storage Volume

    Description: Send a DELETE request to the Storage Volume URL

    Method: DELETE

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/<site_id>/storagevolumes/<tenant>/public/storage/volume1

    Output/Response: Status 204 No Content

11.3.8 Tenancy Use Cases

  1. List Tenant

    Description: This is a GET request that lists all the tenants for a particular site. The output is displayed in two formats:

    • application/json: This lists all the tenants with all their attributes in a JSON format.

    • application/discovery+json: This lists the names of all the tenants. This is to keep the EM REST services in line with Oracle Compute.

    Method: GET

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/tenants

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    Input: No input required for a REST GET request. Set the content type header of the request as application/json or application/discovery+json.

    Output/Response: All the tenants for the Oracle Compute Site are returned in a json format.

    {
        "items": [
            {
                "name": "cloud",
                "id": "cloud",
                "description": "Cloud administration tenant",
                "externalReferece": "https://10.242.84.131/tenant/cloud",
                "links": [
                    {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/tenants/cloud", 
                        "rel": "canonical"
                    }
                ]
            },
            {
                "name": "lrgemcloud_nimbula_14275824",
                "id": "lrgemcloud_nimbula_14275824",
                "description": "Edit a tenant",
                "email": "user_management@example.com",
                "externalReferece": "https://10.242.84.131/tenant/lrgemcloud_
                 nimbula_14275824",
                "links": [
                    {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/tenants/lrgemcloud_nimbula_14275824",
                        "rel": "canonical"
                    }
                ]
            },
            {
                "name": "lrgemcloud_nimbula_14277240",
                "id": "lrgemcloud_nimbula_14277240",
                "description": "Edit a tenant",
                "email": "user_management@example.com",
                "externalReferece": "https://10.242.84.131/tenant/lrgemcloud
                 _nimbula_14277240",
                "links": [
                    {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/tenants/lrgemcloud_nimbula_14277240",
                        "rel": "canonical"
                    }
                ]
     
            }
     
    }
    
  2. Get a Tenant

    Description: This is a GET request that returns a specific tenant listed in the URL.

    Method: GET

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/tenants/{tenantName}

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • tenantName: Name of the tenant to be returned

    Input: No input required for a REST GET request. Set the content type header of the request as application/json.

    Output/Response: Requested tenant will be returned in JSON format.

    {
        "name": "cloud",
        "id": "cloud",
        "description": "Cloud administration tenant",
        "externalReferece": "https://10.242.84.131/tenant/cloud",
        "links": [
            {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/tenants/cloud/",
                "rel": "canonical"
            }
        ]
    }
    
  3. Create a Tenant

    Description: This is a POST request to create a tenant with the given input in JSON format.

    Method: POST

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/tenants/

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • tenantName: Name of the tenant to be returned

    Input: JSON representation of the tenant object as EM REST service. Set the content type and accept header of the request as application/json.

    {
        "name": "TestTenant",
        "description": "Cloud administration tenant",
        "password": "EXAlogic_123",
        "email": "test@oracle.com"
    }
    

    Output/Response: Created tenant will be returned in JSON format.

    {
        "name": "TestTenant",
        "id": "TestTenant",
        "description": "Cloud administration tenant",
        "externalReferece": "https://10.242.84.131/tenant/cloud",
        "links": [
            {
                "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/tenants/TestTenant/",
                "rel": "canonical"
            }
        ]
    }
    
  4. Update a Tenant

    Description: This is a PUT request to update a tenant with the given input in the JSON format.

    Method: PUT

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/tenants/tenantName

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • tenantName: Name of the tenant to be updated

    Input: JSON representation of the tenant object as EM REST service. Set the content type and accept header of the request as application/json.

    {
        "name": "TestTenant",
        "description": "Cloud administration tenant",
        "password": "EXAlogic_123",
    }
    

    Output: Updated tenant will be returned in JSON format.

    { "name": "TestTenant", "id": "TestTenant", "description": "Cloud administration tenant updated", "externalReferece": "https://10.242.84.131/tenant/cloud",\\\\ "links": [ { "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/tenants/TestTenant/", "rel": "canonical" }] }
    

11.3.9 User Use Cases

  1. List User

    Description: This is a GET request that lists all the users for a particular site. The output is displayed in two formats:

    • application/json: This lists all the users with all their attributes in a JSON format.

    • application/discovery+json: This lists the names of all the users. This is to keep the EM REST services in line with Oracle Compute.

    Method: GET

    URL:

    https://<hostnameport>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/users

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    Input: No input required for a REST GET request. Set the content type header of the request as application/json or application/discovery+json.

    Output/Response: All the users for the Oracle Compute Site are returned in a json format.

    {
        "items": [
            {
                "id": "/user1/administrator",
                "username": "/user1/administrator",
                "groups": [
                    "/user1/admin"
                ],
                "role": "/user1/admin",
                "email": "user1@oracle.com",
                "customer": "user1",
                "blackListed": false,
                "externalReferece": "https://10.242.84.131/user/user1/administrator",
                "fullname": "Administrator",
                "links": [
                    {
                        "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/usersnull",
                        "rel": "canonical"
                    }
                ]
            },
            {
                "id": "/lrgemcloud_nimbula_14276642/administrator",
                "username": "/lrgemcloud_nimbula_14276642/administrator",
                "groups": [
                    "/lrgemcloud_nimbula_14276642/admin"
                ],
                "role": "/lrgemcloud_nimbula_14276642/admin",
                "email": "user2@oracle.com",
                "customer": "lrgemcloud_nimbula_14276642",
                "blackListed": false,
                "externalReferece": "https://10.242.84.131/user/lrgemcloud_nimbula_14276642/administrator",
                "fullname": "Administrator",
                "links": [
                    {
                        "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/usersnull",
                        "rel": "canonical"
                    }
                ]
            }
     
    } 
    
  2. Get a User

    Description: This is a GET request that returns a specific user listed in the URL.

    Method: GET

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/users/{userName}

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualizaion/infrastructure/v1/sites/

    • userName: Name of the user to be returned

    Input: No input required for a REST GET request. Set the content type header of the request as application/json.

    Output/Response: Requested user will be returned in JSON format.

    {
     
        "id": "/user2/administrator",
         "username": "/user2/administrator",
         "groups": [
             "/user2/admin"
         ],
         "role": "/user2/admin",
         "email": "userabc@oracle.com",
         "customer": "user2",
         "blackListed": false,
         "externalReferece": "https://10.242.84.131/user/alokak/administrator",\\
         "fullname": "Administrator core",
         "links": [
             {
                 "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/users/alokak/administrator",
                 "rel": "canonical"
             }
         ]
     
    }
    
  3. Create a User

    Description: This is a POST request to create a user with the given input in JSON format.

    Method: POST

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/users/

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • userName: Name of the user to be returned

    Input: JSON representation of the user object as EM REST service. Set the content type and accept header of the request as application/json.

    {
         "username": "/user2/testuser",
         "customer": "user2",
         "blacklisted": false,
         "fullname": "Test User",
         "role":"/cloud/users",
         "password": "EXAlogic_123",
         "email": "tuser@oracle.com"
     }
    

    Output/Response: Created user will be returned in JSON format.

    {
         "id": "/user2/testuser",
         "username": "/user2/testuser",
         "groups": [
             "/user2/users"
         ],
         "role": "/user2/users",
         "email": "tuser@oracle.com",
         "customer": "user2",
         "blackListed": false,
         "externalReferece": "https://10.242.84.131/user/user2/testuser",\\
         "fullname": "Test User",
         "links": [
             {
                 "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/users/user2/testuser",
                 "rel": "canonical"
             }
         ]
     }
    
  4. Update a User

    Description: This is a PUT request to update a user with the given input in the JSON format.

    Method: PUT

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/users/userName

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • userName: Name of the user to be updated

    Input: JSON representation of the tenant object as EM REST service. Set the content type and accept header of the request as application/json.

    {
         "username": "/user2/testuser",
         "customer": "user2",
         "blacklisted": false,
         "fullname": "Test User",
         "role":"/cloud/users",
         "password": "EXAlogic_123",
         "email": "tuser123@oracle.com"
     }
    

    Output/Response: Updated tenant will be returned in JSON format.

    {
         "id": "/user2/testuser",
         "username": "/user2/testuser",
         "groups": [
             "/user2/users"
         ],
         "role": "/user2/users",
         "email": "tuser123@oracle.com",
         "customer": "user2",
         "blackListed": false,
         "externalReferece": "https://10.242.84.131/user/user2/testuser",\\
         "fullname": "Test User",
         "links": [
             {
                 "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/users/user2/testuser",
                 "rel": "canonical"
             }
         ]
     }
    
  5. Delete a User

    Description: This is a DELETE request to delete a specific user requested in the URL.

    Method: DELETE

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/users/userName

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • userName: Name of the user to be updated

    Input: No input required for a REST DELETE request.

    Output/Response: No Output for REST DELETE request. A response code of 206 (No Content) is returned.

11.3.10 Quota Use Cases

  1. List Quota

    Description: This is a GET request that lists the quota allocated for a particular site. The output is displayed in two formats:

    • application/json: This lists all the quotas with all their attributes in a JSON format.

    • application/discovery+json: This lists the names of all the quotas. This is to keep the EM REST services in line with Oracle Compute.

    Method: GET

    URL:

    https://<hostnameport>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/quotas

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    Input: No input required for a REST GET request. Set the content type header of the request as application/json or application/discovery+json.

    Output/Response: All the quotas for the Oracle Compute Site are returned in a json format.

    {
     
        "items": [
     
            {
                 "name": "/user3",
                 "id": "/user3",
                 "usage": {
                     "vnet": {
                         "vnetreservations": 0
                     },
                     "nat": {
                         "ipreservations": 0
                     },
                     "compute": {
                         "instances": 1,
                         "instance_restrictions": [
                             "{}"
                         ],
                         "ram": 2048,
                         "cpus": 1
                     },
                     "machineimage": {
                         "number": 0,
                         "megabytes": 0
                     },
                     "nds": {
                         "megabytes": 0
                     }
                 },
                 "description": "Edit a quota named quota1",
                 "allowance": {
                     "vnet": {
                         "vnetreservations": 10
                     },
                     "nat": {
                         "ipreservations": 10
                     },
                     "compute": {
                         "instances": 20,
                         "instance_restrictions": [
                             "{\"os_license\":\"200\"}"
                         ],
                         "ram": 20000,
                         "cpus": 10
                     },
                     "machineimage": {
                         "number": 12000,
                         "megabytes": 8048
                     },
                     "nds": {
                         "megabytes": 1160000
                     }
                 },
                 "externalReferece": "https://10.242.84.131/quota/user3",\\
                 "links": [
                     {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/quotas/user3",
                         "rel": "canonical"
                     }
                 ]
             },
             {
                 "name": "/lrgemcloud_nimbula_14279598",
                 "id": "/lrgemcloud_nimbula_14279598",
                 "usage": {
                     "vnet": {
                         "vnetreservations": 0
                     },
                     "nat": {
                         "ipreservations": 0
                     },
                     "compute": {
                         "instances": 0,
                         "instance_restrictions": [
                             "{}"
                         ],
                         "ram": 0,
                         "cpus": 0
                     },
                     "machineimage": {
                         "number": 0,
                         "megabytes": 0
                     },
                     "nds": {
                         "megabytes": 0
                     }
                 },
                 "description": "Default quota for \"lrgemcloud_nimbula
                                 _14279598\"",
                 "allowance": {
                     "vnet": {
                         "vnetreservations": null
                     },
                     "nat": {
                         "ipreservations": null
                     },
                     "compute": {
                         "instances": null,
                         "instance_restrictions": [
                             "{}"
                         ],
                         "ram": null,
                         "cpus": null
                     },
                     "machineimage": {
                         "number": null,
                         "megabytes": null
                     },
                     "nds": {
                         "megabytes": null
                     }
                 },
                 "externalReferece": "https://10.242.84.131/quota/lrgemcloud_nimbula_14279598",\\
                 "links": [
                     {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/quotas/lrgemcloud_nimbula_14279598",
                         "rel": "canonical"
                     }
                 ]
             }
     }
    
  2. Get a Quota

    Description: This is a GET request that returns a specific quota listed in the URL.

    Method: GET

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/quotas/{quotaName}

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • quotaName: Name of the quota to be returned

    Input: No input required for a REST GET request. Set the content type header of the request as application/json.

    Output/Response: Requested quota will be returned in JSON format.

    {
         "name": "/user3",
         "id": "/user3",
         "usage": {
             "vnet": {
                 "vnetreservations": 0
             },
             "nat": {
                 "ipreservations": 0
             },
             "compute": {
                 "instances": 1,
                 "instance_restrictions": [
                     "{}"
                 ],
                 "ram": 2048,
                 "cpus": 1
             },
             "machineimage": {
                 "number": 0,
                 "megabytes": 0
             },
             "nds": {
                 "megabytes": 0
             }
         },
         "description": "Edit a quota named quota1",
         "allowance": {
             "vnet": {
                 "vnetreservations": 10
             },
             "nat": {
                 "ipreservations": 10
             },
             "compute": {
                 "instances": 20,
                 "instance_restrictions": [
                     "{\"os_license\":\"200\"}"
                 ],
                 "ram": 20000,
                 "cpus": 10
             },
             "machineimage": {
                 "number": 12000,
                 "megabytes": 8048
             },
             "nds": {
                 "megabytes": 1160000
             }
         },
         "externalReferece": "https://10.242.84.131/quota/user3",\\
         "links": [
             {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/quotas/user3",
                 "rel": "canonical"
             }
         ]
     }
    
  3. Update Quota

    Description: This is a PUT request to update the quota with the given input in the JSON format.

    Method: PUT

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/quotas/quotaName

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • quotaName: Name of the quota to be updated

    Input: JSON representation of the tenant object as EM REST service. Set the content type and accept header of the request as application/json.

    {
         "name": "/test",
         "description": "Test Quota updated",
         "allowance": {
             "vnet": {
                 "vnetreservations": 10
             },
             "nat": {
                 "ipreservations": 10
             },
             "compute": {
                 "instances": 20,
                 "instance_restrictions": [
                     "{"os_license":"200"}"
                 ],
                 "ram": 20000,
                 "cpus": 10
             },
             "machineimage": {
                 "number": 12000,
                 "megabytes": 8048
             },
             "nds": {
                 "megabytes": 1160000
             }
         }
     }
    

    Output/Response: Updated quota will be returned in JSON format.

    {
         "name": "/test",
         "id": "/test",
         "usage": {
             "vnet": {
                 "vnetreservations": 0
             },
             "nat": {
                 "ipreservations": 0
             },
             "compute": {
                 "instances": 1,
                 "instance_restrictions": [
                     "{}"
                 ],
                 "ram": 2048,
                 "cpus": 1
             },
             "machineimage": {
                 "number": 0,
                 "megabytes": 0
             },
             "nds": {
                 "megabytes": 0
             }
         },
         "description": "Test Quota Updated",
         "allowance": {
             "vnet": {
                 "vnetreservations": 10
             },
             "nat": {
                 "ipreservations": 10
             },
             "compute": {
                 "instances": 20,
                 "instance_restrictions": [
                     "{\"os_license\":\"200\"}"
                 ],
                 "ram": 20000,
                 "cpus": 10
             },
             "machineimage": {
                 "number": 12000,
                 "megabytes": 8048
             },
             "nds": {
                 "megabytes": 1160000
             }
         },
         "externalReferece": "https://10.242.84.131/quota/test",\\
         "links": [
             {
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/2C9C90E1A5A5084C2BBA23BE5DC04D43/quotas/test",
                 "rel": "canonical"
             }
         ]
     }
    
  4. Delete Quota

    Description: This is a DELETE request to delete a specific quota requested in the URL.

    Method: DELETE

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/quotas/quotaName

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • quotaName: Name of the quota to be deleted.

    Input: No input required for a REST DELETE request.

    Output/Response: No Output for REST DELETE request. A response code of 206 (No Content) is returned.

11.3.11 Template Use Cases

  1. List Templates

    Description: This is a GET request that lists all the templates for a particular site. The output is displayed in two formats:

    • application/json: This lists all the templates with all their attributes in a JSON format.

      application/discovery+json: This lists the names of all the templates. This is to keep the EM REST services in line with Oracle Compute.

    Method: GET

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/templates/

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    Input: No input required for a REST GET request. Set the content type header of the request as application/json or application/discovery+json.

    Output/Response: All the quotas for the Oracle Compute Site are returned in a json format.

    {
        "totalResults": 5,
        "count": 5,
        "links": [
            {
                "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/93B97C5E7E352676A3284D80F23714BF/templates",
                "rel": "canonical"
            }
        ],
        "items": [
            {
                "id": "/oracle/public/oel_public",
                "name": "/oracle/public/oel_public",
                "links": [
                    {
                        "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/93B97C5E7E352676A3284D80F23714BF/templates/oracle/public/oel_public",
                        "rel": "canonical"
                    }
                ],
                "fileLocation": "https://10.242.84.131:444/machineimage/oracle/public/oel_public",
                "state": "available",
                "attributes": {
                    "OS": "Linux_x86"
                },
                "sizes": {
                    "uploadedSizeinBytes": 376848450,
                    "totalSizeInBytes": 376848450,
                    "decompressedSizeInBytes": 5905612288
                }
            },
            {
                "id": "/satheesh/public/oel_tenant",
                "name": "/satheesh/public/oel_tenant",
                "links": [
                    {
                        "href": "/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/93B97C5E7E352676A3284D80F23714BF/templates/satheesh/public/oel_tenant",
                        "rel": "canonical"
                    }
                ],
                "fileLocation": "https://10.242.84.131:444/machineimage/satheesh/public/oel_tenant",
                "state": "available",
                "attributes": {
                    "OS": "Linux_x86"
                },
                "quota": "/satheesh/21053780-d23c-489b-9fd7-9b9779e642f1",
                "sizes": {
                    "uploadedSizeinBytes": 376848450,
                    "totalSizeInBytes": 376848450,
                    "decompressedSizeInBytes": 5905612288
                }
            },
    }
    }
    
  2. Get a Template

    Description: This is a GET request that returns a specific template listed in the URL.

    Method: GET

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/templates/{templateName}

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • templateName: Name of the template to be returned

    Input: No input required for a REST GET request. Set the content type header of the request as application/json.

    Output/Response: Requested quota will be returned in JSON format.

    {
     
    "id": "/oracle/public/oel_public",
     
    "name": "/oracle/public/oel_public",
     
    "links": [
     
    {
     
    "href":"/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/93B97C5E7E352676A3284D80F23714BF/templates/oracle/public/oel_public",
     
    "rel": "canonical"
     
    }
     
    ],
     
    "fileLocation": "https://10.242.84.131:444/machineimage/oracle/public/oel_public",</span></span>
     
    "state": "available",
     
    "attributes": {
     
    "OS": "Linux_x86"
     
    },
     
    "sizes": {
     
    "uploadedSizeinBytes": 376848450,
     
    "totalSizeInBytes": 376848450,
     
    "decompressedSizeInBytes": 5905612288
     
    }
     
    }
    
  3. Delete a Template

    Description: This is a DELETE request to delete a specific template requested in the URL.

    Method: DELETE

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/templates/templateName

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • templateName: Name of the template to be deleted.

    Input: No input required for a REST DELETE request.

    Output/Response: No Output for REST DELETE request. A response code of 206 (No Content) is returned.

  4. Upload a Template

    Description: This is a POST request to upload a template using software library with a given input in JSON format.

    Method: POST

    URL:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/{SITE_ID}/templates/swlib

    • hostname: OMS host name

    • port: OMS HTTPS port

    • SITE_ID: The Site ID is returned when site resource is accessed using

      https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    • templateName: Name of the template to be deleted.

    Input: JSON representation of the tenant object as EM REST service. Set the content type and accept header of the request as application/json

    {            
     
    "name": "/oracle/public/test2",         
    "urn": "oracle:defaultService:em:provisioning:1:cmp:Cloud:Nimbula Template:1A4754B40A0E061CE053179AF40A2898:0.1",
    "sizes": {                "total": 376848450            },
    "attributes": {                "OS": "Linux_x86"            }     
       
    }
    

    Output/Response: A job is submitted and a job id is returned in JSON format."{ \"job_id\":\"1A57035ED0D819A1E053179AF40A4A85\"}"

    To get the component urn (urn) field in the above json, make sure the software library components have been uploaded and run the REST API:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/swlibcomponents

  5. Register and Deregister a Site

    The Oracle Compute site can be registered using POST method to "/sites/" namespace with a JSON represents the site information, then a job will be submitted to register the site.

    For example:

    https://<hostname:port>/em/websvcs/restful/extws/virtualization/infrastructure/v1/sites/

    {
    "site_target_name":"Demo",
    "endpoint_url":"https://10.242.84.131",\\\\ "agent_url":"https://<hostname:port>/emd/main/",\\\\ "monitoring_cred_username":"/cloud/administrator",
    "monitoring_cred_password":"EXAlogic_123",
    "graphite_url":"https://10.242.84.131/graphite",\\\\ }
    

    A job id will be returned such as "{ \"job_id\":\"139600CD1BC11B59E053481DF50A6F62\"}"

    Add an image (Register Site)

The table below displays the JSON format used for registering the site.

Table 11-7 JSON format used for registering the site

Property Description

site_target_name

The target name for the site.

endpoint_url

Nimbula site's URL.

agent_url

The url for the agent monitoring the target.

slave_agent_url

The failover monitoring agent to be used as the standby agent. You can specify a list of agents in a JSON array format as follows:

["url1","url2"].

monitoring_cred_username

The monitoring credentials user name for the Oracle Compute site.

monitoring_cred_password

The monitoring credentials password for the Oracle Compute site.

graphite_url

The graphite URL.

graphite_username

The graphite credentials user name.

graphite_password

The graphite credentials password.

graphite_site_prefix

The graphite prefix string.

snmp_cred_type

The SNMP credentials type. The available values are V1, V2, and V3.

snmp_community_string

The SNMP community string available when snmp_cred_type is V1 or V2.

snmp_username

The user name for the SNMP credentials available when the snmp_cred_type is V3.

snmp_authpassword

The SNMP authorization password available when the snmp_cred_type is V3.

snmp_authprotocol

The SNMP authorization protocol (MD5 or SHA) available when the snmp_cred_type is V3.

snmp_privpassword

The SNMP privacy password available when the snmp_cred_type is V3

The Oracle Compute Site can be de-registered using the Delete option. A job will be submitted to de-register the site. For example:"{ \"job_id\":\"10D4FDE1874E201BE053461DF50A5760\"}"A job id will be returned.

11.4 References

Use the XSD below to build the orchestration plan (orch_plan.xml).

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.oracle.com/sysman/vi/VIDeploymentPlan/"
            xmlns="http://www.oracle.com/sysman/vi/VIDeploymentPlan/"
            elementFormDefault="unqualified"
            xmlns:Q1="http://www.oracle.com/vi/RequestSchema/"
            xmlns:xml="http://www.w3.org/XML/1998/namespace">
    <xsd:simpleType name="CPUSchedulingPriorityType">
        <xsd:annotation>
            <xsd:documentation>CPU Scheduling priority for the Guest VM.</xsd:documentation>
        </xsd:annotation>
        <xsd:union>
            <xsd:simpleType id="CPUSchedulingPriorityPreDefinedType">
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="Low"/>
                    <xsd:enumeration value="Intermediate"/>
                    <xsd:enumeration value="High"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType id="CPUSchedulingPriorityCustomType">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="[1]?[0,1,2,3,4,5,6,7,8,9]?[0,1,2,3,4,5,6,7,8,9]"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>
    <xsd:simpleType name="CPUCapType">
        <xsd:annotation>
            <xsd:documentation>CPU Scheduling Cap for the Guest VM.</xsd:documentation>
        </xsd:annotation>
        <xsd:union>
            <xsd:simpleType id="CPUCapTypePreDefinedType">
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="Low"/>
                    <xsd:enumeration value="Intermediate"/>
                    <xsd:enumeration value="High"/>
                </xsd:restriction>
            </xsd:simpleType>
            <xsd:simpleType id="CPUCapCustomType">
                <xsd:restriction base="xsd:string">
                    <xsd:pattern value="[1]?[0,1,2,3,4,5,6,7,8,9]?[0,1,2,3,4,5,6,7,8,9]"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:union>
    </xsd:simpleType>
    <xsd:complexType name="StaticNetworkConfigurationType">
        <xsd:annotation>
            <xsd:documentation>Static network configuration for the network
                               interface.</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="ipAddress" type="xsd:string" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>IP Address.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="hostName" type="xsd:string" maxOccurs="1"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>Fully Qualified Host
                     Name.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="subnetMask" type="xsd:string" maxOccurs="1"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>Subnet Mask.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="defaultGateway" type="xsd:string" maxOccurs="1"
                         minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>Default Gateway.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element maxOccurs="unbounded" minOccurs="0" name="nameServer"
                         type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Name Server.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="VirtualMachineListType">
        <xsd:sequence>
            <xsd:element maxOccurs="unbounded" minOccurs="0"
                         name="VirtualMachine" type="VirtualMachineType"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="BaseVirtualMachineType">
        <xsd:attribute name="name" type="xsd:string" use="optional"/>
    </xsd:complexType>
    <xsd:complexType name="LocalDiskType">
        <xsd:sequence>
            <xsd:element name="storageVolumeId" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Id of the storage volume attached to the
                                       instance.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="index" type="xsd:int">
                <xsd:annotation>
                    <xsd:documentation>Index of the storage
                    attachment.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required">
            <xsd:annotation>
                <xsd:documentation>Name of the Disk. Will be ignored if
                                   Deployment is of type
                                   ImageListDeploymentType.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="fromDefinition" type="xsd:boolean">
            <xsd:annotation>
                <xsd:documentation>Denotes if the disk is specified in some
                                   metadata file associated with the binary
                                   being used to deploy. Will be ignored if
                                   Deployment is of type
                                   ImageListDeploymentType.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="NewDiskType">
        <xsd:sequence>
            <xsd:element name="Name"  type="xsd:string">
            </xsd:element>
            <xsd:element name="SizeInGB" type="xsd:long">
            </xsd:element>
            <xsd:element name="Properties" type="xsd:string" maxOccurs="unbounded" minOccurs="0">
            </xsd:element>            
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="DiskListType">
    <xsd:complexContent>    
    
    <xsd:choice>
        <xsd:sequence>        
            <xsd:element maxOccurs="unbounded" minOccurs="1" name="disk"
                         type="LocalDiskType"/>            
        </xsd:sequence>
        <xsd:sequence>
            <xsd:element name="newDisk" type="NewDiskType" minOccurs="1" maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:choice>        
    </xsd:complexContent>
    </xsd:complexType>
    <xsd:simpleType name="VirtualizationTType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="HVM"/>
            <xsd:enumeration value="PVM"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="HardwareConfigurationType">
        <xsd:annotation>
            <xsd:documentation>Hardware configuration for the guest
            vm.</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="Label" type="xsd:string"></xsd:element>
            <xsd:element name="ImageList" type="xsd:string"></xsd:element>
            <xsd:element name="ImageListEntry" type="xsd:string"></xsd:element>
            <xsd:element name="Shape" type="ShapeType" maxOccurs="1"
                         minOccurs="1"></xsd:element>
            <xsd:element name="Account" type="AccountType"></xsd:element>
            <xsd:element name="Quota" type="QuotaType"></xsd:element>
            <xsd:element name="Priority" type="xsd:string"></xsd:element>
            <xsd:element name="Tags" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Comma separated list of Strings that
                     will be used as Tags.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="PlacementRequirements" type="xsd:string"
                         maxOccurs="1" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>Comma separated list of Strings that
                     will be used as Placement Requirement
                     tags.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="HaEnabled" type="xsd:boolean"></xsd:element>
            <xsd:element name="Virtio" type="xsd:boolean"></xsd:element>
            <xsd:element name="sshKeys" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Comma separated strings of SSH
                     Keys</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="RootSSHCredential" type="SSHCredentialType"></xsd:element>
            <xsd:element name="OracleSSHCredential" type="SSHCredentialType"></xsd:element>
 
            <xsd:element name="Nics" type="NICListType" minOccurs="0"
                         maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Container for configuration of network
                     interface cards for the Guest VM.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Nis" type="NISType" minOccurs="0"
                         maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Container for configuration of network
                     NIS for the Guest VM.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element maxOccurs="1" minOccurs="0" name="Disks"
                         type="DiskListType">                        
                <xsd:annotation>
                    <xsd:documentation>Container for configuration of local
                 disks for the Guest VM.</xsd:documentation>
                </xsd:annotation>                
            </xsd:element>
            <xsd:element name="Attributes" type="AttributeListType"
                         maxOccurs="1" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation>Keymap configuration for the Guest
                     VM</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ConfigurationDataType">
        <xsd:sequence>
            <xsd:element name="Type" type="PlanType">
                <xsd:annotation>
                    <xsd:documentation>Specify the Plan type i.e if this is
                                       meant for Image deployment or Assembly
                                       deployment.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="PassThroughMode" type="xsd:boolean">
                <xsd:annotation>
                    <xsd:documentation>This value should be set to true when
                                       Pass-Through behaviour is desired i.e
                                       when the native Oracle Compute Launch
                                       Plan or OVAB Plan is passed for
                                       deployment.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="CreatingUser" type="xsd:string"></xsd:element>
            <xsd:element name="CreatingApplication" type="xsd:string"></xsd:element>
            <xsd:choice>
                <xsd:element name="AssemblyDeployment"
                             type="AssemblyDeploymentConfigDataType"/>
                <xsd:element name="ImageDeployment"
                             type="ImageDeploymentConfigDataType"/>
                <xsd:element name="OrchestrationDeployment"
                             type="OrchestrationDeploymentConfigDataType"/>
            </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="version" type="PlanVersionType" use="required">
            <xsd:annotation>
                <xsd:documentation>Deployment Plan Version attribute is
                                   introduced in PS2 release. Older plans will
                                   not have this attribute or if user adds it
                                   then the version must be 0.0.1 for plans
                                   from releases older then
                                   PS2.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="name" type="xsd:string"></xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="ProvisioningRequestType">
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="AssemblyDeployment"
                             type="AssemblyDeploymentConfigDataType"/>
                <xsd:element name="ImageDeployment"
                             type="ImageDeploymentConfigDataType"/>
            </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="PlanVersion" type="PlanVersionType" use="optional">
            <xsd:annotation>
                <xsd:documentation>Deployment Plan Version attribute is
                                   introduced in PS2 release. Older plans will
                                   not have this attribute or if user adds it
                                   then the version must be 0.0.1 for plans
                                   from releases older then
                                   PS2.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="EditRequestType"/>
    <xsd:complexType name="CloningRequestType"/>
    <xsd:complexType name="SnapshotRequestType"/>
    <!-- xsd:complexType name="ScalingRequestType"></xsd:complexType -->
    <xsd:complexType name="AssemblyDeploymentConfigDataType">
        <xsd:annotation>
            <xsd:documentation>Represents the configuration data associated
             with the deployment of an assembly.</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="SourceBinary" type="SourceBinaryDataType"
                         maxOccurs="1" minOccurs="0"/>
            <xsd:element name="DeploymentTarget" type="DeploymentTargetData"/>
            <xsd:element name="AcceptedAllEULAs" type="xsd:boolean"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Flag to specify if all the EULAs are
                                       accepted by the user for
                                       deployment.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="InstallEMAgent" type="xsd:boolean" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Flag to specify if EM Agent has to be
                                       installed by the user for
                                       deployment.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="DisableCleanup" type="xsd:boolean" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Flag to specify if Cleanup of virtual
                                       machines to be disabled in case of
                                       failure.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="sshKeys" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Comma separated strings of SSH
                    Keys</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="EMAgentConfig" type="EMAgentConfigType"/>
            <xsd:element name="AssemblyNetworkConfig"
                         type="AssemblyNetworkConfigListType" minOccurs="1"
                         maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>List of mappings for the assembly
                                       networks (defined in assembly meta-data)
                                       and corresponding network on the
                                       target.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <!-- xsd:choice -->
            <!-- xsd:element name="VirtualSystemCollectionConfig" type="VirtualSystemCollectionConfigType"> 
                <xsd:annotation> <xsd:documentation> Configuration of a virtual system collection 
                (root node in the assembly), and its child nodes (if any). </xsd:documentation> 
                </xsd:annotation> </xsd:element -->
            <xsd:choice>
                <xsd:element name="VirtualSystemCollectionConfig"
                             type="VirtualSystemCollectionConfigType"
                             maxOccurs="1" minOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>Configuration of a virtual system
                                           collection (root node in the
                                           assembly), and its child nodes (if
                                           any).</xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="VirtualSystemConfig"
                             type="VirtualSystemConfigType" maxOccurs="1"
                             minOccurs="1">
                    <xsd:annotation>
                        <xsd:documentation>Configuration of a virtual
                                           system(root node in the
                        assembly).</xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
                <xsd:element name="PassThroughData" type="PassThroughDataType"></xsd:element>
            </xsd:choice>
            <xsd:element name="IsExalogicDeployment" type="xsd:boolean"
                         minOccurs="0" default="false">
                <xsd:annotation>
                    <xsd:documentation>Flag to specify if deployemnt is an
                                       Exalogic Assembly Deployment.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="OvabDeployerUserEmCredGuid" type="xsd:string"
                         minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="assemblyInstanceName" type="xsd:string"
                       use="required">
            <xsd:annotation>
                <xsd:documentation>Name with which the assembly instance will
                be created. Should be unique throughout the system for the
                target type oracle_assembly_instance.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="ImageDeploymentConfigDataType">
        <xsd:sequence>
            <xsd:choice>
                <xsd:annotation>
                    <xsd:documentation>Imagelist deployment can be done in two
                                       ways. Either specify the Default
                                       Configuration and all the other elements
                                       or only specify the PassThroughData. The
                                       PassThroughData is used to specify the
                                       native Oracle Compute Launch
                                       Plan.</xsd:documentation>
                </xsd:annotation>
                <xsd:element name="DefaultConfiguration"
                             type="HardwareConfigurationType"/>
                <xsd:element name="PassThroughData" type="PassThroughDataType">
                    <xsd:annotation>
                        <xsd:documentation>
                            Use CDATA to specify the native Oracle Compute
                            Launch Plan.
                            <![CDATA[ Launch Plan goes here  ]]>
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
            <xsd:element name="SourceBinary" type="SourceBinaryDataType"
                         minOccurs="0"></xsd:element>
            <xsd:element name="DeploymentTarget" type="DeploymentTargetData"
                         minOccurs="0"></xsd:element>
            <xsd:element name="Instances" type="VirtualMachineListType"
                         minOccurs="0"/>
            <xsd:element name="InstallEMAgent" type="xsd:boolean" minOccurs="0"></xsd:element>
            <xsd:element name="EMAgentConfig" type="EMAgentConfigType"
                         minOccurs="0"></xsd:element>
            <xsd:element name="RelationshipList" type="RelationshipListType"
                         minOccurs="0"></xsd:element>
        </xsd:sequence>
        <xsd:attribute name="namePrefix" type="xsd:string"/>
        <xsd:attribute name="numberOfInstances" type="xsd:int" use="required"/>
    </xsd:complexType>
    <xsd:complexType name="NISType">
      <xsd:complexContent>       
        <xsd:sequence>
            <xsd:element name="Domain" type="xsd:string" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="Servers" type="NISServersListType" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>       
      </xsd:complexContent> 
    </xsd:complexType>
    <xsd:complexType name="NISServersListType">
        <xsd:sequence>
           <xsd:element name="NISServers" type="NISServerType" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="NISServerType">
       <xsd:sequence>
         <xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
         <xsd:element name="Ip" type="xsd:string" minOccurs="1" maxOccurs="1"/>
       </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="NICListType">
    <xsd:complexContent>    
        <xsd:sequence maxOccurs="8">
            <xsd:element name="NetworkInterface" type="NICConfigurationType"
                         maxOccurs="8" minOccurs="1"/>
        </xsd:sequence>        
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="NICConfigurationType"> 
        <xsd:sequence>
            <xsd:choice>
                <xsd:element name="Vnet" type="xsd:string"/>                 
                <xsd:element name="VnetReservation" type="xsd:string"/>
            </xsd:choice>
            <xsd:choice>
                <xsd:element name="Vethernet" type="xsd:string"/>
                <xsd:element name="VethernetId" type="xsd:string"/>
            </xsd:choice>
            <xsd:element name="Options" type="NICOptionsType" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string" use="required">
            <xsd:annotation>
                <xsd:documentation>Network Interface name.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="fromDefinition" type="xsd:boolean">
            <xsd:annotation>
                <xsd:documentation>Denotes if the Network Interface is already
                                   defined in some metadata file associated
                                   with the binary.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>        
    </xsd:complexType>
    <xsd:complexType name="NICOptionsType">
        <xsd:sequence>
            <xsd:element name="Hostname" type="xsd:string" minOccurs="0" maxOccurs="1"/>
            <xsd:element name="Primary" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false"/>
            <xsd:element name="Dns" type="NICDnsType" minOccurs="0" maxOccurs="1"/>
            <xsd:element name="Default_Gateway" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false"/>
            <xsd:element name="Provider" type="xsd:boolean" minOccurs="0" maxOccurs="1" default="false"/>
            <xsd:element name="Network_Route" type="NetworkRouteType" minOccurs="0" maxOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="NICDnsType">
        <xsd:sequence>
            <xsd:element name="Servers" type="xsd:string" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="Search_Domains" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="NetworkRouteType">
         <xsd:sequence>
             <xsd:element name="RoutingRulesList" type="RoutingRulesListType" minOccurs="1" maxOccurs="1"/>  
         </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="RoutingRulesListType">
        <xsd:sequence>
            <xsd:element name="RoutingRules" type="RoutingRuleType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="RoutingRuleType">
        <xsd:sequence>
            <xsd:element name="Type" type="xsd:string" minOccurs="1" maxOccurs="1"/>
            <xsd:element name="Name" type="xsd:string" minOccurs="1" maxOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="VirtualMachineType">
        <xsd:sequence>
            <xsd:element name="InstallEMAgent" type="xsd:boolean"></xsd:element>
            <xsd:element name="EMAgentConfig" type="EMAgentConfigType"></xsd:element>
            <xsd:element name="CustomConfiguration"
                         type="HardwareConfigurationType" maxOccurs="1"
                         minOccurs="0"/>
        </xsd:sequence>
        <xsd:attribute name="name" type="xsd:string"/>
        <xsd:attribute name="customConfigured" type="xsd:boolean"
                       use="required">
            <xsd:annotation>
                <xsd:documentation>Set this flag to True when the VM's Hardware
                                   configuration is overridden. By default the
                                   flag is not set which implies that the
                                   configuration is based on the default
                                   HardwareConfiguration.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="ProductConfigurationSectionType">
        <xsd:sequence>
            <xsd:element name="Properties" type="ProductPropertyListType"
                         maxOccurs="1" minOccurs="0"/>
            <xsd:element name="Version" type="xsd:string"></xsd:element>
            <xsd:element name="FullVersion" type="xsd:string"></xsd:element>
            <xsd:element name="ProductURL" type="xsd:string"></xsd:element>
            <xsd:element name="Vendor" type="xsd:string"></xsd:element>
            <xsd:element name="VendorURL" type="xsd:string"></xsd:element>
            <xsd:element name="EMAgent" type="xsd:boolean"></xsd:element>
        </xsd:sequence>
        <xsd:attribute name="productName" type="xsd:string" use="required"/>
        <xsd:attribute name="description" type="xsd:string"/>
    </xsd:complexType>
    <xsd:complexType name="ProductPropertyListType">
        <xsd:sequence>
            <xsd:element name="Property" type="ProductPropertyType"
                         maxOccurs="unbounded" minOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ProductsListType">
        <xsd:annotation>
            <xsd:documentation>Configuration for various products in the node.</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="Product" type="ProductConfigurationSectionType"
                         maxOccurs="unbounded" minOccurs="1"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ScalabilityConfigurationType">
        <xsd:annotation>
            <xsd:documentation>Scalability configuration for the virtual
            system. If none is specified, default will be applied
            using the assembly
meta-data.</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="minNum" type="xsd:int" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Minimum number of instances to be
                                       deployed.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="maxNum" type="xsd:int" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Maximum number of instances to be
                                       deployed.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="deploy" type="xsd:boolean" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Whether instance to be
                    deployed.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="HaEnabled" type="xsd:boolean" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Whether HA enabled.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="initial" type="xsd:int" maxOccurs="1"
                         minOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Initial number of instances to be
                    deployed.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="autoScalable" type="xsd:boolean">
                <xsd:annotation>
                    <xsd:documentation>Flag to specify if the node will have
                                       auto-scaling enabled. If the node is
                                       auto-scaling, it is required to specify
                                       configuration for all the child nodes
                                       (limited by the max number
                                       instances).</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="vmNamePrefix" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Name prefix to be used for child
                                       instances.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="ConfigurationData" type="ConfigurationDataType">
        <xsd:annotation>
            <xsd:documentation>Place holder element for various types of
            request config data.</xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:complexType name="StoragerequestType"/>
    <xsd:complexType name="VirtualSystemCollectionConfigType">
        <xsd:annotation>
            <xsd:documentation>Configuration of a virtual system collection
                               (root node in the assembly), and its child nodes
                               (if any).</xsd:documentation>
        </xsd:annotation>
        <xsd:complexContent>
            <xsd:extension base="BaseNodeConfigType">
                <xsd:sequence>
                    <xsd:element name="VirtualSystemConfig"
                                 type="VirtualSystemConfigType"
                                 maxOccurs="unbounded" minOccurs="0"/>
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="VirtualSystemConfigType">
        <xsd:annotation>
            <xsd:documentation>Configuration of a virtual system, and its child
                               instances (if multiple instances are
                               deployed).</xsd:documentation>
        </xsd:annotation>
        <xsd:complexContent>
            <xsd:extension base="BaseNodeConfigType">
                <xsd:sequence>
                    <xsd:element name="ScalabilityConfiguration"
                                 type="ScalabilityConfigurationType"
                                 minOccurs="0" maxOccurs="1">
                        <xsd:annotation>
                            <xsd:documentation>Scalability configuration for
                            the virtual system. If none is specified, default
                            will be applied using the assembly 
                            meta-data.</xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="HardwareConfiguration"
                                 type="HardwareConfigurationType" minOccurs="0"
                                 maxOccurs="1">
                        <xsd:annotation>
                            <xsd:documentation>Common hardware configuration
                            for the guest vm (and its instances,
                            if any).</xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                    <xsd:element name="Instances"
                                 type="ChildVirtualSystemConfigType"
                                 minOccurs="0" maxOccurs="unbounded">
                        <xsd:annotation>
                            <xsd:documentation>Instances for the deployment.
                                               Only required if multiple
                                               instances are being deployed for
                                               the virtual system, and its not
                                               marked to be auto-scalable.
                            </xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
                <xsd:attribute name="targetName" type="xsd:string"
                               use="required">
                    <xsd:annotation>
                        <xsd:documentation>Name to be assigned for the target
                        in deployment. If the node has multiple instances of
                        deployments, this will be the tier instance name,
                        otherwise,the guest vm name.</xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
                <xsd:attribute name="vmInstance" type="xsd:boolean"></xsd:attribute>
                <xsd:attribute name="followsMaster" type="xsd:boolean"></xsd:attribute>
                <xsd:attribute name="agentInstallationType"
                               type="EMAgentInstallationType"></xsd:attribute>
                <xsd:attribute name="agentPushInstallationEnabled"
                               type="xsd:boolean"></xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="ChildVirtualSystemCollectionConfigType">
        <xsd:annotation>
            <xsd:documentation>Configuration for a child instance of virtual
                               system deployment.</xsd:documentation>
        </xsd:annotation>
        <xsd:complexContent>
            <xsd:extension base="VirtualSystemCollectionConfigType">
                <xsd:attribute name="targetName" type="xsd:string">
                    <xsd:annotation>
                        <xsd:documentation>Target name for the tier instance
                                           target that will be created.
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="BaseNodeConfigType">
        <xsd:annotation>
            <xsd:documentation>Common configuration applicable to virtual
            system and virtual system collection.</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="deploymentOption" type="xsd:string" minOccurs="0"
                         maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Deployment option to be used for
                                       configuring the assembly. The default
                                       values from the default option will be
                                       picked, unless the user over-rides
                                       them.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="ProductConfiguration" type="ProductsListType"
                         minOccurs="0" maxOccurs="1">
                <xsd:annotation>
                    <xsd:documentation>Configuration for various products in
                    the node.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string" use="required">
            <xsd:annotation>
                <xsd:documentation>Unique identifier for the node in assembly
                                   meta-data.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:simpleType name="QosPriorityType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="0"/>
            <xsd:enumeration value="1"/>
            <xsd:enumeration value="2"/>
            <xsd:enumeration value="3"/>
            <xsd:enumeration value="4"/>
            <xsd:enumeration value="5"/>
            <xsd:enumeration value="6"/>
            <xsd:enumeration value="7"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="ChildVirtualSystemConfigType">
        <xsd:annotation>
            <xsd:documentation>Configuration of a virtual system (child node of
                               a virtual system having multiple
                               deployments).</xsd:documentation>
        </xsd:annotation>
        <xsd:complexContent>
            <xsd:extension base="BaseNodeConfigType">
                <xsd:sequence>
                    <xsd:element name="HardwareConfiguration"
                                 type="HardwareConfigurationType">
                        <xsd:annotation>
                            <xsd:documentation>Hardware configuration for the
                                               guest vm.</xsd:documentation>
                        </xsd:annotation>
                    </xsd:element>
                </xsd:sequence>
                <xsd:attribute name="targetName" type="xsd:string"
                               use="required">
                    <xsd:annotation>
                        <xsd:documentation>Name with which the guest vm target
                                           will be created for this
                                           instance.</xsd:documentation>
                    </xsd:annotation>
                </xsd:attribute>
                <xsd:attribute name="followsMaster" type="xsd:boolean"/>
                <xsd:attribute name="agentInstallationType"
                               type="EMAgentInstallationType"></xsd:attribute>
                <xsd:attribute name="agentPushInstallationEnabled"
                               type="xsd:boolean"></xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="AssemblyNetworkConfigListType">
        <xsd:annotation>
            <xsd:documentation>List of mappings for the assembly networks
                               (defined in assembly meta-data) and
                               corresponding network on the target.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="AssemblyNetwork" type="AssemblyNetworkType"
                         minOccurs="0" maxOccurs="unbounded">
                <xsd:annotation>
                    <xsd:documentation>Mapping for the assembly network
                                       defined in assembly meta-data) and
                                       corresponding network on the
                                       target.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="AssemblyNetworkType">
        <xsd:attribute name="name" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation>Name of the assembly network.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
        <xsd:attribute name="backendNetwork" type="xsd:string">
            <xsd:annotation>
                <xsd:documentation>Backend network on the target.</xsd:documentation>
            </xsd:annotation>
        </xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="DeploymentTargetData">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>EM Target Name</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Id" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>EM Target GUID</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Uri" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Oracle Compute Target
                    URI</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="Type" type="DeploymentTargetType"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:simpleType name="DeploymentTargetType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="oracle_nimbula_site"/>
            <xsd:enumeration value="oracle_nimbula_cluster"/>
            <xsd:enumeration value="oracle_nimbula_node"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="EMAgentConfigType">
    <xsd:complexContent>   
        <xsd:sequence>
            <xsd:element name="PlatformCode" type="xsd:int"></xsd:element>
            <xsd:element name="InstallBaseDirectory" type="xsd:string"></xsd:element>
            <xsd:element name="InstanceDirectory" type="xsd:string"></xsd:element>
            <xsd:element name="Port" type="xsd:int"></xsd:element>
            <xsd:element name="InstallUserName" type="xsd:string"></xsd:element>
            <xsd:element name="InstallUserPassword" type="xsd:string"></xsd:element>
            <xsd:element name="InstallUserPasswordGuid" type="xsd:string"></xsd:element>
            <xsd:element name="RootHostCredential" type="HostCredentialType"></xsd:element>
            <xsd:element name="OracleHostCredential" type="HostCredentialType"></xsd:element>
            <xsd:element name="AdditionalParams" type="xsd:string"></xsd:element>
            <xsd:element name="SshTimeoutInMinutes" type="xsd:int"></xsd:element>
            <xsd:element name="PrivilegeDelegationSettings" type="xsd:string"></xsd:element>
            <xsd:element name="SshKey" type="xsd:string"></xsd:element>
            <xsd:element name="SshKeyGuid" type="xsd:string"></xsd:element>
            <xsd:element name="RootSSHCredential" type="SSHCredentialType"></xsd:element>
            <xsd:element name="OracleSSHCredential" type="SSHCredentialType"></xsd:element>
       </xsd:sequence>        
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="StorageTarget">
        <xsd:attribute name="name" type="xsd:string"/>
        <xsd:attribute name="type" type="StorageTargetType"/>
    </xsd:complexType>
    <xsd:simpleType name="StorageTargetType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="DEFAULT"/>
            <xsd:enumeration value="STORAGE_REPOSITORY"/>
            <xsd:enumeration value="STORAGE_ARRAY"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ModeType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Read-Write"/>
            <xsd:enumeration value="Read-Only"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="IPAssignmentModeType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Dhcp"/>
            <xsd:enumeration value="Static"/>
            <xsd:enumeration value="Network Profile"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="EMAgentInstallationType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="Push Agent Installation"/>
            <xsd:enumeration value="RPM Installation"/>
            <xsd:enumeration value="No Agent Installation"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="StorageQoSType">
        <xsd:attribute name="name" type="xsd:string"></xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="ProductPropertyType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Description" type="xsd:string"></xsd:element>
            <xsd:element name="Required" type="xsd:boolean"></xsd:element>
            <xsd:element name="Value" type="xsd:string"></xsd:element>
            <xsd:element name="ValueGuid" type="xsd:string"></xsd:element>
            <xsd:element name="Secret" type="xsd:boolean"></xsd:element>
        </xsd:sequence>
        <xsd:attribute name="id" type="xsd:string"></xsd:attribute>
    </xsd:complexType>
    <xsd:simpleType name="PlanVersionType">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="[0-9]{1,4}\.[0-9]{1,4}\.[0-9]{1,4}">
                <xsd:annotation>
                    <xsd:documentation>i.e. x.y.z where x, y, and z are "small"
                                       integers</xsd:documentation>
                </xsd:annotation>
            </xsd:pattern>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="RelationshipDataType">
        <xsd:sequence>
            <xsd:element name="Type" type="RelationshipType">
                <xsd:annotation>
                    <xsd:documentation></xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="FirstServerName" type="xsd:string"></xsd:element>
            <xsd:element name="SecondServerName" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="RelationshipListType">
    <xsd:complexContent>    
        <xsd:sequence>
            <xsd:element name="Relationship" type="RelationshipDataType"
                         maxOccurs="unbounded" minOccurs="0"></xsd:element>
        </xsd:sequence>        
    </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="AttributeListType">
    <xsd:complexContent>        
        <xsd:sequence>
            <xsd:element name="Attribute" type="AttributeType"
                         maxOccurs="unbounded" minOccurs="0"></xsd:element>
        </xsd:sequence>        
    </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="AttributeType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Value" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ImageListType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Id" type="xsd:string"></xsd:element>
            <xsd:element name="Entry" type="xsd:string"></xsd:element>
            <xsd:element name="UseDefaultEntry" type="xsd:boolean"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ShapeType">
    <xsd:complexContent>    
        <xsd:sequence>        
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Id" type="xsd:string"></xsd:element>
        </xsd:sequence>        
        </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="QuotaType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Type" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="AccountType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Id" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="BackendNetworkType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Id" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:simpleType name="PlanType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="NimbulaImage"></xsd:enumeration>
            <xsd:enumeration value="NimbulaAssembly"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="PassThroughDataType">
        <xsd:annotation>
            <xsd:documentation>Element to specify the pass-through data.
Example: Oracle Compute Launch Plan , OVAB Deployment Plan</xsd:documentation>
        </xsd:annotation>
        <xsd:sequence>
            <xsd:element name="planData" type="xsd:string">
                <xsd:annotation>
                    <xsd:documentation>Use CDATA to add the pass-through
                    data.</xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:simpleType name="RelationshipType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="same_node"></xsd:enumeration>
            <xsd:enumeration value="different_node"></xsd:enumeration>
            <xsd:enumeration value="same_cluster"></xsd:enumeration>
            <xsd:enumeration value="different_cluster"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="SourceBinaryDataType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Type" type="SourceBinaryType"></xsd:element>
            <xsd:element name="Version" type="xsd:string"></xsd:element>
            <xsd:choice>
                <xsd:element name="AssemblyBinary"
                             type="AssemblyBinaryDataType"></xsd:element>
                <xsd:element name="ImageListBinary"
                             type="ImageListBinaryDataType"></xsd:element>
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="AssemblyBinaryDataType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Id" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ImageListBinaryDataType">
        <xsd:sequence>
            <xsd:element name="Name" type="xsd:string"></xsd:element>
            <xsd:element name="Id" type="xsd:string"></xsd:element>
            <xsd:element name="Entry" type="xsd:string"></xsd:element>
            <xsd:element name="DefaultEntry" type="xsd:string"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:simpleType name="SourceBinaryType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="IMAGELIST"></xsd:enumeration>
            <xsd:enumeration value="ASSEMBLY"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:complexType name="OrchestrationDeploymentConfigDataType">
        <xsd:sequence>
            <xsd:element name="Account" type="xsd:string"></xsd:element>
            <xsd:element name="InstallEMAgent" type="xsd:boolean"></xsd:element>
            <xsd:element name="EMAgentConfig" type="EMAgentConfigType"></xsd:element>
            <xsd:element name="ObjectPlanDependencyList"
                         type="ObjectPlanDependencyListType"></xsd:element>
            <xsd:choice>
                <xsd:annotation>
                    <xsd:documentation>Orchestration deployment can be done in
                                       two ways. Either specify the Default
                                       Configuration and all the other elements
                                       or only specify the PassThroughData. The
                                       PassThroughData is used to specify the
                                       native Nimula Orchestration
                                       Plan.</xsd:documentation>
                </xsd:annotation>
                <xsd:element name="ObjectPlanList" type="ObjectPlanListType"></xsd:element>
                <xsd:element name="PassThroughData" type="PassThroughDataType">
                    <xsd:annotation>
                        <xsd:documentation>
                            Ue CDATA to specify the native Orchestration Plan.
                            <![CDATA[ Orchestration Plan goes here  ]]>
                        </xsd:documentation>
                    </xsd:annotation>
                </xsd:element>
            </xsd:choice>
        </xsd:sequence>
        <xsd:attribute name="namePrefix" type="xsd:string"></xsd:attribute>
        <xsd:attribute name="description" type="xsd:string"></xsd:attribute>
        
    </xsd:complexType>
    <xsd:complexType name="ObjectPlanDependencyListType">
    <xsd:complexContent>        
        <xsd:sequence>
            <xsd:element name="ObjectPlanDependency"
                         type="ObjectPlanDependencyDataType"
                         maxOccurs="unbounded" minOccurs="0"></xsd:element>
        </xsd:sequence>    
    </xsd:complexContent>
    </xsd:complexType>
    <xsd:complexType name="ObjectPlanDependencyDataType">
        <xsd:sequence>
            <xsd:element name="Type" type="ObjectPlanDependencyType">
                <xsd:annotation>
                    <xsd:documentation></xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="ObjectPlanName" type="xsd:string"></xsd:element>
            <xsd:element name="ToObjectPlanName" type="xsd:string"></xsd:element>
        </xsd:sequence>        
    </xsd:complexType>
    <xsd:simpleType name="ObjectPlanDependencyType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="depends"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="ObjectPlanType">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="account"></xsd:enumeration>
            <xsd:enumeration value="dns/key"></xsd:enumeration>
            <xsd:enumeration value="dns/record"></xsd:enumeration>
            <xsd:enumeration value="dns/reservation"></xsd:enumeration>
            <xsd:enumeration value="dns/zone"></xsd:enumeration>
            <xsd:enumeration value="ip/reservation"></xsd:enumeration>
            <xsd:enumeration value="launchplan"></xsd:enumeration>
            <xsd:enumeration value="permission/object"></xsd:enumeration>
            <xsd:enumeration value="permission/user"></xsd:enumeration>
            <xsd:enumeration value="orchestration"></xsd:enumeration>
            <xsd:enumeration value="storage/volume"></xsd:enumeration>
            <xsd:enumeration value="storageattachment"></xsd:enumeration>
            <xsd:enumeration value="secapplication"></xsd:enumeration>
            <xsd:enumeration value="seciplist"></xsd:enumeration>
            <xsd:enumeration value="seclist"></xsd:enumeration>
            <xsd:enumeration value="secrule"></xsd:enumeration>
            <xsd:enumeration value="vethernet"></xsd:enumeration>
            <xsd:enumeration value="vservice/*"></xsd:enumeration>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="HAPolicyType">            
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="active"></xsd:enumeration>
            <xsd:enumeration value="monitor"></xsd:enumeration>
            <xsd:enumeration value="none"></xsd:enumeration>
        </xsd:restriction>        
    </xsd:simpleType>
    <xsd:complexType name="HA">
    <xsd:attribute name="value" type="HAPolicyType"></xsd:attribute>    
    </xsd:complexType>
    <xsd:complexType name="ObjectPlanListType">
        <xsd:sequence>
            <xsd:element name="ObjectPlan" type="ObjectPlanDataType"
                         maxOccurs="10"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ObjectPlanDataType">
        <xsd:sequence>
            <xsd:element name="Type" type="ObjectPlanType"></xsd:element>
            <xsd:element name="HAPolicy" type="HA"></xsd:element>            
            <xsd:element name="ObjectMemberList" type="ObjectMemberListType"></xsd:element>
            <xsd:element name="GlobalObjectMember"
                         type="AbstractObjectMemberType"></xsd:element>
        </xsd:sequence>
        <xsd:attribute name="label" type="xsd:string"></xsd:attribute>
    </xsd:complexType>
    <xsd:complexType name="ObjectMemberListType">
        <xsd:sequence>
            <xsd:element name="ObjectMember" type="AbstractObjectMemberType"
                         maxOccurs="unbounded" minOccurs="1"></xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="AbstractObjectMemberType" abstract="true">
        <xsd:annotation>
            <xsd:documentation>This is an abstract type that has to be extended
                               by implementing member types for different kinds
                               of objects eg. launchplan, storage
                               etc.</xsd:documentation>
        </xsd:annotation>
       
    </xsd:complexType>    
       
    <xsd:complexType name="LaunchPlanMemberType">
        <xsd:annotation>
            <xsd:documentation>This is the implementation of
                               AbstractObjectMemberType corresponding to object
                               of type launchplan. Similar implementations for
                               other objects should be used for other
                               cases.</xsd:documentation>
        </xsd:annotation>
        <xsd:complexContent>
            <xsd:extension base="AbstractObjectMemberType">  
            <xsd:sequence>
                    <xsd:element name="InstallEMAgent" type="xsd:boolean"></xsd:element>
                    <xsd:element name="EMAgentConfig" type="EMAgentConfigType"></xsd:element>
                    <xsd:element name="NumberOfInstances" type="xsd:string" ></xsd:element>
                    <xsd:element name="ImageList" type="xsd:string"></xsd:element>
                    <xsd:element name="ImageListEntry" type="xsd:string"></xsd:element>
                    <xsd:element name="DeploymentTarget" type="DeploymentTargetData"></xsd:element>
                    <xsd:element name="DefaultConfiguration" type="HardwareConfigurationType"></xsd:element>
                    <xsd:element name="Instances" type="VirtualMachineListType"></xsd:element>
                    <xsd:element name="AffinityRelationshipList"
                                 type="RelationshipListType"></xsd:element>
                </xsd:sequence>
                <xsd:attribute name="namePrefix" type="xsd:string"></xsd:attribute>
            </xsd:extension>
        </xsd:complexContent>        
    </xsd:complexType>
 
    <xsd:complexType name="SSHCredentialType">
        <xsd:annotation>
            <xsd:documentation>SSH Credentials specifying username, public and
                private keys or credential reference GUID
            </xsd:documentation>
        </xsd:annotation>
        <xsd:choice>
            <xsd:sequence>
                <xsd:element name="Username" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
                <xsd:element name="PublicSSHKey" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
                <xsd:element name="PrivateSSHKey" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
            </xsd:sequence>
            <xsd:sequence>
                <xsd:element name="EMCredentialReferenceGUID" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
            </xsd:sequence>
        </xsd:choice>
    </xsd:complexType>
 
    <xsd:complexType name="HostCredentialType">
        <xsd:annotation>
            <xsd:documentation>Host Credentials specifying the username and
                password or credential reference GUID
            </xsd:documentation>
        </xsd:annotation>
        <xsd:choice>
            <xsd:sequence>
                <xsd:element name="Username" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
                <xsd:element name="Password" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
            </xsd:sequence>
            <xsd:sequence>
                <xsd:element name="EMCredentialReferenceGUID" type="xsd:string" minOccurs="1" maxOccurs="1"></xsd:element>
            </xsd:sequence>
        </xsd:choice>
    </xsd:complexType>
 
</xsd:schema>