From 0a686020a9ce2a5f9257cb253fd9b2e556d229ab Mon Sep 17 00:00:00 2001 From: Niv Oppenhaim Date: Thu, 4 Jan 2018 15:17:25 +0000 Subject: [PATCH] Order output, add docs, add support for 'all_tenants' flag Implements: blueprint configurable-notifications Change-Id: Idcfa76012370e29eae94a29b4be268f3d0373c00 --- doc/source/contributor/cli.rst | 63 +++++++++++++++++++++++++++++++++ vitrageclient/v1/cli/webhook.py | 32 +++++++++++------ vitrageclient/v1/webhook.py | 5 +-- 3 files changed, 88 insertions(+), 12 deletions(-) diff --git a/doc/source/contributor/cli.rst b/doc/source/contributor/cli.rst index a97e33d..d153d51 100644 --- a/doc/source/contributor/cli.rst +++ b/doc/source/contributor/cli.rst @@ -171,6 +171,10 @@ You'll find complete documentation on the shell by running template show Template show template validate topology show Show the topology of the system + webhook add Add a new webhook to DB + webhook delete Delete a webhook + webhook list List all webhooks in DB + webhook show Show a webhook Bash Completion --------------- @@ -824,6 +828,65 @@ To remove the created host alarm, field ``status`` should be ``up``:: vitrage event post --type 'just.another.alarm.name' --details '{"hostname": "compute-0-0","source": "sample_monitor","cause": "another alarm","severity": "critical","status":"up","monitor_id": "sample monitor","monitor_event_id": "456"}' + +Webhook Example +--------------- +Note: To see complete usage: 'vitrage help' and 'vitrage help ' + +webhook list:: + + vitrage webhook list + + +--------------------------------------+----------------------------+----------------------------------+---------------------------+--------------------------------------+------------------------+ + | ID | Created At | Project ID | URL | Headers | Filter | + +--------------------------------------+----------------------------+----------------------------------+---------------------------+--------------------------------------+------------------------+ + | 1e35dddf-ab0b-46ec-b0cc-0cf48129fc43 | 2018-01-10T14:27:09.000000 | dbec2ffbf3844eaa9d3c75dabf5777d8 | https://www.myurl.com | {'content-type': 'application/json'} | {'vitrage_type': '.*'} | + | bdc9edfa-d18c-4a18-9e03-2beb51402be0 | 2018-01-10T14:29:04.000000 | dbec2ffbf3844eaa9d3c75dabf5777d8 | https://hookb.in/Z1dxPre8 | | | + +--------------------------------------+----------------------------+----------------------------------+---------------------------+--------------------------------------+------------------------+ + + +webhook show:: + + vitrage webhook show c35caf11-f34d-440e-a804-0c1a4fdfb95b + + +--------------+--------------------------------------+ + | Field | Value | + +--------------+--------------------------------------+ + | created_at | 2018-01-04T12:27:47.000000 | + | headers | None | + | id | c35caf11-f34d-440e-a804-0c1a4fdfb95b | + | regex_filter | {'name':'e2e.*'} | + | updated_at | None | + | url | https://requestb.in/tq3fkvtq | + +--------------+--------------------------------------+ + +webhook delete:: + + vitrage webhook delete c35caf11-f34d-440e-a804-0c1a4fdfb95b + + +---------+------------------------------------------------------+ + | Field | Value | + +---------+------------------------------------------------------+ + | SUCCESS | Webhook c35caf11-f34d-440e-a804-0c1a4fdfb95b deleted | + +---------+------------------------------------------------------+ + + +webhook add:: + + vitrage webhook add --url https://www.myurl.com --headers + "{'content-type': 'application/json'}" --regex_filter "{'vitrage_type':'.*'}" + + +--------------+--------------------------------------+ + | Field | Value | + +--------------+--------------------------------------+ + | created_at | 2018-01-04 14:32:23.489253 | + | headers | {'content-type': 'application/json'} | + | id | 2bd3ba88-f1fc-4917-bb69-bf0d1ff02d35 | + | regex_filter | {'vitrage_type': '.*'} | + | url | https://www.myurl.com | + +--------------+--------------------------------------+ + + Python API ---------- diff --git a/vitrageclient/v1/cli/webhook.py b/vitrageclient/v1/cli/webhook.py index d2186b7..238d5da 100644 --- a/vitrageclient/v1/cli/webhook.py +++ b/vitrageclient/v1/cli/webhook.py @@ -18,7 +18,7 @@ from vitrageclient.common import utils # noinspection PyAbstractClass class WebhookShow(show.ShowOne): - """Show a webhook destination with "id" """ + """Show a webhook """ def get_parser(self, prog_name): parser = super(WebhookShow, self).get_parser(prog_name) @@ -27,29 +27,41 @@ class WebhookShow(show.ShowOne): def take_action(self, parsed_args): id = parsed_args.id - post_registration = utils.get_client(self).webhook.show(id=id) - return self.dict2columns(post_registration) + webhook = utils.get_client(self).webhook.show(id=id) + return self.dict2columns(webhook) class WebhookList(lister.Lister): - """List all webhook destinations in DB""" + """List all webhooks in DB""" POST_PROPS = \ - ('created_at', 'id', 'url', 'headers', 'regex_filter') + ( + ('ID', 'id'), + ('Created At', 'created_at'), + ('Project ID', 'project_id'), + ('URL', 'url'), + ('Headers', 'headers'), + ('Filter', 'regex_filter') + ) def get_parser(self, prog_name): parser = super(WebhookList, self).get_parser(prog_name) - + parser.add_argument('--all-tenants', + default=False, + dest='all_tenants', + action='store_true', + help='Shows webhooks of all the tenants') return parser def take_action(self, parsed_args): - post_registrations = utils.get_client(self).webhook.list() + all_tenants = parsed_args.all_tenants + webhooks = utils.get_client(self).webhook.list(all_tenants=all_tenants) - return utils.list2cols(self.POST_PROPS, post_registrations) + return utils.list2cols_with_rename(self.POST_PROPS, webhooks) class WebhookAdd(show.ShowOne): - """Add a new webhook registration to DB""" + """Add a new webhook to DB""" def get_parser(self, prog_name): parser = super(WebhookAdd, self).get_parser(prog_name) parser.add_argument('--url', @@ -78,7 +90,7 @@ class WebhookAdd(show.ShowOne): class WebhookDelete(show.ShowOne): - """Delete a webhook destination with "id" """ + """Delete a webhook """ def get_parser(self, prog_name): parser = super(WebhookDelete, self).get_parser(prog_name) diff --git a/vitrageclient/v1/webhook.py b/vitrageclient/v1/webhook.py index 48d115c..2c185dd 100644 --- a/vitrageclient/v1/webhook.py +++ b/vitrageclient/v1/webhook.py @@ -20,9 +20,10 @@ class Webhook(object): def __init__(self, api): self.api = api - def list(self): + def list(self, all_tenants=False): """Get webhook list""" - return self.api.get(self.url).json() + params = dict(all_tenants=all_tenants) + return self.api.get(self.url, params=params).json() def show(self, id): """Show specific webhook