OpenStack解释器

openstack-interpreter的Python项目详细描述


这是一个简单的工具,有助于更好地使用 各种openstack python客户端,有助于提高 所有这些工具。希望这个工具能让开发人员更容易 使用和测试各种库,并为操作员提供一个有用的工具 对于不需要编写脚本的一次性操作,以及 OpenSTACKEclipse没有足够的灵活性,不需要使用复杂的BASH。

使用OpenStack解释器

首先安装插件:

pip install openstack-interpreter

它现在将作为插件安装在openstackclient上,或者安装 openstackclient也是。

您需要设置一些环境变量,或者 clouds.yaml文件,以便客户端可以验证和设置 会议。

运行解释器:

openstack interpreter

这会让你进入一个ipython解释器。你将被设置为 基于身份验证凭据的会话。

因为这是使用ipython作为解释器,您可以使用 自动完成和帮助功能。也有历史搜索支持 以及许多其他特征。有关更多详细信息,请参阅ipython文档。

要获得一些基本帮助,您可以从:

oi?

或者,如果您想获取并开始使用sdk,可以通过以下方法获取 访问:

conn = oi.sdk.connection

或者,如果您希望sdk连接位于配置的或 默认值:

conn = oi.sdk.get_connection(region_name='RegionOne')

其他内置工具

这个库有一些基本工具可以帮助您处理 玩得更开心一点。这将随着时间的推移而改善 随着更多内容的增加,但是现在我们有一些输出函数,基本的分析, 还有一些提示。

工具示例

也许您想看看openstack资源上的一些值。自从 大多数客户机库都提供了一个tou dict函数(注意:这可能 并非总是如此)您可以执行以下操作:

servers = list(conn.compute.servers())

output.print_dict(servers[0].to_dict())

或者只打印对象本身,因为它可能不必进行dict:

output.print_object(servers[0])

虽然有些字段可能是听写的,而且很难阅读,所以我们希望 稍微格式化一下:

output.print_object(
    servers[0], formatters={
        'addresses': output.json_formatter,
        'flavor': output.json_formatter,
        'image': output.json_formatter,
        'links': output.json_formatter})

或者你在看一个资源列表,你只关心 字段:

output.print_list(servers, ["name", "id", "status"])

您甚至可以设置列表的格式,尽管要小心,因为列表不会自动换行 还可以:

output.print_list(
    servers, ['name', 'status', 'addresses'],
        formatters={'addresses': output.json_formatter})

或者您正在查看大量数据,并希望突出显示以下内容:

rows = []

for server in servers:
    if server.status == "ACTIVE":
        rows.append([
            server.name, server.id,
            output.style_text(server.status, ['green', 'bold'])
        ])
    elif server.status == "ERROR":
        rows.append([
            server.name, server.id,
            output.style_text(server.status, ['red', 'bold'])
        ])
    else:
        rows.append([server.name, server.id, server.status])

output.print_list_rows(rows, ["name", "id", "status"])

或者想要删除大量实例,但是想要具有特定名称的实例(或者 甚至可能是标签)先请求提示:

for server in conn.compute.servers():
    if "prod" in server.name:
        output.print_object(server)
        if prompt.prompt_yes_no(
                "Are you sure you want to delete this?"):
            server.delete()
    else:
        server.delete()

或者你只是好奇运行某个程序需要多长时间:

with timed("listing servers"):
    servers = list(conn.compute.servers())

有用的模式

跨所有区域获取我的服务器(或任何资源):

servers = {}

for region in conn.identity.regions():
    servers[region.id] = list(oi.sdk.get_connection(
        region_name=region.id).compute.servers())

开发

我想尽可能添加更多的帮助功能,希望甚至是一些 是交互式的,例如教程。

我可能会把这个项目移到openstack的gerrit上,但在一定程度上我不希望 作为gerrit的接口是很糟糕的,尽管我可能最终会把这个移到 Gitlab,通过Gitlab Runners添加一些测试和构建。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
日志列“\u id”中的java JSON到db创建错误不存在   在GWT中使用字符串变量作为对象的java   RESTweb服务中get方法中的java invoke post方法   使用参数类型int时,java MyBatis的列类型无效   java Android在不触发onTextChanged的情况下调用backspace   java为什么在安卓 studio中顶栏搜索不起作用?   从VB转换。net到java   Android Studio Java蓝牙Gatt连接问题   多线程Java从线程通知线程   如果在没有任何选项的情况下运行JVM,java对内存使用的影响?   Java handson使用图表进行练习   java为什么UTF8的新字符串包含更多字节   java如何使用此方法制作声音循环?   java为什么强制转换对象是多余的