ooi/doc/source/user/usage.rst
Jorge Sevilla 7566dce6af Included OCCI IPReservation support
This is a complete change in which we have add the OCCI IPRESERVATION
class with the features provided by CESNET. We include: the controller,
the occi class, middleware changes, and tests to control it.
In addition, we have modified networklink to support this feature,
now networklink is identified by using only compute id and ipreservation
ip. Last, we add the documentation relate to its usage.

Change-Id: I52f80a9a7a39e00d1d7487001863586a551edf5f
2017-04-03 08:59:52 +02:00

22 KiB

Usage documentation

Discovery

In order to discover the available resources in the system, OOI provides a view of the relevant resources for its usage:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/-/

It will show the OCCI and OpenStack resources related to OOI.

Compute

It allows to create, list, show and delete VMs.

List compute

It lists VMs:

curl  -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/compute

It returns a HTTP 200 with output:

X-OCCI-Location: http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624
X-OCCI-Location: http://127.0.0.23:8787/occi1.2/compute/0ce5df96-7e61-4a8e-b821-9ebb88e77e07

Show compute

It shows details of a VM:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624

It returns a HTTP 200 with output:

Category: compute; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"; title="compute resource"; rel="http://schemas.ogf.org/occi/core#resource"; location="http://127.0.0.23:8787/occi1.2/compute/"
Category: 5f4311da-2ee2-47a6-913b-5d8496486c62; scheme="http://schemas.openstack.org/template/os#"; class="mixin"; title="cirros-0.3.4-x86_64-uec"; rel="http://schemas.ogf.org/occi/infrastructure#os_tpl"; location="http://127.0.0.23:8787/occi1.2/os_tpl/5f4311da-2ee2-47a6-913b-5d8496486c62"
Category: 42; scheme="http://schemas.openstack.org/template/resource#"; class="mixin"; title="Flavor: m1.nano"; rel="http://schemas.ogf.org/occi/infrastructure#resource_tpl"; location="http://127.0.0.23:8787/occi1.2/resource_tpl/42"
X-OCCI-Attribute: occi.core.title="vm_assig_2"
X-OCCI-Attribute: occi.compute.state="inactive"
X-OCCI-Attribute: occi.compute.memory=64
X-OCCI-Attribute: occi.compute.cores=1
X-OCCI-Attribute: occi.compute.hostname="vm_assig_2"
X-OCCI-Attribute: occi.core.id="703910d7-97f7-4e3e-9243-30830591f624"
Link: <http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624?action=start>; rel="http://schemas.ogf.org/occi/infrastructure/compute/action#start"
Link: <http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624?action=stop>; rel="http://schemas.ogf.org/occi/infrastructure/compute/action#stop"
Link: <http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624?action=restart>; rel="http://schemas.ogf.org/occi/infrastructure/compute/action#restart"
Link: <http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624?action=suspend>; rel="http://schemas.ogf.org/occi/infrastructure/compute/action#suspend"
Link: <http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87>;
rel="http://schemas.ogf.org/occi/infrastructure#network";
self="http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87";
occi.networkinterface.mac="fa:16:3e:20:14:f2"; occi.networkinterface.interface="eth0"; occi.networkinterface.state="active";
occi.networkinterface.allocation="dynamic"; occi.networkinterface.address="12.0.0.87";
occi.core.source="http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624";
occi.core.target="http://127.0.0.23:8787/occi1.2/network/cd48b7dd-9ac8-44fc-aec0-5ea679941ced";
occi.core.id="703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87"
Link: <http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_PUBLIC_11.0.0.44>;
rel="http://schemas.ogf.org/occi/infrastructure#network"; self="http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_PUBLIC_11.0.0.44";
occi.networkinterface.mac="fa:16:3e:20:14:f2"; occi.networkinterface.interface="eth0"; occi.networkinterface.state="active"; occi.networkinterface.allocation="dynamic";
occi.networkinterface.address="11.0.0.44"; occi.core.source="http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624";
occi.core.target="http://127.0.0.23:8787/occi1.2/network/PUBLIC"; occi.core.id="703910d7-97f7-4e3e-9243-30830591f624_PUBLIC_11.0.0.44"
Link: <http://127.0.0.23:8787/occi1.2/storagelink/703910d7-97f7-4e3e-9243-30830591f624_f551d92d-1992-4625-91ff-5e48d96d03c9>;
rel="http://schemas.ogf.org/occi/infrastructure#storage";
self="https://127.0.0.23:8787/occi1.2/storagelink/703910d7-97f7-4e3e-9243-30830591f624_f551d92d-1992-4625-91ff-5e48d96d03c9";
occi.storagelink.deviceid="/dev/xvdb"; occi.core.source="https://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624";
occi.core.target="https://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9";
occi.core.id="703910d7-97f7-4e3e-9243-30830591f624_f551d92d-1992-4625-91ff-5e48d96d03c9"

Create compute

It creates a VM using the default resources, including links to storage and private networks:

curl -X POST http://127.0.0.23:8787/occi1.2/compute/ \
    -H 'X-Auth-Token: '$OS_TOKEN \
    -H 'Category: compute; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind", \
    -H 'Category: 5f4311da-2ee2-47a6-913b-5d8496486c62; scheme="http://schemas.openstack.org/template/os#"; class="mixin" \
    -H 'Category: 42; scheme="http://schemas.openstack.org/template/resource#"; class="mixin"' \
    -H 'Content-Type: text/occi' -H 'X-OCCI-Attribute: occi.core.title="OOI_VM_1"'

Also we can specify the network to be linked:

curl -X POST http://127.0.0.23:8787/occi1.2/compute/ \
    -H 'X-Auth-Token: '$OS_TOKEN \
    -H 'Category: compute; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind", \
    -H 'Category: 5f4311da-2ee2-47a6-913b-5d8496486c62; scheme="http://schemas.openstack.org/template/os#"; class="mixin" \
    -H 'Category: 42; scheme="http://schemas.openstack.org/template/resource#"; class="mixin"' \
    -H 'Link: </bar>; rel="http://schemas.ogf.org/occi/infrastructure#network"; \
        occi.core.target="http://127.0.0.23:8787/occi1.2/network/f8186fda-a389-468b-9c13-24b8eda65d77"' \
    -H 'Content-Type: text/occi' -H 'X-OCCI-Attribute: occi.core.title="OOI_VM_1"'

Links to storage can be also specified:

curl -X POST http://127.0.0.23:8787/occi1.2/compute/ \
    -H 'X-Auth-Token: '$OS_TOKEN \
    -H 'Category: compute; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind" \
    -H 'Category: 5f4311da-2ee2-47a6-913b-5d8496486c62; scheme="http://schemas.openstack.org/template/os#"; class="mixin" \
    -H 'Category: 42; scheme="http://schemas.openstack.org/template/resource#"; class="mixin"' \
    -H 'Link: </bar>; rel="http://schemas.ogf.org/occi/infrastructure#storage"; \
        occi.core.target="http://127.0.0.23:8787/occi1.2/storage/567ed104-3ddf-11e6-ad65-00219702a0b8"' \
    -H 'Content-Type: text/occi' -H 'X-OCCI-Attribute: occi.core.title="OOI_VM_1"'

It returns a HTTP 201 with output:

X-OCCI-Location: http://127.0.0.23:8787/occi1.2/compute/4a7dc666-33d2-495e-93fe-ccd224c98c11

Delete compute

It deletes a VM, including all the links associated to it:

curl -X DELETE -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624

It returns a 204 empty response.

Storage

Storage management provides list, show, create and deletion of volumes to a specific tenant.

List storage

It lists volumes:

curl  -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/storage

It returns a HTTP 200 with output:

X-OCCI-Location: http://127.0.0.23:8787/occi1.2/storage/91bb7532-3ddb-11e6-9770-00219702a0b8
X-OCCI-Location: http://127.0.0.23:8787/occi1.2/storage/a10abe94-3ddb-11e6-bc5d-00219702a0b8

Show storage

It shows details of a volume:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9

It returns a HTTP 200 with output:

Category: storage; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"; title="compute resource"; rel="http://schemas.ogf.org/occi/core#resource"; location="http://127.0.0.23:8787/occi1.2/storage/"
X-OCCI-Attribute: occi.storage.state="online"
X-OCCI-Attribute: occi.core.id="f551d92d-1992-4625-91ff-5e48d96d03c9"
X-OCCI-Attribute: occi.storage.size=1
X-OCCI-Attribute: occi.core.title="vol1"
Link: <http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9?action=online>; rel="http://schemas.ogf.org/occi/infrastructure/storage/action#online"
Link: <http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9?action=offline>; rel="http://schemas.ogf.org/occi/infrastructure/storage/action#offline"
Link: <http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9?action=backup>; rel="http://schemas.ogf.org/occi/infrastructure/storage/action#backup"
Link: <http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9?action=snapshot>; rel="http://schemas.ogf.org/occi/infrastructure/storage/action#snapshot"
Link: <http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9?action=resize>; rel="http://schemas.ogf.org/occi/infrastructure/storage/action#resize"

Delete storage

It deletes a volume, including all the links associated to it:

curl -X DELETE -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9

It returns a 204 empty response.

OOI allows to link virtual machines to existing volumes.

It lists links between VMs and volumes:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/storagelink

It returns a HTTP 200 with output:

X-OCCI-Location: http://127.0.0.23:8787/occi1.2/storagelink/8a97b403-3ec6-4002-988b-1f34dd836eff_f551d92d-1992-4625-91ff-5e48d96d03c9
X-OCCI-Location: http://127.0.0.23:8787/occi1.2/storagelink/e9bf4d1e-3dde-11e6-8479-00219702a0b8_f382628c-3dde-11e6-9697-00219702a0b8

It shows the storage attachemet featuresr:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/storagelink/8a97b403-3ec6-4002-988b-1f34dd836eff_f551d92d-1992-4625-91ff-5e48d96d03c9

It returns a HTTP 200 with output:

Category: storagelink; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"; title="storage link resource"; rel="http://schemas.ogf.org/occi/core#link"; location="http://127.0.0.23:8787/occi1.2/storagelink/"
X-OCCI-Attribute: occi.storagelink.deviceid="/dev/xvdb"
X-OCCI-Attribute: occi.core.source="http://127.0.0.23:8787/occi1.2/compute/8a97b403-3ec6-4002-988b-1f34dd836eff"
X-OCCI-Attribute: occi.core.target="http://127.0.0.23:8787/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9"
X-OCCI-Attribute: occi.core.id="8a97b403-3ec6-4002-988b-1f34dd836eff_f551d92d-1992-4625-91ff-5e48d96d03c9"

It allows you to attach volumes to VMs:

curl -X POST http://127.0.0.23:8787/occi1.2/storagelink/ \
    -H 'X-Auth-Token: '$OS_TOKEN \
    -H 'Content-Type: text/occi' \
    -H 'Category: storagelink;scheme="http://schemas.ogf.org/occi/infrastructure#";class="kind";' \
    -H 'X-OCCI-Attribute: occi.core.target=/occi1.2/storage/f551d92d-1992-4625-91ff-5e48d96d03c9, \
        occi.core.source="/occi1.2/compute/8a97b403-3ec6-4002-988b-1f34dd836eff"'

It returns a HTTP 200 with output:

http://127.0.0.23:8787/occi1.2/storagelink/8a97b403-3ec6-4002-988b-1f34dd836eff_f551d92d-1992-4625-91ff-5e48d96d03c9

It detaches a volume from VM:

curl -X DELETE -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/storagelink/8a97b403-3ec6-4002-988b-1f34dd836eff_f551d92d-1992-4625-91ff-5e48d96d03c9

It returns a 204 empty response.

Network

Network management provides list, show, create and deletion of networks to a specific tenant.

List networks

It lists all networks available for connecting virtual machines:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/network

It returns a HTTP 200 with output:

X-OCCI-Location: http://127.0.0.23:8787/occi1.2/network/2c9868b4-f71a-45d2-ba8c-dbf42f0b3120
X-OCCI-Location: http://127.0.0.23:8787/occi1.2/network/4213c7ef-68d4-42e8-a3cd-1c5bab3abe6
X-OCCI-Location: http://127.0.0.23:8787/occi1.2/network/PUBLIC

Show network

It shows the network features:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/network/b8a3d813-65da-4910-a80c-f97b4ba31fd4

It returns a HTTP 200 with output:

Category: network; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"; title="network resource";
 rel="http://schemas.ogf.org/occi/core#resource"; location="http://127.0.0.23:8787/occi1.2/network/"
Category: ipnetwork; scheme="http://schemas.ogf.org/occi/infrastructure/network#"; class="mixin";
 title="IP Networking Mixin"
Category: osnetwork; scheme="http://schemas.openstack.org/infrastructure/network#"; class="mixin";
 title="openstack network"
X-OCCI-Attribute: occi.network.address="20.0.0.0/24"
X-OCCI-Attribute: occi.network.state="active"
X-OCCI-Attribute: occi.core.title="CommandLineOCCI"
X-OCCI-Attribute: occi.network.gateway="20.0.0.1"
X-OCCI-Attribute: occi.core.id="4a7dc666-33d2-495e-93fe-ccd224c98c11"
Link: <http://127.0.0.23:8787/occi1.2/network/4a7dc666-33d2-495e-93fe-ccd224c98c11?action=up>;
 rel="http://schemas.ogf.org/occi/infrastructure/network/action#up"
Link: <http://127.0.0.23:8787/occi1.2/network/4a7dc666-33d2-495e-93fe-ccd224c98c11?action=down>;
rel="http://schemas.ogf.org/occi/infrastructure/network/action#down"

Create network

It creates a network:

curl -X POST http://127.0.0.23:8787/occi1.2/network/ \
    -H 'X-Auth-Token: '$OS_TOKEN \
    -H 'Category: network; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind", \
        ipnetwork; scheme="http://schemas.ogf.org/occi/infrastructure/network#"; class="mixin"' \
    -H 'Content-Type: text/occi' \
    -H 'X-OCCI-Attribute: occi.core.title="OCCI_NET", occi.network.address="15.0.0.0/24"'

It returns a HTTP 201 with output:

X-OCCI-Location: http://127.0.0.23:8787/occi1.2/network/4a7dc666-33d2-495e-93fe-ccd224c98c11

Delete network

It deletes a network:

curl -X DELETE -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/network/cb94496e-7e8e-4cb6-841d-30f38bc375e6

It returns a 204 empty response.

IPReservation

OOI allows to manage public IPs by using IPReservation resources. This resource is a special network to provide public access. It allocates and releases IPs from public network pools.

List IPReservations

It list IPReservation resources:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.1:8787/occi1.1/ipreservation

It returns a HTTP 200 with output:

X-OCCI-Location: http://127.0.0.1:8787/occi1.1/ipreservation/3318c3af-ce57-41ef-a9c1-9a5ecfbe0526

Show IPReservation

It shows the IPReservation details:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.1:8787/occi1.1/ipreservation/3318c3af-ce57-41ef-a9c1-9a5ecfbe0526

It returns a HTTP 200 with output:

Category: ipreservation; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"; title="IPReservation"; rel="http://schemas.ogf.org/occi/infrastructure#network"; location="http://127.0.0.1:8787/occi1.1/ipreservation/"
X-OCCI-Attribute: occi.core.title="external-net"
X-OCCI-Attribute: occi.core.summary=[]
X-OCCI-Attribute: occi.core.id="3318c3af-ce57-41ef-a9c1-9a5ecfbe0526"
X-OCCI-Attribute: occi.ipreservation.address="193.136.75.90"
X-OCCI-Attribute: occi.ipreservation.used="true"
Link: <http://127.0.0.1:8787/occi1.1/ipreservation/3318c3af-ce57-41ef-a9c1-9a5ecfbe0526?action=up>; rel="http://schemas.ogf.org/occi/infrastructure/network/action#up"
Link: <http://127.0.0.1:8787/occi1.1/ipreservation/3318c3af-ce57-41ef-a9c1-9a5ecfbe0526?action=down>; rel="http://schemas.ogf.org/occi/infrastructure/network/action#down"

Create IPReservation

It creates a IPReservation resource:

curl -X POST http://127.0.0.1:8787/occi1.1/ipreservation -H 'X-Auth-token: '$OS_TOKEN \
-H 'Category: ipreshemas.ogf.org/occi/infrastructure#"; class="kind",' \
'external-net; scheme="http://schemas.openstack.org/network/floatingippool#"; class="mixin"' \
-H 'Content-Type: text/occi'

It returns a HTTP 200 with output:

X-OCCI-Location: http://127.0.0.1:8787/occi1.1/ipreservation/3318c3af-ce57-41ef-a9c1-9a5ecfbe0526

Delete IPReservation

It deletes IPReservation resources:

curl -X DELETE -H "X-Auth-token: "$OS_TOKEN http://127.0.0.1:8787/occi1.1/ipreservation/3318c3af-ce57-41ef-a9c1-9a5ecfbe0526

It returns a 204 empty response.

OOI allows to link virtual machines to private networks, and request for public floating IPs.

It lists links between VMs and networks:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/networklink

It returns a HTTP 200 with output:

X-OCCI-Location: http://127.0.0.23:8787/occi1.2/networklink/9524a622-5d1a-4c7c-bb83-e0d539e2c69b_PUBLIC_192.168.1.132
X-OCCI-Location: http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87

It shows the network link features. It could be with a private or public network. In case of private network:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87

It returns a HTTP 200 with output:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87
Category: networkinterface; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"; \
 title="network link resource"; rel="http://schemas.ogf.org/occi/core#link"; location="http://127.0.0.23:8787/occi1.2/networklink/" \
Category: ipnetworkinterface; scheme="http://schemas.ogf.org/occi/infrastructure/networkinterface#"; \
 class="mixin"; title="IP Network interface Mixin"
X-OCCI-Attribute: occi.networkinterface.mac="fa:16:3e:20:14:f2"
X-OCCI-Attribute: occi.networkinterface.interface="eth0"
X-OCCI-Attribute: occi.networkinterface.state="active"
X-OCCI-Attribute: occi.networkinterface.allocation="dynamic"
X-OCCI-Attribute: occi.networkinterface.address="12.0.0.87"
X-OCCI-Attribute: occi.core.source="http://127.0.0.23:8787/occi1.2/compute/703910d7-97f7-4e3e-9243-30830591f624"
X-OCCI-Attribute: occi.core.target="http://127.0.0.23:8787/occi1.2/network/cd48b7dd-9ac8-44fc-aec0-5ea679941ced"
X-OCCI-Attribute: occi.core.id="703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87"

In case of public network:

curl -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/networklink/4f11383c-b104-40d4-a17c-d223e450d15d_b8a3d813-65da-4910-a80c-f97b4ba31fd4_20.0.0.5

It returns a HTTP 200 with output:

Category: networkinterface; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind";
 title="network link resource"; rel="http://schemas.ogf.org/occi/core#link";
 location="http://127.0.0.23:8787/occi1.2/networklink/"
Category: ipnetworkinterface; scheme="http://schemas.ogf.org/occi/infrastructure/networkinterface#"; class="mixin"; title="IP Network interface Mixin"
X-OCCI-Attribute: occi.networkinterface.mac="fa:16:3e:81:52:b9"
X-OCCI-Attribute: occi.networkinterface.interface="eth0"
X-OCCI-Attribute: occi.networkinterface.state="active"
X-OCCI-Attribute: occi.networkinterface.allocation="dynamic"
X-OCCI-Attribute: occi.networkinterface.address="20.0.0.5"
X-OCCI-Attribute: occi.core.source="http://127.0.0.23:8787/occi1.2/compute/4f11383c-b104-40d4-a17c-d223e450d15d"
X-OCCI-Attribute: occi.core.target="http://127.0.0.23:8787/occi1.2/network/b8a3d813-65da-4910-a80c-f97b4ba31fd4"
X-OCCI-Attribute: occi.core.id="4f11383c-b104-40d4-a17c-d223e450d15d_b8a3d813-65da-4910-a80c-f97b4ba31fd4_20.0.0.5"

It allows you to create link between VMs and networks. It could be with a private or public network: In case of private network:

curl -X POST http://127.0.0.23:8787/occi1.2/networklink/ \
    -H 'X-Auth-Token: '$OS_TOKEN \
    -H 'Category: networkinterface; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"' \
    -H 'Content-Type: text/occi' \
    -H 'X-OCCI-Attribute: occi.core.target=http://127.0.0.23:8787/occi1.2/network/PUBLIC, \
        occi.core.source=http://127.0.0.23:8787/occi1.2/compute/cb83a70a-5202-4b9e-a525-649c72005300'

In case of private network:

curl -X POST http://127.0.0.23:8787/occi1.2/networklink/ \
    -H 'X-Auth-Token: '$OS_TOKEN \
    -H 'Category: networkinterface; scheme="http://schemas.ogf.org/occi/infrastructure#"; class="kind"' \
    -H 'Content-Type: text/occi' \
    -H 'X-OCCI-Attribute: occi.core.target=http://127.0.0.23:8787/occi1.2/network/d856c264-1999-489d-888e-f84db9093979, \
        occi.core.source=http://127.0.0.23:8787/occi1.2/compute/cb83a70a-5202-4b9e-a525-649c72005300'

It deletes a network link:

curl -X DELETE -H "X-Auth-token: "$OS_TOKEN http://127.0.0.23:8787/occi1.2/networklink/703910d7-97f7-4e3e-9243-30830591f624_cd48b7dd-9ac8-44fc-aec0-5ea679941ced_12.0.0.87

It returns a 204 empty response.