⚠️ DISCONTINUATION OF PROJECT - This project will no longer be maintained by Intel. Intel has ceased development and contributions including, but not limited to, maintenance, bug fixes, new releases, or updates, to this project. Intel no longer accepts patches to this project. If you have an ongoing need to use this project, are interested in independently developing it, or would like to maintain patches for the open source software community, please create your own fork of this project.
A Python egg that adds support for the CDMI protocol to OpenStack Swift.
- Install Openstack with Swift
- Grab the code from github:
git clone http://github.com/osaddon/cdmi
- Install this python egg:
sudo python setup.py install
- Configure Swift:
In /etc/swift/proxy-server.conf
, add cdmi filter before proxy-server
[pipeline:main]
pipeline = healthcheck cache tempauth *cdmi* proxy-server
And add the following section to the file:
[filter:cdmi]
use = egg:cdmiapi#cdmiapp
To use CDMI ReSTful API to access containers and data objects, a CDMI client normally need to know the root path plus the host name and port number. This implementation uses "cdmi/" as its root and the port number is 8080. An example url to access a container may look like this:
http://hostname:8080/cdmi/root_container/container1/data1
To access the capability, a CDMI client should simply use the host name, port and the root path "cdmi/" and the returned capability path. For example, to access the data1 capability, the url may look like this:
http://hostname:8080/cdmi/cdmi_capabilities/root_container/container1/data1
First copy a test config file to /etc/swift:
cp /opt/stack/swift/test/sample.conf /etc/swift/test.conf
if you are using keystone configuration for authentication, you will have to make changes in /etc/swift/test.conf and to make sure that you have all the information correct as follows:
auth_host = 127.0.0.1
auth_port = 5000
access_port = 8080
auth_ssl = no
auth_prefix = /v2.0/tokens
account = your_tenant_name
username = your_user_name
password = your_password
if you have swift all-in-one environment, then make sure the information in /etc/swift/test.conf is as follows:
auth_host = 127.0.0.1
auth_port = 8080
access_port = 8080
auth_ssl = no
auth_prefix = /auth/v1.0
account = test
username = tester
password = testing
Now the test cases in the test directory can be run using python <name_of_test.py>
in the tests directory.
Please make sure swift
is enabled in your devstack environment file localrc
.
Authenticate and get an auth token (Swift All-in-one environment):
curl -v -H 'X-Storage-User: test:tester' -H 'X-Storage-Pass: testing' http://127.0.0.1:8080/auth/v1.0
Authenticate and get an auth token (DevStack or Keystone 2.0):
curl -d '{"auth": {"passwordCredentials": {"username": "<<your name>>",
"password": "<<your password>>"}, "tenantName":"<<your tenant name>>"}}'
-H "Content-Type: application/json" http://127.0.0.1:5000/v2.0/tokens
Use the Authentication token and URL which is in the response from the last curl command to perform an GET operation:
curl -v -X GET -H 'X-Auth-Token: AUTH_tk56b01c82710b41328db7c9f953d3933d'
http://127.0.0.1:8080/cdmi/<user_account>/
Create a Container: (replace the auth token with the token obtained above, also replace the user_account with your user account)
curl -v -X PUT -H 'X-Auth-Token: <<your token>>'
-H 'Content-tType: application/directory'-H 'Content-Length: 0'
http://127.0.0.1:8080/cdmi/<user_account>/<root container>
Query the capabilites of a Container:
curl -v -X GET -H 'X-Auth-Token: <<your token>>'
-H 'X-CDMI-Specification-Version: 1.0.1'
http://127.0.0.1:8080/cdmi/<user_id>/cdmi_capabilities/container/
Add an Object to a Container:
curl -v -X PUT -H 'X-Auth-Token: <<your token>>'
-H 'X-CDMI-Specification-Version: 1.0.1'
-H 'Accept: application/cdmi-object'
-H 'Content-Type: application/cdmi-object'
http://127.0.0.1:8080/cdmi/<user_account>/<root container>/<container_name>/<object_name> -d '<Some JSON>'