openstack plugin 之(二)怎樣寫 OpenStack Neutron 的 Plugin

其實上一篇博文中的內容已經涵蓋了大部分寫Neutron插件的技術問題,這裏主要還遺留了一些有關插件的具體實現的問題。

首先,Neutron對最基本的三個資源:Network, Port 和 Subnet 的基本調用都已經定義好了API接口。如果你的插件也需要用到這些資源,最好直接實現它們的接口。API接口的定義可以再 neutron/neutron_plugin_base_v2.py 這個文件中找到,其中每個參數的作用也有比較詳細的介紹。對於用不着的資源,直接放任不管就好了,最多下次不小心調用了會發出“該接口沒有被實現”的錯誤,不會有其他影響。這裏是一個 Network API 實現的範例,其實它什麼也沒有做,但是確實是一個有效的接口實現:

 

複製代碼
from neutron import neutron_plugin_base_v2
class MyPlugin(neutron_plugin_base_v2.NeutronPluginBaseV2):
    def __init__(self):
        pass

    def create_network(self, context, network):
        # Create a network by using data from network dictionary
        # Send back a dictionary to display created network's info
        return network

    def update_network(self, context, id, network):
        # Update a created network matched by id with
        # data in the network dictionary. Send back a
        # dictionary to display the network's updated info
        return network

    def get_network(self, context, id, fields=None):
        network = {}
        # List information of a specific network matched by id
        # and return it in a form of dictionary
        return network
def get_networks(self, context, filters=None, fields=None): network = {} # List all networks that are active return network def delete_network(self, context, id): # Delete a specific network matched by id # return back the id of the network. return id
複製代碼

 

如果在具體實現這些接口的過程中,你有什麼不太清楚的地方,有兩個地方非常值得參考:一個是 neutron/db/db_base_plugin_v2.py,這個是neutron官方給出的一個基於數據庫的實現。它只是操作數據庫中的內容,模擬各個資源的創建、修改、刪除等操作,但沒有在物理機器上做任何改變。第二個地方就是 neutron/plugins 裏面收納的各個公司的插件實現,你可以從中學習到其他公司是怎麼寫插件的。

在寫插件的過程中,通常還會遇到兩種問題:一、我想要實現的 Network 還有一些額外的屬性,但是現在的模型中不存在,怎麼辦? 二、我還想實現一些其他的資源,例如Gateway,Router,Firewall 等,怎麼辦?

這兩種問題需要更加複雜的解決方案,屬於 Neutron Extension 的範疇,我會在稍後的文章中進行介紹。

 

發佈了4 篇原創文章 · 獲贊 38 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章