OpenStack NeutronのExtensionをどう書くか(四)
8896 ワード
前述したように/neutronclient/v 2_0/myextension/extension.pyでは、5つのclass:List/show/create/delete/UpdateExtensionをそれぞれ定義します.具体的な形式は以下の通りです.
これらのclassはCLIコマンドを受け入れる第一線にあり,コマンドをAPI callに変換する責任を負う.特に注意しなければならないのはCreateExtensionというクラスで、add_known_Argumentsとargs 2 body.前者はCLIコマンドが受け入れるパラメータを定義し,後者は受信したパラメータをどのようにパッケージ化するかを規定する.
これらのパラメータはパッケージ化された後、neutronバックグラウンドで自分で定義したplugin controllerに送信されますが、これらのパラメータをどのように送信するかは、/neutronclient/v 2_に行く必要があります.0/client.pyのClientクラスで設定:
まずuriパス:
次に、各操作に対応する伝達方法を示します.
これにより,我々自身が実現したneutron pluginはCLIからの命令を受け取ることができる.
次の章では、OpenStackのDashboardを変更してextensionに追加した新しい要素を表示する方法について説明します.
import argparse
import logging
from neutronclient.neutron import v2_0 as neutronV20
from neutronclient.openstack.common.gettextutils import _
RESOURCE = 'myextension'
class ListExtension(neutronV20.ListCommand):
"""List extensions"""
resource = RESOURCE
log = logging.getLogger(__name__ + '.ListExtension')
list_columns = ['id', 'name']
class ShowExtension(neutronV20.ShowCommand):
"""Show information of a given extension."""
resource = RESOURCE
log = logging.getLogger(__name__ + '.ShowExtension')
class CreatePhysicalGateway(neutronV20.CreateCommand):
"""Create an extension."""
resource = RESOURCE
log = logging.getLogger(__name__ + '.CreateExtension')
def add_known_arguments(self, parser):
parser.add_argument(
'name', metavar='NAME',
help=_('Name of extension to create'))
def args2body(self, parsed_args):
body = {self.resource: {
'name': parsed_args.name}}
return body
class UpdateExtension(neutronV20.UpdateCommand):
"""update a given extension.""" resource = RESOURCE log = logging.getLogger(__name__ + '.UpdateExtension')
class DeleteExtension(neutronV20.DeleteCommand):
"""Delete a given extension."""
resource = RESOURCE
log = logging.getLogger(__name__ + '.DeleteExtension')
これらのclassはCLIコマンドを受け入れる第一線にあり,コマンドをAPI callに変換する責任を負う.特に注意しなければならないのはCreateExtensionというクラスで、add_known_Argumentsとargs 2 body.前者はCLIコマンドが受け入れるパラメータを定義し,後者は受信したパラメータをどのようにパッケージ化するかを規定する.
これらのパラメータはパッケージ化された後、neutronバックグラウンドで自分で定義したplugin controllerに送信されますが、これらのパラメータをどのように送信するかは、/neutronclient/v 2_に行く必要があります.0/client.pyのClientクラスで設定:
まずuriパス:
myextensions_path = "/myextensions"
myextension_path = "/myextensions/%s"
次に、各操作に対応する伝達方法を示します.
@APIParamsCall
def list_myextensions(self, retrieve_all=True, **_params):
"""Fetches a list of all myextensions for a tenant."""
return self.list('myextensions', self.myextensions_path, retrieve_all,
**_params)
@APIParamsCall
def show_myextension(self, myextension, **_params):
"""Fetches information of a certain entry in myextension."""
return self.get(self.myextension_path % (myextension), params=_params)
@APIParamsCall
def create_myextension(self, body=None):
"""Creates a new myextension entry."""
return self.post(self.myextensions_path, body=body)
@APIParamsCall
def delete_myextension(self, myextension):
"""Deletes the specified myextension."""
return self.delete(self.myextension_path % (myextension))
@APIParamsCall
def update_myextension(self, myextension, body=None):
"""Updates a myextension."""
return self.put(self.myextension_path % (myextension), body=body)
これにより,我々自身が実現したneutron pluginはCLIからの命令を受け取ることができる.
次の章では、OpenStackのDashboardを変更してextensionに追加した新しい要素を表示する方法について説明します.