【问题标题】:Get Ip address of computes nodes in an openstack network获取openstack网络中计算节点的IP地址
【发布时间】:2016-10-26 21:05:11
【问题描述】:

我计划创建一个服务,在 openstack 环境中休眠/唤醒未使用的计算节点,因为我需要计算节点的 IP 地址。 是否有任何 API 或命令可用于获取 Openstack 网络中存在的 IP 地址(不是计算节点的名称)机器?

【问题讨论】:

    标签: openstack openstack-nova


    【解决方案1】:

    OpenStack 云环境设置中使用了两种类型的 IP 地址。

    1. 固定:

      只能从 openstack 网络访问,即虚拟机之间。

    2. 浮动:

      可以从 OpenStack 云网络外部访问,基本上工作在不同的接口上,并且通常此 IP 可供公众从外部网络访问此 VM。

    现在,您知道这一点,请遵循此处提供的 API。 http://api.openstack.org/api-ref.html#ext-os-ext-ips

    通过 JSON 响应获取 IP 地址时,首先要检查它是固定的还是浮动的。

    我希望这应该能回答你的问题。如果没有,请告知。

    【讨论】:

    • 固定和浮动 IP 分配给创建的实例,我需要的是主机的 IP,即运行这些实例的计算节点。
    • api.openstack.org/api-ref.html#identity-v2.0 。向“v2.0/tokens”发出 POST 请求,它应该返回包含服务目录的 JSON。在服务目录字段中查找“type”:“compute”,您将获得计算模块的公共 URL。实例在此计算的公共 URL 上运行。(通常)
    【解决方案2】:

    您可以查询 nova 数据库并获取 compute_node 表中所有计算节点的 ip。我在 python 中编写了一个小函数来为我的一个测试执行此操作。

    def get_compute_nodes(parameters):
        try:
            password = parameters['password']
            db=_mysql.connect(user="root",passwd=password, db="nova")
            query = """select host_ip from compute_nodes where deleted=0"""
            db.query(query)
            r=db.use_result()
            results =  r.fetch_row(maxrows=0)
            return results
        except Exception as exp:
            print "Error in accessing the Nova database"
            print exp
    

    【讨论】:

    • 您好,请问有“官方方式”如何查询数据库吗?我的意思是,Nova Conductor 处理所有数据库请求,没有任何东西应该直接进入数据库,对吧?
    • 嗨!不,不幸的是,OpenStack 没有推荐查询数据库的“官方方式”。他们公开了 API,因此用户不必查询数据库。您也可以使用 OpenStack Python SDK,但目前该方法只返回计算的名称。因此,必须根据意见修改该方法,或者您可以编写一个调用 REST API 的新方法。您可以在 python 中使用 httplib 库来做到这一点。我将尝试编写并将其添加为答案。
    猜你喜欢
    • 2014-04-15
    • 2011-11-04
    • 2012-10-28
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多