Skip to main content
A newer release of this product is available.

Cluster licensing licenses endpoint overview

Contributors

Overview

Licensing allows you to tailor a system to meet an organization's specific needs. New features can be enabled by purchasing a license from a NetApp sales associate. After installation of the license, the new feature is available immediately.

This interface manages licenses according to their supported feature. By default, the interface displays packages with installed licenses, but you can also return unlicensed packages.

Each feature has a compliance state which is indicated at the package level. Individual licenses also contain a compliance state indicated in the 'licenses' array. The state of the package is determined by analyzing the underlying licenses according to the following criteria:

  • Licensing terms

  • Cluster state

Licensing terms

The licensing terms define the conditions under which a package is considered 'compliant'. Individual licenses are evaluated based on the following:

  • Scope

  • Time period

  • Usage

Scope

A package can be licensed under the following scopes:

  • site

  • cluster

  • node

A package licensed under 'site' or 'cluster' permits the feature to be used by any node that is a member of the cluster.

A package licensed under 'node' scope permits the authorized node to use the feature. Within a cluster, if you haven't supplied every node with a valid license, the package state will indicate 'noncompliant'. A license must be purchased for each node in a cluster for the package to be considered 'compliant'.

Time period

Some package licenses are only valid for a limited period of time. After a license has expired, the package state changes to 'noncompliant'. A new license will need to be purchased for the package to return to a 'compliant' state.

Usage

Some package licenses have additional terms that need to be maintained to keep a license in compliance. These conditions are defined by the individual license. For example, a license might define the maximum amount of storage that a node can allocate for the license to be 'compliant'.

Cluster state

A cluster's state consists of the following:

  • Node online status

  • Node cluster membership

Some features require that a node be online to display a valid compliance state. If a node can not be reached, or is not known to the cluster, the individual license may indicate an 'unknown' state.

Licensing keys

A license is issued in one of the following two formats:

  • 26-character key

  • NetApp License File (NLF)

The following is an example of a 26-character key:

  AMEPOSOIKLKGEEEEDGNDEKSJDE

The following is an example of a NLF key:

{
"statusResp": {
"version": "1",
"serialNumber": "123456789",
"message": "Success",
"licenses": {
  "capacity": "1",
  "type": "capacity",
  "licenseProtocol": "FABRICPOOL-TB",
  "package": "FabricPool",
  "licenseScope": "cluster"
},
"snStatus": "Active",
"product": "fabricpool",
"statusCode": "S007"
},
"Signature": "signatureABC"
}

Either format can be submitted, via this API, to enable features.


Examples

Retrieving a collection of licenses organized by package

This example retrieves a collection that contains one entry for each package (filtered to only the 'fabricpool' package).

# API
GET /cluster/licensing/licenses/?fields=*&name=fabricpool"

# Response
200 OK

# JSON Body
{
"records": [
{
  "name": "fabricpool",
  "scope": "cluster",
  "state": "compliant",
  "licenses": [
  {
    "owner": "testcluster-1",
    "serial_number": "4149027342",
    "state": "compliant",
    "capacity": {
    "maximum_size": 1099511627776,
    "used_size": 0
    }
  }
  ],
  "_links": {
  "self": {
    "href": "/api/cluster/licensing/licenses/fabricpool"
  }
  }
}
],
"num_records": 1,
"_links": {
"self": {
  "href": "/api/cluster/licensing/licenses/?fields=*&name=fabricpool"
}
}
}

Retrieving a collection of installed licenses

This example retrieves a collection containing all packages (except base) that have installed licenses.

# API
GET /cluster/licensing/licenses/?fields=*&name=!base

# Response
200 OK

# JSON Body
{
"records": [
{
  "name": "nfs",
  "scope": "node",
  "state": "compliant",
  "licenses": [
  {
    "owner": "testcluster-1",
    "serial_number": "1-81-0000000000000004149027492",
    "state": "compliant"
  }
  ],
  "_links": {
  "self": {
    "href": "/api/cluster/licensing/licenses/nfs"
  }
  }
},
{
  "name": "cifs",
  "scope": "node",
  "state": "compliant",
  "licenses": [
  {
    "owner": "testcluster-1",
    "serial_number": "1-81-0000000000000004149027492",
    "state": "compliant"
  }
  ],
  "_links": {
  "self": {
    "href": "/api/cluster/licensing/licenses/cifs"
  }
  }
}
],
"num_records": 2,
"_links": {
"self": {
  "href": "/api/cluster/licensing/licenses/?fields=*&name=!base"
}
}
}

Installing a NLF license

This example installs a single license in the NLF format.

Note You must escape all double quotes and backslash characeters, of the JSON license, before it can be placed in the POST request.
# API
POST /cluster/licensing/licenses/

# JSON Body
{
"keys" : [ "{\"statusResp\":{\"snStatus\": \"Active\", \"licenses\": {\"package\": \"FabricPool\", \"capacity\": \"1\", \"licenseProtocol\": \"FABRICPOOL-TB\", \"type\": \"capacity\", \"licenseScope\": \"cluster\"}, \"message\": \"Success\", \"statusCode\": \"S007\", \"version\": \"1\", \"product\": \"fabricpool\", \"serialNumber\": \"4149027342\"}, \"Signature\":\"SignatureABC\"}" ]
}

# Response
201 Created

Installing a 26-character key

This example installs a single 26-character key formatted license.

# API
POST /cluster/licensing/licenses/

# JSON Body
{
"keys" : [ "AAAAAAAAAAAAAAAAAAAAAAAAAAAA" ]
}

# Response
201 Created

Installing multiple licenses with one API call

This example demonstrates how multiple keys can be provided to install multiple features in a single API call.

# API
POST /cluster/licensing/licenses/

# JSON Body
{
"keys" : [ "AAAAAAAAAAAAAAAAAAAAAAAAAAAA",
           "BBBBBBBBBBBBBBBBBBBBBBBBBBBB" ]
}

# Response
201 Created