Thursday, April 21, 2016

#494 IaaS - Rapid provisioning of vms thru Orchestration




What is Orchestration?

From the Oracle docs (Bold/Italic) -

An orchestration defines the attributes and interdependencies of a collection of compute, networking, and storage resources in Oracle Compute Cloud Service. You can use orchestrations to automate the provisioning and lifecycle operations of an entire virtual compute topology.
For example, you can use orchestrations to create and manage a collection of instances hosting a multitiered application stack with all the necessary networking, storage, and security settings.

Some Terminology up front

oplan - Object plan, the primary building block of an orchestration. 
An orchestration can have up to 10 oplans.

obj_typeAn object type refers to the Oracle Compute Cloud Service resource that you want to create. 

Here is the list of valid obj_types - 



objects - The objects attribute defines the properties or characteristics of the the Oracle Compute Cloud Service resource that you want to create, as specified by the obj_type attribute.

For example, if you want to create a storage volume, the obj_type would be storage/volume, and the objects would include size and bootable. If you want to create an instance, the obj_type would be launchplan, and the objects would include instances, along with instance-specific attributes, such as imagelist and shape.



You can create relationships between different oplans, e.g. one plan to create the instance, the other to create the storage volume.

Simple Example 

This simple example will have 2 parts -

  1. Instance Orchestration to manage my VM instance
  2. Volume Orchestration to manage storage volumes

From what I said earlier, would could also include a master that ties the other 2 together via a relationship. The master will be detailed later.

So what does it look like?

Let's start with the volume orchestration -

I begin with a screenshot of the UI for creating Storage Volumes -



Here is the equivalent orchestration -

{
    "relationships": [],
    "status": "ready",
    "account": "/YourIdentityDomain/default",
    "description": "Creating a bootable storage volume for the nc-oel 1st disk",
    "schedule": {
        "start_time": "2016-03-16T22:07:55Z",
        "stop_time": null
    },
    "uri": "https://YourRESTEndpoint/orchestration/Compute-YourIdentityDomain/yourUser/nc-oel-bootvolume",
    "oplans": [
        {
            "status": "ready",
            "info": {
                "errors": {}
            },
            "obj_type": "storage/volume",
            "ha_policy": "monitor",
            "label": "nc-oel-bootvolume",
            "objects": [
                {
                    "status": "Online",
                    "account": "/Compute-YourIdentityDomain/default",
                    "managed": true,
                    "name": "/Compute-YourIdentityDomain/yourUser/nc-oel-bootvolume",
                    "tags": [],
                    "bootable": true,
                    "hypervisor": null,
                    "description": null,
                    "status_detail": "The storage volume is online.",
                    "quota": null,
                    "uri": null,
                    "imagelist_entry": 1,
                    "storage_pool": "/YourStoragePool/iscsi/thruput_1",
                    "machineimage_name": "/oracle/public/OL-6.6-20GB-x11-RD",
                    "status_timestamp": "2016-03-16T22:26:07Z",
                    "shared": false,
                    "imagelist": "/oracle/public/OL-6.6-20GB-x11-RD",
                    "writecache": false,
                    "properties": [
                        "/oracle/public/storage/default"
                    ],
                    "size": "23622320128"
                }
            ],
            "status_timestamp": "2016-03-16T22:26:26Z"
        }
    ],
    "info": {
        "errors": {}
    },
    "status_timestamp": "2016-03-16T22:26:26Z",
    "name": "/YourIdentityDomain/yourUser/nc-oel-bootvolume",
    "_paasResource": false,
    "_personalResource": false
}


Now, let's look at the instance orchestration -
Again, here is the creation UI -
















Here is the equivalent orchestration -

{
  "relationships" : [ ],
  "account" : "/YourIdentityDomain/default",
  "description" : "Create instance that represents on OEL 6.6",
  "schedule" : {
    "start_time" : "2016-03-16T22:33:32Z",
    "stop_time" : null
  },
  "oplans" : [ {
    "obj_type" : "launchplan",
    "ha_policy" : "active",
    "label" : "nc-oel-instance",
    "objects" : [ {
      "instances" : [ {
        "networking" : {
          "eth0" : {
            "dns" : [ "nc-oel" ],
            "vethernet" : "/oracle/public/default",
"nat": "ippool:/oracle/public/ippool"
          }
        },
        "name" : "/YourIdentityDomain/yourUser/nc-oel-instance/cfa3dfba-c071-46d4-8b10-247eec1ab3c9",
        "boot_order" : [ 1 ],
        "storage_attachments" : [ {
          "volume" : "/YourIdentityDomain/yourUser/nc-oel-bootvolume",
          "index" : 1
        } ],
        "label" : "nc-oel-instance",
        "shape" : "oc3",
        "imagelist" : "/oracle/public/OL-6.6-20GB-x11-RD",
        "sshkeys" : [ "/YourIdentityDomain/yourUser/yourPublicKey" ],
        "tags" : [ ]
      } ]
    } ]
  } ],
  "name" : "/Compute-YourIdentityDomain/yourUser/nc-oel-instance"
}





















I added a master - Here we define the dependency between instance and volume creation.
Essentially, we need to create the volume before we can create the instance.


{
"name": "/YourIdentityDomain/yourUser/master",
"oplans": [
{
"label": "instance",
"obj_type": "orchestration",
"ha_policy": "monitor",
"objects": [
{
"name": "/YourIdentityDomain/yourUser//nc-oel-instance"
}
]
},
{
"label": "volume",
"obj_type": "orchestration",
"ha_policy": "monitor",
"objects": [
{
"name": "/YourIdentityDomain/yourUser/nc-oel-bootvolume"
}
]
}
],
"relationships": [
{
"oplan": "instance",
"to_oplan": "volume",
"type": "depends"
}
]
}

Now, normally when I upload orchestrations they execute, creating the relevant
resources. They then appear with the status "Ready".








Note, mine have the status stopped. I stopped these, via the context sensitive menu.
Stopping involves destroying the resources previously created.

Now I click on the menu for master -
















No comments: