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 和 args2body。前者定义了 CLI 命令接受哪些参数,后者规定如何将收到的参数打包起来。
这些参数打包之后就会发给 neutron 后台中我们自己定义的 plugin controller,但是如何发送这些参数还需要我们去 /neutronclient/v2_0/client.py 的 Client 类中设置:
首先是 uri 路径: