分享

获得network的可用fixed_ip个数-openstackE版

问题导读
1、你觉得,获得network的可用fixed_ip个数有哪些方法呢?
2、在novaclient层实现了什么功能?
3、base.py里面的_list的传参方式是怎样的?





获得network的可用fixed_ip个数-openstackE版

方法一:直接在nova底层增加fixed_ip_count字段:
1.png




方法二:直接从dashboard封装api到底层:

其中api发布为:
2.png


3.png



以下为详细信息:
1、dashboard页面:
  1. dashboards/nova/zones_and_networks/views.py
  2.             network_id = networks[0]['id']
  3.             count = api.nova.get_available_count_ips(self.request, network_id)
复制代码

4.png


  1. api/nova.py
  2. def get_available_count_ips(request,network_id):
  3.     return novaclient(request).networks.get_available_count_ips(network_id)
复制代码



2、novaclient层
  1. v1_1/networks.py
  2.     def get_available_count_ips(self, network_id):
  3.         """
  4.         Get a specific flavor.
  5.         :param flavor: The ID of the :class:`Flavor` to get.
  6.         :rtype: :class:`Flavor`
  7.         """
  8.         return self._list("/os-networks/get_available_count_ips/%s" % network_id, "count")
复制代码
1.png



3、nova层
  1. api/openstack/compute/contrib/networks.py
  2.     def get_available_count_ips(self, req, id):
  3.         context = req.environ['nova.context']
  4.         authorize(context)
  5.         LOG.debug(_("Showing network_fixed_count with id %s") % id)
  6.         try:
  7.             count = self.network_api.get_available_count_ips(context, id)
  8.         except exception.NetworkNotFound:
  9.             raise exc.HTTPNotFound(_("Network not found"))
  10.         return {'count': count}
复制代码

2.png


  1. collection_actions = {'list_limit': 'POST','get_available_count_ips': 'POST'},
复制代码

3.png


  1. vi network/api.py
  2.     def get_available_count_ips(self, context,network_id):
  3.         return rpc.call(context,
  4.                         FLAGS.network_topic,
  5.                         {'method': 'get_available_count_ips',
  6.                          'args': {'network_id': network_id}})
复制代码

4.png



  1. vi network/manager.py
  2.     @wrap_check_policy
  3.     def get_available_count_ips(self, context, network_id):
  4.         count = db.network_available_count_ips(context, network_id)
  5.         return count
复制代码

5.png



  1. db/api.py
  2. def network_available_count_ips(context, network_id):
  3.     """Return the number of reserved ips in the network."""
  4.     return IMPL.network_available_count_ips(context, network_id)
复制代码

6.png



  1. db/sqlalchemy/api.py
  2. @require_admin_context
  3. def network_available_count_ips(context, network_id):
  4.     return _network_ips_query(context, network_id).\
  5.                     filter_by(reserved=False).\
  6.                     filter_by(host='').\
  7.                     filter_by(instance_id='').\
  8.                     filter_by(allocated=False).\
  9.                     count()
复制代码

7.png



注释:一定要跟到base.py里面看_list的传参方式:

8.png

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条