"""
Runner 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 master config.
For example:
.. code-block:: yaml
my-pagerduty-account:
pagerduty.api_key: F3Rbyjbve43rfFWf2214
pagerduty.subdomain: mysubdomain
"""
import salt.utils.functools
import salt.utils.json
import salt.utils.yaml
from saltext.pagerduty.utils import pagerduty
[docs]
def __virtual__():
"""
No dependencies outside of what Salt itself requires
"""
return True
[docs]
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 pagerduty.list_items(
"services", "name", __salt__["config.option"](profile), api_key, opts=__opts__
)
[docs]
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 pagerduty.list_items(
"incidents", "id", __salt__["config.option"](profile), api_key, opts=__opts__
)
[docs]
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 pagerduty.list_items(
"users", "id", __salt__["config.option"](profile), api_key, opts=__opts__
)
[docs]
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 pagerduty.list_items(
"schedules", "id", __salt__["config.option"](profile), api_key, opts=__opts__
)
[docs]
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 pagerduty.list_items(
"maintenance_windows",
"id",
__salt__["config.option"](profile),
api_key,
opts=__opts__,
)
# The long version, added for consistency
list_maintenance_windows = salt.utils.functools.alias_function(
list_windows, "list_maintenance_windows"
)
[docs]
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 pagerduty.list_items(
"escalation_policies",
"id",
__salt__["config.option"](profile),
api_key,
opts=__opts__,
)
# The long version, added for consistency
list_escalation_policies = salt.utils.functools.alias_function(
list_policies, "list_escalation_policies"
)
[docs]
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, str):
details = salt.utils.yaml.safe_load(details)
if isinstance(details, str):
details = {"details": details}
ret = salt.utils.json.loads(
pagerduty.query(
method="POST",
profile_dict=__salt__["config.option"](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