open cloud computing interface
TRANSCRIPT
Open Cloud Computing
Interface
Jean Parpaillon
Inria Research Engineer
OGF-44, EGI Spring Conference, May 2015, Lisbon
21 May 2015 OGF-44 / EGI Spring Conference
REST API : a user point of view
21 May 2015 OGF-44 / EGI Spring Conference
REST API : a user point of view
● Data format
– JSON format– XML format– Scalar data types (string, integer, float, etc)
● Data access protocol
– Filtering– Sorting– Pagination– Authnz (tokens, etc), return codes, etc.
● Finally...
– Application level : data types (structures, relations, etc)
21 May 2015 OGF-44 / EGI Spring Conference
REST API : a user point of view
● Data format
– JSON format– XML format– Scalar data types (string, integer, float, etc)
● Data access protocol
– Filtering– Sorting– Pagination– Authnz (tokens, etc), return codes, etc.
● Finally...
– Application level : data types (structures, relations, etc)
Schemas ?
One to rule them all ?
A single meta-model ?
Let's speak about a standard ?
21 May 2015 OGF-44 / EGI Spring Conference
Let's speak about a standard for REST
● A standard
– Is not a catalog of schemas– Is not a constraint for developers– Must be implemented (implementable)
● A good standard
– Should allow to concentrate on the design, not the implementation details
– Allow to build an ecosystem– Allow to accelerate the development, not the contrary
21 May 2015 OGF-44 / EGI Spring Conference
The Open Cloud Computing Interface
● OCCI is typed
– A ressource is an instance of a kind– A kind is a named list of typed attributes and actions
● e.g. : compute : # cores (integer), RAM (float), etc– Attribute : name, type, default value, mutability, etc.– Action : an invocable operation on a ressource– Kinds are inheritable
21 May 2015 OGF-44 / EGI Spring Conference
The Open Cloud Computing Interface
● OCCI is extensible
– Resource can be associated with mixins– Mixin: a named set of additional attributes and actions
● e.g. : IPNetworkInterface adds IP, netmask, etc to a network interface
– User Mixin : aka « tags »● e.g. : http://example.com/occi/mixins#my_project1
21 May 2015 OGF-44 / EGI Spring Conference
The Open Cloud Computing Interface
● OCCI is relational
– Links are ressources with additional attributes● occi.core.source : resource URI● occi.core.target : URI
– A bounded collection is a list of ressources of the same kind/mixin :
● e.g. : GET /collections/compute/– An unbounded collection is a list of ressources with same prefix :
● e.g. : GET /myresources/
21 May 2015 OGF-44 / EGI Spring Conference
The Open Cloud Computing Interface
● OCCI is self-described
– GET /-/ (capabilities)● List of supported kinds● List of supported mixins
– Capabilities returns collection's URL● http://schemas.ogf.org/occi/infrastructure#compute
→ /collections/compute/
21 May 2015 OGF-44 / EGI Spring Conference
The Open Cloud Computing Interface
● OCCI is meta-model based
– Model consistency checking– Automatic model implementation– Rendering independant
● text/plain, application/json, …– Transport independant
● HTTP, ...
21 May 2015 OGF-44 / EGI Spring Conference
OCCI Ecosystem
● Framework
– rOCCI (ruby)
– occi4java (not maintained)
– erocci (erlang/OTP)
● Specific implementations
– CompatibleOne
– PyOCNI
– OpenStack, OpenNebula, etc
● Limits
– Models are language/extensions/lib dependant
– See http://occi-wg/community/implementations/
● Tools
– DoYouSpeakOcci : tests
– Monitoring (Intel)
21 May 2015 OGF-44 / EGI Spring Conference
OCCI Infrastructure (model)
21 May 2015 OGF-44 / EGI Spring Conference
Infrastructure OCCI Model Instance
occi.storage.size = 100 000
storage1 : Storage
occi.compute.architecture = 'x64'occi.compute.cores = 4occi.compute.hostname = 'vm1'occi.compute.memory = 4
vm1: Computeocci.compute.architecture = 'x64'occi.compute.cores = 2occi.compute.hostname = 'vm2'occi.compute.memory = 16
vm2: Compute
occi.network.vlan = 12occi.network.label = 'private'occi.network.address = '10.1.0.0/16'occi.network.gateway = '10.1.255.254'
network1 : Network
IPNetworking
mixin
occi.storagelink.deviceid = 'nfs :...'occi.storagelink.mountpoint = '/mnt/scratch'
StorageLink
occi.storagelink.deviceid = 'nfs :...'occi.storagelink.mountpoint = '/mnt/scratch'
StorageLink
occi.networkinterface.mac = 'aa:bb:cc:dd:ee:11'occi.networkinterface.address = '10.1.0.100/16'occi.networkinterface.gateway = '10.1.255.254'occi.networkinterface.allocation = 'static'
NetworkInterface
occi.networkinterface.mac = 'aa:bb:cc:dd:ee:11'occi.networkinterface.address = '10.1.0.100/16'occi.networkinterface.gateway = '10.1.255.254'occi.networkinterface.allocation = 'static'
NetworkInterface
IPNetworkInterface IPNetworkInterface
mixin mixin
21 May 2015 OGF-44 / EGI Spring Conference
Questions / Feedback