Notification create working
This commit is contained in:
parent
155129d30a
commit
63f12b20c4
@ -1,6 +1,6 @@
|
|||||||
Python bindings to the Monitoring API
|
Python bindings to the Monitoring API
|
||||||
=============================================
|
=============================================
|
||||||
|
|
||||||
This is a client library for Monitoring built on the Heat orchestration API. It
|
This is a client library for Monitoring built to interface to the Monitoring API. It
|
||||||
provides a Python API (the ``monclient`` module) and a command-line tool
|
provides a Python API (the ``monclient`` module) and a command-line tool
|
||||||
(``mon``).
|
(``mon``).
|
||||||
|
@ -51,7 +51,7 @@ class MonShell(object):
|
|||||||
|
|
||||||
parser.add_argument('--runlocal',
|
parser.add_argument('--runlocal',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help=argparse.SUPPRESS)
|
help='test with a local mon-api (no keystone)')
|
||||||
|
|
||||||
parser.add_argument('--version',
|
parser.add_argument('--version',
|
||||||
action='version',
|
action='version',
|
||||||
|
@ -164,12 +164,12 @@ class ShellTestMonCommands(ShellBase):
|
|||||||
'metrics-create --value 123',
|
'metrics-create --value 123',
|
||||||
'metrics-create',
|
'metrics-create',
|
||||||
]
|
]
|
||||||
|
_shell = monclient.shell.MonShell()
|
||||||
for argstr in argstrings:
|
for argstr in argstrings:
|
||||||
self.assertRaises(Exception, monclient.shell, argstr.split())
|
self.assertRaises(SystemExit, _shell.main, argstr.split())
|
||||||
|
|
||||||
def test_good_metrics_create_subcommand(self):
|
def test_good_metrics_create_subcommand(self):
|
||||||
self._script_keystone_client()
|
self._script_keystone_client()
|
||||||
# fakes.script_metrics_create()
|
|
||||||
|
|
||||||
resp = fakes.FakeHTTPResponse(
|
resp = fakes.FakeHTTPResponse(
|
||||||
204,
|
204,
|
||||||
@ -194,3 +194,47 @@ class ShellTestMonCommands(ShellBase):
|
|||||||
for argstr in argstrings:
|
for argstr in argstrings:
|
||||||
retvalue = self.shell(argstr)
|
retvalue = self.shell(argstr)
|
||||||
self.assertRegexpMatches(retvalue, "^Success")
|
self.assertRegexpMatches(retvalue, "^Success")
|
||||||
|
|
||||||
|
def test_bad_notifications_create_missing_args_subcommand(self):
|
||||||
|
argstrings = [
|
||||||
|
'notifications-create --name email1 --address cindy.o-neill@hp.com',
|
||||||
|
]
|
||||||
|
_shell = monclient.shell.MonShell()
|
||||||
|
for argstr in argstrings:
|
||||||
|
self.assertRaises(SystemExit, _shell.main, argstr.split())
|
||||||
|
|
||||||
|
def test_bad_notifications_create_type_subcommand(self):
|
||||||
|
self._script_keystone_client()
|
||||||
|
argstrings = [
|
||||||
|
'notifications-create --name email1 --type DOG --address cindy.o-neill@hp.com',
|
||||||
|
]
|
||||||
|
self.m.ReplayAll()
|
||||||
|
for argstr in argstrings:
|
||||||
|
retvalue = self.shell(argstr)
|
||||||
|
self.assertRegexpMatches(retvalue, "^Invalid type")
|
||||||
|
|
||||||
|
def test_good_notifications_create_subcommand(self):
|
||||||
|
self._script_keystone_client()
|
||||||
|
|
||||||
|
resp = fakes.FakeHTTPResponse(
|
||||||
|
201,
|
||||||
|
'Created',
|
||||||
|
{'location': 'http://no.where/v2.0/notification-methods'},
|
||||||
|
None)
|
||||||
|
http.HTTPClient.json_request(
|
||||||
|
'POST',
|
||||||
|
'/notification-methods',
|
||||||
|
data={'name': 'email1',
|
||||||
|
'type': 'EMAIL',
|
||||||
|
'address': 'john.doe@hp.com'},
|
||||||
|
headers={'X-Auth-Key': 'password',
|
||||||
|
'X-Auth-User': 'username'}).AndReturn((resp, 'id'))
|
||||||
|
|
||||||
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
argstrings = [
|
||||||
|
'notifications-create --name email1 --type EMAIL --address john.doe@hp.com',
|
||||||
|
]
|
||||||
|
for argstr in argstrings:
|
||||||
|
retvalue = self.shell(argstr)
|
||||||
|
self.assertRegexpMatches(retvalue, "id")
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
from monclient.common import http
|
from monclient.common import http
|
||||||
from monclient.v2_0 import metrics
|
from monclient.v2_0 import metrics
|
||||||
|
from monclient.v2_0 import notifications
|
||||||
|
|
||||||
|
|
||||||
class Client(object):
|
class Client(object):
|
||||||
@ -32,3 +33,5 @@ class Client(object):
|
|||||||
"""Initialize a new http client for the mon API."""
|
"""Initialize a new http client for the mon API."""
|
||||||
self.http_client = http.HTTPClient(*args, **kwargs)
|
self.http_client = http.HTTPClient(*args, **kwargs)
|
||||||
self.metrics = metrics.MetricsManager(self.http_client)
|
self.metrics = metrics.MetricsManager(self.http_client)
|
||||||
|
self.notifications = notifications.NotificationsManager(
|
||||||
|
self.http_client)
|
||||||
|
@ -32,5 +32,4 @@ class MetricsManager(base.BaseManager):
|
|||||||
headers['X-Tenant-Id'] = '1'
|
headers['X-Tenant-Id'] = '1'
|
||||||
resp, body = self.client.json_request('POST', '/metrics',
|
resp, body = self.client.json_request('POST', '/metrics',
|
||||||
data=kwargs, headers=headers)
|
data=kwargs, headers=headers)
|
||||||
# return body
|
return body
|
||||||
return resp
|
|
||||||
|
25
monclient/v2_0/notifications.py
Normal file
25
monclient/v2_0/notifications.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
'''
|
||||||
|
Created on Mar 25, 2014
|
||||||
|
|
||||||
|
'''
|
||||||
|
from monclient.openstack.common.apiclient import base
|
||||||
|
|
||||||
|
|
||||||
|
class Notifications(base.Resource):
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return "<Notifications %s>" % self._info
|
||||||
|
|
||||||
|
|
||||||
|
class NotificationsManager(base.BaseManager):
|
||||||
|
resource_class = Notifications
|
||||||
|
|
||||||
|
def create(self, runlocal=False, **kwargs):
|
||||||
|
"""Create a notification."""
|
||||||
|
headers = self.client.credentials_headers()
|
||||||
|
if runlocal:
|
||||||
|
# temp header, used when running locally.
|
||||||
|
headers['X-Tenant-Id'] = '1'
|
||||||
|
resp, body = self.client.json_request('POST', '/notification-methods',
|
||||||
|
data=kwargs, headers=headers)
|
||||||
|
return body
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
from monclient.common import utils
|
from monclient.common import utils
|
||||||
import monclient.exc as exc
|
import monclient.exc as exc
|
||||||
|
from monclient.openstack.common import jsonutils
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
@ -55,3 +56,40 @@ def do_metrics_create(mc, args):
|
|||||||
raise
|
raise
|
||||||
else:
|
else:
|
||||||
print('Successfully created metric')
|
print('Successfully created metric')
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('--name', metavar='<NOTIFICATION_NAME>',
|
||||||
|
help='Name of the notification to create.', required=True)
|
||||||
|
@utils.arg('--type', metavar='<EMAIL | SMS>',
|
||||||
|
help='The notification type. Types is one of [EMAIL, SMS].',
|
||||||
|
required=True)
|
||||||
|
@utils.arg('--address', metavar='<ADDRESS>',
|
||||||
|
help='Depending on the type, a valid EMAIL or SMS Address',
|
||||||
|
required=True)
|
||||||
|
def do_notifications_create(mc, args):
|
||||||
|
'''Create notification.'''
|
||||||
|
notification_types = ['EMAIL', 'SMS']
|
||||||
|
if args.type not in notification_types:
|
||||||
|
errmsg = 'Invalid type, not one of [' + \
|
||||||
|
', '.join(notification_types) + ']'
|
||||||
|
print(errmsg)
|
||||||
|
return
|
||||||
|
fields = {}
|
||||||
|
fields['name'] = args.name
|
||||||
|
fields['type'] = args.type
|
||||||
|
fields['address'] = args.address
|
||||||
|
try:
|
||||||
|
notification = mc.notifications.create(args.runlocal, **fields)
|
||||||
|
except exc.HTTPInternalServerError as e1:
|
||||||
|
raise exc.CommandError('HTTPInternalServerError %s' % e1.code)
|
||||||
|
except exc.BadRequest as e2:
|
||||||
|
raise exc.CommandError('BadRequest %s' % e2.code)
|
||||||
|
except exc.Unauthorized as e3:
|
||||||
|
raise exc.CommandError('Unauthorized %s' % e3.code)
|
||||||
|
except exc.HTTPConflict as e4:
|
||||||
|
raise exc.CommandError('Conflict %s' % e4.code)
|
||||||
|
except Exception:
|
||||||
|
print('Command Failed. Please use the -d option for more details.')
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
print(jsonutils.dumps(notification, indent=2))
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
# Hacking already pins down pep8, pyflakes and flake8
|
# Hacking already pins down pep8, pyflakes and flake8
|
||||||
|
tox>=1.6,<1.7
|
||||||
hacking>=0.8.0,<0.9
|
hacking>=0.8.0,<0.9
|
||||||
coverage>=3.6
|
coverage>=3.6
|
||||||
discover
|
discover
|
||||||
|
Loading…
Reference in New Issue
Block a user