mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Add runner for PagerDuty
This commit is contained in:
parent
26e76250a6
commit
0f06c64562
1 changed files with 173 additions and 0 deletions
173
salt/runners/pagerduty.py
Normal file
173
salt/runners/pagerduty.py
Normal file
|
@ -0,0 +1,173 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
'''
|
||||
Module for Firing Events via PagerDuty
|
||||
|
||||
.. versionadded:: 2014.1.0
|
||||
|
||||
:configuration: This module can be used by specifying the name of a
|
||||
configuration profile in the minion config, minion pillar, or master
|
||||
config.
|
||||
|
||||
For example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
my-pagerduty-account:
|
||||
pagerduty.api_key: F3Rbyjbve43rfFWf2214
|
||||
pagerduty.subdomain: mysubdomain
|
||||
'''
|
||||
from __future__ import absolute_import
|
||||
|
||||
# Import python libs
|
||||
import yaml
|
||||
import json
|
||||
|
||||
# Import salt libs
|
||||
import salt.utils.pagerduty
|
||||
from salt.ext.six import string_types
|
||||
|
||||
|
||||
def __virtual__():
|
||||
'''
|
||||
No dependencies outside of what Salt itself requires
|
||||
'''
|
||||
return True
|
||||
|
||||
|
||||
def list_services(profile=None, api_key=None):
|
||||
'''
|
||||
List services belonging to this account
|
||||
|
||||
CLI Example:
|
||||
|
||||
salt-run pagerduty.list_services my-pagerduty-account
|
||||
'''
|
||||
return salt.utils.pagerduty.list_items(
|
||||
'services', 'name', profile, api_key, opts=__opts__
|
||||
)
|
||||
|
||||
|
||||
def list_incidents(profile=None, api_key=None):
|
||||
'''
|
||||
List incidents belonging to this account
|
||||
|
||||
CLI Example:
|
||||
|
||||
salt-run pagerduty.list_incidents my-pagerduty-account
|
||||
'''
|
||||
return salt.utils.pagerduty.list_items(
|
||||
'incidents', 'id', profile, api_key, opts=__opts__
|
||||
)
|
||||
|
||||
|
||||
def list_users(profile=None, api_key=None):
|
||||
'''
|
||||
List users belonging to this account
|
||||
|
||||
CLI Example:
|
||||
|
||||
salt-run pagerduty.list_users my-pagerduty-account
|
||||
'''
|
||||
return salt.utils.pagerduty.list_items(
|
||||
'users', 'id', profile, api_key, opts=__opts__
|
||||
)
|
||||
|
||||
|
||||
def list_schedules(profile=None, api_key=None):
|
||||
'''
|
||||
List schedules belonging to this account
|
||||
|
||||
CLI Example:
|
||||
|
||||
salt-run pagerduty.list_schedules my-pagerduty-account
|
||||
'''
|
||||
return salt.utils.pagerduty.list_items(
|
||||
'schedules', 'id', profile, api_key, opts=__opts__
|
||||
)
|
||||
|
||||
|
||||
def list_windows(profile=None, api_key=None):
|
||||
'''
|
||||
List maintenance windows belonging to this account
|
||||
|
||||
CLI Example:
|
||||
|
||||
salt-run pagerduty.list_windows my-pagerduty-account
|
||||
salt-run pagerduty.list_maintenance_windows my-pagerduty-account
|
||||
'''
|
||||
return salt.utils.pagerduty.list_items(
|
||||
'maintenance_windows', 'id', profile, api_key, opts=__opts__
|
||||
)
|
||||
|
||||
|
||||
# The long version, added for consistency
|
||||
list_maintenance_windows = list_windows
|
||||
|
||||
|
||||
def list_policies(profile=None, api_key=None):
|
||||
'''
|
||||
List escalation policies belonging to this account
|
||||
|
||||
CLI Example:
|
||||
|
||||
salt-run pagerduty.list_policies my-pagerduty-account
|
||||
salt-run pagerduty.list_escalation_policies my-pagerduty-account
|
||||
'''
|
||||
return salt.utils.pagerduty.list_items(
|
||||
'escalation_policies', 'id', profile, api_key, opts=__opts__
|
||||
)
|
||||
|
||||
|
||||
# The long version, added for consistency
|
||||
list_escalation_policies = list_policies
|
||||
|
||||
|
||||
def create_event(service_key=None, description=None, details=None,
|
||||
incident_key=None, profile=None):
|
||||
'''
|
||||
Create an event in PagerDuty. Designed for use in states.
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
||||
salt-run pagerduty.create_event <service_key> <description> <details> \
|
||||
profile=my-pagerduty-account
|
||||
|
||||
The following parameters are required:
|
||||
|
||||
service_key
|
||||
This key can be found by using pagerduty.list_services.
|
||||
|
||||
description
|
||||
This is a short description of the event.
|
||||
|
||||
details
|
||||
This can be a more detailed description of the event.
|
||||
|
||||
profile
|
||||
This refers to the configuration profile to use to connect to the
|
||||
PagerDuty service.
|
||||
'''
|
||||
trigger_url = 'https://events.pagerduty.com/generic/2010-04-15/create_event.json'
|
||||
|
||||
if isinstance(details, string_types):
|
||||
details = yaml.safe_load(details)
|
||||
if isinstance(details, string_types):
|
||||
details = {'details': details}
|
||||
|
||||
ret = json.loads(salt.utils.pagerduty.query(
|
||||
method='POST',
|
||||
profile=profile,
|
||||
api_key=service_key,
|
||||
data={
|
||||
'service_key': service_key,
|
||||
'incident_key': incident_key,
|
||||
'event_type': 'trigger',
|
||||
'description': description,
|
||||
'details': details,
|
||||
},
|
||||
url=trigger_url,
|
||||
opts=__opts__
|
||||
))
|
||||
return ret
|
Loading…
Add table
Reference in a new issue