Create or update lifecycle policy API

edit

Creates or updates lifecycle policy. See Index lifecycle for definitions of policy components.

Request

edit

PUT _ilm/policy/<policy_id>

Prerequisites

edit
  • If the Elasticsearch security features are enabled, you must have the manage_ilm cluster privilege to use this API. You must also have the manage index privilege on all indices being managed by policy. ILM performs operations as the user who last updated the policy. ILM only has the roles assigned to the user at the time of the last policy update.

Description

edit

Creates a lifecycle policy. If the specified policy exists, the policy is replaced and the policy version is incremented.

Only the latest version of the policy is stored, you cannot revert to previous versions.

Path parameters

edit
<policy_id>

(Required, string) Identifier for the policy.

To avoid naming collisions with built-in and Fleet-managed ILM policies, avoid using @ as part of the id of your own ILM policies.

Query parameters

edit
master_timeout
(Optional, time units) Period to wait for the master node. If the master node is not available before the timeout expires, the request fails and returns an error. Defaults to 30s. Can also be set to -1 to indicate that the request should never timeout.
timeout
(Optional, time units) Period to wait for a response. If no response is received before the timeout expires, the request fails and returns an error. Defaults to 30s.

Examples

edit

The following example creates a new policy named my_policy. In addition, you can use the _meta parameter to add arbitrary metadata to the policy, the _meta parameter is optional and not automatically generated or used by Elasticsearch. To unset _meta, replace the policy without specifying one. To check the _meta, you can use the Get lifecycle policy API.

response = client.ilm.put_lifecycle(
  policy: 'my_policy',
  body: {
    policy: {
      _meta: {
        description: 'used for nginx log',
        project: {
          name: 'myProject',
          department: 'myDepartment'
        }
      },
      phases: {
        warm: {
          min_age: '10d',
          actions: {
            forcemerge: {
              max_num_segments: 1
            }
          }
        },
        delete: {
          min_age: '30d',
          actions: {
            delete: {}
          }
        }
      }
    }
  }
)
puts response
PUT _ilm/policy/my_policy
{
  "policy": {
    "_meta": {
      "description": "used for nginx log",
      "project": {
        "name": "myProject",
        "department": "myDepartment"
      }
    },
    "phases": {
      "warm": {
        "min_age": "10d",
        "actions": {
          "forcemerge": {
            "max_num_segments": 1
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

If the request succeeds, you receive the following result:

{
  "acknowledged": true
}