agent

包括 agent.py、agent_api.py、agent_device_driver.py
agent_manager.py 等模块,实现 LBaaS 服务的 agent 部分。

agent.py

按照标准流程,启动了一个 LbaasAgentService 服务,主代码如下。

  1. def main():
  2. cfg.CONF.register_opts(OPTS)
  3. cfg.CONF.register_opts(manager.OPTS)
  4. # import interface options just in case the driver uses namespaces
  5. cfg.CONF.register_opts(interface.OPTS)
  6. config.register_interface_driver_opts_helper(cfg.CONF)
  7. config.register_agent_state_opts_helper(cfg.CONF)
  8. config.register_root_helper(cfg.CONF)
  9. common_config.init(sys.argv[1:])
  10. config.setup_logging()
  11. mgr = manager.LbaasAgentManager(cfg.CONF)
  12. svc = LbaasAgentService(
  13. host=cfg.CONF.host,
  14. topic=topics.LOADBALANCER_AGENT,
  15. manager=mgr
  16. )
  17. service.launch(svc).wait()

其中,管理服务类为 agent_manager 中的 LbaasAgentManager 类。

LbaasAgentService 类是一个 rpc 服务类,定期执行管理服务类中的周期性任务。

  1. class LbaasAgentService(n_rpc.Service):
  2. def start(self):
  3. super(LbaasAgentService, self).start()
  4. self.tg.add_timer(
  5. cfg.CONF.periodic_interval,
  6. self.manager.run_periodic_tasks,
  7. None,
  8. None
  9. )
agent_manager.py

主要就是定义了 LbaasAgentManager 类,继承自 n_rpc.RpcCallback 和 periodic_task.PeriodicTasks。

作为 agent 中的管理类。它实现了 LBaaS 中定义的各种操作 API,包括:

  • agent_updated
  • collect_stats
  • create_member
  • create_pool
  • create_pool_health_monitor
  • create_vip
  • delete_member
  • delete_pool
  • delete_pool_health_monitor
  • delete_vip
  • initialize_service_hook
  • periodic_resync
  • remove_orphans
  • sync_state
  • update_member
  • update_pool
  • update_pool_health_monitor
  • update_vip
    这些操作又是通过调用更下一层的 driver 来实现。

同时,它定义了一个 rpc api 调用成员,向 topics.LOADBALANCER_PLUGIN 主题发送消息。

  1. self.plugin_rpc = agent_api.LbaasAgentApi(
  2. topics.LOADBALANCER_PLUGIN,
  3. self.context,
  4. self.conf.host
  5. )
agent_api.py

主要定义了 LbaasAgentApi 类,继承自 n_rpc.RpcProxy,也是一个典型的 RPC 代理类。

这个类在 LbaasAgentManager 类中使用,用来负责替 agent 向指定的主题发送消息,调用监听者的对应方法。主要包括:

  • get_logical_device
  • get_ready_devices
  • plug_vip_port
  • pool_deployed
  • pool_destroyed
  • unplug_vip_port
  • update_pool_stats
  • update_status
agent_device_driver.py

主要定义了 AgentDeviceDriver 类,是一个抽象类,抽象出来支持 LBaaS agent 所需要 API 的一个驱动类。这些 API 包括对 pool、member 等资源的 CRUD 等。