Difference between revisions of "Manila/API"
Vponomaryov (talk | contribs) (→Update Share) |
Vponomaryov (talk | contribs) (→API Operations) |
||
(37 intermediate revisions by the same user not shown) | |||
Line 84: | Line 84: | ||
JSON Request | JSON Request | ||
− | + | { | |
− | { | + | "share": { |
− | " | + | "volume_type": "%volume_type%", |
"name": "test", | "name": "test", | ||
+ | "snapshot_id": null, | ||
+ | "description": "test description", | ||
+ | "metadata": { | ||
+ | "key1": "value1", | ||
+ | "key2": "value2", | ||
+ | }, | ||
"share_proto": "nfs", | "share_proto": "nfs", | ||
− | " | + | "share_network_id": "%share_network_id%", |
− | + | "size": 1 | |
− | |||
− | |||
− | |||
− | " | ||
} | } | ||
} | } | ||
Line 101: | Line 103: | ||
{ | { | ||
− | + | "share": { | |
− | "id": | + | "id": %share_id%", |
"links": [ | "links": [ | ||
− | { | + | {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, |
− | + | {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} | |
− | |||
− | |||
− | { | ||
− | |||
− | |||
− | |||
], | ], | ||
"name": "test" | "name": "test" | ||
Line 119: | Line 115: | ||
===== List shares with details ===== | ===== List shares with details ===== | ||
− | GET /v1/<tenant_id>/shares/ | + | GET /v1/<tenant_id>/shares/detail |
Accept: application/json | Accept: application/json | ||
Line 125: | Line 121: | ||
JSON Response | JSON Response | ||
− | |||
{ | { | ||
− | + | "shares": [ | |
{ | { | ||
− | + | "status": "available", | |
− | + | "export_location": %ip%:/opt/stack/data/manila/mnt/share-%share_id%, | |
− | + | "name": "test", | |
− | + | "links": [ | |
− | + | {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, | |
− | + | {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} | |
− | + | ], | |
− | + | "availability_zone": "nova", | |
− | + | "created_at": "2014-05-30T12:14:31.000000", | |
− | + | "description": null, | |
− | + | "share_proto": "NFS", | |
− | + | "share_network_id": "%share_network_id%", | |
− | + | "metadata": { | |
− | + | "key1": "value1", | |
− | + | "key2": "value2", | |
− | + | }, | |
− | + | "host": "hostname@backendname", | |
− | + | "volume_type": "%volume_type%", | |
− | + | "snapshot_id": null, | |
− | + | "project_id": "%project_id(tenant_id)%", | |
+ | "id": "%share_id%", | ||
+ | "size": 1 | ||
}, | }, | ||
{ | { | ||
− | + | "status": "available", | |
− | + | "export_location": null, | |
− | + | "name": "somename", | |
− | + | "links": [ | |
− | + | {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, | |
− | + | {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} | |
− | + | ], | |
− | + | "availability_zone": "nova", | |
− | + | "created_at": "2014-05-30T12:12:55.000000", | |
− | + | "description": "somedescription", | |
− | + | "share_proto": "NFS", | |
− | + | "share_network_id": "%share_network_id%", | |
− | + | "metadata": {}, | |
− | + | "host": "hostname2@backendname2", | |
− | + | "volume_type": "%volume_type%", | |
− | + | "snapshot_id": "%snapshot_id%", | |
− | + | "project_id": "%project_id(tenant_id)%", | |
− | + | "id": "%share_id%", | |
− | + | "size": 1 | |
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
] | ] | ||
Line 186: | Line 178: | ||
JSON Response | JSON Response | ||
− | |||
{ | { | ||
− | + | "share": { | |
− | " | + | "status": "available", |
− | + | "export_location": "%ip%:/opt/stack/data/manila/mnt/share-%share_id%", | |
− | + | "name": "name_of_cifs_share", | |
− | "export_location": " | ||
− | " | ||
"links": [ | "links": [ | ||
− | { | + | {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, |
− | + | {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} | |
− | |||
− | |||
− | { | ||
− | |||
− | |||
− | |||
], | ], | ||
− | " | + | "availability_zone": "nova", |
− | "share_proto": " | + | "created_at": "2014-05-30T11:31:13.000000", |
− | " | + | "description": "some description", |
+ | "share_proto": "CIFS", | ||
+ | "share_network_id": "%share_network_id%", | ||
+ | "metadata": { | ||
+ | "key1": "value1", | ||
+ | "key2": "value2" | ||
+ | }, | ||
+ | "host": "hostname@backendname", | ||
+ | "volume_type": "%volume_type%", | ||
"snapshot_id": null, | "snapshot_id": null, | ||
− | " | + | "project_id": "%project_id%", |
− | " | + | "id": "%share_id%", |
− | + | "size": 5 | |
− | |||
− | |||
} | } | ||
} | } | ||
Line 238: | Line 227: | ||
"created_at": "2013-10-02T09:58:12.000000", | "created_at": "2013-10-02T09:58:12.000000", | ||
"description": "New description", | "description": "New description", | ||
− | "export_location": "localhost:/opt/stack/data/manila/mnt/share- | + | "share_network_id": "%share_network_id%", |
− | "id": " | + | "export_location": "localhost:/opt/stack/data/manila/mnt/share-%share_id%", |
+ | "id": "%share_id%", | ||
"links": [ | "links": [ | ||
{ | { | ||
Line 251: | Line 241: | ||
], | ], | ||
"name": "newname", | "name": "newname", | ||
+ | "volume_type": "%volume_type%", | ||
"share_proto": "NFS", | "share_proto": "NFS", | ||
"size": 2, | "size": 2, | ||
"snapshot_id": null, | "snapshot_id": null, | ||
"status": "available", | "status": "available", | ||
+ | "project_id": "%project_id%", | ||
+ | "host": "hostname@backendname", | ||
"metadata": { | "metadata": { | ||
"key1": "value1", | "key1": "value1", | ||
Line 329: | Line 322: | ||
DELETE /v1/<tenant_id>/shares/<share_id>/metadata/<key> | DELETE /v1/<tenant_id>/shares/<share_id>/metadata/<key> | ||
+ | |||
+ | ==== Share Actions ==== | ||
+ | ===== Allow access ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/shares/<share_id>/action | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "os-allow_access": { | ||
+ | "access_to": "1.1.1.1", | ||
+ | "access_type": "ip" | ||
+ | } | ||
+ | } | ||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "access": { | ||
+ | "access_to": "1.1.1.1", | ||
+ | "access_type": "ip", | ||
+ | "created_at": "2013-10-02T10:29:36.539532", | ||
+ | "deleted": false, | ||
+ | "deleted_at": null, | ||
+ | "id": "%access_rule_id%", | ||
+ | "share_id": "%share_id%", | ||
+ | "state": "new", | ||
+ | "updated_at": null | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== Deny Access ===== | ||
+ | POST /v1/<tenant_id>/shares/<share_id>/action | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "os-deny_access": { | ||
+ | "access_id": "%access_rule_id%" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== List Access Rules ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/shares/<share_id>/action | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "os-access_list": null | ||
+ | } | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "access_list": [ | ||
+ | { | ||
+ | "access_to": "1.1.1.1", | ||
+ | "access_type": "ip", | ||
+ | "id": "%access_rule_id%", | ||
+ | "state": "active" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== Reset Share State ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/shares/<share_id>/action | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "os-reset_status": {"status": "error"} | ||
+ | } | ||
+ | |||
+ | JSON Response is empty | ||
==== Snapshots ==== | ==== Snapshots ==== | ||
Line 344: | Line 420: | ||
"force": false, | "force": false, | ||
"name": null, | "name": null, | ||
− | "share_id": " | + | "share_id": "%share_id%" |
} | } | ||
} | } | ||
Line 352: | Line 428: | ||
{ | { | ||
"snapshot": { | "snapshot": { | ||
− | "id": " | + | "id": "%snapshot_id%", |
"links": [ | "links": [ | ||
{ | { | ||
− | "href": "http://localhost:8786/v1/ | + | "href": "http://localhost:8786/v1/%tenant_id%/snapshots/%snapshot_id%", |
"rel": "self" | "rel": "self" | ||
}, | }, | ||
{ | { | ||
− | "href": "http://localhost:8786/ | + | "href": "http://localhost:8786/%tenant_id%/snapshots/%snapshot_id%", |
"rel": "bookmark" | "rel": "bookmark" | ||
} | } | ||
Line 369: | Line 445: | ||
===== List Snapshots with Details ===== | ===== List Snapshots with Details ===== | ||
− | GET /v1/<tenant_id>/snapshots/ | + | GET /v1/<tenant_id>/snapshots/detail |
Accept: application/json | Accept: application/json | ||
Line 377: | Line 453: | ||
{ | { | ||
"snapshots": [ | "snapshots": [ | ||
− | + | { | |
− | + | "status": "available", | |
− | + | "share_id": "%share_id%", | |
− | + | "description": "test-desc", | |
− | + | "links": [ | |
− | + | {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, | |
− | + | {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} | |
− | + | ], | |
− | + | "id": "%snapshot_id%", | |
− | + | "size": 1, | |
− | + | "name": "snap-test", | |
− | + | "created_at": "2014-05-30T17:20:37.000000", | |
− | + | "export_location": "10.254.0.3:/shares/share-%share_id%", | |
− | + | "share_proto": "NFS", | |
− | + | "share_size": 1 | |
− | + | }, | |
− | + | { | |
− | + | "status": "available", | |
− | + | "share_id": "%share_id%", | |
− | + | "description": "test-desc", | |
− | + | "links": [ | |
− | + | {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, | |
− | + | {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} | |
+ | ], | ||
+ | "id": "%snapshot_id%", | ||
+ | "size": 1, | ||
+ | "name": "snap-test", | ||
+ | "created_at": "2014-05-30T17:20:24.000000", | ||
+ | "export_location": "10.254.0.3:/shares/share-%share_id%", | ||
+ | "share_proto": "NFS", | ||
+ | "share_size": 1 | ||
+ | } | ||
+ | ] | ||
} | } | ||
Line 411: | Line 497: | ||
{ | { | ||
"snapshot": { | "snapshot": { | ||
− | + | "status": "available", | |
− | + | "share_id": "%share_id%", | |
− | + | "description": "test-desc", | |
− | + | "links": [ | |
− | + | {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, | |
− | + | {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} | |
− | + | ], | |
− | + | "id": "%snapshot_id%", | |
− | + | "size": 1, | |
− | + | "name": "snap-test", | |
− | + | "created_at": "2014-05-30T17:20:37.000000", | |
− | + | "export_location": "10.254.0.3:/shares/share-%share_id%", | |
− | + | "share_proto": "NFS", | |
− | + | "share_size": 1 | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
Line 453: | Line 533: | ||
{ | { | ||
"snapshot": { | "snapshot": { | ||
− | + | "status": "available", | |
− | + | "share_id": "%share_id%", | |
− | + | "description": "New description", | |
− | + | "links": [ | |
− | + | {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, | |
− | + | {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} | |
− | + | ], | |
− | + | "id": "%snapshot_id%", | |
− | + | "size": 1, | |
− | + | "name": "newname", | |
− | + | "created_at": "2014-05-30T17:20:37.000000", | |
− | + | "export_location": "10.254.0.3:/shares/share-%share_id%", | |
− | + | "share_proto": "NFS", | |
− | + | "share_size": 1 | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
Line 481: | Line 555: | ||
Accept: application/json | Accept: application/json | ||
+ | |||
+ | ==== Snapshot Actions ==== | ||
+ | ===== Reset Snapshot State ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/snapshots/<snapshot_id>/action | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "os-reset_status": {"status": "error"} | ||
+ | } | ||
+ | |||
+ | JSON Response is empty | ||
==== Share Networks ==== | ==== Share Networks ==== | ||
Line 495: | Line 584: | ||
JSON Request | JSON Request | ||
− | { | + | { |
+ | "share_network": { | ||
"name": "test_name", | "name": "test_name", | ||
"description": "test_description", | "description": "test_description", | ||
Line 536: | Line 626: | ||
{ | { | ||
"id": "%share_network_id%", | "id": "%share_network_id%", | ||
− | "name": " | + | "name": "private", |
"status": null | "status": null | ||
− | }, | + | } |
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== List share-networks with details===== | ||
+ | |||
+ | GET /v1/<tenant_id>/share-networks/detail | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "share_networks": [ | ||
+ | { | ||
+ | "status": null, | ||
+ | "name": "private", | ||
+ | "segmentation_id": null, | ||
+ | "created_at": "2014-05-30T17:14:24.000000", | ||
+ | "neutron_subnet_id": "%neutron_subnet_id%", | ||
+ | "updated_at": null, | ||
+ | "network_type": null, | ||
+ | "neutron_net_id": "%neutron_net_id%", | ||
+ | "ip_version": null, | ||
+ | "cidr": null, | ||
+ | "project_id": "%project_id%", | ||
+ | "id": "%share_network_id%", | ||
+ | "description": null | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== Show share-network ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/share-networks/<share_network_id> | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "share_network": | ||
{ | { | ||
− | "id": "% | + | "id": "%share_network_id%", |
− | "name": " | + | "name": "private", |
"status": null | "status": null | ||
− | } | + | "segmentation_id": null, |
− | + | "created_at": "2014-05-30T17:14:24.000000", | |
+ | "neutron_subnet_id": "neutron_subnet_id", | ||
+ | "updated_at": null, | ||
+ | "network_type": null, | ||
+ | "neutron_net_id": "%neutron_net_id%", | ||
+ | "ip_version": null, | ||
+ | "cidr": null, | ||
+ | "project_id": "%project_id%", | ||
+ | "description": null | ||
+ | } | ||
} | } | ||
− | = | + | ===== Update Share Network ===== |
− | ==== Share | ||
− | |||
− | + | PUT /v1/<tenant_id>/share-networks/<share_network_id> | |
Accept: application/json | Accept: application/json | ||
Line 558: | Line 697: | ||
{ | { | ||
− | " | + | "share_network": { |
− | " | + | "description": "newdesc", |
− | " | + | "name": "newname" |
} | } | ||
} | } | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "share_network": { | ||
+ | "status": null, | ||
+ | "name": "newname", | ||
+ | "segmentation_id": null, | ||
+ | "created_at": "2014-05-30T17:56:55.000000", | ||
+ | "neutron_subnet_id": null, | ||
+ | "updated_at": "2014-05-30T17:57:07.000000", | ||
+ | "network_type": null, | ||
+ | "neutron_net_id": null, | ||
+ | "ip_version": null, "cidr": null, | ||
+ | "project_id": "%project_id%", | ||
+ | "id": "%share_network_id%", | ||
+ | "description": "newdesc" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== Delete Share Network ===== | ||
+ | |||
+ | DELETE /v1/<tenant_id>/share-networks/<share_network_id> | ||
+ | |||
+ | ===== Add Security Service to Share network ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/share-networks/<share_network_id>/action | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "add_security_service": { | ||
+ | "security_service_id": "%security_service_id%" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "share_network": { | ||
+ | "status": null, | ||
+ | "name": "test", | ||
+ | "segmentation_id": null, | ||
+ | "created_at": "2014-06-02T13:57:48.000000", | ||
+ | "neutron_subnet_id": null, | ||
+ | "updated_at": null, | ||
+ | "network_type": null, | ||
+ | "neutron_net_id": null, | ||
+ | "ip_version": null, | ||
+ | "cidr": null, | ||
+ | "project_id": "%project_id%", | ||
+ | "id": "%share_network_id%", | ||
+ | "description": null | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== Remove Security Service from Share network ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/share-networks/<share_network_id>/action | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "remove_security_service": { | ||
+ | "security_service_id": "%security_service_id%" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "share_network": { | ||
+ | "status": null, | ||
+ | "name": "test", | ||
+ | "segmentation_id": null, | ||
+ | "created_at": "2014-06-02T13:57:48.000000", | ||
+ | "neutron_subnet_id": null, | ||
+ | "updated_at": null, | ||
+ | "network_type": null, | ||
+ | "neutron_net_id": null, | ||
+ | "ip_version": null, | ||
+ | "cidr": null, | ||
+ | "project_id": "%project_id%", | ||
+ | "id": "%share_network_id%", | ||
+ | "description": null | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ==== Security Services ==== | ||
+ | ===== Create Security Service ===== | ||
+ | |||
+ | |||
+ | POST /v1/<tenant_id>/security-services | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "security_service": { | ||
+ | "domain": "domain", | ||
+ | "name": "name", | ||
+ | "dns_ip": "dns-ip", | ||
+ | "sid": "security", | ||
+ | "password": "password", | ||
+ | "type": "ldap", | ||
+ | "description": "description" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "security_service": { | ||
+ | "status": "NEW", | ||
+ | "domain": "domain", | ||
+ | "description": "description", | ||
+ | "dns_ip": "dns-ip", | ||
+ | "updated_at": null, | ||
+ | "password": "password", | ||
+ | "id": "%security_service_id%", | ||
+ | "name": "name", | ||
+ | "created_at": "2014-06-02T08:45:53.685967", | ||
+ | "server": null, | ||
+ | "sid": "security", | ||
+ | "project_id": "%project_id%", | ||
+ | "type": "ldap" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== List Security Services ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/security-services | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "security_services": [ | ||
+ | { | ||
+ | "status": "NEW", | ||
+ | "type": "ldap", | ||
+ | "id": "%security_service_id%", | ||
+ | "name": "name" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== List Security Service with details===== | ||
+ | |||
+ | GET /v1/<tenant_id>/security-services/detail | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "security_services": [ | ||
+ | { | ||
+ | "status": "NEW", | ||
+ | "domain": "domain", | ||
+ | "description": "description", | ||
+ | "dns_ip": "dns-ip", | ||
+ | "updated_at": null, | ||
+ | "password": "password", | ||
+ | "id": "%security_service_id%", | ||
+ | "name": "name", | ||
+ | "created_at": "2014-06-02T08:45:53.000000", | ||
+ | "server": null, | ||
+ | "sid": "security", | ||
+ | "project_id": "%project_id%", | ||
+ | "type": "ldap" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== List Security Services for Share Network ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/security-services?share_network_id=%share_network_id% | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "security_services": [ | ||
+ | { | ||
+ | "status": "NEW", | ||
+ | "type": "ldap", | ||
+ | "id": "%security_service_id%", | ||
+ | "name": "name" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== Show Security Service ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/security-services/<security_service_id> | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "security_service": { | ||
+ | "status": "NEW", | ||
+ | "domain": "domain", | ||
+ | "description": "description", | ||
+ | "dns_ip": "dns-ip", | ||
+ | "updated_at": null, | ||
+ | "password": "password", | ||
+ | "id": "%security_service_id%", | ||
+ | "name": "name", | ||
+ | "created_at": "2014-06-02T08:45:53.000000", | ||
+ | "server": null, | ||
+ | "sid": "security", | ||
+ | "project_id": "%project_id%", | ||
+ | "type": "ldap" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== Update Security Service ===== | ||
+ | |||
+ | PUT /v1/<tenant_id>/security-services/<security_service_id> | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "security_service": { | ||
+ | "domain": "newdomain", | ||
+ | "description": "newdescription", | ||
+ | "dns_ip": "newdns-ip", | ||
+ | "sid": "newsecurity", | ||
+ | "password": "newpassword", | ||
+ | "name": "newname" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "security_service": { | ||
+ | "status": "NEW", | ||
+ | "domain": "newdomain", | ||
+ | "description": "newdescription", | ||
+ | "dns_ip": "newdns-ip", | ||
+ | "updated_at": "2014-06-02T08:55:25.809860", | ||
+ | "password": "newpassword", | ||
+ | "id": "%security_service_id%", | ||
+ | "name": "newname", | ||
+ | "created_at": "2014-06-02T08:45:53.000000", | ||
+ | "server": null, | ||
+ | "sid": "newsecurity", | ||
+ | "project_id": "%project_id%", | ||
+ | "type": "ldap" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== Delete Security Service ===== | ||
+ | |||
+ | DELETE /v1/<tenant_id>/security-services/<security_service_id> | ||
+ | |||
+ | ==== Share Servers ==== | ||
+ | ===== List Share Servers ===== | ||
+ | GET /v1/<tenant_id>/share-servers | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "share_servers": [ | ||
+ | { | ||
+ | "status": "ACTIVE", | ||
+ | "updated_at": "2014-06-03T13:52:04.000000", | ||
+ | "share_network_name": "private", | ||
+ | "host": "localhost@paris", | ||
+ | "project_id": "%project_id%", | ||
+ | "id": "e9a6fa06-833f-4ab6-aa20-5d5abf8737c5" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== Show Share Server ===== | ||
+ | GET /v1/<tenant_id>/share-server/<share_server_id> | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "share_server": { | ||
+ | "status": "ACTIVE", | ||
+ | "backend_details": { | ||
+ | "instance_id": "%instance_id%", | ||
+ | "ip": "10.254.0.3", | ||
+ | "username": "ubuntu", | ||
+ | "password": "ubuntu", | ||
+ | "pk_path": "/home/stack/.ssh/manila-service0ce582d2-671e-4286-af25-74f8f40fe4d6" | ||
+ | }, | ||
+ | "created_at": "2014-06-03T13:49:10.000000", | ||
+ | "updated_at": "2014-06-03T13:52:04.000000", | ||
+ | "share_network_name": "private", | ||
+ | "host": "localhost@paris", | ||
+ | "project_id": "%project_id%", | ||
+ | "id": "%share_server_id%" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== Show Details of Share Server ===== | ||
+ | GET /v1/<tenant_id>/share-server/<share_server_id>/details | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "details": { | ||
+ | "instance_id": "%instance_id%", | ||
+ | "ip": "10.254.0.3", | ||
+ | "username": "ubuntu", | ||
+ | "password": "ubuntu", | ||
+ | "pk_path": "/home/stack/.ssh/manila-service0ce582d2-671e-4286-af25-74f8f40fe4d6" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ==== Limits ==== | ||
+ | ===== List Limits ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/limits | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "limits": { | ||
+ | "rate": [], | ||
+ | "absolute": { | ||
+ | "totalShareNetworksUsed": 3, | ||
+ | "maxTotalShareGigabytes": 1000, | ||
+ | "maxTotalShareNetworks": 5, | ||
+ | "totalSharesUsed": 10, | ||
+ | "totalShareGigabytesUsed": 11, | ||
+ | "totalShareSnapshotsUsed": 1, | ||
+ | "maxTotalShares": 10, | ||
+ | "maxTotalShareSnapshots": 10 | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ==== Extensions ==== | ||
+ | ===== List Extensions ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/extensions | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
JSON Response | JSON Response | ||
{ | { | ||
− | " | + | "extensions": [ |
− | + | { | |
− | + | "updated": "2013-06-09T00:00:00+00:00", | |
− | + | "name": "ExtendedQuotas", | |
− | + | "links": [], | |
− | + | "namespace": "http://docs.openstack.org/compute/ext/extended_quotas/api/v1.1", | |
− | + | "alias": "os-extended-quotas", | |
− | + | "description": "Adds ability for admins to delete quota\n and optionally force the update Quota command.\n " | |
− | + | }, | |
− | " | + | { |
+ | "updated": "2012-03-12T00:00:00+00:00", | ||
+ | "name": "QuotaClasses", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/volume/ext/quota-classes-sets/api/v1.1", | ||
+ | "alias": "os-quota-class-sets", | ||
+ | "description": "Quota classes management support" | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2011-08-08T00:00:00+00:00", | ||
+ | "name": "Quotas", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/compute/ext/quotas-sets/api/v1.1", | ||
+ | "alias": "os-quota-sets", | ||
+ | "description": "Quotas management support" | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2011-08-24T00:00:00+00:00", | ||
+ | "name": "TypesManage", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/share/ext/types-manage/api/v1", | ||
+ | "alias": "os-types-manage", | ||
+ | "description": "Types manage support." | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2013-07-18T00:00:00+00:00", | ||
+ | "name": "UserQuotas", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/compute/ext/user_quotas/api/v1.1", | ||
+ | "alias": "os-user-quotas", | ||
+ | "description": "Project user quota support." | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2012-08-14T00:00:00+00:00", | ||
+ | "name": "ShareActions", | ||
+ | "links": [], | ||
+ | "namespace": "", | ||
+ | "alias": "share-actions", | ||
+ | "description": "Enable share actions." | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2011-08-24T00:00:00+00:00", | ||
+ | "name": "TypesExtraSpecs", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/share/ext/types-extra-specs/api/v1", | ||
+ | "alias": "os-types-extra-specs", | ||
+ | "description": "Type extra specs support." | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2012-08-25T00:00:00+00:00", | ||
+ | "name": "AdminActions", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/share/ext/admin-actions/api/v1.1", | ||
+ | "alias": "os-admin-actions", | ||
+ | "description": "Enable admin actions." | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2012-10-28T00:00:00-00:00", | ||
+ | "name": "Services", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/volume/ext/services/api/v2", | ||
+ | "alias": "os-services", | ||
+ | "description": "Services support" | ||
+ | }, | ||
+ | { | ||
+ | "updated": "2014-03-27T00:00:00+00:00", | ||
+ | "name": "UsedLimits", | ||
+ | "links": [], | ||
+ | "namespace": "http://docs.openstack.org/share/ext/used-limits/api/v1.0", | ||
+ | "alias": "os-used-limits", | ||
+ | "description": "Provide data on limited resources that are being used." | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ==== Services ==== | ||
+ | ===== List Services ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/os-services | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "services": [ | ||
+ | { | ||
+ | "status": "enabled", | ||
+ | "binary": "manila-scheduler", | ||
+ | "zone": "nova", | ||
+ | "state": "up", | ||
+ | "updated_at": "2014-06-02T14:57:52.000000", | ||
+ | "host": "nosb-devstack" | ||
+ | }, | ||
+ | { | ||
+ | "status": "enabled", | ||
+ | "binary": "manila-share", | ||
+ | "zone": "nova", | ||
+ | "state": "up", | ||
+ | "updated_at": "2014-06-02T14:57:52.000000", | ||
+ | "host": "nosb-devstack@paris" | ||
+ | }, | ||
+ | {"status": "enabled", | ||
+ | "binary": "manila-share", | ||
+ | "zone": "nova", | ||
+ | "state": "up", | ||
+ | "updated_at": "2014-06-02T14:57:47.000000", | ||
+ | "host": "nosb-devstack@london" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ===== List Services With Filters ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/os-services?status=enabled&binary=manila-share&host=nosb-devstack%40london&state=up&zone=nova | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "services": [ | ||
+ | { | ||
+ | "status": "enabled", | ||
+ | "binary": "manila-share", | ||
+ | "zone": "nova", | ||
+ | "state": "up", | ||
+ | "updated_at": "2014-06-02T14:57:47.000000", | ||
+ | "host": "nosb-devstack@london" | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | |||
+ | ==== Volume Types ==== | ||
+ | ===== Create Volume Type ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/types/%volume_type_id% | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Request | ||
+ | |||
+ | { | ||
+ | "volume_type": { | ||
+ | "name": "test", | ||
} | } | ||
} | } | ||
− | ===== | + | JSON Response |
− | POST /v1/<tenant_id>/ | + | |
+ | { | ||
+ | "volume_type": { | ||
+ | "extra_specs": {}, | ||
+ | "name": "test", | ||
+ | "id": "%volume_type_id%" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | ===== Set Key for Volume Type ===== | ||
+ | |||
+ | POST /v1/<tenant_id>/types/%volume_type_id%/extra_specs | ||
+ | |||
+ | Content-Type: application/json | ||
Accept: application/json | Accept: application/json | ||
Line 587: | Line 1,263: | ||
{ | { | ||
− | + | "extra_specs": { | |
− | + | "k": "v" | |
− | + | } | |
+ | } | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "extra_specs": { | ||
+ | "k": "v" | ||
+ | } | ||
} | } | ||
− | ===== | + | ===== Unset Key for Volume Type ===== |
+ | |||
+ | DELETE /v1/<tenant_id>/types/%volume_type_id%/extra_specs/%key% | ||
− | + | Content-Type: application/json | |
Accept: application/json | Accept: application/json | ||
Line 601: | Line 1,287: | ||
{ | { | ||
− | " | + | "extra_specs": { |
+ | "k": "v" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | JSON Response is empty | ||
+ | |||
+ | ===== List Volume Types ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/types | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
+ | |||
+ | JSON Response | ||
+ | |||
+ | { | ||
+ | "volume_types": [ | ||
+ | { | ||
+ | "extra_specs": {"q": "w"}, | ||
+ | "name": "test", | ||
+ | "id": "%volume_type_id%" | ||
+ | }, | ||
+ | ] | ||
} | } | ||
+ | |||
+ | ===== List Extra Specs for Volume Type ===== | ||
+ | |||
+ | GET /v1/<tenant_id>/types/<volume_type_id>/extra_specs | ||
+ | |||
+ | Content-Type: application/json | ||
+ | |||
+ | Accept: application/json | ||
JSON Response | JSON Response | ||
{ | { | ||
− | " | + | "extra_specs": { |
− | + | "share_backend_name": "TEST_BACKEND" | |
− | + | } | |
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
+ | |||
+ | ===== Delete Volume Type ===== | ||
+ | |||
+ | DELETE /v1/<tenant_id>/types/<volume_type_id> |
Latest revision as of 11:20, 4 June 2014
Contents
- 1 OpenStack Shared Filesystem Management Service API v1 specification
- 1.1 Glossary
- 1.2 High-Level Task Flow
- 1.3 Authentication
- 1.4 Request/Response Types
- 1.5 API Operations
This document describes how to develop applications that use Manila Service API v1 for authentication. This document also describes how to integrate services with Manila Service API v1.
Glossary
To use the Shared Filesystem Managenent service API effectively, you should understand several key concepts:
Share
A remote mountable filesystem. It can only be attached to several instances at a time.
Share type
Share protocol (NFS, CIFS)
Snapshot
A point in time copy of the data contained in a share.
Share Network
stores network information that will be used by share servers, where shares are hosted.
Security Service
stores information for configuring clients for LDAP, Kerberos or Active Directory on 'share server'. It should be attached to share-network, if assumed to be used.
Share Server
is created by multitenant backend drivers, where shares are hosted. Using 'generic' driver, it is Nova's VMs, using 'cluster_mode' driver from NetApp it is 'vserver's...
Volume type
designed for filtering/choosing 'backends' before creation of share. Behaviour same as in 'Cinder' project.
High-Level Task Flow
The high-level task flow for Manila is as follows:
The tenant creates a share. For example, the tenant creates a 30G NFS share called share1 in network, specified by share-network with id '%some-share-network-id%' and on backend 'netapp' using volume-type.
$ manila create nfs 30 --name share1 --description "Description of share" --share-network-id %some-share-network-id% --volume-type netapp
Authentication
You can use cURL to try the authentication process in two steps: get a token; send the token to a service. Get an authentication token by providing your user name and either your API key or your password. Here are examples of both approaches: You can request a token by providing your user name and your password.
$ curl -X POST https://localhost:5000/v2.0/tokens -d '{"auth":{"passwordCredentials":{"username": "joecool", "password":"coolword"}, "tenantId":"5"}}' -H 'Content-type: application/json'
Successful authentication returns a token which you can use as evidence that your identity has already been authenticated. To use the token, pass it to other services as an X-Auth-Token header. Authentication also returns a service catalog, listing the endpoints you can use for Cloud services. Use the authentication token to send a GET to a service you would like to use. Authentication tokens are typically valid for 24 hours. Applications should be designed to re-authenticate after receiving a 401 (Unauthorized) response from a service endpoint.
Request/Response Types
Manila API supports both the JSON and XML data serialization formats. The request format is specified using the Content-Type header and is required for calls that have a request body. The response format can be specified in requests either by using the Accept header or by adding an .xml or .json extension to the request URI. Note that it is possible for a response to be serialized using a format different from the request. If no response format is specified, JSON is the default. If conflicting formats are specified using both an Accept header and a query extension, the query extension takes precedence.
NOTE: manila supports XML container type for the moment, after implementation of bp for nova: https://blueprints.launchpad.net/nova/+spec/remove-v3-xml-api were decided to stop support and test this container type in manila.
Table 2.1. Response Formats
Format | Acceptt Header | Query Extension | Default |
---|---|---|---|
JSON | application/json | .json | Yes |
XML | application/xml | .xml | No |
API Operations
POST /v1/<tenant_id>/shares
Content-Type: application/json
Accept: application/json
JSON Request
{ "share": { "volume_type": "%volume_type%", "name": "test", "snapshot_id": null, "description": "test description", "metadata": { "key1": "value1", "key2": "value2", }, "share_proto": "nfs", "share_network_id": "%share_network_id%", "size": 1 } }
JSON Response
{ "share": { "id": %share_id%", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} ], "name": "test" } }
GET /v1/<tenant_id>/shares/detail
Accept: application/json
JSON Response
{ "shares": [ { "status": "available", "export_location": %ip%:/opt/stack/data/manila/mnt/share-%share_id%, "name": "test", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} ], "availability_zone": "nova", "created_at": "2014-05-30T12:14:31.000000", "description": null, "share_proto": "NFS", "share_network_id": "%share_network_id%", "metadata": { "key1": "value1", "key2": "value2", }, "host": "hostname@backendname", "volume_type": "%volume_type%", "snapshot_id": null, "project_id": "%project_id(tenant_id)%", "id": "%share_id%", "size": 1 }, { "status": "available", "export_location": null, "name": "somename", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} ], "availability_zone": "nova", "created_at": "2014-05-30T12:12:55.000000", "description": "somedescription", "share_proto": "NFS", "share_network_id": "%share_network_id%", "metadata": {}, "host": "hostname2@backendname2", "volume_type": "%volume_type%", "snapshot_id": "%snapshot_id%", "project_id": "%project_id(tenant_id)%", "id": "%share_id%", "size": 1 } ] }
GET /v1/<tenant_id>/shares/<share_id>
Accept: application/json
JSON Response
{ "share": { "status": "available", "export_location": "%ip%:/opt/stack/data/manila/mnt/share-%share_id%", "name": "name_of_cifs_share", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark"} ], "availability_zone": "nova", "created_at": "2014-05-30T11:31:13.000000", "description": "some description", "share_proto": "CIFS", "share_network_id": "%share_network_id%", "metadata": { "key1": "value1", "key2": "value2" }, "host": "hostname@backendname", "volume_type": "%volume_type%", "snapshot_id": null, "project_id": "%project_id%", "id": "%share_id%", "size": 5 } }
PUT /v1/<tenant_id>/shares/<share_id>
Accept: application/json
JSON Request
{ "share": { "display_description": "New description", "display_name": "newname" } }
JSON Response
{ "share": { "availability_zone": "nova", "created_at": "2013-10-02T09:58:12.000000", "description": "New description", "share_network_id": "%share_network_id%", "export_location": "localhost:/opt/stack/data/manila/mnt/share-%share_id%", "id": "%share_id%", "links": [ { "href": "http://localhost:8786/v1/%tenant_id%/shares/%share_id%", "rel": "self" }, { "href": "http://localhost:8786/%tenant_id%/shares/%share_id%", "rel": "bookmark" } ], "name": "newname", "volume_type": "%volume_type%", "share_proto": "NFS", "size": 2, "snapshot_id": null, "status": "available", "project_id": "%project_id%", "host": "hostname@backendname", "metadata": { "key1": "value1", "key2": "value2" } } }
DELETE /v1/<tenant_id>/shares/<share_id>
GET /v1/<tenant_id>/shares/<share_id>/metadata
Accept: application/json
JSON Response
{ "metadata": { "key1": "value1", "key2": "value2" } }
PUT /v1/<tenant_id>/shares/<share_id>/metadata
Accept: application/json
JSON Request
{ "metadata": { "key1": "value1" } }
JSON Response
{ "metadata": { "key1": "value1" } }
POST /v1/<tenant_id>/shares/<share_id>/metadata
Accept: application/json
JSON Request
{ "metadata": { "key1": "value1" } }
JSON Response
{ "metadata": { "key1": "value1", "key2": "value2" } }
DELETE /v1/<tenant_id>/shares/<share_id>/metadata/<key>
Allow access
POST /v1/<tenant_id>/shares/<share_id>/action
Accept: application/json
JSON Request
{ "os-allow_access": { "access_to": "1.1.1.1", "access_type": "ip" } }
JSON Response
{ "access": { "access_to": "1.1.1.1", "access_type": "ip", "created_at": "2013-10-02T10:29:36.539532", "deleted": false, "deleted_at": null, "id": "%access_rule_id%", "share_id": "%share_id%", "state": "new", "updated_at": null } }
Deny Access
POST /v1/<tenant_id>/shares/<share_id>/action
Accept: application/json
JSON Request
{ "os-deny_access": { "access_id": "%access_rule_id%" } }
List Access Rules
POST /v1/<tenant_id>/shares/<share_id>/action
Accept: application/json
JSON Request
{ "os-access_list": null }
JSON Response
{ "access_list": [ { "access_to": "1.1.1.1", "access_type": "ip", "id": "%access_rule_id%", "state": "active" } ] }
POST /v1/<tenant_id>/shares/<share_id>/action
Accept: application/json
JSON Request
{ "os-reset_status": {"status": "error"} }
JSON Response is empty
Snapshots
Create Snapshot
POST /v1/<tenant_id>/snapshots
Accept: application/json
JSON Request
{ "snapshot": { "description": null, "force": false, "name": null, "share_id": "%share_id%" } }
JSON Response
{ "snapshot": { "id": "%snapshot_id%", "links": [ { "href": "http://localhost:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self" }, { "href": "http://localhost:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark" } ], "name": null } }
List Snapshots with Details
GET /v1/<tenant_id>/snapshots/detail
Accept: application/json
JSON Response
{ "snapshots": [ { "status": "available", "share_id": "%share_id%", "description": "test-desc", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} ], "id": "%snapshot_id%", "size": 1, "name": "snap-test", "created_at": "2014-05-30T17:20:37.000000", "export_location": "10.254.0.3:/shares/share-%share_id%", "share_proto": "NFS", "share_size": 1 }, { "status": "available", "share_id": "%share_id%", "description": "test-desc", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} ], "id": "%snapshot_id%", "size": 1, "name": "snap-test", "created_at": "2014-05-30T17:20:24.000000", "export_location": "10.254.0.3:/shares/share-%share_id%", "share_proto": "NFS", "share_size": 1 } ] }
Show Snapshot
GET /v1/<tenant_id>/snapshots/<snapshot_id>
Accept: application/json
JSON Response
{ "snapshot": { "status": "available", "share_id": "%share_id%", "description": "test-desc", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} ], "id": "%snapshot_id%", "size": 1, "name": "snap-test", "created_at": "2014-05-30T17:20:37.000000", "export_location": "10.254.0.3:/shares/share-%share_id%", "share_proto": "NFS", "share_size": 1 } }
Update Snapshot
PUT /v1/<tenant_id>/snapshots/<snapshot_id>
Accept: application/json
JSON Request
{ "snapshot": { "display_description": "New description", "display_name": "newname" } }
JSON Response
{ "snapshot": { "status": "available", "share_id": "%share_id%", "description": "New description", "links": [ {"href": "http://%ip%:8786/v1/%tenant_id%/snapshots/%snapshot_id%", "rel": "self"}, {"href": "http://%ip%:8786/%tenant_id%/snapshots/%snapshot_id%", "rel": "bookmark"} ], "id": "%snapshot_id%", "size": 1, "name": "newname", "created_at": "2014-05-30T17:20:37.000000", "export_location": "10.254.0.3:/shares/share-%share_id%", "share_proto": "NFS", "share_size": 1 } }
Delete Snapshot
DELETE /v1/<tenant_id>/snapshots/<snapshot_id>
Accept: application/json
Snapshot Actions
Reset Snapshot State
POST /v1/<tenant_id>/snapshots/<snapshot_id>/action
Accept: application/json
JSON Request
{ "os-reset_status": {"status": "error"} }
JSON Response is empty
POST /v1/<tenant_id>/share-networks
Content-Type: application/json
Accept: application/json
JSON Request
{ "share_network": { "name": "test_name", "description": "test_description", "neutron_net_id": "some_neutron_net_id", "neutron_subnet_id": "some_neutron_subnet_id", } }
JSON Response
{ "share_network": { "id": "%share_network_id%", "name": "test_name", "description": "test_description", "neutron_net_id": "%some_neutron_net_id%", "neutron_subnet_id": "%some_neutron_subnet_id%", "segmentation_id": null, "network_type": null, "status": null, "created_at": "2009-10-11T12:13:14.000000", "updated_at": null, "ip_version": null, "cidr": null, "project_id": "%project_id%", } }
GET /v1/<tenant_id>/share-networks
Accept: application/json
JSON Response
{ "share_networks": [ { "id": "%share_network_id%", "name": "private", "status": null } ] }
GET /v1/<tenant_id>/share-networks/detail
Accept: application/json
JSON Response
{ "share_networks": [ { "status": null, "name": "private", "segmentation_id": null, "created_at": "2014-05-30T17:14:24.000000", "neutron_subnet_id": "%neutron_subnet_id%", "updated_at": null, "network_type": null, "neutron_net_id": "%neutron_net_id%", "ip_version": null, "cidr": null, "project_id": "%project_id%", "id": "%share_network_id%", "description": null } ] }
GET /v1/<tenant_id>/share-networks/<share_network_id>
Accept: application/json
JSON Response
{ "share_network": { "id": "%share_network_id%", "name": "private", "status": null "segmentation_id": null, "created_at": "2014-05-30T17:14:24.000000", "neutron_subnet_id": "neutron_subnet_id", "updated_at": null, "network_type": null, "neutron_net_id": "%neutron_net_id%", "ip_version": null, "cidr": null, "project_id": "%project_id%", "description": null } }
PUT /v1/<tenant_id>/share-networks/<share_network_id>
Accept: application/json
JSON Request
{ "share_network": { "description": "newdesc", "name": "newname" } }
JSON Response
{ "share_network": { "status": null, "name": "newname", "segmentation_id": null, "created_at": "2014-05-30T17:56:55.000000", "neutron_subnet_id": null, "updated_at": "2014-05-30T17:57:07.000000", "network_type": null, "neutron_net_id": null, "ip_version": null, "cidr": null, "project_id": "%project_id%", "id": "%share_network_id%", "description": "newdesc" } }
DELETE /v1/<tenant_id>/share-networks/<share_network_id>
POST /v1/<tenant_id>/share-networks/<share_network_id>/action
Accept: application/json
JSON Request
{ "add_security_service": { "security_service_id": "%security_service_id%" } }
JSON Response
{ "share_network": { "status": null, "name": "test", "segmentation_id": null, "created_at": "2014-06-02T13:57:48.000000", "neutron_subnet_id": null, "updated_at": null, "network_type": null, "neutron_net_id": null, "ip_version": null, "cidr": null, "project_id": "%project_id%", "id": "%share_network_id%", "description": null } }
POST /v1/<tenant_id>/share-networks/<share_network_id>/action
Accept: application/json
JSON Request
{ "remove_security_service": { "security_service_id": "%security_service_id%" } }
JSON Response
{ "share_network": { "status": null, "name": "test", "segmentation_id": null, "created_at": "2014-06-02T13:57:48.000000", "neutron_subnet_id": null, "updated_at": null, "network_type": null, "neutron_net_id": null, "ip_version": null, "cidr": null, "project_id": "%project_id%", "id": "%share_network_id%", "description": null } }
Security Services
Create Security Service
POST /v1/<tenant_id>/security-services
Content-Type: application/json
Accept: application/json
JSON Request
{ "security_service": { "domain": "domain", "name": "name", "dns_ip": "dns-ip", "sid": "security", "password": "password", "type": "ldap", "description": "description" } }
JSON Response
{ "security_service": { "status": "NEW", "domain": "domain", "description": "description", "dns_ip": "dns-ip", "updated_at": null, "password": "password", "id": "%security_service_id%", "name": "name", "created_at": "2014-06-02T08:45:53.685967", "server": null, "sid": "security", "project_id": "%project_id%", "type": "ldap" } }
List Security Services
GET /v1/<tenant_id>/security-services
Accept: application/json
JSON Response
{ "security_services": [ { "status": "NEW", "type": "ldap", "id": "%security_service_id%", "name": "name" } ] }
List Security Service with details
GET /v1/<tenant_id>/security-services/detail
Accept: application/json
JSON Response
{ "security_services": [ { "status": "NEW", "domain": "domain", "description": "description", "dns_ip": "dns-ip", "updated_at": null, "password": "password", "id": "%security_service_id%", "name": "name", "created_at": "2014-06-02T08:45:53.000000", "server": null, "sid": "security", "project_id": "%project_id%", "type": "ldap" } ] }
GET /v1/<tenant_id>/security-services?share_network_id=%share_network_id%
Accept: application/json
JSON Response
{ "security_services": [ { "status": "NEW", "type": "ldap", "id": "%security_service_id%", "name": "name" } ] }
Show Security Service
GET /v1/<tenant_id>/security-services/<security_service_id>
Accept: application/json
JSON Response
{ "security_service": { "status": "NEW", "domain": "domain", "description": "description", "dns_ip": "dns-ip", "updated_at": null, "password": "password", "id": "%security_service_id%", "name": "name", "created_at": "2014-06-02T08:45:53.000000", "server": null, "sid": "security", "project_id": "%project_id%", "type": "ldap" } }
Update Security Service
PUT /v1/<tenant_id>/security-services/<security_service_id>
Accept: application/json
JSON Request
{ "security_service": { "domain": "newdomain", "description": "newdescription", "dns_ip": "newdns-ip", "sid": "newsecurity", "password": "newpassword", "name": "newname" } }
JSON Response
{ "security_service": { "status": "NEW", "domain": "newdomain", "description": "newdescription", "dns_ip": "newdns-ip", "updated_at": "2014-06-02T08:55:25.809860", "password": "newpassword", "id": "%security_service_id%", "name": "newname", "created_at": "2014-06-02T08:45:53.000000", "server": null, "sid": "newsecurity", "project_id": "%project_id%", "type": "ldap" } }
Delete Security Service
DELETE /v1/<tenant_id>/security-services/<security_service_id>
GET /v1/<tenant_id>/share-servers
Accept: application/json
JSON Response
{ "share_servers": [ { "status": "ACTIVE", "updated_at": "2014-06-03T13:52:04.000000", "share_network_name": "private", "host": "localhost@paris", "project_id": "%project_id%", "id": "e9a6fa06-833f-4ab6-aa20-5d5abf8737c5" } ] }
GET /v1/<tenant_id>/share-server/<share_server_id>
Accept: application/json
JSON Response
{ "share_server": { "status": "ACTIVE", "backend_details": { "instance_id": "%instance_id%", "ip": "10.254.0.3", "username": "ubuntu", "password": "ubuntu", "pk_path": "/home/stack/.ssh/manila-service0ce582d2-671e-4286-af25-74f8f40fe4d6" }, "created_at": "2014-06-03T13:49:10.000000", "updated_at": "2014-06-03T13:52:04.000000", "share_network_name": "private", "host": "localhost@paris", "project_id": "%project_id%", "id": "%share_server_id%" } }
GET /v1/<tenant_id>/share-server/<share_server_id>/details
Accept: application/json
JSON Response
{ "details": { "instance_id": "%instance_id%", "ip": "10.254.0.3", "username": "ubuntu", "password": "ubuntu", "pk_path": "/home/stack/.ssh/manila-service0ce582d2-671e-4286-af25-74f8f40fe4d6" } }
Limits
List Limits
GET /v1/<tenant_id>/limits
Content-Type: application/json
Accept: application/json
JSON Response
{ "limits": { "rate": [], "absolute": { "totalShareNetworksUsed": 3, "maxTotalShareGigabytes": 1000, "maxTotalShareNetworks": 5, "totalSharesUsed": 10, "totalShareGigabytesUsed": 11, "totalShareSnapshotsUsed": 1, "maxTotalShares": 10, "maxTotalShareSnapshots": 10 } } }
Extensions
List Extensions
GET /v1/<tenant_id>/extensions
Content-Type: application/json
Accept: application/json
JSON Response
{ "extensions": [ { "updated": "2013-06-09T00:00:00+00:00", "name": "ExtendedQuotas", "links": [], "namespace": "http://docs.openstack.org/compute/ext/extended_quotas/api/v1.1", "alias": "os-extended-quotas", "description": "Adds ability for admins to delete quota\n and optionally force the update Quota command.\n " }, { "updated": "2012-03-12T00:00:00+00:00", "name": "QuotaClasses", "links": [], "namespace": "http://docs.openstack.org/volume/ext/quota-classes-sets/api/v1.1", "alias": "os-quota-class-sets", "description": "Quota classes management support" }, { "updated": "2011-08-08T00:00:00+00:00", "name": "Quotas", "links": [], "namespace": "http://docs.openstack.org/compute/ext/quotas-sets/api/v1.1", "alias": "os-quota-sets", "description": "Quotas management support" }, { "updated": "2011-08-24T00:00:00+00:00", "name": "TypesManage", "links": [], "namespace": "http://docs.openstack.org/share/ext/types-manage/api/v1", "alias": "os-types-manage", "description": "Types manage support." }, { "updated": "2013-07-18T00:00:00+00:00", "name": "UserQuotas", "links": [], "namespace": "http://docs.openstack.org/compute/ext/user_quotas/api/v1.1", "alias": "os-user-quotas", "description": "Project user quota support." }, { "updated": "2012-08-14T00:00:00+00:00", "name": "ShareActions", "links": [], "namespace": "", "alias": "share-actions", "description": "Enable share actions." }, { "updated": "2011-08-24T00:00:00+00:00", "name": "TypesExtraSpecs", "links": [], "namespace": "http://docs.openstack.org/share/ext/types-extra-specs/api/v1", "alias": "os-types-extra-specs", "description": "Type extra specs support." }, { "updated": "2012-08-25T00:00:00+00:00", "name": "AdminActions", "links": [], "namespace": "http://docs.openstack.org/share/ext/admin-actions/api/v1.1", "alias": "os-admin-actions", "description": "Enable admin actions." }, { "updated": "2012-10-28T00:00:00-00:00", "name": "Services", "links": [], "namespace": "http://docs.openstack.org/volume/ext/services/api/v2", "alias": "os-services", "description": "Services support" }, { "updated": "2014-03-27T00:00:00+00:00", "name": "UsedLimits", "links": [], "namespace": "http://docs.openstack.org/share/ext/used-limits/api/v1.0", "alias": "os-used-limits", "description": "Provide data on limited resources that are being used." } ] }
Services
List Services
GET /v1/<tenant_id>/os-services
Content-Type: application/json
Accept: application/json
JSON Response
{ "services": [ { "status": "enabled", "binary": "manila-scheduler", "zone": "nova", "state": "up", "updated_at": "2014-06-02T14:57:52.000000", "host": "nosb-devstack" }, { "status": "enabled", "binary": "manila-share", "zone": "nova", "state": "up", "updated_at": "2014-06-02T14:57:52.000000", "host": "nosb-devstack@paris" }, {"status": "enabled", "binary": "manila-share", "zone": "nova", "state": "up", "updated_at": "2014-06-02T14:57:47.000000", "host": "nosb-devstack@london" } ] }
List Services With Filters
GET /v1/<tenant_id>/os-services?status=enabled&binary=manila-share&host=nosb-devstack%40london&state=up&zone=nova
Content-Type: application/json
Accept: application/json
JSON Response
{ "services": [ { "status": "enabled", "binary": "manila-share", "zone": "nova", "state": "up", "updated_at": "2014-06-02T14:57:47.000000", "host": "nosb-devstack@london" } ] }
Volume Types
Create Volume Type
POST /v1/<tenant_id>/types/%volume_type_id%
Content-Type: application/json
Accept: application/json
JSON Request
{ "volume_type": { "name": "test", } }
JSON Response
{ "volume_type": { "extra_specs": {}, "name": "test", "id": "%volume_type_id%" } }
Set Key for Volume Type
POST /v1/<tenant_id>/types/%volume_type_id%/extra_specs
Content-Type: application/json
Accept: application/json
JSON Request
{ "extra_specs": { "k": "v" } }
JSON Response
{ "extra_specs": { "k": "v" } }
Unset Key for Volume Type
DELETE /v1/<tenant_id>/types/%volume_type_id%/extra_specs/%key%
Content-Type: application/json
Accept: application/json
JSON Request
{ "extra_specs": { "k": "v" } }
JSON Response is empty
List Volume Types
GET /v1/<tenant_id>/types
Content-Type: application/json
Accept: application/json
JSON Response
{ "volume_types": [ { "extra_specs": {"q": "w"}, "name": "test", "id": "%volume_type_id%" }, ] }
List Extra Specs for Volume Type
GET /v1/<tenant_id>/types/<volume_type_id>/extra_specs
Content-Type: application/json
Accept: application/json
JSON Response
{ "extra_specs": { "share_backend_name": "TEST_BACKEND" } }
Delete Volume Type
DELETE /v1/<tenant_id>/types/<volume_type_id>