2.1 Ironic-api

目前社区新项目都使用 pecan 框架,通常 pecan 的目录结构如下:

ironic/api/
├── app.py
├── app.wsgi
├── config.py
├── controllers
│   ├── base.py
│   ├── __init__.py
│   ├── link.py
│   ├── root.py
│   └── v1
│       ├── driver.py
│       ├── __init__.py
│       ├── node.py
│       ├── port.py
│       ├── state.py
│       ├── types.py
│       ├── versions.py
│       ├── volume.py
│       └── volume_target.py
├── expose.py
├── hooks.py
├── __init__.py
└── middleware
    ├── auth_token.py
    ├── __init__.py
    └── parsable_error.py
  • app.py 一般包含了Pecan应用的入口,包含应用初始化代码;
  • config.py 包含Pecan的应用配置,会被app.py使用;
  • controllers/ 这个目录会包含所有的控制器,也就是API具体逻辑的地方;
  • controllers/root.py 这个包含根路径对应的控制器;
  • controllers/v1/ 这个目录对应v1版本的API的控制器。如果有多个版本的API,你一般能看到v2等目录; [1]

application 配置

Pecan的配置很容易,通过一个Python源码式的配置文件就可以完成基本的配置。 这个配置的主要目的是指定应用程序的root,然后用于生成WSGI application。

# file: ironic/api/config.py
server = {
    'port': '6385',
    'host': '0.0.0.0'
}

app = {
    'root': 'ironic.api.controllers.root.RootController',
    'modules': ['ironic.api'],
    'static_root': '%(confdir)s/public',
    'debug': False,
    'acl_public_routes': [
        '/',
        '/v1',
        # IPA ramdisk methods
        '/v1/lookup',
        '/v1/heartbeat/[a-z0-9\-]+',
    ],
}

上面这个app对象就是Pecan的配置,每个Pecan应用都需要有这么一个名为app的配置。 app配置中最主要的就是root的值,这个值表示了应用程序的入口,也就是从哪个地方开始解析HTTP的根path:/。 hooks对应的配置是一些Pecan的hook,作用类似于WSGI Middleware。

有了app配置后,就可以让Pecan生成一个WSGI application。在 Ironci 项目中, ironic/api/app.py文件就是生成WSGI application的地方,我们来看一下这个的主要内容: