Hurtle Cloud Controller API
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
adapters
api
doc
etc
tests
.gitignore
.travis.yml
LICENSE
MANIFEST.in
README.md
app.py
requirements.txt
run_tests.bat
run_tests.sh
runme.py
setup.py
test_requirements.txt

README.md

Installation Instructions

The following installation instructions have been tested and verified with the centos:7 docker image. Other OS should work just fine, as long as they provide you with a way of installing python.

# install the epel repo, it contains python-pip
yum install epel-release

# get git and pip
yum install git python-pip

# clone this repo
git clone https://github.com/icclab/hurtle_cc_api.git

# install the dependencies
cd hurtle_cc_api ; python setup.py install

You might have to allow the Nothbound API of the CC through your filewall. Here is an example for iptables:

iptables -I INPUT -p tcp --dport 8888 -j ACCEPT

The Northbound API is now exposed on http://localhost:8888. Make sure the port is accessible through the firewall:

[General]

# Use either "OpenShift3" or "OpenShift2" here
platform=OpenShift3   

[OpenShift2]  

# The URI for your OpenShift 2 installation
uri=https://10.10.10.53:443/  

[OpenShift3] 

# The URI for your OpenShift 3 installation
uri=https://opsv3.cloudcomplab.ch:8443 

# The domain for your apps
domain=.apps.opsv3.cloudcomplab.ch 

# The namespace to use
namespace=test 

# Enable/Disable verification of SSL certificates
verify=False 

The Northbound API is now up and running. If you run it locally, you will reach it here: http://localhost:8888.

Creating an Application / SO instance

The creation of an application or SO instance changes slightly if you use OpenShift 2 or OpenShift 3.

OpenShift 2

SM should trigger the creation of a new app/SO names 'test' - here demonstrated using curl:

$ curl -X POST http://localhost:8888/app/ \
  -H 'Category: app; scheme="http://schemas.ogf.org/occi/platform#"' \
  -H 'Category: python-2.7; scheme="http://schemas.openshift.com/template/app#"' \
  -H 'Category: medium; scheme="http://schemas.openshift.com/template/app#"' \
  -H 'X-OCCI-Attribute: occi.app.name=test' \
  -H 'Content-Type: text/occi'

This will return a 201 HTTP code and the location for the new SO app. Now you can retrieve the newly generated app:

$ curl -X GET http://localhost:8888/app/<location from last call> \
  -H 'Accept: text/occi'

Finally prep the SO bundle - note the git URI (Given with the attribute occi.app.repo) provided in the last call:

$ git clone <URI from above>
$ cd test

This will create a folder with the skeleton of your service orchestrator. Change it so it'll have the SO interface you would like it to have, add the templates and orchestrating code. After making a change, add, commit, and push your changes.

$ git add .
$ git commit -m 'My changes'
$ git push

Your SO should now be up and running and reachable under the DNS entry returned by the OCCI interface. Now deployment, provisioning, etc can be triggered from the SM towards the SO instance.

When you want to restart the application do a stop and start:

$ curl - X POST http://localhost:8888/app/<location from last call>?action=stop
-H 'Category: stop; scheme="http://schemas.ogf.org/occi/platform/app/action#"' \
-H 'Content-Type: text/occi'

For updating your SO bundle simple do:

$ git push

OpenShift 3

For OpenShift 3, a SM can request the instanciation of a docker image available on docker hub, here demonstrated via python

import requests
auth = ('demo', 'demopassword')
heads = {'Category': 'app; scheme="http://schemas.ogf.org/occi/platform#"', 
		 'Content-Type': 'text/occi', 'Accept': 'text/occi', 
		 'X-OCCI-Attribute': 'occi.app.name="sample-so", occi.app.image="dizz/hurtle-sample-so", occi.app.env="DESIGN_URI=http://bart.cloudcomplab.ch:35357/v2.0"'}

host = 'http://0.0.0.0:8888'

To see what this CC offers:

r = requests.get(host+'/-/', headers=heads, auth=auth)

To request the instanciation of an SO/Docker Image:

r = requests.post(host+'/app/', headers=heads, auth=auth)

Note that the image that should be instanciated is supplied via the headers. The new location will be returned also via the headers.

To get the details of your instance:

r2 = requests.get(r.headers['location'], auth=auth, headers=heads)

To request its deletion:

r = requests.delete(r.headers['location'], auth=auth, headers=heads)

Tests

To run the tests, make sure you got the required dev dependencies installed:

pip install -r test_requirements.txt

Then you can run the tests:

nosetests

Supported by