Alert.png The wiki is deprecated and due to be decommissioned by the end of September 2022.
The content is being migrated to other supports, new updates will be ignored and lost.
If needed you can get in touch with EGI SDIS team using operations @ egi.eu.

Difference between revisions of "Federated Cloud APIs and SDKs"

From EGIWiki
Jump to navigation Jump to search
Line 47: Line 47:
== CLI ==
== CLI ==


[[https://wiki.egi.eu/wiki/rOCCI:ROCCI rOCCI]] offers a Command-Line Interface to interact with OCCI compliant servers with support to EGI Federated Cloud authentication and extensions to the standard (contextualization). [[HOWTO11|HOWTO 11]] contains detailed instructions on how to install and use it.
[[rOCCI:ROCCI rOCCI]] offers a Command-Line Interface to interact with OCCI compliant servers with support to EGI Federated Cloud authentication and extensions to the standard (contextualization). [[HOWTO11|HOWTO 11]] contains detailed instructions on how to install and use it.


= OpenStack =
= OpenStack =

Revision as of 12:31, 23 October 2015

This page includes pointers for application development on the EGI Federated Cloud

OCCI

OCCI is the standard API for accessing the EGI Federated Cloud resources.

API

The Open Cloud Computing Interface (OCCI) is a RESTful Protocol and API designed to facilitate interoperable access to, and query of, cloud-based resources across multiple resource providers and heterogeneous environments. The formal specification is maintained and actively worked on by OGF’s OCCI-WG.

EGI Federated Cloud uses v1.1 of OCCI's specification, which is defined in three documents:

  • OCCI Core that describes the formal definition of the OCCI core model,
  • OCCI HTTP Rendering defines how to interact with the OCCI Core Model using the RESTful OCCI API
  • OCCI Infrastructure contains the definition of the OCCI Infrastructure extension for the IaaS domain

The OCCI Infrastructure is further extended with two new mixins for contextualization in EGI Federated Cloud:

term scheme attributes
user_data http://schemas.openstack.org/compute/instance# org.openstack.compute.user_data: string that holds base64 encoded data to be available at the VM upon instantiation
public_key http://schemas.openstack.org/instance/credentials# org.openstack.credentials.publickey.name: string with the name of the public key (optional)
org.openstack.credentials.publickey.data: string with the public key

The upcoming v1.2 of OCCI will be also supported on EGI resources.

SDKs

SDKs helps you to create applications that use the EGI Federated Cloud in the language of your choice. If your language or use case is not supported by the following SDKs, you can use directly the API. Requests for new SDKs are welcomed.

Java

jOCCI
jOCCI is an independent OCCI implementation by the authors of rOCCI. It satisfies the demand for a Java library, replacing the previous alternative based on JRuby. Currently in development, it is available as source from Github.

Ruby

rOCCI
rOCCI framework implements the OCCI class structure in Ruby, which allows developers to work with OCCI concepts natively. rOCCI-api takes care of transporting OCCI messages, currently supporting HTTP as transport protocol. rOCCI-api handles EGI Fedederated Cloud authentication on behalf of the developer.

CLI

rOCCI:ROCCI rOCCI offers a Command-Line Interface to interact with OCCI compliant servers with support to EGI Federated Cloud authentication and extensions to the standard (contextualization). HOWTO 11 contains detailed instructions on how to install and use it.

OpenStack

OpenStack sites of the EGI Federated Cloud can provide access through the native OpenStack API.

API

OpenStack API documentation is available at OpenStack developer pages. EGI Federated Cloud supports the usage of the Compute (nova) v2.1 API. Using the nova API requires a valid token first, that can be obtained as described below.

Authentication

SDKs

python

OpenStack python-novaclient
python-novaclient provides a client (library and command line) for accessing nova endpoints. A VOMS extension allows the use of X.509 proxies for authentication.


CLI

TO BE COMPLETED

Authentication

EGI Federated Cloud uses X.509 proxy certificates with VOMS extensions, but each provider in the federation has its own mechanisms to accept those credentials. To avoid dealing with the differences in authentication for each provider we recommend using the SDKs and CLIs described above that automatically handle the differences. The current mechanisms to get access to the services are:

rOCCI server (OpenNebula)
rOCCI expects that the connection is done with the user proxy as client-side certificate. rOCCI will authenticate/authorize the client with that certificate.
OCCI-OS/ooi/snf-occi (OpenStack/Synnefo)
These systems expect that a valid token is sent to the endpoint in the X-Auth-Token header, if no valid token is found, the endpoint should return in the WWW-Authenticate header the URI of the Keystone service used to obtain the tokens in the folowing form: WWW-Authenticate: Keystone uri=<KEYSTONE URI> where <KEYSTONE URI> is the location of the server (e.g. https://keystone.ifca.es:5000/). Keystone supports several authentication methods, see next section on how to get a token with a proxy certificate with Keystone.

Keystone VOMS authentication

Keystone-VOMS supports getting tokens with X.509 proxy certificates with proxy extensions. In order to get an unscoped token, you must POST a JSON request to /v2.0/tokens of your Keystone server with the proxy as client-side certificate and with the following body:

{
    "auth": {
        "voms": "true"
    }
}

Response from server is documented at Keystone API v2 Authenticate. Unscoped tokens allow discovery of the supported tenants for the user (check Keystone API v2, list tenants) but not the usage of other OpenStack services. For that you will need to get a scoped one by submitting a POST with the following JSON document:

{
    "auth": {
        "voms": "true",
        "tenantNane": "TenantForTheVo",
    }
}

See an example of the complete authentication process at the Keystone-VOMS documentation