Exemple #1
0
 def __init__(self, module):
     self._module = module
     # {{{ Authentication header
     self.headers = {"Content-Type": "application/json"}
     self.headers["Authorization"] = basic_auth_header(
         module.params['url_username'], module.params['url_password'])
     # }}}
     self.grafana_url = base.clean_url(module.params.get("url"))
 def __init__(self, module):
     self._module = module
     self.grafana_url = base.clean_url(module.params.get("url"))
     # {{{ Authentication header
     self.headers = {"Content-Type": "application/json"}
     if module.params.get('grafana_api_key', None):
         self.headers["Authorization"] = "Bearer %s" % module.params[
             'grafana_api_key']
     else:
         self.headers["Authorization"] = basic_auth_header(
             module.params['url_username'], module.params['url_password'])
         self.switch_organisation(module.params['org_id'])
Exemple #3
0
 def __init__(self, module):
     self._module = module
     # {{{ Authentication header
     self.headers = {"Content-Type": "application/json"}
     if module.params.get('grafana_api_key', None):
         self.headers["Authorization"] = "Bearer %s" % module.params['grafana_api_key']
     else:
         self.headers["Authorization"] = basic_auth_header(module.params['url_username'], module.params['url_password'])
     # }}}
     self.grafana_url = base.clean_url(module.params.get("url"))
     if module.params.get("skip_version_check") is False:
         try:
             grafana_version = self.get_version()
         except GrafanaError as e:
             self._module.fail_json(failed=True, msg=to_text(e))
         if grafana_version["major"] < 5:
             self._module.fail_json(failed=True, msg="Folders API is available starting Grafana v5")
Exemple #4
0
def main():
    # use the predefined argument spec for url
    argument_spec = grafana_argument_spec()
    argument_spec.update(
        state=dict(choices=['present', 'absent', 'export'], default='present'),
        org_id=dict(default=1, type='int'),
        folder=dict(type='str', default='General'),
        uid=dict(type='str'),
        slug=dict(type='str'),
        path=dict(aliases=['dashboard_url'], type='str'),
        dashboard_id=dict(type='str'),
        dashboard_revision=dict(type='str', default='1'),
        overwrite=dict(type='bool', default=False),
        commit_message=dict(type='str',
                            aliases=['message'],
                            deprecated_aliases=[
                                dict(name='message',
                                     version='2.0.0',
                                     collection_name="community.grafana")
                            ]),
    )
    module = AnsibleModule(
        argument_spec=argument_spec,
        supports_check_mode=False,
        required_if=[
            ['state', 'export', ['path']],
        ],
        required_together=[['url_username', 'url_password', 'org_id']],
        mutually_exclusive=[['url_username', 'grafana_api_key'],
                            ['uid', 'slug'], ['path', 'dashboard_id']],
    )

    module.params["grafana_url"] = clean_url(module.params["grafana_url"])

    if 'message' in module.params:
        module.fail_json(
            msg=
            "'message' is reserved keyword, please change this parameter to 'commit_message'"
        )

    try:
        if module.params['state'] == 'present':
            result = grafana_create_dashboard(module, module.params)
        elif module.params['state'] == 'absent':
            result = grafana_delete_dashboard(module, module.params)
        else:
            result = grafana_export_dashboard(module, module.params)
    except GrafanaAPIException as e:
        module.fail_json(failed=True, msg="error : %s" % to_native(e))
        return
    except GrafanaMalformedJson as e:
        module.fail_json(failed=True, msg="error : %s" % to_native(e))
        return
    except GrafanaDeleteException as e:
        module.fail_json(failed=True,
                         msg="error : Can't delete dashboard : %s" %
                         to_native(e))
        return
    except GrafanaExportException as e:
        module.fail_json(failed=True,
                         msg="error : Can't export dashboard : %s" %
                         to_native(e))
        return

    module.exit_json(failed=False, **result)
    return
def main():
    argument_spec = grafana_argument_spec()
    argument_spec.update(
        org_id=dict(type='int', default=1),
        uid=dict(type='str'),
        name=dict(type='str'),
        type=dict(type='str',
                  choices=[
                      'dingding', 'discord', 'email', 'googlechat', 'hipchat',
                      'kafka', 'line', 'teams', 'opsgenie', 'pagerduty',
                      'prometheus', 'pushover', 'sensu', 'slack', 'telegram',
                      'threema', 'victorops', 'webhook'
                  ]),
        is_default=dict(type='bool', default=False),
        include_image=dict(type='bool', default=False),
        disable_resolve_message=dict(type='bool', default=False),
        reminder_frequency=dict(type='str'),
        dingding_url=dict(type='str'),
        dingding_message_type=dict(type='list',
                                   elements='str',
                                   choices=['link', 'action_card']),
        discord_url=dict(type='str'),
        discord_message_content=dict(type='str'),
        email_addresses=dict(type='list', elements='str'),
        email_single=dict(type='bool'),
        googlechat_url=dict(type='str'),
        hipchat_url=dict(type='str'),
        hipchat_api_key=dict(type='str', no_log=True),
        hipchat_room_id=dict(type='str'),
        kafka_url=dict(type='str'),
        kafka_topic=dict(type='str'),
        line_token=dict(type='str', no_log=True),
        teams_url=dict(type='str'),
        opsgenie_url=dict(type='str'),
        opsgenie_api_key=dict(type='str', no_log=True),
        opsgenie_auto_close=dict(type='bool'),
        opsgenie_override_priority=dict(type='bool'),
        pagerduty_integration_key=dict(type='str', no_log=True),
        pagerduty_severity=dict(
            type='list',
            elements='str',
            choices=['critical', 'error', 'warning', 'info']),
        pagerduty_auto_resolve=dict(type='bool'),
        pagerduty_message_in_details=dict(type='bool'),
        prometheus_url=dict(type='str'),
        prometheus_username=dict(type='str'),
        prometheus_password=dict(type='str', no_log=True),
        pushover_api_token=dict(type='str', no_log=True),
        pushover_user_key=dict(type='str', no_log=True),
        pushover_devices=dict(type='list', elements='str'),
        pushover_priority=dict(
            type='list',
            elements='str',
            choices=['emergency', 'high', 'normal', 'low', 'lowest']),
        pushover_retry=dict(type='int'),  # TODO: only when priority==emergency
        pushover_expire=dict(
            type='int'),  # TODO: only when priority==emergency
        pushover_alert_sound=dict(type='str'),  # TODO: add sound choices
        pushover_ok_sound=dict(type='str'),  # TODO: add sound choices
        sensu_url=dict(type='str'),
        sensu_source=dict(type='str'),
        sensu_handler=dict(type='str'),
        sensu_username=dict(type='str'),
        sensu_password=dict(type='str', no_log=True),
        slack_url=dict(type='str', no_log=True),
        slack_recipient=dict(type='str'),
        slack_username=dict(type='str'),
        slack_icon_emoji=dict(type='str'),
        slack_icon_url=dict(type='str'),
        slack_mention_users=dict(type='list', elements='str'),
        slack_mention_groups=dict(type='list', elements='str'),
        slack_mention_channel=dict(type='list',
                                   elements='str',
                                   choices=['here', 'channel']),
        slack_token=dict(type='str', no_log=True),
        telegram_bot_token=dict(type='str', no_log=True),
        telegram_chat_id=dict(type='str'),
        threema_gateway_id=dict(type='str'),
        threema_recepient_id=dict(type='str'),
        threema_api_secret=dict(type='str', no_log=True),
        victorops_url=dict(type='str'),
        victorops_auto_resolve=dict(type='bool'),
        webhook_url=dict(type='str'),
        webhook_username=dict(type='str'),
        webhook_password=dict(type='str', no_log=True),
        webhook_http_method=dict(type='list',
                                 elements='str',
                                 choices=['POST', 'PUT']))

    module = AnsibleModule(
        argument_spec=argument_spec,
        supports_check_mode=False,
        required_together=[['url_username', 'url_password', 'org_id'],
                           ['prometheus_username', 'prometheus_password'],
                           ['sensu_username', 'sensu_password']],
        mutually_exclusive=[['url_username', 'grafana_api_key']],
        required_if=[
            ['state', 'present', ['name', 'type']],
            ['type', 'dingding', ['dingding_url']],
            ['type', 'discord', ['discord_url']],
            ['type', 'email', ['email_addresses']],
            ['type', 'googlechat', ['googlechat_url']],
            ['type', 'hipchat', ['hipchat_url']],
            ['type', 'kafka', ['kafka_url', 'kafka_topic']],
            ['type', 'line', ['line_token']], ['type', 'teams', ['teams_url']],
            ['type', 'opsgenie', ['opsgenie_url', 'opsgenie_api_key']],
            ['type', 'pagerduty', ['pagerduty_integration_key']],
            ['type', 'prometheus', ['prometheus_url']],
            ['type', 'pushover', ['pushover_api_token', 'pushover_user_key']],
            ['type', 'sensu', ['sensu_url']], ['type', 'slack', ['slack_url']],
            ['type', 'telegram', ['telegram_bot_token', 'telegram_chat_id']],
            [
                'type', 'threema',
                [
                    'threema_gateway_id', 'threema_recepient_id',
                    'threema_api_secret'
                ]
            ], ['type', 'victorops', ['victorops_url']],
            ['type', 'webhook', ['webhook_url']]
        ])

    module.params["grafana_url"] = clean_url(module.params["grafana_url"])

    if module.params['state'] == 'present':
        result = grafana_create_or_update_notification_channel(
            module, module.params)
        module.exit_json(failed=False, **result)
    else:
        result = grafana_delete_notification_channel(module, module.params)
        module.exit_json(failed=False, **result)