openstack neutron源码分析(四)--------port的创建流程

我们知道nova在创建虚拟机时,会为虚拟机创建port,流程图如下:


前面分析neutron wsgi的文章中有介绍一次restful api的详细请求,可以回顾下:http://blog.csdn.net/happyanger6/article/details/54586463

1.nova发送的port创建请求会以json格式携带关于compute node主机名,创建的网络信息等报文,因此resoure会先进行解包操作。

2.然后Controller会对body对应的操作进行数据格式及一些必须字段的检查,然后进行方法拼装,这里会调用ml2 plugin的create_port方法。

3.ml2 plugin会先将port信息存储到数据库中:

其中Port的模型如下:


class Port(standard_attr.HasStandardAttributes, model_base.BASEV2,
           model_base.HasId, model_base.HasProject):
    """Represents a port on a Neutron v2 network."""

    name = sa.Column(sa.String(attr.NAME_MAX_LEN))
    network_id = sa.Column(sa.String(36), sa.ForeignKey("networks.id"),
                           nullable=False)
    fixed_ips = orm.relationship(IPAllocation, backref='port', lazy='joined',
                                 cascade='all, delete-orphan')

    mac_address = sa.Column(sa.String(32), nullable=False)
    admin_state_up = sa.Column(sa.Boolean(), nullable=False)
    status = sa.Column(sa.String(16), nullable=False)
    device_id = sa.Column(sa.String(attr.DEVICE_ID_MAX_LEN), nullable=False)
    device_owner = sa.Column(sa.String(attr.DEVICE_OWNER_MAX_LEN),
                             nullable=False)
    ip_allocation = sa.Column(sa.String(16))

    __table_args__ = (
        sa.Index(
            'ix_ports_network_id_mac_address', 'network_id', 'mac_address'),
        sa.Index(
            'ix_ports_network_id_device_owner', 'network_id', 'device_owner'),
        sa.Index('ix_ports_device_id', 'device_id'),
        sa.UniqueConstraint(
            network_id, mac_address,
            name='uniq_ports0network_id0mac_address'),
        model_base.BASEV2.__table_args__
    )
    api_collections = [attr.PORTS]

4.然后调用扩展插件和安全组件进行相关处理,并将绑定信息存入数据库。

5.再通过mechanism_manager调用各个插件的'create_port_precommit'方法进行预处理

6.后面还会调用各个插件的'create_port_postcommit'方法进行后续处理

7.然后会进行port绑定的实际操作,这里最多会尝试10次。这里不会实际调用agent处理,只是调用各个mechanism的'bind_port'方法完成个性化处理。

8.最后发送rpc消息到agent,调用agent的'port_update'方法完成实际的port绑定操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

self-motivation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值