1. 程式人生 > >openstack的dashboard頁面報Invalid service catalog service: compute

openstack的dashboard頁面報Invalid service catalog service: compute

今天在dashboard頁面建立image失敗後(可能和這個操作無關),大多數頁面就報Invalid service catalog service: compute的錯,然後就動手解決這個問題了,過程如下:

1、去/var/log/httpd/error_log檔案裡面去看錯誤日誌,一個主要的截圖如下:

    

2、然後去看最後一個報錯的檔案base.py,並開啟它,找到報錯的程式碼

    

    

經過除錯發現get_service_from_catalog對資料的處理有問題,if 'type' not in service這句程式碼只能過濾type欄位不存在的情況,不能過濾type為compute且沒有url的情況。

3、原因找到了,所以解決方法有兩種

    1)程式碼層面:直接改原始碼,把漏掉的情況也過濾掉

    2)運維層面:找到出現這種情況的原因,把‘髒資料’去掉

4、解決問題

    1)修改程式碼很簡單:在那句程式碼後面加上or notservice.get('endpoints')然後重啟httpd就好了

    2)從第一張程式碼的截圖可以看到資料是從變數catalog裡面獲取的,可以用openstack catalog list看到,截圖如下:

    

      從截圖可以看到type為compute的endpoint有兩條資料,第一條沒有url,第二條有,所以把第一條沒有url的資料刪掉就好了,但是發現只有openstack catalog list,沒有openstack catalog delete命令,後來檢視keystone的配置檔案keystone.conf發現如下配置:

    

從配置檔案和一些資料看出catalog是從mysql裡面讀取的資料,然後從mysql的keystone庫中的service表裡找到了髒資料,然後知道了用openstack service delete去刪除‘髒資料’,問題就解決了。