Onefs 8 2 0 Api Reference
Onefs 8 2 0 Api Reference
OneFS
Version 8.2.0
API Reference
Copyright © 2001-2019 All rights reserved.
Dell believes the information in this publication is accurate as of its publication date. The information is subject to change without notice.
THE INFORMATION IN THIS PUBLICATION IS PROVIDED “AS-IS.“ DELL MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND
WITH RESPECT TO THE INFORMATION IN THIS PUBLICATION, AND SPECIFICALLY DISCLAIMS IMPLIED WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. USE, COPYING, AND DISTRIBUTION OF ANY DELL SOFTWARE DESCRIBED
IN THIS PUBLICATION REQUIRES AN APPLICABLE SOFTWARE LICENSE.
Dell, EMC, and other trademarks are trademarks of Dell Inc. or its subsidiaries. Other trademarks may be the property of their respective owners.
Published in the USA.
Dell EMC
Hopkinton, Massachusetts 01748-9103
1-508-435-1000 In North America 1-866-464-7381
www.DellEMC.com
Tables 5
Resource Location
EMC {code} http://emccode.com/
Resource Location
Python Language Bindings for OneFS 7.2 https://github.com/Isilon/
isilon_sdk_7_2_python
The OneFS application programming interface (API) is divided into two functional
areas: One area enables cluster configuration, management, and monitoring
functionality, and the other area enables operations on files and directories on the
cluster.
Term Definition
Access point Root path of the URL to the file system. You
can define an access point for any directory in
the file system.
Component Definition
my_cluster The IPv4 or IPv6 address or hostname for the
cluster
Component Definition
collection_pattern The namespace, collection name, and object
ID of the resource that you want to configure
In both types of API requests, you can append query parameters to the end of
resource URIs to refine your request. For example, you can revise a GET request to
return only a set number of entries. In the following example, a maximum of 1,000
SMB shares are returned:
GET https://192.168.1.100:8080/platform/1/protocols/smb/
shares&limit="1000"
https://<my_cluster>:<obj_port>/<api-version>/<collection_pattern>
For example, you can send a GET request to the following URI to retrieve all SMB
shares on a cluster, where protocols is the namespace, smb is the collection name,
and shares is the object ID:
GET https://192.168.1.100:8080/platform/1/protocols/smb/shares
https://<my_cluster>:<obj_port>/namespace/<access_point>/
<resource_path>
For example, you can send a GET request to the following URI to view files that are
stored in the folder at /ifs/users/folder1:
GET https://192.168.0.25:8080/namespace/ifs/users/folder1
Additionally, in file system access API requests, you can indicate a special operation in
your request by appending a predefined keyword to the end of the resource URI.
These keywords must be placed first in the argument list and must not contain any
value. If these keywords are placed in any other position in the argument list, the
keywords are ignored. Predefined keywords are acl, metadata, worm, and query.
For example:
GET https://192.168.0.25:8080/namespace/ifs/users/folder1?acl
HTTP methods
You can apply certain HTTP methods to resource URIs through the OneFS API to
modify file system settings or to access file system content.
The following conditions apply to the HTTP methods available for the OneFS API:
HTTP methods 15
Introduction to the OneFS API
Privileges
Privileges permit users to complete tasks on a cluster.
Privileges are associated with an area of cluster administration such as Job Engine,
SMB, or statistics.
Privileges have one of two forms:
Action
Allows a user to perform a specific action on a cluster. For example, the
ISI_PRIV_LOGIN_SSH privilege allows a user to log in to a cluster through an
SSH client.
Read/Write
Allows a user to view or modify a configuration subsystem such as statistics,
snapshots, or quotas. For example, the ISI_PRIV_SNAPSHOT privilege allows an
administrator to create and delete snapshots and snapshot schedules. A read/
write privilege can grant either read-only or read/write access. Read-only access
allows a user to view configuration settings; read/write access allows a user to
view and modify configuration settings.
Privileges are granted to the user on login to a cluster through the OneFS API, the
web administration interface, SSH, or a console session. A token is generated for the
user, which includes a list of all privileges granted to the user. Each URI, web-
administration interface page, and command requires a specific privilege to view or
modify the information available through any of these interfaces.
In some cases, privileges cannot be granted or there are privilege limitations.
l Privileges are not granted to users that do not connect to the System Zone during
login or to users that connect through the deprecated Telnet service, even if they
are members of a role.
l Privileges do not provide administrative access to configuration paths outside of
the OneFS API. For example, the ISI_PRIV_SMB privilege does not grant a user
the right to configure SMB shares using the Microsoft Management Console
(MMC).
l Privileges do not provide administrative access to all log files. Most log files
require root access.
Session cookies
Establish a session by creating a session cookie through the session resource.
You can create a session cookie by sending credentials to a session service resource,
which responds with a Set-Cookie header. The Set-Cookie header contains an
authentication token that can then be sent with subsequent requests to provide
immediate authentication.
Create a session
You can authenticate to a OneFS API resource URI by creating a session cookie and a
session. When you create a session, you extend your authentication to a node for
multiple requests over a period of time.
Session cookies are specific to a single node; all requests must be made to the same
node from which the session cookie is obtained.
Session cookies 17
Introduction to the OneFS API
Procedure
1. Send a POST request to /session/1/session by specifying the JSON content-
type in the request header and by specifying your username, password, and the
service that you want to access in the request body. In the services property,
specify platform for system configuration or namespace for file system
access.
Content-type: application/json
Body:
{
"username": "<string>",
"password": "<string>",
"services": ["platform" | “namespace”]
}
201 Created
Content-Length:104
Content-Type:application/json
Date:Fri, 22 Feb 2013 19:08:36 GMT
Set-Cookie:isisessid=12345678-abcd-1234-abcd-1234567890ab;
path=/;
HttpOnly; Secure
Response Body:
{
"services":[
"platform",
"namespace"
],
"timeout_absolute":14400,
"timeout_inactive":900,
"username":"user123"
}
This value will authenticate the session when you send a request through a
session cookie.
Results
A session is created on the node on which the POST request was executed.
Request example
GET 10.10.111.120:8080/platform/1/quotas
Cookie: isisessid=12345678-abcd-1234-abcd-1234567890ab
Response example
200 OK
Content-Type:application/json
{
//JSON content
}
GET /session/1/session
Cookie: isisessid=12345678-abcd-1234-abcd-1234567890ab
Response body
If authorization is successful:
"username": <string>
"services": [<string>, ...]
"timeout_absolute": <integer>,
"timeout_inactive": <integer>
{
"services":[
"platform",
"namespace"
],
"timeout_absolute":14396,
"timeout_inactive":900,
"username":"user123"
}
If authorization fails:
401 Unauthorized
Content-Type: application/json
{
"errors":[
{
"message":"authorization required"
}
Session cookies 19
Introduction to the OneFS API
]
}
DELETE /session/1/session
Cookie: isisessid=12345678-abcd-1234-abcd-1234567890ab
Response body
If authorization is successful:
204 No Content
Set-Cookie:isisessid=deleted; path=/; Expires=Thu, 01-Jan-1970
00:00:01 GMT; HttpOnly; Secure
Content-Length: 0
If authorization fails:
401 Unauthorized
Content-Type: application/json
{
"errors":[
{
"message":"authorization required"
}
]
}
You can access cluster configuration, status information, and file system content
through objects and collections of objects. These objects and collections are exposed
as resource URIs, which are represented as JavaScript Object Notation (JSON)
formatted documents.
Collection patterns
You can configure the file system on your cluster through the OneFS API by applying
HTTP methods to resource URIs according to a set of collection patterns.
Note
The OneFS API supports a maximum URI length of 8,198 characters.
GET https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<object-id>
Response:
Content-Type: application/json
{
"<object>": {
"<property>": <value>,
...
}
}
PUT https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<object-id>
Content-Type: application/json
{
"<property>": <value>
...
}
Response:
GET https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<collection-name>
Response:
Content-Type: application/json
{
"<collection>": [
"<property>": <value>
...
]
}
GET https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<collection-name>/<object-id>
Response:
Content-Type: application/json
{
"<collection>": [
"<property>": <value>
...
]
}
POST https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<collection-name>
Content-Type: application/json
{
"<property>": <value>,
...
}
Collection patterns 23
System configuration API
Response:
Location: https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<collection-name>/<new-object-id>
Content-Type: application/json
PUT https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<collection-name>/<object-id>
Content-Type: application/json
{
"parameter_name": <value>
...
}
Response:
DELETE https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<collection-name>/<object-id>
Response:
Filter a collection
You can apply a filter to a collection to retrieve user objects that match some common
criteria.
Request pattern:
GET https://<cluster-ip-or-host-name>:<port>/<api-version>/
<namespace>/<collection-name>?<parameter_name>=<match-pattern>&...
Response:
Content-Type: application/json
{
"count": <integer>,
"<collection-name>": [
{
"<parameter-name>":
<matched-value>,
...
},
...
]
}
/platform/7/<path-to-resource>
Where resources have older versions, the older versions can be accessed at:
/platform/<version>/<path-to-resource>
The functionality of each resource is preserved, even with subsequent API versions.
For example, if /resource/x is introduced in API version 1, updated in API version 3,
and then updated again in API version 7, the following URI-to-resource mapping
applies:
You are guaranteed that when you write code to a specific resource version, that
behavior continues to function even if subsequent API versions are released.
These are the OneFS API versions and their corresponding releases:
OneFS version API version
8.2 7
8.1.1 6
8.1 5
8.0.1 4
8.0 3
7.2.1 2
7.2 1
In future OneFS releases, when the configuration API version is incremented, the /
platform/latest URI returns the latest version number. You are guaranteed to
access to the latest version of any resource by using the applicable version number in
the resource URI.
Older versions of certain resources might be deprecated in the future. Large changes
in the underlying OneFS system and configuration can cause certain fields or sets of
fields to no longer be applicable. Isilon only deprecates resources when necessary. If
an old version of a resource can function, it is accessible at its original API version
number URI.
https://<cluster-ip>:<port>/platform/?describe&list
The example above retrieves a separate listing for every update of each resource. For
example, the resource for /cluster/config was introduced in API version 1 and
updated in version 3, so /platform/?describe&list lists both:
"/1/cluster/config"
"/3/cluster/config"
Note
/2/cluster/config is also a valid URI, and will forward to the same resource
as /1/cluster/config, because there were no updates to the resource in API
version 2.
https://<cluster-ip>:<port>/platform/<version>/?describe&list
For example, the following retrieves all URIs available for API version 3:
https://<cluster-ip>:<port>/platform/3/?describe&list
{
"directory" :
[
"/3/antivirus/policies",
"/3/antivirus/policies/<NAME>",
"/3/antivirus/quarantine/<PATH+>",
.
.
.
"/3/zones-summary",
"/3/zones-summary/<ZONE>",
"/3/zones/<ZONE>"
]
}
https://<cluster-ip>:<port>/platform/changed/<version>
The previous example also returns a list of any removed URIs that were originally
introduced or updated at the specified version, but that now have been permanently
deprecated and can no longer be accessed.
Note
In most cases there will be at least one new resource that provides the current
functionality to replace any deprecated resources.
https://<cluster-ip>:<port>/platform/changed/3
{
"changed" :
[
"/3/antivirus/policies",
"/3/antivirus/policies/<NAME>",
"/3/antivirus/quarantine/<PATH+>",
.
.
.
"/3/upgrade/cluster/upgrade",
"/3/zones",
"/3/zones/<ZONE>"
],
"removed" : []
}
https://<cluster-ip>:<port>/platform/updated/<path-to-resource>
For example, to retrieve information about when the API resource for OneFS audit
settings was introduced or updated:
https://<cluster-ip>:<port>/platform/updated/audit/settings
{
"removed" : [],
"updated" : [ "/1/audit/settings", "/3/audit/settings" ]
}
https://<cluster-ip>:<port>/platform/versions/<path-to-resource>
For example, to list the versions of the resource for NFS NLM sessions:
https://<cluster-ip>:<port>/platform/versions/protocols/nfs/nlm/
sessions
{
"versions" :
[
"/1/protocols/nfs/nlm/sessions",
"/2/protocols/nfs/nlm/sessions",
"/3/protocols/nfs/nlm/sessions"
]
}
https://<cluster-ip>:<port>/platform/<version>/<path-to-resource>?
describe
For example, the following will retrieve the API version 3 JSON schema
documentation for upgrading nodes on a OneFS cluster:
https://<cluster-ip>:<port>/platform/3/upgrade/cluster/nodes?
describe
Methods: GET
*******************************************************************
You can retrieve a list of all of the resources for a feature by appending the
describe, list, and all query parameters. The content is returned as mime-type
text/plain. For example, to return a list of all resource URIs for snapshots, type the
following URL:
https://<cluster-ip-or-host-name>:<port>/platform/3/snapshot/
snapshots?describe&list&all
You can retrieve a list of all of the resource URIs on your cluster by typing the
following URL:
https://<cluster-ip-or-host-name>:<port>/platform?describe&list
You can retrieve the JSON-formatted documents that are included in the self-
documentation through any resource URI by appending the query parameters
describe and json. This content is returned as mime-type application/json.
For example, to obtain the JSON-formatted document for the quotas resource, type
the following URL:
https://<cluster-ip-or-host-name>:<port>/platform/1/quota/quotas?
describe&json
If you include any values for either the describe or json parameters, the values are
ignored.
Note
In most situations, the default settings are sufficient. You can configure additional
access zones, custom roles, and permissions policies as necessary for your particular
environment.
Authentication classes
Authentication classes define values for the object properties in authentication
resources.
<persona-id>
The <persona-id> class must be set in the following format: "["user", "group", "SID",
"UID", "GID"] : [<string>]", such as: "GID:2003" or "user:johndoe".
<persona>
The <persona> class must be set with either the <persona-id> or the <type> and
<name> parameters, as follows:
<user-id>
The <user-id> class must be set in the following format: "["user", "SID", "UID"] :
[<string>]", such as: "UID:2283" or "user:johndoe".
<user>
The <user> class contains the following properties:
shell String Specifies the path to the shell for the user.
<group-id>
The <group-id> class must be set in the following format: "["group", "SID", "GID"] :
[<string>]", such as: "GID:2003" or "group:admins".
<group>
The <group> class contains the following properties:
<privilege>
The <privilege> class must be set as follows:
Authentication resources
You can retrieve, create, modify, or delete authentication providers, users, groups,
and other configurations and settings through authentication resource URIs.
PUT /platform/1/auth/users/USER:johndoe/change_password
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"new_password":"ABC12345",
"old_password":"12345ABC"}
Response example
204 No Content
Content-type: text/plain
POST /platform/1/auth/group
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
Response example
201 Created
Content-type: application/json
"id" : "SID:S-1-5-21-4224731515-2571109568-2823010237-1003"
}
PUT /platform/1/auth/groups/GROUP:mygroup?force=true
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"gid": 2004}
Response example
204 No Content
Content-type: text/plain
POST /platform/1/auth/groups/GROUP:mygroup/members
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"id": "USER:user01"}
Response example
201 Created
Content-type: application/json
{"id" : "SID:S-1-5-21-4224731515-2571109568-2823010237-1003"}
Create a user
Create a user and add the user to a local group.
Request example
Create the user "user123" through the following request:
POST /platform/1/auth/users
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
Response example
201 Created
Content-type: application/json
{
"id" : "SID:S-1-5-21-4224731515-2571109568-2823010237-1005"
}
Request example
Then, add "user123" to a group called "administrators" through the following request:
POST /platform/1/auth/groups/administrators/members
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
Response example
201 Created
Content-type: application/json
{
"id" : "SID:S-7-6-25-4784731515-2575609568-2323010237-2005"
}
Modify a user
Modify the properties for a user.
Request example
In this example, an email address is added for the user.
PUT /platform/1/auth/users/USER:user123
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"email": "user1@company.com"}
Response example
204 No Content
Content-type: application/json
Join a domain
Join an Active Directory server domain.
Request example
POST /platform/3/auth/providers/ads
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"server.company.com",
"user":"Administrator",
"password":"abc123"}
Response example
201 Created
Content-type: application/json
{
"id" : "SERVER.COMPANY.COM"
}
PUT /platform/1/auth/providers/ads/server1.company.com
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"home_directory_template":"/ifs/home/ads"}
Response example
204 No Content
Content-type: text/plain
POST /platform/3/auth/providers/ldap
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"ldaptest",
"server_uris":["ldap://ldaptest.company.com"],
"base_dn":"dc=company,dc=com"}
Response example
201 Created
Content-type: application/json
{
"id" : "ldaptest"
}
PUT /platform/3/auth/providers/ldap/ldaptest
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"ldaptest2",
"server_uris":["ldap://ldaptest.company.com"],
"base_dn":"dc=company,dc=com"}
Response example
204 No Content
Content-type: text/plain
PUT /platform/3/auth/providers/local/zone1
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"home_directory_template" : "/ifs/home/%Z/%U"}
Response example
204 No Content
Content-type: text/plain
POST /platform/1/auth/roles
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"dba"}
Response example
201 Created
Content-type: application/json
{
"id" : "dba"
}
PUT /platform/1/auth/roles/dba
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"dba2"}
Response example
204 No Content
Content-type: text/plain
PUT /platform/1/auth/settings/global
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"send_ntlmv2":"true"}
Response example
204 No Content
Content-type: text/plain
POST /platform/1/auth/settings/krb5/realms
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"realm":"test_realm"}
Response example
201 Created
Content-type: application/json
{"id" : "2024839292}
POST /platform/1/auth/settings/krb5/domains
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"domain":"test_domain",
"realm":"test_realm"
}
Response example
201 Created
Content-type: application/json
{
"id" : "29274939282"
}
PUT /platform/1/auth/settings/krb5/domains/test_domain
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"domain":"test_domain2",
"realm":"test_realm4"
}
Response example
204 No Content
Content-type: application/json
PUT /platform/1/auth/settings/krb5/defaults
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"dns_lookup_realm":"true"
"dns_lookup_kdc":"true"
}
Response example
204 No Content
Content-type: application/json
Auditing overview
You can audit system configuration changes and protocol activity on an Isilon cluster.
All audit data is stored and protected in the cluster file system and organized by audit
topics.
Auditing can detect many potential sources of data loss, including fraudulent
activities, inappropriate entitlements, and unauthorized access attempts. Customers
in industries such as financial services, health care, life sciences, and media and
Audit resources
You can retrieve and modify OneFS audit topics and settings.
Auditing overview 55
System configuration API
PUT /platform/1/audit/settings
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'audited_zones': ['myZone', 'System'],
'protocol_auditing_enabled': True
}
Response example
In the following example, the request was successful, and protocol auditing is enabled
on the system for the specified zones. No message body is returned for this request.
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
PUT /platform/1/audit/settings
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'config_auditing_enabled': True
}
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
PUT /1/audit/topics/protocol
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"max_cached_messages": 1000
}
Auditing overview 57
System configuration API
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
POST /platform/1/zones
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"MyZone", "path":"/ifs/data/myzone"}
Response example
201 Created
Content-type: application/json
{"id":"MyZone"}
PUT /platform/1/zones/ZoneA
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"ZoneB"}
Response example
204 No Content
Content-type: 'text/plain
NFS
OneFS provides an NFS server so you can share files on your cluster with NFS clients
that adhere to the RFC1813 (NFSv3) and RFC3530 (NFSv4) specifications.
In OneFS, the NFS server is fully optimized as a multi-threaded service running in user
space instead of the kernel. This architecture load balances the NFS service across all
nodes of the cluster, providing the stability and scalability necessary to manage up to
thousands of connections across multiple NFS clients.
NFS mounts execute and refresh quickly, and the server constantly monitors
fluctuating demands on NFS services and makes adjustments across all nodes to
ensure continuous, reliable performance. Using a built-in process scheduler, OneFS
helps ensure fair allocation of node resources so that no client can seize more than its
fair share of NFS services.
The NFS server also supports access zones defined in OneFS, so that clients can
access only the exports appropriate to their zone. For example, if NFS exports are
specified for Zone 2, only clients assigned to Zone 2 can access these exports.
To simplify client connections, especially for exports with large path names, the NFS
server also supports aliases, which are shortcuts to mount points that clients can
specify directly.
For secure NFS file sharing, OneFS supports NIS and LDAP authentication providers.
NFS classes
NFS classes define values for the object properties in NFS resources.
<user-mapping>
The <user-mapping> class must be set as follows:
<persona>
The <persona> class must be set with either the <persona-id> or the <type> and
<name> parameters, as follows:
<persona-id>
The <persona-id> class must be set in the following format: "["user", "group", "SID",
"UID", "GID"] : [<string>]", such as: "GID:2003" or "user:johndoe".
NFS resources
You can retrieve, create, modify, or delete NFS export configurations and settings.
NFS 61
System configuration API
NFS 63
System configuration API
NFS 65
System configuration API
POST /platform/2/protocols/nfs/aliases
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"name":"nfs_alias_01",
"path":"/ifs/nfs/aliases"
}
Response example
201 Created
Content-type: application/json
{
"id":"204"
}
PUT /platform/2/protocols/nfs/aliases/204
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"nfs_alias_02"}
Response example
204 No Content
Content-type: text/plain
POST /platform/2/protocols/nfs/exports
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"paths":[
"/ifs/nfs/
exports/test",
"/ifs/nfs/exports/test2"
]
}
Response example
201 Created
Content-type: application/json
{
"id":24
}
NFS 67
System configuration API
PUT /platform/2/protocols/nfs/exports/24
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"write_transfer_max_size":1024,
"write_transfer_multiple":512
}
Response example
204 No Content
Content-type: text/plain
PUT /platform/2/protocols/nfs/settings/export
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"block_size":512,
"can_set_time":true,
"case_insensitive":false
}
Response example
204 No Content
Content-type: text/plain
PUT /platform/2/protocols/nfs/settings/global
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"nfsv3_enabled":true
}
Response example
204 No Content
Content-type: text/plain
PUT /platform/2/protocols/nfs/settings/zone
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"nfsv4_allow_numeric_ids":true,
"nfsv4_domain":"test_domain"
}
Response example
204 No Content
Content-type: text/plain
SMB
OneFS includes a configurable SMB service to create and manage SMB shares. SMB
shares provide Windows clients network access to file system resources on the
cluster. You can grant permissions to users and groups to carry out operations such as
reading, writing, and setting access permissions on SMB shares.
The /ifs directory is configured as an SMB share and is enabled by default. OneFS
supports both user and anonymous security modes. If the user security mode is
enabled, users who connect to a share from an SMB client must provide a valid user
name with proper credentials.
SMB shares act as checkpoints, and users must have access to a share in order to
access objects in a file system on a share. If a user has access granted to a file system,
but not to the share on which it resides, that user will not be able to access the file
system regardless of privileges. For example, assume a share named ABCDocs
contains a file named file1.txt in a path such as: /ifs/data/ABCDocs/
file1.txt. If a user attempting to access file1.txt does not have share
privileges on ABCDocs, that user cannot access the file even if originally granted read
and/or write privileges to the file.
The SMB protocol uses security identifiers (SIDs) for authorization data. All identities
are converted to SIDs during retrieval and are converted back to their on-disk
representation before they are stored on the cluster.
When a file or directory is created, OneFS checks the access control list (ACL) of its
parent directory. If the ACL contains any inheritable access control entries (ACEs), a
new ACL is generated from those ACEs. Otherwise, OneFS creates an ACL from the
combined file and directory create mask and create mode settings.
OneFS supports the following SMB clients:
SMB 69
System configuration API
SMB resources
You can retrieve, create, modify, or delete SMB share configurations and settings.
SMB 71
System configuration API
GET <cluster-ip:port>/platform/1/
protocols/smb/sessions/<computer>?
describe
FTP
OneFS includes a secure FTP service called vsftpd, which stands for Very Secure FTP
Daemon, that you can configure for standard FTP and FTPS file transfers.
FTP resources
You can retrieve or modify global FTP configuration settings.
FTP 73
System configuration API
HTTP resources
You can retrieve and modify global HTTP configuration settings.
About Hadoop
Hadoop is an open-source platform that runs analytics on large sets of data across a
distributed file system.
In a Hadoop implementation on an Isilon cluster, OneFS acts as the distributed file
system and HDFS is supported as a native protocol. Clients from a Hadoop cluster
connect to the Isilon cluster through the HDFS protocol to manage and process data.
Hadoop support on the cluster requires you to activate an HDFS license. To obtain a
license, contact your Isilon sales representative.
HDFS resources
You can retrieve, create, modify, or delete HDFS configurations and settings.
About Hadoop 75
System configuration API
POST /platform/1/protocols/hdfs/racks
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"name":"/racktest"
}
Response example
201 Created
Content-type: application/json
{
"id" : "1-5-21-4224731515-2571109568-2823010237-1003"
}
About Hadoop 77
System configuration API
PUT /platform/1/protocols/hdfs/racks/%2Fracktest
{
"name":"/rack2test"
}
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
PUT /platform/1/protocols/hdfs/settings/
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"default_checksum_type":"crc32"
}
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
POST /platform/1/protocols/hdfs/proxyusers
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"proxy_user_test"}
Response example
201 Created
Content-type: application/json
You can also create an HDFS proxyuser through the PUT method.
Request example
PUT /platform/1/protocols/hdfs/proxyusers/proxy_user_test
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{}
Response example
204 No Content
Content-type: text/plain
POST /platform/1/protocols/hdfs/proxyusers/proxy_user_test/members
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name":"proxy_user_member_test"}
Response example
201 Created
Content-type: application/json
You can also create an HDFS proxyuser member through the PUT method.
Request example
PUT /platform/1/protocols/hdfs/proxyusers/proxy_user_test/members/
USER:proxy_user_member_test
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{}
Response example
204 No Content
Content-type: text/plain
Isilon Swift
OneFS supports Isilon Swift, an object storage interface compatible with the
OpenStack Swift 1.0 application programming interface (API). Through Isilon Swift,
Isilon Swift 79
System configuration API
you can access file-based data stored on your cluster as objects. The Swift API is
implemented as a set of Representational State Transfer (REST) web services over
HTTP or secure HTTP (HTTPS). Since the Swift API is considered as a protocol,
content and metadata can be ingested as objects and concurrently accessed through
protocols configured on the cluster. The cluster must also be licensed to support Isilon
Swift.
The Isilon Swift protocol service is a licensed feature. Contact your Dell EMC EMC
Isilon representative to obtain a license key to access the Swift protocol and RESTful
APIs for object storage operations.
Swift resources
You can list, create, modify, or delete Swift account information.
Networking
After you determine the topology of your network, you can set up and manage your
internal and external networks.
There are two types of networks on the Dell EMC EMC Isilon cluster:
Internal
Nodes communicate with each other using a high speed low latency InfiniBand
network. You can optionally configure a second InfiniBand network to enable
failover for redundancy.
External
Clients connect to the cluster through the external network with Ethernet. The
cluster supports standard network communication protocols, including NFS,
SMB, HDFS, HTTP, and FTP. The cluster includes various external Ethernet
connections, providing flexibility for a wide variety of network configurations.
Network resources
List, create, modify, or delete information specific to OneFS networks.
Networking 81
System configuration API
Networking 83
System configuration API
GET <cluster-ip:port>/platform/7/network/
groupnets/<groupnet>/subnets/<subnet>/
pools/<pool>?describe
GET <cluster-ip:port>/platform/3/network/
groupnets/<groupnet>/subnets/<subnet>/
pools/<pool>/rules/<name>?describe
Networking 85
System configuration API
Note
To initiate any Job Engine tasks, you must have the role of SystemAdmin in the OneFS
system.
Jobs resource
Modify, create, or retrieve information about OneFS system jobs.
PUT /platform/1/job/types/AVScan
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'policy': 'MEDIUM',
'enabled': True
}
Response example
204 No Content
Content-type: 'text/plain',
Allow: 'GET, PUT, HEAD'
POST /platform/1/job/policies
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'intervals': [
{
'impact': 'High',
'begin': 'Tuesday 00:00',
'end': 'Thursday 23:59'}
],
'name': 'myPolicy',
'description': 'Custom policy'
}
Response example
201 CREATED
Content-type: application/json,
Allow: 'GET, PUT, POST, DELETE'
{
'id': 'myPolicy'
}
PUT /platform/1/job/policies/myPolicy
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'intervals': [
{
'impact': 'Medium',
'begin': 'Tuesday 00:00',
'end': 'Thursday 23:59'}
],
'description': 'Custom policy - medium impact Tuesday through
Thursday'
}
Response example
204 No Content
Content-type: 'text/plain',
Allow: 'GET, PUT, POST, DELETE, HEAD'
POST /platform/1/job/jobs
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'type': 'AVScan',
'allow_dup': True
}
Response example
201 CREATED
Content-type: application/json,
Allow: 'GET, PUT, POST, HEAD'
"id": 1234
}
PUT /platform/1/job/jobs/AVScan
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'state': 'pause'
}
Response example
204 No Content
Content-type: 'text/plain',
Allow: 'GET, PUT, POST, HEAD'
Cluster statistics
You can view performance, historical, and in-depth usage statistics for your
Dell EMC EMC Isilon cluster, and control the output for each mode of statistics
reporting.
Statistics resources
You can retrieve information about OneFS statistics through the following resources.
Note
Cluster statistics 91
System configuration API
Cluster statistics 93
System configuration API
FSA
The FSAnalyze job gathers and reports information about all files and directories
beneath the /ifs path. This job requires you to activate an InsightIQ license. You can
use reports from this job to analyze the OneFS file system.
For more information, see the Isilon InsightIQ User Guide.
FSA resources
Retrieve, create, modify, or delete FSAnalyze (FSA) job-related configurations and
settings.
FSA 95
System configuration API
GET <cluster-ip:port>/platform/3/fsa/
results/<result-set-id>/histogram/<stat>
GET <cluster-ip:port>/platform/3/fsa/
results/<result-set-id>/histogram/
<stat>/by/<breakout>
GET <cluster-ip:port>/platform/3/fsa/
results/<result-set-id>/histogram/
<stat>/by?describe
GET <cluster-ip:port>/platform/3/fsa/
results/<result-set-id>/histogram/
<stat>/by/<breakout>?describe
Alerts are delivered through channels. You can configure a channel to determine who
will receive the alert and when.
Event resources
Retrieve, create, modify, or delete event-related configurations and settings.
Snapshots overview
A OneFS snapshot is a logical pointer to data that is stored on a cluster at a specific
point in time.
A snapshot references a directory on a cluster, including all data stored in the
directory and its subdirectories. If the data referenced by a snapshot is modified, the
snapshot stores a physical copy of the data that was modified. Snapshots are created
according to user specifications or are automatically generated by OneFS to facilitate
system operations.
To create and manage snapshots, you must activate a SnapshotIQ license on the
cluster. Some applications must generate snapshots to function but do not require you
to activate a SnapshotIQ license; by default, these snapshots are automatically
deleted when OneFS no longer needs them. However, if you activate a SnapshotIQ
license, you can retain these snapshots. You can view snapshots generated by other
modules without activating a SnapshotIQ license.
You can identify and locate snapshots by name or ID. A snapshot name is specified by
a user and assigned to the virtual directory that contains the snapshot. A snapshot ID
is a numerical identifier that OneFS automatically assigns to a snapshot.
Snapshots resources
You can retrieve, create, modify, or delete snapshot configurations and settings.
Snapshots resource
Create, modify, delete, or retrieve information about file system snapshots.
POST /platform/1/filepool/policies
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"action_param":"true"
"action_type":"set_requested_protection"
}
Response example
201 Created
Content-type: application/json
{
"id" : "224731515-2571109568-2823010237-1003"
}
PUT /platform/1/snapshot/aliases/snapshot2541
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"name" : "snapshot2641"}
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain
Note
If you are recovering SmartLock directories, we recommend that you do not specify
autocommit time periods for them.
NDMP resources
You can retrieve, create, modify, or delete NDMP configurations and settings.
NDMP diagnostics
Retrieve or modify NDMP diagnostic information.
NDMP dumpdates
Retrieve or delete information about NDMP dump dates.
NDMP logs
Retrieve NDMP logs.
NDMP sessions
Retrieve information about NDMP sessions
NDMP users
List, create, modify or delete NDMP administrators.
Sync resources
You can retrieve, create, modify, or delete resources for data replication with SyncIQ.
<file_matching_pattern> := {
"or_criteria" : [
{
"and_criteria": [
<file_criterion>,
<file_criterion>,
...
]
},
{
"and_criteria": [
<file_criterion>,
<file_criterion>,
...
]
},
...
]
}
<file_criterion> = {
"type": <string>,
"operator": <string>,
"value": {<string> | <integer>}
}
operator Description
== Equal
! Not
Type Conditions
Type Conditions
Type Conditions
"file_matching_filter": {
"or_criteria" : [
{
"and_criteria": [
{
"type": "size",
"operator": ">=",
"value": "500000KB"
},
{
"type": "file_type",
"operator": "==",
"value": "file"
}
]
},
{
"and_criteria": [
{
"type": "posix_regex_name",
"operator": "==",
"value": "some_special_prefix_*"
}
]
},
{
"and_criteria": [
{
"type": "file_type",
"operator": "==",
"value": "symlink"
}
]
}
]
}
View the detailed JSON schema for this resource, GET <cluster-ip:port>/platform/7/sync/
which has information about query parameters and jobs?describe
object properties.
GET <cluster-ip:port>/platform/7/sync/
jobs/<job>?describe
POST /platform/1/sync/jobs
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'id': 'testpol'
}
Response example
201 Created
Content-type: application/json,
Allow: 'GET, POST, HEAD'
{
"id":"testpol"
}
PUT /platform/1/sync/jobs/testpol
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'state': cancel,
}
Response example
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT'
POST /platform/1/sync/policies
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'log_level': 'fatal',
'name': 'myNewPolicy',
'schedule': 'every 3 weeks',
'source_root_path': '/ifs/data/sync2',
'target_path': '/ifs/data/sync/target2',
'action': 'copy',
'report_max_count': 144,
'source_exclude_directories': ['/ifs/data/sync2/exclude'],
'source_include_directories': ['/ifs/data/sync2/include'],
'target_host': 'localhost'
}
Response examples
In the following example, the request was successful and a replication policy ID is
returned for the created object.
201 Created
Content-type: application/json,
Allow: 'DELETE, GET, POST, HEAD'
{
"id":"a33006f364842eefb629fc6b95c92559"
}
In following example, the replication policy was not created and an error was returned.
{
"errors":[
{
"code":"AEC_EXCEPTION",
"message":"duplicate policy <name,type> entry with id=
\'(null)\', name=\'myNewPolicy\'"
}
]
}
PUT /platform/1/sync/policies/myNewPolicy
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'target_compare_initial_sync': True,
'enabled': True,
'description': 'New policy',
'target_host': 'newHostname'
}
Response examples
The request was successful. No message body is returned for this request.
204 No Content
content-type: text/plain,
allow: 'DELETE, GET, PUT, HEAD'
In the following example, the policy was not modified and an error message was
returned.
{
"errors":[
{
"code":"AEC_BAD_REQUEST",
"field":"source_network",
"message":"Flexnet subnet not found"
}
]
}
POST /platform/1/sync/policy/testPolicy/reset
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
Response example
201 Created
Content-type: application/json,
Allow: 'POST'
{
"id":"5275f97ebb3892ed4a47f71de20d4609"
}
POST /platform/1/sync/reports-rotate
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
Response example
201 Created
Content-type: application/json,
Allow: 'DELETE, GET, POST, HEAD'
{
"id":"a33006f364842eefb629fc6b95c92559"
}
POST /platform/1/sync/target/policies/testpol/cancel
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
Response example
200 OK
Content-type: application/json,
Allow: 'DELETE, GET, PUT, HEAD'
"policies" :
[
{
"failover_failback_state" : "writes_disabled",
"id" : "021a24618064135c5df4c431fd132437",
"last_job_state" : "paused",
"last_source_coordinator_ip" : "127.0.0.1",
"last_update_from_source" : 1371769450,
"legacy_policy" : false,
"name" : "testpol",
"source_cluster_guid" :
"005056300217c137c2512b163880cb4d843d",
"source_host" : "jgregory",
"target_path" : "/ifs/data/tgt"
}
]
}
POST /platform/1/sync/rules
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'type': 'file_count',
'limit': 123,
'schedule':
{
'begin': '09:00',
'end': '17:00',
'monday': True,
'tuesday': True,
'friday': True,
'wednesday': True,
'thursday': True,
'sunday': False,
'saturday': False
}
}
Response example
201 Created
Content-type: application/json,
Allow: 'DELETE, GET, POST, HEAD'
{
"id":"fc-0"
}
PUT /platform/sync/rules/
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
Response example
204 No Content
Content-type: text/plain,
Allow: 'DELETE, GET, PUT, POST'
PUT /platform/1/sync/settings
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'report_max_count': 1234,
'service': 'on'
}
Response example
204 No Content
Content-type: text/plain,
Allow: 'DELETE, GET, PUT, HEAD'
SmartLock overview
With the SmartLock software module, you can protect files on an Isilon cluster from
being modified, overwritten, or deleted. To protect files in this manner, you must
activate a SmartLock license.
With SmartLock, you can identify a directory in OneFS as a WORM domain. WORM
stands for write once, read many. All files within the WORM domain can be committed
to a WORM state, meaning that those files cannot be overwritten, modified, or
deleted.
After a file is removed from a WORM state, you can delete the file. However, you can
never modify a file that has been committed to a WORM state, even after it is
removed from a WORM state.
In OneFS, SmartLock can be deployed in one of two modes: compliance mode or
enterprise mode.
SmartLock resources
You can retrieve, create, or modify SmartLock configurations and settings.
Create a SmartLock
You can create a SmartLock domain.
Request example
POST /platform/1/worm/domains
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"path":"/ifs/test/domain_test"
}
Response example
201 Created
Content-type: application/json
{
"id" : "224731515-4837484-928237-1003"
}
Modify a SmartLock
You can modify a SmartLock domain.
Request example
PUT /platform/1/worm/domains/domaintest
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"privileged_delete":"on"}
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain
PUT /platform/1/worm/domains/settings
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{"cdate" : }
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain
Deduplication overview
SmartDedupe enables you to save storage space on your cluster by reducing
redundant data. Deduplication maximizes the efficiency of your cluster by decreasing
the amount of storage required to store multiple files with identical blocks.
The SmartDedupe software module deduplicates data by scanning an Isilon cluster for
identical data blocks. Each block is 8 KB. If SmartDedupe finds duplicate blocks,
SmartDedupe moves a single copy of the blocks to a hidden file called a shadow store.
SmartDedupe then deletes the duplicate blocks from the original files and replaces the
blocks with pointers to the shadow store.
Deduplication is applied at the directory level, targeting all files and directories
underneath one or more root directories. SmartDedupe not only deduplicates identical
blocks in different files, it also deduplicates identical blocks within a single file.
You can first assess a directory for deduplication and determine the estimated amount
of space you can expect to save. You can then decide whether to deduplicate the
directory. After you begin deduplicating a directory, you can monitor how much space
is saved by deduplication in real time.
For two or more files to be deduplicated, the files must have the same disk pool policy
ID and protection policy. If one or both of these attributes differs between two or
more identical files, or files with identical 8K blocks, the files are not deduplicated.
Because it is possible to specify protection policies on a per-file or per-directory basis,
deduplication can further be impacted. Consider the example of two files, /ifs/
data/projects/alpha/logo.jpg and /ifs/data/projects/beta/
logo.jpg. Even though the logo.jpg files in both directories are identical, if one
has a different protection policy from the other, the two files would not be
deduplicated.
In addition, if you have activated a SmartPools license on your cluster, you can specify
custom file pool policies. These file pool polices might cause files that are identical or
have identical 8K blocks to be stored in different node pools. Consequently, those files
would have different disk pool policy IDs and would not be deduplicated.
SmartDedupe also does not deduplicate files that are 32 KB or smaller, because doing
so would consume more cluster resources than the storage savings are worth. The
default size of a shadow store is 2 GB. Each shadow store can contain up to 256,000
blocks. Each block in a shadow store can be referenced up to 32,000 times.
Deduplication resources
You can retrieve, create, modify, or delete SmartDedupe configurations and settings.
PUT /platform/1/dedupe/settings
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'paths': [
'/ifs/data/dedupeme1',
'/ifs/data/dedupeme2'
]
}
Response example
204 No Content
Content-type: 'text/plain,
Allow: 'GET, PUT, HEAD'
Note
If NTP is configured for the cluster, the cluster time is automatically synchronized to
the time reported by the configured NTP servers.
Note
The versions of OneFS should be the same on all nodes unless an upgrade is in
progress.
IP address pools
Within a subnet, you can partition a cluster's external network interfaces into pools of
IP address ranges. The pools enable you to customize your storage network to serve
different groups of users. You can configure subnets in IPv4 or IPv6.
You can associate IP address pools with a node, a group of nodes, or NIC ports. For
example, you can set up one subnet for storage nodes and another subnet for
accelerator nodes. Similarly, you can allocate ranges of IP addresses on a subnet to
different teams, such as engineering and sales. These options help you create a
storage topology that matches the demands of your network.
In addition, network provisioning rules streamline the setup of external connections.
After you configure the rules with network settings, you can apply the settings to new
nodes.
As a standard feature, the OneFS SmartConnect module balances connections among
nodes by using a round-robin policy with static IP addresses and one IP address pool
for each subnet. Activating a SmartConnect Advanced license adds features, such as
defining IP address pools to support multiple DNS zones.
To distribute data among nodes, OneFS sends messages with a globally routable block
address through the cluster's internal network. The block address identifies the node
and the drive storing the block of data.
Note
We recommend that you do not save data to the root /ifs file path but in directories
below /ifs. The design of your data storage structure should be planned carefully. A
well-designed directory optimizes cluster performance and cluster administration.
Licensing
All Isilon software and hardware must be licensed through EMC Software Licensing
Central (SLC).
A record of your active licenses and your cluster hardware is contained in a license file
that is stored in two locations: one copy of the license file is stored in the SLC
repository, and another copy of the license file is stored on your cluster. The license
file contains a record of the following license types:
l OneFS
l Additional software modules
The license file on your cluster, and the license file in the SLC repository, must match
your installed hardware and software. Therefore, you must submit a request to update
your license file when you:
l Upgrade for the first time to OneFS 8.1 or later
Note
If you are running the free version of IsilonSD edge, you have access to all optional
software modules except for Cloudpools, SmartLock, and SyncIQ. For access to any
of those three modules, you must purchase an IsilonSD Edge license.
Licensing resources
You can retrieve information about OneFS feature licenses, or install a new license
key.
Licensing 147
System configuration API
Security hardening
Security hardening is the process of configuring a system to reduce or eliminate as
many security risks as possible.
When you apply a hardening profile on an Isilon cluster, OneFS reads the security
profile file and applies the configuration defined in the profile to the cluster. If
required, OneFS identifies configuration issues that prevent hardening on the nodes.
For example, the file permissions on a particular directory might not be set to the
expected value, or the required directories might be missing. When an issue is found,
you can choose to allow OneFS to resolve the issue, or you can defer resolution and
fix the issue manually.
Note
If you determine that the hardening configuration is not right for your system, OneFS
allows you to revert the security hardening profile. Reverting a hardening profile
returns OneFS to the configuration achieved by resolving issues, if any, prior to
hardening.
You must have an active security hardening license and be logged in to the Isilon
cluster as the root user to apply hardening to OneFS. To obtain a license, contact your
Isilon sales representative.
Hardening resources
Apply, resolve, revert, or retrieve information about hardening on a cluster.
Note
This is different from the hardening status resource, which retrieves the overall
hardening status on the cluster.
Note
This is different from the hardening state resource, which returns that state of a
specific hardening operation.
Upgrading OneFS
Two options are available for upgrading the OneFS operating system: a rolling upgrade
or a simultaneous upgrade. Before upgrading OneFS software, a pre-upgrade check
must be performed.
A rolling upgrade individually upgrades and restarts each node in the Isilon cluster
sequentially. During a rolling upgrade, the cluster remains online and continues serving
clients with no interruption in service, although some connection resets may occur on
SMB clients. Rolling upgrades are performed sequentially by node number, so a rolling
upgrade takes longer to complete than a simultaneous upgrade. The final node in the
upgrade process is the node that you used to start the upgrade process.
Note
Rolling upgrades are not available for all clusters. For instructions on how to plan an
upgrade, prepare the cluster for upgrade, and perform an upgrade of the operating
system, see the OneFS Upgrades – Isilon Info Hub
A simultaneous upgrade installs the new operating system and restarts all nodes in the
cluster at the same time. Simultaneous upgrades are faster than rolling upgrades but
require a temporary interruption of service during the upgrade process. Your data is
inaccessible during the time that it takes to complete the upgrade process.
Before beginning either a simultaneous or rolling upgrade, OneFS compares the
current cluster and operating system with the new version to ensure that the cluster
meets certain criteria, such as configuration compatibility (SMB, LDAP, SmartPools),
disk availability, and the absence of critical cluster events. If upgrading puts the
cluster at risk, OneFS warns you, provides information about the risks, and prompts
you to confirm whether to continue the upgrade.
If the cluster does not meet the pre-upgrade criteria, the upgrade does not proceed,
and the unsupported statuses are listed.
Note
We recommend that you run the optional pre-upgrade checks. Before starting an
upgrade, OneFS checks that your cluster is healthy enough to complete the upgrade
process. Some of the pre-upgrade checks are mandatory, and will be performed even
if you choose to skip the optional checks. All pre-upgrade checks contribute to a safer
upgrade.
Note
If the cluster and Active Directory become out of sync by more than 5 minutes,
authentication will not work.
NTP resources
List, modify, create, or delete Network Time Protocol (NTP) configuration
information.
node. When using SNMP on an Isilon cluster, you should use a fixed general username.
A password for the general user can be configured in the web administration interface.
You should configure a network monitoring system (NMS) to query each node directly
through a static IPv4 or IPv6 address. This approach allows you to confirm that all
nodes have external IP addresses and therefore respond to SNMP queries. Because
the SNMP proxy is enabled by default, the SNMP implementation on each node is
configured automatically to proxy for all other nodes in the cluster except itself. This
proxy configuration allows the Isilon Management Information Base (MIB) and
standard MIBs to be exposed seamlessly through the use of context strings for
supported SNMP versions. After you download and save the appropriate MIBs, you
can configure SNMP monitoring through either the web administration interface or
though the command-line interface.
Hardware
You can update certain information about Isilon hardware ports and tapes through the
OneFS system configuration API.
Hardware resources
You can list, modify, or delete information about ports and tapes, and you can re-scan
tape devices.
Hardware 157
System configuration API
File pools
File pools are sets of files that you define to apply policy-based control of the storage
characteristics of your data.
The initial installation of OneFS places all files in the cluster into a single file pool,
which is subject to the default file pool policy. SmartPools enables you to define
additional file pools, and create policies that move files in these pools to specific node
pools and tiers.
File pool policies match specific file characteristics (such as file size, type, date of last
access or a combination of these and other factors), and define specific storage
operations for files that match them. The following examples demonstrate a few ways
you can configure file pool policies:
l You can create a file pool policy for a specific file extension that requires high
availability.
l You can configure a file pool policy to store that type of data in a storage pool that
provides the fastest reads or read/writes.
l You can create another file pool policy to evaluate last accessed date, allowing you
to store older files in storage pool best suited for archiving for historical or
regulatory purposes.
POST /platform/1/filepool/policies
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{'file_matching_pattern':
{'or_criteria':
[
{'and_criteria':
[
{'operator': '==', 'type': 'path', 'value': '/ifs/
data/vms'}
]
}
]
},
'name': 'mirror_vms',
'actions':
[
{
'action_param': '8x',
'action_type': 'set_requested_protection'
}
]
}
Response example
201 Created
Content-type: application/json
{
"id" : "mirror_vms"
}
PUT /platform/1/filepool/policies/vms_mirror
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"action_param":"false"
"action_type":"set_requested_protection"
}
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
PUT /platform/1/filepool/policies/
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"action_param":"random"
"action_type":"set_data_access_pattern"
}
Response example
No message body is returned for this request.
204 No Content
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
GET <cluster-ip:port>/platform/3/
storagepool/compatibilities/ssd/active/
<compatibility-id>?describe
GET <cluster-ip:port>/platform/1/
storagepool/compatibilities/class/active/
<ID>?describe
PUT /platform/1/storagepool/settings
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'global_namespace_acceleration_enabled': false,
'automatically_manage_protection': 'all'
}
Response example
No message body is returned for this request.
204 NO CONTENT
Content-type: text/plain,
Allow: 'GET, PUT, HEAD'
Create a tier
Create a tier on the system.
Request example
POST /platform/1/storagepool/tiers
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'name': 'myTier'
}
Response example
201 CREATED
Content-type: application/json,
Allow: 'GET, POST, HEAD, DELETE'
{
"id":"myTier"
}
Modify a tier
Modify a tier.
Request example
When you modify a set of nodes that belong to a tier, you must also set the tier
property on that node pool through the /platform/1/storagepool/nodepools URI.
PUT /platform/1/storagepool/tiers/myTier
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"name": myTier
}
PUT /platform/1/storagepool/nodepools
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
"tier": myTier
}
Response example
No message body is returned for this request.
204 NO CONTENT
Content-type: application/json,
Allow: 'GET, POST, PUT, DELETE'
POST /platform/1/storagepool/nodepools
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'name': 'myPool',
'lnns': [2, 3, 1]
}
Response example
201 CREATED
Content-type: application/json,
Allow: 'GET, POST, HEAD, DELETE'
{
"id":"myPool"
}
PUT /platform/1/storagepool/nodepools/myPool
Authorization: Basic QWxhZGRpbjpvcGVuIHN1c2FtZQ==
{
'tier': 'myTier',
'name': 'myNewPoolName'
}
Response example
No message body is returned for this request.
204 No Content
Content-type: application/json,
Allow: 'GET, POST, PUT, DELETE'
CloudPools
CloudPools extends the capabilities of OneFS by enabling you to specify data to be
moved to lower-cost cloud storage. CloudPools can seamlessly connect to
Dell EMC EMC-based cloud storage systems and to popular third-party providers,
Amazon S3, Google, and Microsoft Azure.
CloudPools is a licensed module built on the SmartPools file pool policy framework,
which gives you granular control of file storage on your cluster. CloudPools extends
this file storage control to one or more cloud repositories, which act as additional tiers
of OneFS storage.
Prior to the introduction of CloudPools, SmartPools enabled the grouping of nodes
into storage pools called node pools, and the classification of node pools as different
storage tiers. SmartPools includes a policy framework that allows you to segregate
files into logical groups called file pools, and to store those file pools in specific storage
tiers.
CloudPools expands the SmartPools framework by treating a cloud repository as an
additional storage tier. This enables you to move older or seldom-used data to cloud
storage and free up space on your cluster.
As with SmartPools, you define files to be stored in the cloud by creating file pool
policies. These policies use file matching criteria to determine which file pools are to
be moved to the cloud.
CloudPools resources
List, create, modify, or delete CloudPools information.
CloudPools 169
System configuration API
CloudPools 171
System configuration API
SmartQuotas overview
The SmartQuotas module is an optional quota-management tool that monitors and
enforces administrator-defined storage limits. Using accounting and enforcement
quota limits, reporting capabilities, and automated notifications, SmartQuotas
manages storage use, monitors disk storage, and issues alerts when disk-storage limits
are exceeded.
Quotas help you manage storage usage according to criteria that you define. Quotas
are used for tracking—and sometimes limiting—the amount of storage that a user,
group, or project consumes. Quotas help ensure that a user or department does not
infringe on the storage that is allocated to other users or departments. In some quota
implementations, writes beyond the defined space are denied, and in other cases, a
simple notification is sent.
Note
Do not apply quotas to /ifs/.ifsvar/ or its subdirectories. If you limit the size of
the /ifs/.ifsvar/ directory through a quota, and the directory reaches its limit,
jobs such as File-System Analytics fail. A quota blocks older job reports from being
deleted from the /ifs/.ifsvar/ subdirectories to make room for newer reports.
The SmartQuotas module requires a separate license. For more information about the
SmartQuotas module or to activate the module, contact your EMC sales
representative.
Quotas resources
You can retrieve, create, modify, or delete SmartQuotas configurations and settings.
Quotas resource
Create, modify, delete, or retrieve information about file system quotas.
Antivirus
You can scan the files you store on an Isilon cluster for computer viruses and other
security threats by integrating with third-party scanning services through the Internet
Content Adaptation Protocol (ICAP).
OneFS sends files through ICAP to a server running third-party antivirus scanning
software. These servers are referred to as ICAP servers. ICAP servers scan files for
viruses.
After an ICAP server scans a file, it informs OneFS of whether the file is a threat. If a
threat is detected, OneFS informs system administrators by creating an event,
displaying near real-time summary information, and documenting the threat in an
antivirus scan report. You can configure OneFS to request that ICAP servers attempt
to repair infected files. You can also configure OneFS to protect users against
potentially dangerous files by truncating or quarantining infected files.
Before OneFS sends a file to be scanned, it ensures that the scan is not redundant. If
a file has already been scanned and has not been modified, OneFS will not send the file
to be scanned unless the virus database on the ICAP server has been updated since
the last scan.
Note
Antivirus scanning is available only if all nodes in the cluster are connected to the
external network.
Antivirus resources
Retrieve, create, modify, or delete antivirus configurations and settings.
Antivirus 177
System configuration API
Antivirus 179
System configuration API
Performance
This chapter documents the performance-related resource handlers for the OneFS
system configuration API.
GET <cluster-ip:port>/platform/7/
performance/datasets/<dataset>/filters/
<filter>?describe
GET <cluster-ip:port>/platform/7/
performance/datasets/<dataset>/
workloads/<workload>?describe
Performance 181
System configuration API
You can access files and directories on a cluster programmatically through the OneFS
API, similar to the way you can access files and directories through SMB or NFS
protocols.
Operation Description
Access points Identify and configure access points and
obtain protocol information
Additionally, you can create an external client or application to access the OneFS API
in any major language, such as C, C++, Python, Java, or .Net.
Date Provides the date when the object store last responded. HTTP-date
Date Specifies the current date according HTTP-date No. A client should
to the requestor. only send a Date
header in a request
that includes an
entity-body, such as
in PUT and POST
requests. A client
without a clock must
not send a Date
header in a request.
x-isi-ifs-target- Specifies the resource type. For String Yes, for PUT
type PUT operations, this value can be operations.
container or object. For GET
Conditional, for GET
operations, this value can be operations.
container, object, or any, or
this parameter can be omitted.
blocks Specifies the number of blocks that compose the object. Integer
last_modified Specifies the time when the object data was last modified in HTTP date
HTTP date/time format.
create_time Specifies the date when the object data was created in HTTP HTTP date
date/time format.
access_time Specifies the date when the object was last accessed in HTTP HTTP date
date/time format.
change_time Specifies the date when the object was last changed (including String
data and metadata changes) in HTTP date/time format.
type Specifies the object type, which can be one of the following String
values: container, object, pipe, character_device, block_device,
symbolic_link, socket, or whiteout_file.
mtime_val Specifies the time when the object data was last modified in Integer
UNIX Epoch format.
btime_val Specifies the time when the object data was created in UNIX Integer
Epoch format.
atime_val Specifies the time when the object was last accessed in UNIX Integer
Epoch format.
ctime_val Specifies the time when the object was last changed (including Integer
data and metadata changes) in UNIX Epoch format.
owner Specifies the user name for the owner of the object. String
group Specifies the group name for the owner of the object. String
id Specifies the object ID, which is also the INODE number. Integer
Troubleshooting
You can troubleshoot failed requests to the namespace by resolving common errors
and viewing activity logs.
Common error codes
The following example shows the common JSON error format:
{
"errors":[
{
"code":"<Error code>",
"message":"<some detailed error msg>"
}
]
}
The following table shows the descriptions for common error codes.
Troubleshooting 187
File system access API
Activity Logs
Activity logs capture server and object activity, and can help identify problems. The
following table shows the location of different types of activity logs.
Access points
You can access the file system namespace through an access point. The default
namespace access point for the OneFS file system is /ifs.
Root users can create an access point on the namespace, and initially only the root
user has privileges for that access point. The root user can create an access control
list (ACL) to provide read privileges for additional users.
The root user can also grant write privileges to users, but non-root users with write
privileges are unable to reconfigure the path of an existing access point.
Additionally, each file or directory in an access point has its own permissions, so even
if a user has privileges for an access point, the user must still be given permissions for
each file and directory.
In the following example, user1 is granted access to the ifs-ap1 access point by
modifying the ACL read-privilege on the access point.
{
"path" : "<absolute_filesystem_path>"
}
Note
The path to the namespace access point must begin at /ifs, which is the root
directory of the OneFS file system.
{
"path": "/ifs/home/"
}
Example response
HTTP/1.1 200 OK
Date: Fri, 15 Mar 2013 21:51:50 GMT
Server: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8x
mod_webkit2/1.0 mod_fastcgi/2.4.6
Allow: DELETE, GET, HEAD, POST, PUT
x-isi-ifs-spec-version: 1.0
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=15, max=335
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/plain
Example response
HTTP/1.1 200 OK
Allow: GET, HEAD
Connection: Keep-Alive
Content-Type: application/json
Date: Mon, 25 Mar 2013 20:31:33 GMT
Keep-Alive: timeout=15, max=499
Server: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8x
mod_webkit2/1.0 mod_fastcgi/2.4.6
Transfer-Encoding: chunked
x-isi-ifs-spec-version: 1.0
{
"namespaces": [
{
"name": "user1",
"path": "/ifs/home/user1"
},
{
"name": "ifs",
"path": "/ifs/"
}
]
}
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
The access control list for the namespace access point is returned for the GET
operation.
No message body is returned upon success for the PUT operation.
Example request 1
In this example, the GET operation retrieves the access control list from the
namespace.
Example response 1
HTTP/1.1 200 OK
Date: Mon, 25 Mar 2013 18:42:16 GMT
x-isi-ifs-spec-version: 1.0
Transfer-Encoding: chunked
Content-Type: application/json
{
"acl":[
{
"accessrights":[
"file_read"
],
"accesstype":"allow",
"inherit_flags":[
],
"trustee":{
"id":"UID:2000",
"name":"user1",
"type":"user"
}
}
],
"authoritative":"acl",
"group":{
"id":"GID:0",
"name":"wheel",
"type":"group"
},
"mode":"0060",
"owner":{
"id":"UID:0",
"name":"root",
"type":"user"
}
}
Example request 2
In this example, the request sets an access control list for the access point.
{
"authoritative":"acl",
"acl":[
{
"trustee":{
"name":"user1",
"type":"user"
},
"accesstype":"allow",
"accessrights":[
"file_read"
],
"op":"add"
}
]
}
Example response 2
HTTP/1.1 200 OK
Date: Mon, 25 Mar 2013 17:24:55 GMT
Transfer-Encoding: chunked
Content-Type: text/plain
x-isi-ifs-spec-version: 1.0
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
An array of version strings that are supported by the current namespace API server is
output in JSON.
Example request
This example retrieves a list of all versions supported for the namespace access
server.
Example response
This example shows that the namespace access server supports only version 1.0.
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
{"versions": ["1.0"]}
Example response
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
Directory operations
You can perform directory operations on the namespace.
Create a directory
Creates a directory with a specified path.
Request syntax
PUT /namespace/<access_point>/<container_path>[?recursive=<boolean>]
[?overwrite=<boolean>] HTTP/1.1
Host <hostname>[:<port>]
Content-Length: <length>
Date: <date>
Authorization: <signature>
x-isi-ifs-target-type: container
Request headers
Header Description Default Type Required
Name
x-isi-ifs- Specifies a pre-defined ACL value or 0700 (read, String No
access- POSIX mode with a string. If this write, and
control parameter is not provided, the mode execute
for the directory is set to 0700 by with owner
default. permissions)
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
This request creates a directory on the namespace named 'folder1/folder2'.
Example response
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
Response headers
Header Description Default Type Required
Name
Content- Provides the content encoding that None String No
Encoding was applied to the object content,
so that decoding can be applied
when retrieving the content.
Response body
No message body is returned upon success.
Example request
Example response
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Connection: close
Server: Apache2/2.2.19
Last-Modified: Wed, 21 Sep 2011 12:00:00 GMT
x-isi-ifs-access-control: 0600
x-isi-ifs-attr-color: red
x-isi-ifs-missing-attr: 1
x-isi-ifs-spec-version: 1.0
x-isi-ifs-target-type: container
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Type: text/xml; charset=UTF-8
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
The object attribute information is returned in JSON format.
{
"attrs":[
{
"name":"<key_name>",
"value":"<key_value>",
"namespace":"<namespace_value>"
},
...
]
}
Note
The namespace parameter is optional. When this parameter is missing, the attribute
is considered to be a system defined attribute. When <namespace_value> is set to
user, the attribute is considered a user defined attribute.
Example request
Example response
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Content-Length: <Length>
Content-Type: application/JSON
Connection: close
Server: Apache2/2.2.19
{
"attrs":[
{
"name":"is_hidden",
"value":false
},
{
"name":"size",
"value":96
},
{
"name":"block_size",
"value":8192
},
{
"name":"blocks",
"value":4
},
{
"name":"last_modified",
"value":"Fri, 23 Mar 2012 16:32:42 GMT"
},
{
"name":"change_time",
"value":"Fri, 23 Mar 2012 16:32:42 GMT"
},
{
"name":"access_time",
"value":"Fri, 23 Mar 2012 16:32:42 GMT"
},
{
"name":"create_time",
"value":"Wed, 21 Mar 2012 22:06:23 GMT"
},
{
"name":"mtime_val",
"value":1332520362
},
{
"name":"ctime_val",
"value":1332520362
},
{
"name":"atime_val",
"value":1332520362
},
{
"name":"btime_val",
"value":1332367583
},
{
"name":"owner",
"value":"root"
},
{
"name":"group",
"value":"wheel"
},
{
"name":"uid",
"value":0
},
{
"name":"gid",
"value":0
},
{
"name":"id",
"value":2
},
{
"name":"nlink",
"value":6
},
{
"name":"type",
"value":"container"
},
{
"name":"mode",
"value":511
}
]
}
Note
The query argument is optional and can include the parameters in the following table.
isi_gconfig -t oapi
max_sort_dir_sz=<integer>
Request headers
Header Description Default Type Required
Name
If-Modified- Returns directory content only if the None HTTP date No
Since directory was modified since the
specified time. If no directory
content was modified, a 304
message is returned.
Response headers
Header Description Default Type Required
Name
Content- Provides the content encoding that None String No
Encoding was applied to the object content,
so that decoding can be applied
when retrieving the content.
Response body
An array of objects in the directory is output in JSON format.
Example request
The following request returns the contents of a directory named 'folder1/folder2'.
Example response
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Content-Type: application/JSON
Connection: close
Server: Apache2/2.2.19
{
"children":[
{
"name":"cover"
},
{
"name":"f2"
},
{
"name":"cover.txt"
},
{
"name":"cover8"
}
]
}
Request example 2
This request returns object details for the directory named 'folder1/folder2'.
Response example 2
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Content-Type: application/JSON
Connection: close
{
"resume":"<the_resume_token>",
"children":[
{
"last_modified":"Fri, 18 Nov 2011 22:45:31 GMT",
"name":"cover",
"size":24,
"type":"object",
},
{
"last_modified":"Fri, 18 Nov 2011 20:01:04 GMT",
"name":"f2",
"size":4,
"type":"object",
},
{
"last_modified":"Fri, 18 Nov 2011 22:45:40 GMT",
"name":"finance",
"size":0,
"type":"container",
}
]
}
Copy a directory
Recursively copies a directory to a specified destination path. Symbolic links are
copied as regular files.
Request syntax
Request headers
Header Description Default Type Required
Name
x-isi-ifs- Specifies the full path to the source None String Yes
copy-source directory. The source and
destination must share the same
access point.
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
For this operation, the HTTP status code 200 OK does not always indicate a complete
success. If the response body contains a JSON message, the operation has partially
failed, and the error message is reported in a structured JSON array.
If the server fails to initiate a copy due to an error (such as an invalid copy source), an
error is returned. If the server initiates the copy, and then fails, "copy_errors" are
returned in structured JSON format.
Because the copy operation is synchronous, the client cannot stop an ongoing copy or
check the status of a copy asynchronously.
Example request 1
Example response 1
HTTP/1.1 200 Ok
Date: Thu, 22 Sep 2011 12:00:00 GMT
Server: Apache2/2.2.19
Content-Encoding: gzip
x-isi-ifs-spec-version: 1.0
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/plain
Example request 2
In this example, the directory 'src1' contains files {f1, f2, f3, f4} and the directory
'dest1' exists and contains files {f1, f2}.
Example response 2
HTTP/1.1 200 OK
Date: Thu, 22 Sep 2011 12:00:00 GMT
Server: Apache2/2.2.19
x-isi-ifs-spec-version: 1.0
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
{
"copy_errors":[
{
"source":"/ap1/src1/f1",
"target":"/ap1/dest1/f1",
"error_src":"target side",
"message":"target exists(not copied)",
},
{
"source":"/ap1/src1/f2",
"target":"/ap1/dest1/f2",
"error_src":"target side",
"message":"target exists(not copied)"
}
],
Move a directory
Moves a directory from an existing source to a new destination path.
Request syntax
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
Example response
Delete a directory
Deletes the directory at the specified path.
Request syntax
DELETE /namespace/<access_point>/<container_path>[?
recursive=<Boolean>] HTTP/1.1
Host <hostname>[:<port>]
Date: <date>
Authorization: <signature>
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
Example response
Connection: close
Server: Apache2/2.2.19
{
"action":"<action_value>",
"attrs":[
{
"name":"<key_name>",
"value":"<key_value>",
"namespace":"<namespace_value>",
"op":"<operation_value>"
},
...
]
}
Note
You can omit attribute values or enter "" for the value.
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
{
"action":"replace",
"attrs":[
{
"name":"Manufacture",
"value":"Foo",
"namespace":"user"
}
]
}
Example response
HTTP/1.1 200 OK
Date: Wed, 20 Mar 2013 17:19:15 GMT
Server: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8x
mod_webkit2/1.0 mod_fastcgi/2.4.6
Allow: DELETE, GET, HEAD, POST, PUT
x-isi-ifs-spec-version: 1.0
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=15, max=500
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/plain
File operations
You can perform file operations on the namespace.
PUT /namespace/<access_point>/<file_path>[?overwrite=<Boolean>]
HTTP/1.1
Host <hostname>[:<port>]
Content-Length : <length>
Date: <date>
Authorization: <signature>
[Message Body]
Request headers
Header Description Default Type Required
Name
Content- Specifies the content encoding that None String No
Encoding was applied to the object content,
so that decoding can be applied
when retrieving the content.
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
Example response
If- Returns only files that were not None HTTP date No
Unmodified- modified since the specified time. If
Since there are no unmodified files since
this time, a 412 message is returned
to indicate that the precondition
failed.
Response headers
Header Name Description
Content-Encoding Provides the content encoding that was applied to the object
content, so that decoding can be applied when retrieving the
content.
x-isi-ifs-access-control Provides the access mode for the file in octal number format.
Response body
No message body is returned upon success.
Example request
Example response
HTTP/1.1 200 OK
Date: Thu Sep 22 16:06:32 GMT 2011
Content-Length: 54380
Content-Type: image/jpeg
Connection: close
Server: Apache2/2.2.19
Copy a file
Copies a file to the specified destination path.
Request syntax
PUT /namespace/<access_point>/<file_path>[?overwrite=<Boolean>]
HTTP/1.1
x-isi-ifs-copy-source: /namespace/<access_point>/<source_path>
Host <hostname>[:<port>]
Date: <date>
Authorization: <signature>
Request headers
Header Description Default Type Required
Name
x-isi-ifs- Specifies the full path of the source. N/A String Yes
copy-source The source and destination paths
must be in the same access point.
Response headers
This call returns common response headers.
Response body
No message body is returned upon success. For this operation, the HTTP status code
200 OK may not indicate a complete success.
If the response body contains a JSON message, the operation has partially failed. If
the server fails to initiate a copy due to an error (such as an invalid copy source), an
error is returned. If the server initiates the copy, and then fails, "copy_errors" are
returned in structured JSON format. Because the copy operation is synchronous, the
client cannot stop an ongoing copy operation or check the status of a copy operation
asynchronously.
Example request 1
This example shows a successful copy.
Example response 1
HTTP/1.1 200 Ok
Date: Thu, 22 Sep 2011 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
Example request 2
This example shows a failed copy, where the file is not overwritten.
Example response 2
HTTP/1.1 200 OK
Date: Wed, 20 Mar 2013 21:33:55 GMT
Server: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8x
mod_webkit2/1.0 mod_fastcgi/2.4.6
Allow: DELETE, GET, HEAD, POST, PUT
x-isi-ifs-spec-version: 1.0
Keep-Alive: timeout=15, max=500
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
{
"copy_errors":[
{
"error_src":"target side",
"message":"target exists(not copied)",
"source":"/accesspoint1/directory1/file2",
"target":"/accesspoint1/directory1/file2_copy"
}
],
"success":false
}
Move a file
Moves a file to a destination path that does not yet exist.
Request syntax
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
Example response
Delete a file
Deletes the specified file.
Request syntax
Example response
Clone a file
Clone a file to the destination path. If the parameter is set as a snapshot name, the file
is cloned from that snapshot.
Request syntax
PUT /namespace/<access_point>/<file_path>[?<clone>][&<snapshot>]
[&<overwrite>] HTTP/1.1
x-isi-ifs-copy-source: <source_file_path>
Host <hostname>[:<port>]
Date: <date>
Authorization: <signature>
Request headers
Header Description Default Type Required
Name
x-isi-ifs- Specifies the full path of the source. N/A String Yes
copy-source The source and destination paths
must be in the same access point.
Response headers
This call returns common response headers.
Response body
No response body is returned upon success.
Example request
Example response
HTTP/1.1 200 OK
Date: Thu, 21 Mar 2013 14:33:29 GMT
Content-Length: 0
Connection: close
{
"action":"<action_value>",
"attrs":[
{
"name":"<key_name>",
"value":"<key_value>",
"namespace":"<namespace_value>",
"op":"<operation_value>"
},
...
]
}
Note
You can modify only the <content_type> and user specified attributes. All other
system attributes are ignored.
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
No response body is returned upon success.
Example request
{
"action":"replace",
"attrs":[
{
"name":"Manufacture",
"value":"Foo",
"namespace":"user"
},
{
"name":"user.Material",
"value":"Steel",
"namespace":"user"
}
]
}
Example response
HTTP/1.1 200 OK
Date: Thu, 21 Mar 2013 14:33:29 GMT
Server: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8x
mod_webkit2/1.0 mod_fastcgi/2.4.6
Allow: DELETE, GET, HEAD, POST, PUT
x-isi-ifs-spec-version: 1.0
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=15, max=500
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/plain
If- Returns only file content that was None HTTP date No
Unmodified- not modified since the specified
Since time. If there is no unmodified file
content, a 412 message is returned
to indicate that the precondition
failed.
Response headers
Header Description Default Type Required
Name
Content- Provides the content encoding that None String No
Encoding was applied to the object content,
Response body
No message body is returned upon success.
Example request
Example response
HTTP/1.1 200 OK
Date: Thu Sep 22 16:06:32 GMT 2011
Server: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8x
mod_webkit2/1.0 mod_fastcgi/2.4.6
Allow: DELETE, GET, HEAD, POST, PUT
Last-Modified: Wed, 20 Mar 2013 18:16:17 GMT
x-isi-ifs-access-control: 0600
x-isi-ifs-attr-color: red
x-isi-ifs-missing-attr: 1
x-isi-ifs-spec-version: 1.0
x-isi-ifs-target-type: object
Request syntax
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
The object attribute information is returned in JSON format.
{
"attrs":[
{
"name":"<key_name>",
"value":"<key_value>",
"namespace":"<namespace_value>"
},
...
]
}
}
Note
The namespace parameter is optional. When this parameter is missing, the attribute
is considered to be a system defined attribute. When the <namespace_value> field is
set to user, the attribute is considered a user-defined attribute.
Example request
Connection: keep-alive
Cache-Control: max-age=0
Example response
HTTP/1.1 200 Ok
Date: Thu, 21 Mar 2013 19:58:11 GMT
Server: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8x
mod_webkit2/1.0 mod_fastcgi/2.4.6
Allow: DELETE, GET, HEAD, POST, PUT
x-isi-ifs-spec-version: 1.0
Keep-Alive: timeout=15, max=436
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json
{
"attrs": [
{
"name": "content_type",
"value": "text/xml; charset=UTF-8"
},
{
"name": "is_hidden",
"value": false
},
{
"name": "size",
"value": 27
},
{
"name": "block_size",
"value": 8192
},
{
"name": "blocks",
"value": 52
},
{
"name": "last_modified",
"value": "Wed, 20 Mar 2013 18:16:17 GMT"
},
{
"name": "change_time",
"value": "Wed, 20 Mar 2013 18:16:17 GMT"
},
{
"name": "access_time",
"value": "Wed, 20 Mar 2013 18:16:17 GMT"
},
{
"name": "create_time",
"value": "Wed, 20 Mar 2013 18:16:17 GMT"
},
{
"name": "mtime_val",
"value": 1363803377
},
{
"name": "ctime_val",
"value": 1363803377
},
{
"name": "atime_val",
"value": 1363803377
},
{
"name": "btime_val",
"value": 1363803377
},
{
"name": "owner",
"value": "root"
},
{
"name": "group",
"value": "wheel"
},
{
"name": "uid",
"value": 0
},
{
"name": "gid",
"value": 0
},
{
"name": "id",
"value": 4300276817
},
{
"name": "nlink",
"value": 1
},
{
"name": "type",
"value": "object"
},
{
"name": "mode",
"value": "0600"
},
{
"name": "Manufacture",
"namespace": "user",
"value": "Foo"
},
{
"name": "user.Material",
"namespace": "user",
"value": "Steel"
}
]
}
{
"id":"<ID>",
"name":"<name>",
"type":"<type>"
}
where
For PUT operations, you can specify either the ID or both the name and type. The ID
value takes precedence when all fields are available.
Access Functionality
rights
list The right to list entries
dir_gen_read The right to list entries, read attributes, read extended attributes, and read
access control lists
dir_gen_writ The right to create files, create subdirectories, write attributes, write
e extended attributes, and read access control lists
dir_gen_exec The right to access files in subdirectories, and read access lists
ute
Access Functionality
rights
file_read The right to read file data.
file_gen_read The right to read files, read attributes, read extended attributes, and read
access control lists.
file_gen_write The right to write to the file, append to the file, write file attributes, write
extended file attributes, and read access control lists.
file_gen_exec The right to execute files, and read access control lists.
ute
Access Functionality
rights
std_read_dac The right to read the access control list of the directory or file.
std_write_da The right to write the access control list of the directory or file.
c
modify Includes the following access rights for a directory: add_file, add_subdir,
dir_write_ext_attr, dir_write_attr, delete_child, std_delete, std_write_dac
and std_write_owner.
Includes the following access rights for a file: file_write, append,
file_write_ext_attr, file_write_attr, std_delete, std_write_dac and
std_write_owner.
Inheritance Functionality
Flags
object_inherit Only files inherit access rights from their parent directory.
container_inheri Only directories inherit access rights from their parent directory.
t
no_prop_inherit Stops the propagation of inherited rights for directories and files.
inherit_only Access rights do not apply for the current directory, but are applied to child
directories and files when they are inherited.
inherited_ace Indicates that the access control list of the current directory or file was
inherited from a parent directory or file.
GET /namespace/<access_point>/<container_path>/<container_name>?acl
HTTP/1.1
Host: <hostname>[:<port>]
Date: <date>
Authorization: <signature>
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
{
"owner":{
"id":"<owner id>",
"name":"<owner name>",
"type":"<type>"
},
"group":{
"id":"<group id>",
"name":"<group name>",
"type":"<type>"
},
"authoritative":"acl"|"mode",
"mode":"<POSIX mode>",
"acl":[
{
"trustee":{
"id":"<trustee id>",
"name":"<trustee name>",
"type":"<trustee type>"
},
"accesstype":"allow" | "deny",
"accessrights":"<accessrights_list>",
"inherit_flags":"<inherit_flags_list>"
}
]
}
group Provides the JSON object for the group persona of the owner.
accessrights Provides the list of access rights that are defined for the directory.
Example request
Example response
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
{
"owner":{
"id":"UID:0",
"name":"root",
"type":"user"
},
"group":{
"id":"GID:0",
"name":"wheel",
"type":"group"
},
"authoritative":"acl",
"mode":"0722",
"acl":[
{
"trustee":{
"id":"UID:2001",
"name":"foo1",
"type":"user"
},
"accesstype":"allow",
"accessrights":[
"dir_gen_read",
"dir_gen_write"
],
"inherit_flags":[
"container_inherit"
]
},
{
"trustee":{
"id":"GID:23",
"name":"group1",
"type":"group"
},
"accesstype":"allow",
"accessrights":[
"dir_gen_read"
]
}
]
}
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
{
"owner":{
"id":"<owner id>",
"name":"<owner name>",
"type":"<type>"
},
"group":{
"id":"<group id>",
"name":"<group name>",
"type":"<type>"
},
"authoritative":"acl"|"mode",
"mode":"<POSIX mode>",
"acl":[
{
"trustee":{
"id":"<trustee id>",
"name":"<trustee name>",
"type":"<trustee type>"
},
"accesstype":"allow"|"deny",
"accessrights":"<accessrights_list>",
"inherit_flags":"<inherit_flags>"
}
]
}
group Provides the JSON object for the group persona of the owner.
accessrights Provides the list of access rights defined for the file.
Example request
Example response
HTTP/1.1 200 OK
Date: Thu, 12 Jan 2011 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
{
"owner":{
"id":"UID:0",
"name":"root",
"type":"user"
},
"group":{
"id":"GID:0",
"name":"wheel",
"type":"group"
},
"authoritative":"acl",
"mode":"0022",
"acl":[
{
"trustee":{
"id":"UID:2000",
"name":"foo2",
"type":"user"
},
"accesstype":"allow",
"accessrights":[
"file_gen_read",
"file_gen_write"
]
},
{
"trustee":{
"id":"GID:1001",
"name":"group2",
"type":"group"
},
"accesstype":"allow",
"accessrights":[
"file_gen_read"
]
}
]
}
PUT /namespace/<access_point>/<container_path>/<container_name>
HTTP/1.1
Host: <hostname>[:<port>]
Content-Length: <length>
Date: <date>
Authorization: <signature>
x-isi-ifs-access-control : "private_read" | "private" |
"public_read" | "public_read_write" | "public" | "<POSIX mode>"
Note
The attribute x-isi-ifs-access-control can be set to a pre-defined ACL value or to a
POSIX mode in octal string. If this header is not specified, the directory mode is set to
0700 by default when the directory is created.
public All users have the following rights: All users: "accessrights":
list entries, read attributes, read ["dir_gen_all"],"inherit_flags":[]
extended attributes, read access
control list, create files, create
subdirectories, write attributes,
write extended attributes, access
files in subdirectories, delete
children (including read-only files),
change owner, write access control
list, and delete current directory.
The POSIX mode is an absolute mode that is constructed from the sum of one or more
octal numbers listed in the following table.
Octal Description
number
4000 The set-user-ID-on-execution bit. Executable files with this bit have their UID set
to the UID of the file owner.
2000 The set-group-ID-on-execution bit. Executable files with this bit have their GID set
to the GID of the file owner.
Octal Description
number
0400 Allows read by owner.
0100 For files, allows execution by owner. For directories, allows directory queries by
owner.
0010 For files, allows execution by group members. For directories, allows directory
queries by group members.
0001 For files, allows execution by others. For directories, allows directory queries by
others.
Example response
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
Note
The attribute x-isi-ifs-access-control can be set to a pre-defined ACL value or to
POSIX mode with octal string. By default, the mode for the file is set to 0600.
public_read The file owner has the following File owner: "accessrights":
rights: read file, read attributes, read ["file_gen_all"],"inherit_flags":[]
extended attributes, read access All users: "accessrights":
control list, write to the file, append ["file_gen_read","file_gen_execut
to the file, write file attributes, write e"],"inherit_flags":[]
extended file attributes, execute file,
write or modify the access control
list, change owner, and delete current
file.
All users have the following rights:
read files, read attributes, read
extended attributes, read access
control lists, and execute files.
public_read_writ The file owner has the following File owner: "accessrights":
e rights: read file, read attributes, read ["file_gen_all"],"inherit_flags":[]
extended attributes, read access All users: "accessrights":
control list, write to the file, append ["file_gen_read","file_gen_write",
public All users have the following rights: All users: "accessrights":
read file, read attributes, read ["file_gen_all"],"inherit_flags":[]
extended attributes, read access
control list, write to the file, append
to the file, write file attributes, write
extended file attributes, execute file,
write/modify the access control list,
change owner, and delete current file.
The POSIX mode is an absolute mode, which consists of an octal number that is
constructed from the sum of one or more octal numbers listed in the following table.
Octal Description
number
4000 The set-user-ID-on-execution bit. Executable files with this bit have their uid set to
the uid of the file owner.
2000 The set-group-ID-on-execution bit. Executable files with this bit have their gd set
to the gid of the file owner.
0100 For files, allows execution by owner. For directories, allows directory queries by
owner.
0010 For files, allows execution by group members. For directories, allows directory
queries by group member.
0001 For files, allows execution by others. For directories, allows directory queries by
others.
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
There is no message body for this response.
Example request
Example response
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
PUT /namespace/<access_point>/<container_path>/<container_name>?acl
HTTP/1.1
Host: <hostname>[:<port>]
Content-Length: <length>
Date: <date>
Authorization: <signature>
{
"owner":{
"id":"<owner id>",
"name":"<owner name>",
"type":"<type>"
},
"group":{
"id":"<group id>",
"name":"<group name>",
"type":"<type>"
},
"authoritative":"acl"|"mode",
"mode":"<POSIX mode>",
"action":"<action_value>",
"acl":[
{
"trustee":{
"id":"<trustee id>",
"name":"<trustee name>",
"type":"<trustee type>"
},
"accesstype":"allow"|"deny",
"accessrights":"<accessrights_list>",
"inherit_flags":"<inherit_flags_list>",
"op":"<operation_value>"
}
]
}
Note
accessrights Specifies the access right values N/A List of string Conditional
defined for the directory. values Mandatory
when the
<action_val
ue> field is
set to
update and
the
<operation_
value> field
is set to
either add
or replace
and the
<inherit_
flags_list>
inherit_flags Specifies the inherit flag values for N/A List of string Conditional
directories. values
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
There is no message body for this response.
Example request 1
This sample sets the ACL of a directory.
{
"authoritative":"acl",
"action":"update",
"acl":[
{
"trustee":{
"id":"UID:1001",
"name":"user23",
"type":"user"
},
"accesstype":"allow",
"accessrights":[
"std_write_dac"
],
"inherit_flags":[
"object_inherit",
"inherit_only"
],
"op":"add"
},
{
"trustee":{
"id":"GID:1210",
"name":"group12",
"type":"group"
},
"accesstype":"allow",
"accessrights":[],
"op":"delete"
}
]
}
Example response 1
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
Example request 2
This sample replaces the existing ACL of the directory with the access control entries
specified in the acl structure. If the acl structure is empty, the existing ACL is
replaced with default system values. The directory owner has default read and write
access to the access control list.
{
"owner":{
"id":"UID:2001",
"name":"foo1",
"type":"user"
},
"group":{
"id":"GID:0",
"name":"wheel",
"type":"group"
},
"authoritative":"acl",
"action":"replace",
"acl":[]
}
Example response 2
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
{
"owner":{
"id":"<owner id>",
"name":"<owner name>",
"type":"<type>"
},
"group":{
"id":"<group id>",
"name":"<group name>",
"type":"<type>"
},
"authoritative":"acl"|"mode",
"mode":"<POSIX mode>",
"action":"<action_value>",
"acl":[
{
"trustee":{
"id":"<trustee id>",
"name":"<trustee name>",
"type":"<trustee type>"
},
"accesstype":"allow"|"deny",
"accessrights":"<accessrights_list>",
"op":"<operation_value>"
}
]
}
Note
accessrights Specifies the access right values N/A List of string Conditional
defined for the file. values Mandatory
when the
<action_val
ue> field is
set to
update and
the
<operation_
value>field
is set to
either add
or
replace,
inherit_flags Specifies the inherit flag values for N/A List of string Conditional
the file. values Either the
<accessrigh
ts_list> or
<inherit_fla
gs_list>
must be
specified
when the
<action_val
ue> field is
set to
update and
the
<operation_
value> field
is set to add
or
replace.
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
This sample sets the ACL of a file named 'file1'.
{
"owner":{
"id":"UID:0",
"name":"root",
"type":"user"
},
"group":{
"id":"GID:0",
"name”:"wheel",
"type":"group"
},
"authoritative":"acl",
"action":"update",
"acl": [
{
"trustee":{
"id":"UID:0",
"name":"root",
"type":"user"
},
"accesstype":"allow",
"accessrights":[
"file_read",
"file_write"
],
"op":"add"
},
{
"trustee":{
"id":"GID:1201",
"name":"group12",
"type":"group"
},
"accesstype":"allow",
"accessrights":"std_write_dac"
],
"op":"replace"
}
]
}
Example response
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
Query operations
You can search for files and directories on the namespace that matches certain
criteria. Files are searched for through a namespace traverse and a filtering
mechanism.
Query an object
Query objects by system-defined and user-defined attributes in a directory.
Request syntax
POST /namespace/<access_point>/<container_path>?
query[&<query_param>] HTTP/1.1
Host <hostname>[:<port>]
Date: <date>
Authorization: <signature>
[JSON BODY]
detail=size,container,conte
nt_type
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
An array of the objects that match the query filter criteria are returned in the JSON
body.
Example request
{
"result":[
"name",
"size",
"last_modified",
"container_path",
"user.color",
"content_type"
],
"scope":{
"logic":"and",
"conditions":[
{
"operator":">=",
"attr":"last_modified",
Example response
{
"children" :
[
{
"content_type " : "text/plain; charset=UTF-8",
"container_path" : "/ifs/movie",
"last_modified" : "Thu, 05 Jan 2012 04:29:56 GMT",
"name" : "fantasy",
"size" : 56
},
{
"content_type " : "text/plain; charset=UTF-8",
"container_path" : "/ifs/folder",
"last_modified" : "Thu, 15 Dec 2011 06:41:04
GMT",
"name" : "tar",
"size" : 3359,
"user.color" : "green"
}
]
}
query = <scope_query> |
{
"result":<attribute_list>,
"scope":<scope_query>
}scope_query = predicate |{
"logic":"<logic_operator>",
"conditions":[
<condition>
]
}
The attribute_list is an array of attribute names, which include system attributes and
user-defined attributes. For example:
condition evaluated in the conditions parameter. You must specify two or more
conditions for the "and" and "or" operators in the conditions parameter.
logic_operator = and|or|not
condition = scope_query|predicate
predicate =
{
"operator":"<comparison_operator>",
"attr":"attr_name",
"value":"attr_value" | string_array
}
The <comparison_operator> value can be any of the following operators: =, !=, <, <=,
>, >=, like, or in.
The arithmetic comparison operators are self-explanatory. The "like" operator
matches the specified attribute with a pattern of regular expressions. For example, the
following JSON query returns all objects with the attribute "Model" prefixed with
"T75":
{
"operator":"like",
"attr":"user.Model",
"value":"^T75.*"
}
If the operator is set to "in", the value must be an array of strings, with at least one
element in the array. When only one element is in the array, the "in" operator behaves
the same way as the "=" operator. For example, the following query returns objects
with the attribute "color" set to either "blue", "green", or "turquoise":
{
"operator":"in",
"attr":"user.color",
"value":[
"blue",
"green",
"turquoise"
]
}
The attribute name can be the name of a user-defined attribute or one of the system
defined attributes, such as:
If the attribute is the user-defined attribute, the attribute must be prefixed with
"user." to differentiate the attribute from a system attribute with the same name. For
example, if there is a user defined attribute called "name", you should write the
attribute as "user.name."
Multiple query predicates can be combined through logical operators. For example, the
following query returns objects that satisfy one of the following conditions: "Model" is
prefixed with T75 or the "color" attribute is either "red," "green," or "turquoise," or
the "manufacture" attribute is ACME.
{
"logic":"or",
"conditions":[
{
"operator":"like",
"attr":"user.Model",
"value":"^T75.*"
},
{
"operator":"in",
"attr":"user.color",
"value":[
"red",
"green",
"turquoise"
]
},
{
"operator":"=",
"attr":"user.manufacture",
"value":"ACME"
}
]
}
Instead of basic predicates, the element of the conditions array can be a sub-query,
which allows more complex queries. For example, the following query returns objects
in which either the attribute "manufacture" is set to "ACME" or the "model" attribute
is set to "T750," and the "color" attribute is set to "black."
{
"logic":"or",
"conditions":[
{
"operator":"=",
"attr":"user.manufacture",
"value":"ACME"
},
{
"logic":"and",
"conditions":[
{
"operator":"=",
"attr":"user.model",
"value":"T750"
},
{
"operator":"=",
"attr":"user.color",
"value":"black"
}
]
}
]
}
SmartLock settings
Only root users can configure SmartLock Write Once Read Many (WORM) retention
date and commit flag settings for a file in a SmartLock directory. A SmartLock license
must be active on the cluster to configure these settings.
GET /namespace/<access_point>/<WORM_directory>/<file_name>?worm
HTTP/1.1
Host: <hostname>[:<port>]
Date: <date>
Authorization: <signature>
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
{
"worm_committed":<boolean>,
"worm_override_retention_date":<"YYYY-MM-DD hh:mm:ss GMT">|null,
"worm_override_retention_date_val":<seconds from the Epoch>|null,
"worm_retention_date":<"YYYY-MM-DD hh:mm:ss GMT">|null,
"worm_retention_date_val":<seconds from the Epoch>|null
}
Example request
Example response
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: <length>
Connection: close
Server: Apache2/2.2.19
{
"worm_committed":true,
"worm_retention_date":"2013-01-22 15:11:36 GMT",
"worm_override_retention_date":null,
"worm_retention_date_val":1358885496,
"worm_override_retention_date_val":null
}
PUT /namespace/<access_point>/<WORM_directory>/<file_name>?worm
HTTP/1.1
Host: <hostname>[:<port>]
Date: <date>
Authorization: <signature>
{
"worm_retention_date":<"YYYY-MM-DD hh:mm:ss GMT">,
"commit_to_worm":<Boolean>
}
Note
If a file is not explicitly committed and an autocommit time period is configured for the
SmartLock directory where the file resides, the file is automatically committed when
the autocommit period elapses.
If the file is committed without setting a retention expiration date, the default
retention period specified for the SmartLock directory where the file resides is
applied. The retention date on the file can also be limited by the maximum retention
period set on the SmartLock directory.
For details about SmartLock WORM behavior, refer to the OneFS Administration Guide.
Request headers
This call sends common request headers.
Response headers
This call returns common response headers.
Response body
No message body is returned upon success.
Example request
Set the retention date for a file in a SmartLock directory.
{
"worm_retention_date":"2013-04-11 12:00:00 GMT",
"commit_to_worm":true
}
Example response
HTTP/1.1 200 OK
Date: Tue, 22 May 2012 12:00:00 GMT
Content-Length: 0
Connection: close
Server: Apache2/2.2.19