Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
6069d5d4
Commit
6069d5d4
authored
May 01, 2014
by
James Cammarata
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'stackdriver' of
https://github.com/bwhaley/ansible
into bwhaley-stackdriver
parents
40a7a306
1c996085
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
197 additions
and
0 deletions
+197
-0
library/notification/stackdriver
+197
-0
No files found.
library/notification/stackdriver
0 → 100644
View file @
6069d5d4
#!/usr/bin/python
# -*- coding: utf-8 -*-
DOCUMENTATION
=
'''
module: stackdriver
short_description: Send code deploy and annotation events to stackdriver
description:
- Send code deploy and annotation events to Stackdriver
version_added: "1.6"
author: Ben Whaley
options:
key:
description:
- API key.
required: true
default: null
event:
description:
- The type of event to send, either annotation or deploy
choices: ['annotation', 'deploy']
required: false
default: null
revision_id:
description:
- The revision of the code that was deployed. Required for deploy events
required: false
default: null
deployed_by:
description:
- The person or robot responsible for deploying the code
required: false
default: "Ansible"
deployed_to:
description:
- The environment code was deployed to. (ie: development, staging, production)
required: false
default: null
repository:
description:
- The repository (or project) deployed
required: false
default: null
msg:
description:
- The contents of the annotation message, in plain text. Limited to 256 characters. Required for annotation.
required: false
default: null
annotated_by:
description:
- The person or robot who the annotation should be attributed to.
required: false
default: "Ansible"
level:
description:
- one of INFO/WARN/ERROR, defaults to INFO if not supplied. May affect display.
choices: ['INFO', 'WARN', 'ERROR']
required: false
default: 'INFO'
instance_id:
description:
- id of an EC2 instance that this event should be attached to, which will limit the contexts where this event is shown
required: false
default: null
event_epoch:
description:
- "Unix timestamp of where the event should appear in the timeline, defaults to now. Be careful with this."
required: false
default: null
'''
EXAMPLES
=
'''
- stackdriver: key=AAAAAA event=deploy deployed_to=production deployed_by=leeroyjenkins repository=MyWebApp revision_id=abcd123
- stackdriver: key=AAAAAA event=annotation msg="Greetings from Ansible" annotated_by=leeroyjenkins level=WARN instance_id=i-abcd1234
'''
# ===========================================
# Stackdriver module specific support methods.
#
try
:
import
urllib
,
urllib2
,
json
except
ImportError
:
module
.
fail_json
(
msg
=
"json, urllib, and urllib2 are required"
)
def
send_deploy_event
(
module
,
key
,
revision_id
,
deployed_by
=
'Ansible'
,
deployed_to
=
None
,
repository
=
None
):
"""Send a deploy event to Stackdriver"""
deploy_api
=
"https://event-gateway.stackdriver.com/v1/deployevent"
params
=
{}
params
[
'revision_id'
]
=
revision_id
params
[
'deployed_by'
]
=
deployed_by
if
deployed_to
:
params
[
'deployed_to'
]
=
deployed_to
if
repository
:
params
[
'repository'
]
=
repository
return
do_send_request
(
module
,
deploy_api
,
params
,
key
)
def
send_annotation_event
(
module
,
key
,
msg
,
annotated_by
=
'Ansible'
,
level
=
None
,
instance_id
=
None
,
event_epoch
=
None
):
"""Send an annotation event to Stackdriver"""
annotation_api
=
"https://event-gateway.stackdriver.com/v1/annotationevent"
params
=
{}
params
[
'message'
]
=
msg
if
annotated_by
:
params
[
'annotated_by'
]
=
annotated_by
if
level
:
params
[
'level'
]
=
level
if
instance_id
:
params
[
'instance_id'
]
=
instance_id
if
event_epoch
:
params
[
'event_epoch'
]
=
event_epoch
return
do_send_request
(
module
,
annotation_api
,
params
,
key
)
def
do_send_request
(
module
,
url
,
params
,
key
):
data
=
json
.
dumps
(
params
)
headers
=
{
'Content-Type'
:
'application/json'
,
'x-stackdriver-apikey'
:
key
}
response
,
info
=
fetch_url
(
module
,
url
,
headers
=
headers
,
data
=
data
,
method
=
'POST'
)
if
info
[
'status'
]
!=
200
:
module
.
fail_json
(
msg
=
"Unable to send msg:
%
s"
%
info
[
'msg'
])
# ===========================================
# Module execution.
#
def
main
():
module
=
AnsibleModule
(
argument_spec
=
dict
(
key
=
dict
(
required
=
True
),
event
=
dict
(
required
=
True
,
choices
=
[
'deploy'
,
'annotation'
]),
msg
=
dict
(),
revision_id
=
dict
(),
annotated_by
=
dict
(
default
=
'Ansible'
),
level
=
dict
(
default
=
'INFO'
,
choices
=
[
'INFO'
,
'WARN'
,
'ERROR'
]),
instance_id
=
dict
(),
event_epoch
=
dict
(),
deployed_by
=
dict
(
default
=
'Ansible'
),
deployed_to
=
dict
(),
repository
=
dict
(),
),
supports_check_mode
=
True
)
key
=
module
.
params
[
"key"
]
event
=
module
.
params
[
"event"
]
# Annotation params
msg
=
module
.
params
[
"msg"
]
annotated_by
=
module
.
params
[
"annotated_by"
]
level
=
module
.
params
[
"level"
]
instance_id
=
module
.
params
[
"instance_id"
]
event_epoch
=
module
.
params
[
"event_epoch"
]
# Deploy params
revision_id
=
module
.
params
[
"revision_id"
]
deployed_by
=
module
.
params
[
"deployed_by"
]
deployed_to
=
module
.
params
[
"deployed_to"
]
repository
=
module
.
params
[
"repository"
]
##################################################################
# deploy requires revision_id
# annotation requires msg
# We verify these manually
##################################################################
if
event
==
'deploy'
:
if
not
revision_id
:
module
.
fail_json
(
msg
=
"revision_id required for deploy events"
)
try
:
send_deploy_event
(
module
,
key
,
revision_id
,
deployed_by
,
deployed_to
,
repository
)
except
Exception
,
e
:
module
.
fail_json
(
msg
=
"unable to sent deploy event:
%
s"
%
e
)
if
event
==
'annotation'
:
if
not
msg
:
module
.
fail_json
(
msg
=
"msg required for annotation events"
)
try
:
send_annotation_event
(
module
,
key
,
msg
,
annotated_by
,
level
,
instance_id
,
event_epoch
)
except
Exception
,
e
:
module
.
fail_json
(
msg
=
"unable to sent annotation event:
%
s"
%
e
)
changed
=
True
module
.
exit_json
(
changed
=
changed
,
deployed_by
=
deployed_by
)
# import module snippets
from
ansible.module_utils.basic
import
*
from
ansible.module_utils.urls
import
*
main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment