Policy Types

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.

Creative Commons Attribution 3.0 License

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