## Policy Types

updated: 2020-10-17 18:54

# Policy Types

## Concept

A Policy Type is an abstract specification of the rules to be checked and/or enforced when an Action is performed on a cluster that contains nodes of certain Profile Type.

A registry of policy types is built in memory when the Senlin engine (senlin-engine) is started. In future, Senlin will allow users to provide additional policy type implementations as plug-ins to be loaded dynamically.

A policy type implementation dictates which fields are required, which fields are optional and sometimes the constraints on field values. When a Policy is created by referencing this policy type, the fields are assigned with concrete values. For example, a policy type `senlin.policy.deletion` conceptually specifies the properties required:

    criteria: String # valid values - OLDEST_FIRST, YOUNGEST_FIRST, RANDOM
    destroy_after_deletion: Boolean
    grace_period: Integer
    reduce_desired_capacity: Boolean

The specification of a policy object of this policy type may look like following:

    type: senlin.policy.deletion
    version: 1.0
    properties:
      criteria: OLDEST_FIRST
      destroy_after_deletion: True
      grace_period: 120
      reduce_desired_capacity: True

## Listing Policy Types

Senlin server comes with some built-in policy types. You can check the list of policy types using the following command:

    $ openstack cluster policy type list
    +--------------------------------+---------+----------------------------+
    | name                           | version | support_status             |
    +--------------------------------+---------+----------------------------+
    | senlin.policy.affinity         | 1.0     | SUPPORTED since 2016.10    |
    | senlin.policy.batch            | 1.0     | EXPERIMENTAL since 2017.02 |
    | senlin.policy.deletion         | 1.0     | SUPPORTED since 2016.04    |
    | senlin.policy.deletion         | 1.1     | SUPPORTED since 2018.01    |
    | senlin.policy.health           | 1.0     | EXPERIMENTAL since 2017.02 |
    | senlin.policy.loadbalance      | 1.0     | SUPPORTED since 2016.04    |
    | senlin.policy.loadbalance      | 1.1     | SUPPORTED since 2018.01    |
    | senlin.policy.region_placement | 1.0     | EXPERIMENTAL since 2016.04 |
    |                                |         | SUPPORTED since 2016.10    |
    | senlin.policy.scaling          | 1.0     | SUPPORTED since 2016.04    |
    | senlin.policy.zone_placement   | 1.0     | EXPERIMENTAL since 2016.04 |
    |                                |         | SUPPORTED since 2016.10    |
    +--------------------------------+---------+----------------------------+

The output is a list of policy types supported by the Senlin server.

## Showing Policy Details

Each Policy Type has a schema for its spec (i.e. specification) that describes the names and types of the properties that can be accepted. To show the schema of a specific policy type along with other properties, you can use the following command:

    $ openstack cluster policy type show senlin.policy.deletion-1.1
    support_status:
      '1.0':
      - since: '2016.04'
        status: SUPPORTED
      '1.1':
      - since: '2018.01'
        status: SUPPORTED
    id: senlin.policy.deletion-1.1
    location: null
    name: senlin.policy.deletion-1.1
    schema:
      criteria:
        constraints:
        - constraint:
          - OLDEST_FIRST
          - OLDEST_PROFILE_FIRST
          - YOUNGEST_FIRST
          - RANDOM
          type: AllowedValues
        default: RANDOM
        description: Criteria used in selecting candidates for deletion
        required: false
        type: String
        updatable: false
      destroy_after_deletion:
        default: true
        description: Whether a node should be completely destroyed after deletion. Default
          to True
        required: false
        type: Boolean
        updatable: false
      grace_period:
        default: 0
        description: Number of seconds before real deletion happens.
        required: false
        type: Integer
        updatable: false
      hooks:
        default: {}
        description: Lifecycle hook properties
        required: false
        schema:
          params:
            default: {}
            required: false
            schema:
              queue:
                default: ''
                description: Zaqar queue to receive lifecycle hook message
                required: false
                type: String
                updatable: false
              url:
                default: ''
                description: Url sink to which to send lifecycle hook message
                required: false
                type: String
                updatable: false
            type: Map
            updatable: false
          timeout:
            default: 0
            description: Number of seconds before actual deletion happens.
            required: false
            type: Integer
            updatable: false
          type:
            constraints:
            - constraint:
              - zaqar
              - webhook
              type: AllowedValues
            default: zaqar
            description: Type of lifecycle hook
            required: false
            type: String
            updatable: false
        type: Map
        updatable: false
      reduce_desired_capacity:
        default: true
        description: Whether the desired capacity of the cluster should be reduced along
          the deletion. Default to True.
        required: false
        type: Boolean
        updatable: false

Here, each property has the following attributes:

- `default`: the default value for a property when not explicitly specified;

- `description`: a textual description of the use of a property;

- `required`: whether the property must be specified. Such kind of a property usually doesn’t have a `default` value;

- `type`: one of `String`, `Integer`, `Boolean`, `Map` or `List`;

- `updatable`: a boolean indicating whether a property is updatable.

The default output from the policy-type-show command is in YAML format. You can choose to show the spec schema in JSON format by specifying the `-f json` option as shown below:

    $ openstack cluster policy type show -f json senlin.policy.deletion-1.0

For information on how to manage the relationship between a policy and a cluster, please refer to Cluster-Policy Bindings.

## See Also

Check the list below for documents related to the creation and usage of Policy objects.

- Creating Your Own Policy Objects

- Managing the Binding between Cluster and Policy

- Examining Actions

- Browsing Events

updated: 2020-10-17 18:54

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.

questions?