Implement Senlin resources

https://blueprints.launchpad.net/heat/+spec/senlin-resources

This Blueprint proposes to add support for Senlin resources.

Problem description

Senlin is a generic clustering service that is currently not supported by Heat. Resources will be added to Heat to support:

  • Cluster - A cluster can manage a collection of nodes.

  • Profile - Senlin supports object creation, deletion and update via a concept called Profile. Each profile is in essential a driver to communicate with certain services for object manipulation.

  • Node - A node is an object that belongs to at most one Cluster.

  • Policy - A policy is a set of rules that can be checked and/or enforced when an Action is performed on a Cluster.

  • Receiver - A receiver is an abstract resource created at the senlin engine that can be used to hook the engine to some external event/alarm sources.

Proposed change

Senlin client plugin and Senlin resources will be added to heat.

1. Cluster

Description: Cluster resource in senlin can create and manage objects of the same nature, e.g. Nova servers, Heat stacks, Cinder volumes, etc. The collection of these objects is referred to as a cluster.

Namespace: OS::Senlin::Cluster

Required Properties:

profile:

The name or id of the Senlin profile. String Value. Will apply custom constraint ‘senlin.profile’ on it. Update allowed.

Optional Properties:

name:

The name of the Senlin’s cluster. String Value. Update allowed.

min_size:

Minimum number of resources in the cluster. Integer Value. Update allowed.

max_size:

Maximum number of resources in the cluster. Integer Value. Update allowed.

desired_capacity:

Desired initial number of resources in cluster. Integer Value. Update allowed.

metadata:

Metadata key-values defined for cluster. Map Value. Update allowed.

timeout:

The number of seconds to wait for the cluster actions. Integer Value. Update allowed.

2. Profile

Description: Profile resource in senlin is a template describing how to create nodes in cluster.

Namespace: OS::Senlin::Profile

Required Properties:

type:

The type of Senlin Profile. String Value. Custom constraint ‘senlin.profile_type’.

Optional Properties:

name:

The name of the Senlin profile. String Value. Update allowed.

metadata:

Metadata key-values defined for profile. Map Value. Update allowed.

properties:

Properties of Senlin profile. Map value.

3. Policy

Description: Policy is a set of rules that can be checked and/or enforced when an Action is performed on a Cluster. A policy resource can be attached to multiple clusters.

Namespace: OS::Senlin::Policy

Required Properties:

type:

The type of senlin policy. String Value. Custom Constraint ‘senlin.policy_type’.

Optional Properties:

name:

The name of the Senlin policy. String Value. Update allowed.

description:

The description of the Senlin policy. String Value.

properties:

The properties of the Senlin policy. Map Value.

bindings:

The clusters this policy attach to. List value, [{cluster: String, enabled: Boolean}] Update allowed.

4. Node

Description: Node is an object that belongs to at most one Cluster, it can be created based on a profile.

Namespace: OS::Senlin::Node

Required Properties:

profile:

The name or id of senlin profile for this node. String Value. Constraint with ‘senlin.profile’. Update allowed.

Optional Properties:

cluster:

The name or id of senlin cluster this node will attach to. String Value. Constraint with ‘senlin.cluster’.

metadata:

Metadata for this node. Map Value. Update allowed.

name:

The name of this node. String Value. Update allowed.

5. Receiver

Description: Receiver is an abstract resource created at the senlin engine that can be used to hook the engine to some external event/alarm sources.

Namespace: OS::Senlin::Receiver

Required Properties:

cluster:

The name or id of senlin cluster to attach to. String Value. Constraint with ‘senlin.cluster’.

action:

The action to be executed when receive a signal. String Value. Allowed values are [CLUSTER_SCALE_OUT, CLUSTER_SCALE_IN]

Optional Properties:

type:

The type of receiver. String Value. Default value is ‘webhook’. Allowed values are [‘webhook’].

name:

Name of this receiver. String Value.

params:

The parameters passed to action when receive a signal. Map Value.

Attributes:

actor:

A trusts id will include in actor. Map value.

channel:

A ‘alarm_url’ will include in channel. Map Value.

Alternatives

None

Implementation

Assignee(s)

Primary assignee:

Ethan Lynn <xjunlin@cn.ibm.com>

Milestones

Target Milestone for completion:

Mikata-3

Work Items

  • Add Senlin client plugin for Heat

  • Add OS::Senlin::Cluster resource

  • Add OS::Senlin::Profile resource

  • Add OS::Senlin::Policy resource

  • Add OS::Senlin::Node resource

  • Add OS::Senlin::Receiver resource

  • Add example templates to heat-templates

Dependencies

None