0

我正在尝试将几个仪表板从一台服务器迁移到另一台服务器。为此,我使用pythonrequests库编写了一个非常简单的脚本。

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。

关于如何解决这个问题的任何想法?

4

0 回答 0