OCCI library
Scope
This library has been developed in order to allow the integration of gcube with EGI FedCloud infrastructure. In particular, the usage of the library will facilitate the interaction with the sites exposing OCCI just by manipulating APIs.
Usage
Maven coordinates
The maven artifact coordinates are:
<dependency> <groupId>org.gcube.resources.federation</groupId> <artifactId>fhn-occi-connector</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>
Check on Nexus for the latest version.
APIs
In the following the functionalities proposed by the library are shown.
Site Connection
VOMS proxy generation
In order to access the EGI FedCloud infrastructure it is necessary to create a VOMS proxy certificate. Open a shell and run the following command:
$voms-proxy-init --voms fedcloud.egi.eu --rfc --dont-verify-ac
Later it is necessary to digit the own EGI identity grid password.
Enter GRID pass phrase for this identity: Your identity: /C=IT/O=INFN/OU=Personal Certificate/L=ENGINEERING RDLAB/CN=Nunzio Andrea Galante Creating temporary proxy ........................ Done Contacting voms1.egee.cesnet.cz:15002 [/DC=org/DC=terena/DC=tcs/OU=Domain Control Validated/CN=voms1.egee.cesnet.cz] "fedcloud.egi.eu" Done Creating proxy ...................................... Done Your proxy is valid until Thu Nov 12 01:13:17 2015
Authentication
The library provides both VOMS and X509 access authentication methods. A list of sites exposing OCCI and endorsed by FedCloud VO is available at Appdb repository.
String a = X509CredentialManager.createProxy("/tmp/your_proxy.pem", ""); //2nd level proxy FedcloudOCCI jocci = new FedcloudOCCI("endpoint"); //FedcloudOCCI jocci = new FedcloudOCCI("https://carach5.ics.muni.cz:11443"); jocci.setCertificate(a); jocci.setTrustStore("CA Path certificates");
Endpoint Connection
jocci.connect();
Sample output:
Connected to endpoint: https://carach5.ics.muni.cz:11443/
Resources listing
Own compute resources
jocci.getComputeList();
Sample output:
Computes Location: https://carach5.ics.muni.cz:11443/compute/64586
Storage resources
jocci.getNetList();
Sample output:
Storage Locations: https://carach5.ics.muni.cz:11443/storage/774; https://carach5.ics.muni.cz:11443/storage/775; https://carach5.ics.muni.cz:11443/storage/776; https://carach5.ics.muni.cz:11443/storage/777; https://carach5.ics.muni.cz:11443/storage/779;
Network resources
jocci.getStorageList();
Sample output:
Network Locations: https://carach5.ics.muni.cz:11443/network/6 https://carach5.ics.muni.cz:11443/network/8 https://carach5.ics.muni.cz:11443/network/17 https://carach5.ics.muni.cz:11443/network/24
Getting OS templates
jocci.getOsTemplateList();
Sample output:
17 AVAILABLE OS TEMPLATES MIXINS Category{term=uuid_umd_sl6_fedcloud_warg_138, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=UMD-SL6@fedcloud-warg, location=/mixin/os_tpl/uuid_umd_sl6_fedcloud_warg_138/, attributes=SetCover{[]}} Category{term=uuid_egi_centos_6_fedcloud_warg_130, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=EGI-CentOS-6@fedcloud-warg, location=/mixin/os_tpl/uuid_egi_centos_6_fedcloud_warg_130/, attributes=SetCover{[]}} Category{term=uuid_egi_fedcloud_clients_fedcloud_warg_128, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=EGI-FedCloud-Clients@fedcloud-warg, location=/mixin/os_tpl/uuid_egi_fedcloud_clients_fedcloud_warg_128/, attributes=SetCover{[]}} Category{term=uuid_egi_ubuntu_server_14_04_lts_fedcloud_warg_131, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=EGI-Ubuntu-Server-14.04-LTS@fedcloud-warg, location=/mixin/os_tpl/uuid_egi_ubuntu_server_14_04_lts_fedcloud_warg_131/, attributes=SetCover{[]}} Category{term=uuid_chipster_ubuntu_server_12_04_lts_fedcloud_dukan_96, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=Chipster-Ubuntu-Server-12.04-LTS@fedcloud-dukan, location=/mixin/os_tpl/uuid_chipster_ubuntu_server_12_04_lts_fedcloud_dukan_96/, attributes=SetCover{[]}} Category{term=uuid_egi_compss_lofar_debian_7_0_x86_64_0001_fedcloud_dukan_113, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=EGI-COMPSs-Lofar-Debian-7.0-x86_64-0001@fedcloud-dukan, location=/mixin/os_tpl/uuid_egi_compss_lofar_debian_7_0_x86_64_0001_fedcloud_dukan_113/, attributes=SetCover{[]}} Category{term=uuid_centos_6_5_minimal_fedcloud_dukan_83, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=CentOS-6.5-minimal@fedcloud-dukan, location=/mixin/os_tpl/uuid_centos_6_5_minimal_fedcloud_dukan_83/, attributes=SetCover{[]}} Category{term=uuid_transplant_base_fedcloud_warg_132, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=transPLANT-Base@fedcloud-warg, location=/mixin/os_tpl/uuid_transplant_base_fedcloud_warg_132/, attributes=SetCover{[]}} Category{term=uuid_ubuntu_server_14_04_lts_fedcloud_dukan_84, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=Ubuntu-Server-14.04-LTS@fedcloud-dukan, location=/mixin/os_tpl/uuid_ubuntu_server_14_04_lts_fedcloud_dukan_84/, attributes=SetCover{[]}} Category{term=uuid_egi_pmes_14_ubuntu_15_04_x86_64_0001_fedcloud_warg_108, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=EGI-PMES-14-Ubuntu-15.04-x86_64-0001@fedcloud-warg, location=/mixin/os_tpl/uuid_egi_pmes_14_ubuntu_15_04_x86_64_0001_fedcloud_warg_108/, attributes=SetCover{[]}} Category{term=uuid_dci_bridge_fedcloud_dukan_109, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=DCI-Bridge@fedcloud-dukan, location=/mixin/os_tpl/uuid_dci_bridge_fedcloud_dukan_109/, attributes=SetCover{[]}} Category{term=uuid_egi_ubuntu_server_12_04_lts_fedcloud_warg_129, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=EGI-Ubuntu-Server-12.04-LTS@fedcloud-warg, location=/mixin/os_tpl/uuid_egi_ubuntu_server_12_04_lts_fedcloud_warg_129/, attributes=SetCover{[]}} Category{term=uuid_scientific_linux_6_5_fedcloud_dukan_82, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=Scientific-Linux-6.5@fedcloud-dukan, location=/mixin/os_tpl/uuid_scientific_linux_6_5_fedcloud_dukan_82/, attributes=SetCover{[]}} Category{term=uuid_cernvm_3_3_0_40gb_fedcloud_dukan_80, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=CERNVM-3.3.0-40GB@fedcloud-dukan, location=/mixin/os_tpl/uuid_cernvm_3_3_0_40gb_fedcloud_dukan_80/, attributes=SetCover{[]}} Category{term=uuid_moinmoinwiki_fedcloud_warg_124, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=MoinMoinWiki@fedcloud-warg, location=/mixin/os_tpl/uuid_moinmoinwiki_fedcloud_warg_124/, attributes=SetCover{[]}} Category{term=uuid_gcubesmartexecutor_fedcloud_warg_139, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=GCubeSmartExecutor@fedcloud-warg, location=/mixin/os_tpl/uuid_gcubesmartexecutor_fedcloud_warg_139/, attributes=SetCover{[]}} Category{term=uuid_ubuntu_server_12_04_lts_fedcloud_dukan_81, scheme=http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#, title=Ubuntu-Server-12.04-LTS@fedcloud-dukan, location=/mixin/os_tpl/uuid_ubuntu_server_12_04_lts_fedcloud_dukan_81/, attributes=SetCover{[]}}
Getting Resource templates
jocci.getResourcesTemplateList();
Sample output:
7 AVAILABLE RESOURCES TEMPLATES MIXINS Category{term=mammoth, scheme=http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#, title=Mammoth Instance - 8 cores and 32 GB RAM, location=/mixin/resource_tpl/mammoth/, attributes=SetCover{[Attribute{name=occi.compute.cores, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.architecture, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.speed, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.memory, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}]}} Category{term=large, scheme=http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#, title=Large Instance - 4 cores and 8 GB RAM, location=/mixin/resource_tpl/large/, attributes=SetCover{[Attribute{name=occi.compute.cores, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.architecture, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.speed, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.memory, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}]}} Category{term=small, scheme=http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#, title=Small Instance - 1 core and 2 GB RAM, location=/mixin/resource_tpl/small/, attributes=SetCover{[Attribute{name=occi.compute.cores, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.architecture, required=false, immutable=false, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.speed, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.memory, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}]}} Category{term=medium, scheme=http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#, title=Medium Instance - 2 cores and 4 GB RAM, location=/mixin/resource_tpl/medium/, attributes=SetCover{[Attribute{name=occi.compute.cores, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.architecture, required=false, immutable=false, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.speed, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.memory, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}]}} Category{term=goliath, scheme=http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#, title=Goliath Instance - 16 cores and 64 GB RAM, location=/mixin/resource_tpl/goliath/, attributes=SetCover{[Attribute{name=occi.compute.cores, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.architecture, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.speed, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.memory, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}]}} Category{term=extra_large, scheme=http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#, title=Extra Large Instance - 4 cores and 16 GB RAM, location=/mixin/resource_tpl/extra_large/, attributes=SetCover{[Attribute{name=occi.compute.cores, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.architecture, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.speed, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.memory, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}]}} Category{term=sym_mammoth, scheme=http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#, title=Symmetric Mammoth Instance - 32 cores and 32 GB RAM, location=/mixin/resource_tpl/sym_mammoth/, attributes=SetCover{[Attribute{name=occi.compute.cores, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.architecture, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.speed, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}, Attribute{name=occi.compute.memory, required=false, immutable=true, type=null, pattern=.*, defaultValue=null, description=null}]}}
Resources Management
Setting Contextualization script
Three different options of providing a contextualization script to a resource when it has to be create are available.
1. By using the content of a public URL
String c = "https://appdb.egi.eu/storage/cs/vapp/15819120-7ee4-4b85-818a-d9bd755a61f0/devsec-init"; URL context = new URL(c);
2. By passing the content of a script via local file
String path = "/my/local/path/script.sh"; File f = new File(path);
3. Providing directly the content of the script in the code (deprecated option)
String gcube_script = "#!/bin/bash \n" + "export SCOPE=devsec \n"+ "export INFRA_NAME=gcube \n"+ "export LOCATION=pisa \n"+ "export COUNTRY=IT \n"+ "/usr/local/bin/smartgears-setup";
Creating and describing resource
To create a compute it is necessary to specify the OS and Resources templates for the image.
Mixin os = jocci.getOsTemplateList().get(0); //first os template avilable Mixin resource = jocci.getResourcesTemplateList().get(0); //first resource template available in the list
Alternatively we can specify directly the Virtual Appliance we want to refer to :
Mixin os = null; for (int i=0; i < jocci.getOsTemplateList().size(); i++) { os = jocci.getOsTemplateList().get(i);//gcube OS template available in the list if (os.getTerm().equals("uuid_gcubesmartexecutorv4_fedcloud_warg_142")) break; }
Depending on the typology of contextualization script to upload, it is possible to use four different approacches to create the resource:
jocci.createComputeAndDescribe(os,resource,"Resource name"); //no context script jocci.createComputeAndDescribe(os,resource,"Resource name",context); //Script from URI jocci.createComputeAndDescribe(os,resource,"Resource name",f); //Script from file jocci.createComputeAndDescribe(os,resource,"Resource name",gcube_script); //String option
An example of output is the following:
Creating compute resource... Mixin: Category: uuid_ubuntu_server_12_04_lts_fedcloud_dukan_81;scheme="http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#";class="mixin";title="Ubuntu-Server-12.04-LTS@fedcloud-dukan";rel="http://schemas.ogf.org/occi/infrastructure#os_tpl";location="/mixin/os_tpl/uuid_ubuntu_server_12_04_lts_fedcloud_dukan_81/" Category: mammoth;scheme="http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#";class="mixin";title="Mammoth Instance - 8 cores and 32 GB RAM";rel="http://schemas.ogf.org/occi/infrastructure#resource_tpl";location="/mixin/resource_tpl/mammoth/";attributes="occi.compute.architecture{immutable} occi.compute.cores{immutable} occi.compute.memory{immutable} occi.compute.speed{immutable}" #!/bin/bash # Variables that are used to configure the smartexecutor instance # The HOST variable is not mandatory. The machine FQDN will be used instead #export HOST=<instance hostname> export SCOPE=devsec export INFRA_NAME=gcube export LOCATION=pisa export COUNTRY=IT # This script is installed into the VM instance /usr/local/bin/smartgears-setup Created compute instance at location: 'https://carach5.ics.muni.cz:11443/compute/64586'. Description: Category: compute;scheme="http://schemas.ogf.org/occi/infrastructure#";class="kind";location="/compute/" Category: uuid_ubuntu_server_12_04_lts_fedcloud_dukan_81;scheme="http://occi.carach5.ics.muni.cz/occi/infrastructure/os_tpl#";class="mixin";location="/mixin/os_tpl/uuid_ubuntu_server_12_04_lts_fedcloud_dukan_81/" Category: compute;scheme="http://opennebula.org/occi/infrastructure#";class="mixin";location="/mixin/compute/" Category: mammoth;scheme="http://schema.fedcloud.egi.eu/occi/infrastructure/resource_tpl#";class="mixin";location="/mixin/resource_tpl/mammoth/" Category: user_data;scheme="http://schemas.openstack.org/compute/instance#";class="mixin";location="/mixin/user_data/" Category: public_key;scheme="http://schemas.openstack.org/instance/credentials#";class="mixin";location="/mixin/public_key/" X-OCCI-Attribute: occi.compute.cores=8 X-OCCI-Attribute: occi.compute.memory=32.0 X-OCCI-Attribute: occi.compute.state="waiting" X-OCCI-Attribute: occi.core.id=64586 X-OCCI-Attribute: occi.core.summary="Instantiated with rOCCI-server on Wed, 11 Nov 2015 14:47:37 +0100." X-OCCI-Attribute: occi.core.title="VM name" X-OCCI-Attribute: org.opennebula.compute.cpu=8.0 X-OCCI-Attribute: org.opennebula.compute.id=64586 X-OCCI-Attribute: org.openstack.compute.user_data="IyEvYmluL2Jhc2gKIyBWYXJpYWJsZXMgdGhhdCBhcmUgdXNlZCB0byBjb25maWd1cmUgdGhlIHNtYXJ0ZXhlY3V0b3IgaW5zdGFuY2UKIyBUaGUgSE9TVCB2YXJpYWJsZSBpcyBub3QgbWFuZGF0b3J5LiBUaGUgbWFjaGluZSBGUUROIHdpbGwgYmUgdXNlZCBpbnN0ZWFkCiNleHBvcnQgSE9TVD08aW5zdGFuY2UgaG9zdG5hbWU+CmV4cG9ydCBTQ09QRT1kZXZzZWMKZXhwb3J0IElORlJBX05BTUU9Z2N1YmUKZXhwb3J0IExPQ0FUSU9OPXBpc2EKZXhwb3J0IENPVU5UUlk9SVQKCiMgVGhpcyBzY3JpcHQgaXMgaW5zdGFsbGVkIGludG8gdGhlIFZNIGluc3RhbmNlCi91c3IvbG9jYWwvYmluL3NtYXJ0Z2VhcnMtc2V0dXAK" X-OCCI-Attribute: org.openstack.credentials.publickey.data="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDrbZDYeDVxudawo6FVEPOmBVcRhf/DU1z9v82bvPWMxu/wMqJ0HriUCFYj5yfsfT3eKqlzY1K3HVaS8jQW2JYrR9F5HvDlg/dR4LoLfmzKpB9vuAbpwizEg+OkPAtApJPITasj7xQrCFHtqhVTzkcqbuU4gXa5hX7rVpBWzwCP25wMHima8Y8WcxkSGGBDTxhE0okjUhc07ExTlxsgb/2PX/ziqCjSrjkNaxMIAU4dN0alb7JKjTiS9hYLK3yz2rN91KLMlalO5SgQ8xTRml8PXZAoK86MG2KLBH6VKFsu6mvc16Hp9KNlx2pw9Q9XepVG/Vgm9evEwRjSvqqR8w9p nunzioandreagalante@nunzioandreagalante-Spring-Peak" Link: </network/24>;rel="http://schemas.ogf.org/occi/infrastructure#network";self="/link/networkinterface/compute_64586_nic_0";category="http://schemas.ogf.org/occi/infrastructure#networkinterface http://opennebula.org/occi/infrastructure#networkinterface http://schemas.ogf.org/occi/infrastructure/networkinterface#ipnetworkinterface";occi.core.id="compute_64586_nic_0";occi.core.source="/compute/64586";occi.core.target="/network/24";occi.core.title="public";occi.networkinterface.address="147.228.242.244";occi.networkinterface.interface="eth0";occi.networkinterface.mac="02:00:93:e4:f2:f4";occi.networkinterface.state="inactive";org.opennebula.networkinterface.bridge="onebr0"; Link: </storage/779>;rel="http://schemas.ogf.org/occi/infrastructure#storage";self="/link/storagelink/compute_64586_disk_0";category="http://schemas.ogf.org/occi/infrastructure#storagelink http://opennebula.org/occi/infrastructure#storagelink";occi.core.id="compute_64586_disk_0";occi.core.source="/compute/64586";occi.core.target="/storage/779";occi.core.title="800f345f-5278-5523-a1dc-8a98476006f8";occi.storagelink.deviceid="/dev/vda";occi.storagelink.state="inactive"; Waiting for compute to become active... . . . . Compute active!
Even if you choose to use the gcube_smart_executor VA as OS Mixin template, once that the GHN compute has been created, it becomes registered to d4Science infrastructure and can be monitored on https://dev.d4science.org/web/guest/monitor
Starting resource
//do not use after createResourceAndDescribe jocci.startResource(new URI("Resource Location URI")); //jocci.startResource(new URI("https://carach5.ics.muni.cz:11443/compute/64586"));
Sample output:
Starting created compute...OK!
Stopping resource
jocci.stopResource(new URI("Resource Location URI")); //jocci.stopResource(new URI("https://carach5.ics.muni.cz:11443/compute/64586"));
Sample output:
Stopping created compute...OK!
Deleting resource
jocci.deleteResource(new URI("Resource Location URI")); //jocci.deleteResource(new URI("https://carach5.ics.muni.cz:11443/compute/64586"));
Sample output:
Deleting created compute...OK!