diff --git a/datadog/dogshell/monitor.py b/datadog/dogshell/monitor.py index ddc207e5a..877e6cd06 100644 --- a/datadog/dogshell/monitor.py +++ b/datadog/dogshell/monitor.py @@ -36,6 +36,10 @@ def setup_parser(cls, subparsers): post_parser.add_argument( "--message", help="message to include with notifications" " for this monitor", default=None ) + post_parser.add_argument( + "--restricted_roles", help="comma-separated list of unique role identifiers allowed to edit the monitor", + default=None + ) post_parser.add_argument("--tags", help="comma-separated list of tags", default=None) post_parser.add_argument( "--priority", @@ -74,6 +78,10 @@ def setup_parser(cls, subparsers): dest="query_opt", ) update_parser.add_argument("--name", help="name of the alert", default=None) + update_parser.add_argument( + "--restricted_roles", help="comma-separated list of unique role identifiers allowed to edit the monitor", + default=None + ) update_parser.add_argument("--tags", help="comma-separated list of tags", default=None) update_parser.add_argument( "--message", help="message to include with " "notifications for this monitor", default=None @@ -151,6 +159,10 @@ def setup_parser(cls, subparsers): validate_parser.add_argument( "--message", help="message to include with notifications" " for this monitor", default=None ) + validate_parser.add_argument( + "--restricted_roles", help="comma-separated list of unique role identifiers allowed to edit the monitor", + default=None + ) validate_parser.add_argument("--tags", help="comma-separated list of tags", default=None) validate_parser.add_argument("--options", help="json options for the monitor", default=None) validate_parser.set_defaults(func=cls._validate) @@ -168,6 +180,11 @@ def _post(cls, args): else: tags = None + if args.restricted_roles: + restricted_roles = sorted(set([rr.strip() for rr in args.restricted_roles.split(",") if rr.strip()])) + else: + restricted_roles = None + body = { "type": args.type, "query": args.query, @@ -177,6 +194,8 @@ def _post(cls, args): } if tags: body["tags"] = tags + if restricted_roles: + body["restricted_roles"] = restricted_roles if args.priority: body["priority"] = args.priority @@ -200,6 +219,9 @@ def _file_post(cls, args): "message": monitor["message"], "options": monitor["options"] } + restricted_roles = monitor.get("restricted_roles", None) + if restricted_roles: + body["restricted_roles"] = restricted_roles tags = monitor.get("tags", None) if tags: body["tags"] = tags @@ -245,6 +267,12 @@ def _update(cls, args): to_update["type"] = args.type_opt if args.query_opt: to_update["query"] = args.query_opt + if args.restricted_roles is not None: + if args.restricted_roles == "": + to_update["restricted_roles"] = None + else: + to_update["restricted_roles"] = sorted( + set([rr.strip() for rr in args.restricted_roles.split(",") if rr.strip()])) if args.tags: to_update["tags"] = sorted(set([t.strip() for t in args.tags.split(",") if t.strip()])) if args.priority: @@ -274,6 +302,10 @@ def _file_update(cls, args): "message": monitor["message"], "options": monitor["options"] } + # Default value is False to defferentiate between explicit None and not set + restricted_roles = monitor.get("restricted_roles", False) + if restricted_roles is not False: + body["restricted_roles"] = restricted_roles tags = monitor.get("tags", None) if tags: body["tags"] = tags @@ -420,8 +452,19 @@ def _validate(cls, args): else: tags = None + if args.restricted_roles: + restricted_roles = sorted(set([rr.strip() for rr in args.restricted_roles.split(",") if rr.strip()])) + else: + restricted_roles = None + res = api.Monitor.validate( - type=args.type, query=args.query, name=args.name, message=args.message, tags=tags, options=options + type=args.type, + query=args.query, + name=args.name, + message=args.message, + tags=tags, + restricted_roles=restricted_roles, + options=options ) # report_warnings(res) # report_errors(res)