Charlesbot Rundeck Plugin
A Charlesbot plugin that integrates with Rundeck!
How does this work
This plugin adds the following
!lock status - Prints the status of the Rundeck deployment lock !lock acquire - Acquires the Rundeck deployment lock (only available to Slack admins) !lock release - Releases the Rundeck deployment lock (only available to Slack admins)
!lock commands are designed to give folks the ability to quickly and
efficiently disable (or enable) individual Rundeck jobs. This is very useful
when troubleshooting a production issue where you don't want additional
deployments going out and adding fuel to the fire.
pip install charlesbot-rundeck
Instructions for how to run Charlesbot are over at https://www.charlesbot.org/docs/installation.html.
In your Charlesbot
config.yaml, enable this plugin by adding the following
entry to the
main: enabled_plugins: - 'charlesbot_rundeck.rundeck.Rundeck'
rundeck section that looks something similar to:
rundeck: token: 'XXXX' # Rundeck token url: 'http://my.rundeck.test:4440' # Rundeck base URL # If you would like to set this channel's topic to something relevant # whenever Rundeck jobs are locked, set this value. Otherwise you can omit # it completely. deployment_status_channel: 'charlesbot-rundeck-test-channel' # project: project name # name: job name # friendly_name: friendly display name lock_jobs: - project: 'test-project' name: 'deploy-website' friendly_name: 'deploy website' - project: 'test-project' name: 'deploy-app' friendly_name: 'deploy app'
Rundeck ACL Policy
Make sure you have a
apitoken.aclpolicy file that looks something like:
description: API project level access control context: project: '.*' # all projects for: # ... job: - allow: '*' # ... by: group: api_token_group
You essentially need to give the
api_token_group the ability to enable and
disable executions for all jobs in all projects (more details)
Rundeck 2.6.2 introduces the ability to enable or disable
programatically using the
system/executions endpoint. This endpoint
unfortunately did not work for this use-case because it disables all
Rundeck job executions. This plugin is more geared towards folks who would
rather disable individual job executions.
At a very minimum, you'll need Python 3.4.3, a functional Docker environment, and a Slack bot token to get going. I highly recommend you read the Charlesbot docs to get an idea of how this all fits together.
Create a local
development.yaml file that looks something like the following.
main: slackbot_token: 'xoxb-...' enabled_plugins: - 'charlesbot_rundeck.rundeck.Rundeck' rundeck: token: 'baiY8aw4Ieng0aQuoo' url: 'http://my.rundeck.test:4440' deployment_status_channel: 'charlesbot-rundeck-test-channel' lock_jobs: - project: 'test-project' name: 'deploy-website' friendly_name: 'deploy website' - project: 'test-project' name: 'deploy-app' friendly_name: 'deploy app'
Add the following entry to your
Start up a local Rundeck Docker instance.
After your Rundeck instance is up and running, seed it with some sample project/job data.
After you have all of this in place, you should be ready to spin up your local Charlesbot instance!
See the LICENSE.txt file for license rights and limitations (MIT).