我正在尝试将两个仪表板从一台服务器迁移到另一台服务器。为此,我使用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)如果在final_grafana
对象中使用import_dashboard
方法,我没有问题
2)如果我使用.json
文件手动创建仪表板,则完全没有问题
3)我使用的是管理员角色用户
4)我正在使用Grafana 4.2
关于如何解决这个问题有什么想法吗?
目前没有回答
相关问题 更多 >
编程相关推荐