Managing Policies

A policy type can be treated as the meta-type of a Policy object. A registry of policy types is built when the Cluster service starts. When creating a Policy object, you will indicate the policy type used in its spec property.

List Policies

To examine the list of policies:

def list_policies(conn):
    print("List Policies:")

    for policy in conn.clustering.policies():
        print(policy.to_dict())

    for policy in conn.clustering.policies(sort='name:asc'):
        print(policy.to_dict())

When listing policies, you can specify the sorting option using the sort parameter and you can do pagination using the limit and marker parameters.

Full example: manage policy

Create Policy

When creating a policy, you will provide a dictionary with keys and values according to the policy type referenced.

def create_policy(conn):
    print("Create Policy:")
    attrs = {
        'name': 'dp01',
        'spec': {
            'policy': 'senlin.policy.deletion',
            'version': 1.0,
            'properties': {
                'criteria': 'oldest_first',
                'destroy_after_deletion': True,
            },
        },
    }

    policy = conn.clustering.create_policy(attrs)
    print(policy.to_dict())

Optionally, you can specify a metadata keyword argument that contains some key-value pairs to be associated with the policy.

Full example: manage policy

Find Policy

To find a policy based on its name or ID:

def find_policy(conn):
    print("Find Policy:")

    policy = conn.clustering.find_policy('dp01')
    print(policy.to_dict())

Full example: manage policy

Get Policy

To get a policy based on its name or ID:

def get_policy(conn):
    print("Get Policy:")

    policy = conn.clustering.get_policy('dp01')
    print(policy.to_dict())

Full example: manage policy

Update Policy

After a policy is created, most of its properties are immutable. Still, you can update a policy’s name and/or metadata.

def update_policy(conn):
    print("Update Policy:")

    policy = conn.clustering.update_policy('dp01', name='dp02')
    print(policy.to_dict())

The Cluster service doesn’t allow updating the spec of a policy. The only way to achieve that is to create a new policy.

Full example: manage policy

Delete Policy

A policy can be deleted after creation, provided that it is not referenced by any active clusters or nodes. If you attempt to delete a policy that is still in use, you will get an error message.

def delete_policy(conn):
    print("Delete Policy:")

    conn.clustering.delete_policy('dp01')

    print("Policy deleted.")