
CompatibleOne is a free, open source project. Please feel free to contact us if you have any questions about the project or any suggestions on how to improve CompatibleOne. The CompatibleOne developer community is open to anyone that wants to contribute!
CompatibleOne is composed of 2 key components for the description, provisioning and integration of various cloud resources and services provisioned by heterogeneous Cloud Service Providers:
This page provides you with useful information about:
How to get CompatibleOne Package
How to get source code and install CompatibleOne
How to use ACCORDS
What are ACCORDS Services
Configuration for Open Stack Provisioning
CORDS Manifest
How ACCORDS manages a PaaS
COAPS: CompatibleOne Application and Platform Service
If source code is not needed, Accords-platform package for CentOS / Fedora / RedHat can be found on build.opensuse.org
NEW CompatibleOne DEBIAN & UBUNTU package is available on compatibleone.org/debian/
Get it, install it then start Accords
Accords source code is avalaible on OW2 gitorious
git clone http://git.gitorious.ow2.org/ow2-compatibleone/accords-platform.git
Once accords-platform is cloned, in order to build and install, run
./autogen.sh
./configure [options]
make
make install
Installation dependancies: You must have the following packages installed: autoconf automake autotools make gcc libtool openssl uuid libssl-dev uuid-dev
The CompatibleOne Installation Guide will help for the set up of ACCORDS.
OCCI was selected as the basis for the implementation of the CORDS model and also for the rendering of the model using REST over HTTP. Each operational service provider component of the platform is a standalone OCCI, REST, HTTP server responsible for the management of a specific collection of categories. Each category corresponds to an element of CORDS.
Here is an example of Trace of OCCI Requests generated by ACCORDS during demonstration at OCCI Cloud Plug Fest in Dusseldorf on the 29th February 2012.
The security of the platform is based on the principles of Transport Layer Security and is compliant with the most recent specifications published by the IETF in this respect. The exchange of Certificates between components of the platform is intended and encouraged but not mandatory. The authorization and authentication of all communicating endpoints is required to be performed prior to any other activity when platform security has been activated.
Operational service provider components provided in Accords-platform are implemented in C (except EZVM implemented in Python).
Note: An ACCORDS component can be implemented in any language if:
A collection of OCCI server components are provided along with command line tools allowing the basic operations to be performed. To facilitate the use of these tools a collection of scripts are generated during installation providing the precise parameters required to be specified for the correct operation of the platform.
| co-start | this script launches the complete collection of platform components in the required order Once co-start starts succesfully, execute co-parser coips in order to identify the infrastructure in charge of building the image. |
| co-stop | this script will stop the collection of platform components in the correct order |
| co-status | this script displays the current presence of the collection of platform components |
| co-parser mymanifest | This script may be used to parse a manifest to produce a provisioning plan (mymanifest.xml) Once co-parser mymanifest, check plan_mymanifest.xml file to make sure there is no message error |
| co-broker mymanifest | This script may be used to process a provisioning plan to provision the resources of a service. |
| co-command start service/{uuid} | This command will start a service instance if it is currently in the stopped state otherwise it will be silently ignored. Starting a service instance involves deploying the provisioned resources and when required will initiate priced transactions through the financial channels. |
| co-command stop service/{uuid} | This command will stop a running service instance if it is currently in the active or started state otherwise it will be silently ignored. Stoping a service instance involves release of the provisioned resources and when required will terminate priced transactions through the financial channels. |
| co-command save service/{uuid} | This command will save the image of a running service instance if it is currently in the active or started state otherwise it will be silently ignored. The image saved will become the image of the service if it is stopped and then restarted. This function allows a snapshot to be taken and allows a failover restart point to be established. This operation may be priced in which case transactions will ensue. |
| co-command delete service/{uuid} | This command will delete a service instance and its control graph from the ACCORDS platform. If it is currently active and running the service will be stopped and all provisioned resources will be released. The service and contract descriptions referenced through its service instance identifier will be deleted and the instance identifier will become invalid |
This is the list of available ACCORDS platform services resulting of co-status:
# co-status
-
Accords Platform Components
-
tcp 0 0 *:8086 *:* LISTEN 18860/publisher
tcp 0 0 *:xprint-server *:* LISTEN 18865/fileserver
tcp 0 0 *:8087 *:* LISTEN 18870/coss
tcp 0 0 *:radan-http *:* LISTEN 18876/comons
tcp 0 0 *:8090 *:* LISTEN 18887/conets
tcp 0 0 *:8091 *:* LISTEN 18881/coobas
tcp 0 0 *:8089 *:* LISTEN 18894/cops
tcp 0 0 *:8103 *:* LISTEN 18899/coees
tcp 0 0 *:8092 *:* LISTEN 18916/parser
tcp 0 0 *:8093 *:* LISTEN 18921/broker
tcp 0 0 *:8094 *:* LISTEN 18926/procci
tcp 0 0 *:8095 *:* LISTEN 18936/osprocci
tcp 0 0 *:8104 *:* LISTEN 18931/cosched
tcp 0 0 *:8101 *:* LISTEN 18904/ezvm
tcp 0 0 *:8102 *:* LISTEN 18911/coips
tcp 0 0 *:8286 *:* LISTEN 18951/cosacs
This diagram shows the service oriented architecture of ACCORDS platform 
Click to enlarge
The publication service constitutes the central hub around which the ACCORDS platform is built and promotes interoperability through the loosely coupled and highly extensible interfaces presented to the rest of the platform.
$ publisher --config accords.xml PUBLISHER/1.0
$ testresolver categoryname1 categoryname2
The term provisioning, when used in respect to the ACCORDS platform, refers to the composite act of selecting a provisioning platform type and then determining the operator platform to be used. The resources are then provisioned using the appropriate provider specific interfaces as encapsulated by the appropriate ACCORDS platform connector.
$ parser --config accords.xml PARSER/1.0
$ testcp --publisher http://127.0.0.1:8086 manifest.xml
$ broker --config accords.xml BROKER/1.0
$ testcb --publisher http://127.0.0.1:8086 plan_manifest.xml
$ procci --config accords.xml PROCCI/1.0
$ coes --config accords.xml COPS/1.0
$ coees --config accords.xml COEES/1.0
$ conets --config accords.xml CONETS/1.0
$ ezvm --config accords.xml EZVM/1.0
$ coips --config accords.xml COIPS/1.0
$ cosacs --config cosacs.xml COSACS/1.0
The principles, on which the security of the platform depends, require the use of Transport Layer Security (TLS 1.0) to be announced and accepted by all server and client endpoints. The exchange of Certificates between communicating endpoints is strongly encourage. Authentication of processes and users must be performed through an identity management system and will result in authorization being accorded for access to the platform and its components.
$ coss --config accords.xml COSS/1.0
$ comons --config accords.xml COMONS/1.0
This diagram describe the monitoring categories of ACCORDS platform 
Click to enlarge
The ACCORDS platform makes provision for the generation of financial transactions whenever a request for the creation of a category occurs for which price information is detected to have been defined. In addition, specific provisioning operations may also define prices for the deployment of their resources. This allows a platform operator fine control over definition of their commercial pricing or internal costing policy and this in terms of individual categories of resources and their different acts of provisioning. These transactions are generated with respect to a particular account and may be retrieved from their category manager for the processing required by operator specific accountancy, invoicing and decisional software.
$ coobas --config accords.xml COOBAS/1.0
The Open Stack provisioning platform uses the platform specific terms FLAVORS, IMAGES and SERVERS for the description of resources and resource pools.
<os_configs>
<os_config
id="e1f892e3-0001-4326-8866-9354b95d3b17"
name="{userid}"
user="{userid}"
password="{password}"
namespace="{domain}"
description="Configuration of CompatibleOne Hands On Meeting Account"
agent=’OpenStackClient/1.0a.0.01’
host=’http:94.143.114.137:5000/v2.0/’
version="v1.1"
authenticate=""
base=""
tls="0"
current="0" />
</os_configs>
testos –host {host] –user {username] –password {password} {command}
This category corresponds to the outermost element of the CORDS manifest document structure. It is used to define a particular cloud provisioning configuration comprising nodes, configuration actions, accounting and security information. The manifest is the basic work unit of the ACCORDS platform from which a provisioning plan is produced by the operation of the ACCORDS Parser. The resulting plan provides the description of the system for the brokering and provisioning operations of the ACCORDS Broker.
The following examples are showing how a manifest must be described in order to provision, deploy and install a complete Xwiki application and its MySQL DBMS. Both can be located on the same cloud (as shown in example 1 with OpenStack) or they can be distributed on different clouds (as shown in example 2 with Xwiki on OpenStack and MySQL on OpenNebula)
Some useful information about how to install Openstack: Openstack on Debian or OpenStack Users Guide
Example 1: XWiki using a Private MySQL on OpenStack
<manifest name="xwikios" xmlns="http://www.compatibleone.fr/schemes/manifest.xsd">
<description>The XWiki application using a Private MYSQL on OpenStack</description>
<node name="osdatabase" type="mysqlos"/>
<node name="xwiki" type="simple" access="public" scope="normal" provider="openstack" >
<infrastructure name="xwiki">
<compute name="xwiki" architecture="x86_64" cores="1" memory="1G" speed="1G"/>
<storage name="xwiki" size="10G"/>
<network name="xwiki" label="ethernet" vlan="100M">
<port name="http-alt"
description="xwiki application server access"
protocol="tcp"
number="8080"/>
</network>
</infrastructure>
<image name="xwiki">
<system name="POC1V2.4h"/>
</image>
</node>
<configuration name="xwikios">
<action name="xwikios" expression="xwiki.configure(osdatabase.mysqlos.hostname);"/>
<action name="xwikiose" expression="xwiki.system('export database_mysql_hostname=$osdatabase_mysqlos_hostname');"/>
<action name="xwikigo" expression="xwiki.fork('bash /root/xwiki.sh');"/>
</configuration>
<interface name="xwikios"/>
<account name="test"/>
<security name="xwikios"/>
</manifest>
<manifest xmlns="http://www.compatibleone.fr/schemes/manifest.xsd" name="mysqlos">
<description>The Private MySQL service for OpenStack</description>
<node name="mysqlos" type="simple" access="private" scope="normal" provider="openstack">
<infrastructure name="mysqlos">
<compute name="mysqlos" architecture="x86_64" cores="1" memory="1G" speed="1G"/>
<storage name="mysqlos" size="10G"/>
<network name="mysqlos" label="ethernet" vlan="100M"/>
</infrastructure>
<image name="mysqlos">
<system name="debian_with_cosacs"/>
<package name="mysql1" installation="wget http://gitorious.ow2.org/ow2-compatibleone/cosacs-repository/blobs/raw/master/debian_squeeze/mysql/install.sh; bash install.sh" configuration="#"/>
</image>
</node>
<configuration name="mysqlos"/>
<interface name="mysqlos"/>
<account name="test"/>
<security name="mysqlos"/>
</manifest>
Example 2: XWiki using a Public MySQL on OpenNebula
<manifest xmlns="http://www.compatibleone.fr/schemes/manifest.xsd" name="xwikion">
<description>
The XWiki application using a Public MYSQL on OpenNebula
</description>
<node name="ondatabase" type="mysqlon"/>
<node name="xwiki" type="simple" access="public" scope="normal" provider="openstack">
<infrastructure name="xwiki">
<compute name="xwiki" architecture="x86_64" cores="1" memory="1G" speed="1G"/>
<storage name="xwiki" size="10G"/>
<network name="xwiki" label="ethernet" vlan="100M"/>
</infrastructure>
<image name="xwiki">
<system name="POC1V2.4h"/>
</image>
</node>
<configuration name="xwikion">
<action name="xwikion" expression="xwiki.configure(ondatabase.mysqlon.hostname);"/>
<action name="xwikione" expression="xwiki.system('export database_mysql_hostname=$ondatabase_mysqlon_hostname');"/>
<action name="xwikigo" expression="xwiki.fork('bash /root/xwiki.sh');"/>
</configuration>
<interface name="xwikion"/>
<account name="test"/>
<security name="xwikion"/>
</manifest>
<manifest xmlns="http://www.compatibleone.fr/schemes/manifest.xsd" name="mysqlon">
<description>The Open Nebula MySQL service</description>
<node name="mysqlon" type="simple" access="public" scope="normal" provider="opennebula">
<infrastructure name="mysqlon">
<compute name="mysqlon" architecture="x86_64" cores="1" memory="1G" speed="1G"/>
<storage name="mysqlon" size="10G"/>
<network name="PUB_Compatible" label="ethernet" vlan="100M"/>
</infrastructure>
<image name="mysqlon">
<system name="ubuntu_with_cosacs"/>
<package name="mysqlon1" installation="wget http://gitorious.ow2.org/ow2-compatibleone/cosacs-repository/blobs/raw/master/debian_squeeze/mysql/install.sh; bash install.sh" configuration="#"/>
</image>
</node>
<configuration name="mysqlon"/>
<interface name="mysqlon"/>
<account name="test"/>
<security name="mysqlon"/>
</manifest>
To set up a PaaS with ACCORDS, 3 types of manifests are necessary which will be sequentially parsed and brokered on ACCORDS:
This manifest describes how to deploy and instantiate the targeted PaaS.
To add a new PaaS, the execution sequence is the following:
Once the PaaS is deployed, its categories are published by ACCORDS Procci.

PaaS sitting on top of any IaaS, this manifest describes how to provision PaaS resources from the IaaS. The communications between PaaS and IaaS are ensured by ACCORDS broker.
To add a new PaaS resource, the execution sequence is the following:

This manifest (example) describes the application to deploy. This manifest defines also the environment (container) in which the application must be deployed among those available or, where appropriate, to describe a new one.
To deploy an application on a running PaaS, the execution sequence is the following:
The PaaS REST API is generic and is the same for all the deployed PaaS. It exposes a set of operations to manage environments and applications deployed on these PaaS.

To allow Cloud cooperation and Federation, each company's Cloud must be able to seamlessly interact with different and heterogenous PaaS solutions (e.g. Cloud Foundry, Openshift, etc.). CompatibleOne offers a generic API that enables human and/or software agents to provision and manage their applications to a PaaS. This API provides an abstraction layer and a middleware for existing PaaS solutions to provision applications in a generic fashion (see Figure below).

