A Receiver is used to prepare Senlin engine to react to external alarms or events so that a specific Action can be initiated on a senlin cluster automatically. For example, when workload on a cluster climbs high, a receiver can change the size of a specified cluster.
The openstack cluster command line provides a sub-command receiver list that can be used to enumerate receiver objects known to the service. For example:
$ openstack cluster receiver list
You can specify the sorting keys and sorting direction when list receivers,
using the option --sort
. The --sort
option accepts a
string of format key1[:dir1],key2[:dir2],key3[:dir3]
, where the keys used
are receiver properties and the dirs can be one of asc
and desc
. When
omitted, Senlin sorts a given key using asc
as the default direction.
For example, the following command sorts the receivers using the name
property in descending order:
$ openstack cluster receiver list --sort name:desc
When sorting the list of receivers, you can use one of type
, name
,
action
, cluster_id
, created_at
.
In case you have a huge collection of receiver objects, you can limit the
number of receivers returned from Senlin server, using the option
--limit
. For example:
$ openstack cluster receiver list --limit 1
Yet another option you can specify is the ID of a receiver object after which
you want to see the list starts. In other words, you don’t want to see those
receivers with IDs that is or come before the one you specify. You can use the
option --marker
for this purpose. For example:
$ openstack cluster receiver list \
--limit 1 --marker 239d7212-6196-4a89-9446-44d28717d7de
Combining the --marker
option and the --limit
option
enables you to do pagination on the results returned from the server.
Currently, we support two receiver types: webhook
and message
. For
the former one, a permanent webhook url is generated for users to trigger
a specific action on a given cluster by sending a HTTP POST request. For the
latter one, a Zaqar message queue is created for users to post a message.
Such a message is used to notify the Senlin service to start an action on a
specific cluster.
Create a cluster named “test-cluster
”, with its desired capacity set to
2, its minimum size set to 1 and its maximum size set to 5, e.g.:
$ senlin cluster-create --profile $PROFILE_ID \
--desired-capacity 2 --min-size 1 --max-size 5 \
test-cluster
Attach a ScalingPolicy to the cluster:
$ openstack cluster policy attach --policy $POLICY_ID test-cluster
Create a webhook receiver, use the option --cluster
to specify
“test-cluster
” as the targeted cluster and use the option
--action
to specify “CLUSTER_SCALE_OUT
” or
“CLUSTER_SCALE_IN
” as the action name. By default, the
openstack cluster receiver create command line creates a
receiver of type webhook. User can also explicitly specify the
receiver type using the option --type
, for example:
$ openstack cluster receiver create \
--cluster test-cluster \
--action CLUSTER_SCALE_OUT \
--type webhook \
test-receiver
Senlin service will return the receiver information with its channel ready
to receive signals. For a webhook receiver, this means you can check the
“alarm_url
” field of the “channel
” property. You can use this url
to trigger the action you specified.
Trigger the receiver by sending a POST
request to its URL, for example:
$ curl -X POST <alarm_url>
Different from a webhook receiver which can only be used to trigger a
specific action on a specific cluster, a message receiver is designed
to trigger different actions on different clusters. Therefore, option
--cluster
and option --action
could be omitted
when creating a message receiver. Users need to specify the receiver
type message
using the option --type
, for example:
$ openstack cluster receiver create \
--type message \
test-receiver
Senlin service will return the receiver information with its channel ready
to receive messages. For a message receiver, this means you can check the
“queue_name
” field of the “channel
” property and then send messages
with the following format to this Zaqar queue to request Senlin service:
{
"messages": [
{
"ttl": 300,
"body": {
"cluster_id": "test-cluster",
"action": "CLUSTER_SCALE_OUT",
"params": {"count": 2}
}
}
]
}
Examples for sending message to Zaqar queue can be found here:
Note: Users are allowed to trigger multiple actions at the same time by sending more than one message to a Zaqar queue in the same request. In that case, the order of actions generated depends on how Zaqar sorts those messages.
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.