Ошибка «Отказано в доступе» у пользователя-администратора при попытке создать панель управления grafana через API - PullRequest
0 голосов
/ 07 февраля 2020

Я пытаюсь перенести пару панелей мониторинга с одного сервера на другой. Для этого sh я пишу довольно простой сценарий, используя библиотеки python и requests.

class Grafana:
    def __init__(self, url, key):
        self.headers = {
            'Accept': 'application/json', 
            'Content-Type': 'application/json', 
            'Authorization': 'Bearer ' + key
            }
        self.url = url

    def get_all_dashboard_uris(self):
        return (dashboard['uri'] 
        for dashboard in requests.get(self.url+'api/search?query=', headers=self.headers
        ).json())

    def import_dashboard(self, dashboard_uri):
       return requests.get(self.url+'api/dashboards/'+dashboard_uri, headers=self.headers).json()['dashboard']

    def create_dashboard(self, dashboard_object):           
        dashboard_object['id'] = None #id = null to create a new dashboard 
        #(https://grafana.com/docs/grafana/v4.1/http_api/dashboard/)
        return requests.post(self.url+'api/dashboards/db', headers=self.headers, json={'dashboard': dashboard_object})

if __name__ == '__main__':
    initial_grafana = Grafana(url=URL, key=KEY)
    final_grafana = Grafana(url=URL_TEST, key=KEY_TEST)

    for dashboard_uri in initial_grafana.get_all_dashboard_uris():
        dash = initial_grafana.import_dashboard(dashboard_uri)
        print(dashboard_uri)
        result = final_grafana.create_dashboard(initial_grafana.import_dashboard(dashboard_uri))
        print(result.status_code, result.text)
        print('')

Проблема в том, что при этом выводится 403 {"message":"Permission denied"} для всех панелей мониторинга. Я сталкиваюсь с этой проблемой, даже если попытаться создать приборную панель с теми же параметрами, которые указаны в документации:

def create_test_dashboard(self):
        dashboard_object = {
            'dashboard': {
                'id': None,
                'title': 'Production Overview',
                'tags': ['templated'],
                'timezone': 'browser',
                'rows': [{}],
                'schemaVersion': 6,
                'version': 0
            },
            'overwrite': False
            }
        return requests.post(self.url+'api/dashboards/db', headers=self.headers, json=dashboard_object)


if __name__ == '__main__':
   final_grafana = Grafana(url=URL_TEST, key=KEY_TEST)
   result = final_grafana.create_test_dashboard()

Несколько быстрых замечаний, которые я считаю важными:

1) нет проблем, если я использую метод import_dashboard в объекте final_grafana;

2) Нет проблем, если я создаю панель мониторинга вручную, используя файл .json;

3) Я использую роль администратора;

4) Я использую Grafana 4.2.

Есть идеи, как решить эту проблему?

...