Neutron 可以通过设置admin_state_up=False,禁止一个提供网络功能的agent被用户使用,但是无法在这个agent第一次启动时就禁用,而nova、cinder拥有类似的能力,所以在newton版本中,neutron也实现了该功能。
使用的方法
在Neutron-server节点
vim /etc/neutron/neutron.conf
enable_new_agents=False
然后启动agent,会发现此时agent的admin_state_up=False,代表该agent被禁用,可以通过neutron agent-update命令恢复agent的用时。
实现原理
neutron/db/agent_db.py的create_or_update_agent函数,该函数负责创建、更新agent表。当agent第一次注册时,会执行该函数的异常处理部分,具体代码如下:
except ext_agent.AgentNotFoundByTypeHost:
greenthread.sleep(0)
res['created_at']= current_time
res['started_at'] = current_time
res['heartbeat_timestamp'] = current_time
res['admin_state_up'] = cfg.CONF.enable_new_agents
agent_db= Agent(**res)
greenthread.sleep(0)
context.session.add(agent_db)
event_type = events.AFTER_CREATE
self._log_heartbeat(agent_state, agent_db,configurations_dict)
status =n_const.AGENT_NEW
这样,在agent第一次启动并注册到neutron-server时,neutron-server就将该agent的admin-state-up状态置为了false,从而在调度时不会使用该agent。
参考文献:
https://specs.openstack.org/openstack/neutron-specs/specs/liberty/enable-new-agents.html