跳转到主要内容

Juju的Python库

项目描述

源代码: https://github.com/juju/python-libjuju

错误报告: https://github.com/juju/python-libjuju/issues

文档: https://pythonlibjuju.readthedocs.io/en/latest/

需求

  • Python 3.9/3.10

设计笔记

  • 异步 - 使用Python的asyncio和async/await特性

  • WebSocket级别的绑定是通过Juju的Golang代码程序化生成的(间接),确保API完全覆盖

  • 提供了一个面向对象的层,封装了大部分的WebSocket API,并提供熟悉的名词和动词(例如Model.deploy(),Application.add_unit()等)

安装

pip3 install juju

快速入门

以下是一个简单的示例,展示了库的基本用法。示例连接到当前活动的Juju模型,部署单个ubuntu charm的单元,然后退出

注意:Pylibjuju需要已经启动的Juju控制器来连接。

#!/usr/bin/python3

import logging
import sys

from juju import jasyncio
from juju.model import Model


async def deploy():
    # Create a Model instance. We need to connect our Model to a Juju api
    # server before we can use it.
    model = Model()

    # Connect to the currently active Juju model
    await model.connect()

    try:
        # Deploy a single unit of the ubuntu charm, using the latest revision
        # from the stable channel of the Charm Store.
        ubuntu_app = await model.deploy(
          'ubuntu',
          application_name='my-ubuntu',
        )

        if '--wait' in sys.argv:
            # optionally block until the application is ready
            await model.wait_for_idle(status = 'active')

    finally:
        # Disconnect from the api server and cleanup.
        await model.disconnect()


def main():
    logging.basicConfig(level=logging.INFO)

    # If you want to see everything sent over the wire, set this to DEBUG.
    ws_logger = logging.getLogger('websockets.protocol')
    ws_logger.setLevel(logging.INFO)

    # Run the deploy coroutine in an asyncio event loop, using a helper
    # that abstracts loop creation and teardown.
    jasyncio.run(deploy())


if __name__ == '__main__':
    main()

更多示例可以在文档中找到,以及源代码树的examples/目录中,可以使用tox运行。例如,要运行examples/connect_current_model.py,请使用

tox -e example -- examples/connect_current_model.py

交互式解释器

要在交互式解释器中实验库,请以asyncio模式启动python

$ python3 -m asyncio

然后,要连接到当前模型并获取状态

>>> from juju.model import Model
>>> model = Model()
>>> await model.connect_current()
>>> status = await model.get_status()

版本管理

当前的Pylibjuju发布策略跟踪Juju发布周期。特别是,每当Juju发布最新/稳定版本时,pylibjuju将在接下来的星期内推出具有相同版本的发布。新生成的模式将根据Juju版本进行更新。

变更日志

3.5.2.0

2024年7月11日星期四

## 变化内容

3.5.0.0

2024年5月30日星期四

3.4.0.0

2024年3月25日星期一

3.3.1.1

2024年2月15日星期四

这是一个修补版本,用于修复3.3.1.0版本中的一些构建问题,这些问题在某些情况下使得该版本无法使用。

3.3.1.0

2024年2月8日星期四

3.3.0.0

本版本的贡献主要是用户秘密,这是Juju 3.3版本的一部分。

2023年11月30日星期四

3.2.3.0

2023年10月26日星期四

3.2.2.0

2023年9月6日星期三

这是3.x轨道上的一个小版本,与任何Juju 3.x控制器兼容。

3.2.0.1

2023年7月20日星期四

这是3.x轨道上的一个点版本,与任何Juju 3.x控制器兼容。

3.2.0.0

2023年6月7日星期三

本版本包含 Juju 3.2.0 的新端点。

本版本与任何 Juju 3.x 控制器兼容。

3.1.2.0

2023年5月5日星期五

本版本已在 Juju 3.1.2 上进行测试,并包含秘密后端的新端点。

本版本与任何 Juju 3.x 控制器兼容。

3.1.0.1

2023年2月10日星期五

本版本针对 juju 版本 3.1.0,并启用新的秘密后端 API。允许与 3.x 系列的 juju 控制器连接,与不同主版本控制器的连接(例如 2.x、4.x 等)将被取消。

本版本仅使用 Juju 3.1.0 进行测试。

## 新贡献者

完整更改日志https://github.com/juju/python-libjuju/compare/3.0.4…3.1.0.1

3.0.4

10月26日,星期三

## 新贡献者

完整更改日志https://github.com/juju/python-libjuju/compare/3.0.3…3.0.4

3.0.3

2022年10月22日,星期六

完整更改日志https://github.com/juju/python-libjuju/compare/3.0.2…3.0.3

3.0.2

2022年10月5日,星期三

3.0.1

2022年8月11日星期四

3.0.0

2022年8月9日星期二

切换到语义版本控制。从这次发布开始,至少主版本号与最新的 Juju 支持版本相匹配。因此跳到 3.0.0,因为这个版本支持 Juju 3.0。(这也意味着 python-libjuju <= 2.9.11 只支持到 Juju 2.x

2.9.11

2022年7月11日星期一

2.9.10

2022年6月9日星期四

2.9.9

2022年4月26日星期三

2.9.8

2022年3月21日星期一

2.9.7

2022年2月11日星期五

2.9.6

2022年1月27日星期四

2.9.5

2021年12月3日星期五

2.9.4

2021年10月12日星期二

2.9.3

2021年8月12日星期一

  • 错误修复 - 修复了“如果 charm 没有系列字段,则默认使用包系列”的问题 #514

2.9.2

2021年6月28日星期一

  • 错误修复 - 修复了“在赋值前引用了元数据”的错误 #509

2.9.1

2021年6月16日星期三

  • 错误修复 - 包暴露的端点缺失 #502

  • 错误修复 - 修复了本地 charm 的系列要求 #504

  • 添加了本地 charm 更新支持 #507

2.9.0

2021年5月27日星期四

  • 更新了 Juju 2.9.0 的外观方法

  • 更新了 Juju 2.9.1 的外观方法

  • 错误修复 - 支持 Juju 客户端代理 (LP#1926595)

  • 错误修复 - 在包中尊重 charm 通道 #496

  • 移除了 Juju 2.2.3 的机器工作区

2.8.6

2021年3月23日星期二

  • 更新了 Juju 2.8.10 的外观方法

  • 错误修复 - 修复了 ScaleApplications 参数名称中的错别字

  • 为 Machines 引入了主机名属性

2.8.5

2021年2月8日星期一

  • 实现了 add_space 和 get_spaces。

  • 更新了外观控制器。

  • 支持已经归档 (.charm 或 .zip) 的本地 charm。

  • 引入了 wait_for_bundle 方法。

  • 错误修复 - 处理 list_offers 结果中的 None

  • 错误修复 - 将库更新到支持 Python 3.9+

2.8.4

2020年10月1日星期四

  • 更新了 Juju 2.8.3 的外观方法

  • 错误修复 - 在销毁模型时添加 force 和 max_wait

  • 错误修复 - 修复了应用程序状态的推导

2.8.3

2020年8月28日星期五

  • 错误修复 - 导出CAAS模型操作界面 (#434)

  • 错误修复 - 允许传递控制器以防止消费读取本地文件系统 (#436)

2.8.2

2020年7月14日星期二

  • 更新Juju 2.8.1的界面方法

  • 向客户端API方法添加文档(使用2.8.1的更改)

  • 错误修复 - 修复应用程序状态报告为未设置 (#430)

  • 错误修复 - 处理网络不可达OSErrors (#426)

2.8.1

2020年5月18日星期一

  • 修复界面调用中的位置参数使用。

  • 向界面类型添加get模拟。

  • 修复在单元上等待SSH的问题。

  • 修复集成测试。

  • 修复tox.ini以使用支持的Python版本。

  • 修复使用下标在匹配中使用正则表达式约束(py36)。

  • 修复界面返回类型文档。

  • 修复具有数组值的模式对象。

  • 修复使用JSON键的下标查找。

  • 添加定义测试。

2.8.0

2020年5月13日星期三

  • 更新Juju 2.8.0的界面方法

  • 修复Python 3.7+的代码生成问题。

  • 嵌套界面定义现在可以正确反序列化(例如,在ApplicationDeploy上的存储)。

  • 忽略缺失的客户端界面,并打印警告 (#382)

  • 添加SCP示例 (#383)

  • 向Controller添加watch_model_summaries方法 (#390)

  • 错误修复 - Model上的make_archive处理符号链接 (#391 #392)

  • 为单元和机器添加SSH支持 (#393)

  • 添加连接高可用性支持 (#402)

  • 错误修复 - 从控制器解析api_endpoints (#406 #407)

2.7.1

2020年1月9日星期四

  • 当尝试连接到模型时,添加了缺失的界面类型。

2.7.0

2020年1月7日星期二

  • 更新Juju 2.7.0的界面方法

  • 修复查询CMR关系时的问题 (#366)

  • 修复捆绑中的存储支持 (#361)

  • 修复报告单元领导者的问题 (#374)

  • 添加AddCloud API支持 (#370)

2.6.3

  • 重构捆绑处理代码,使其更能抵御捆绑更改API的变化。

  • 更新依赖项到最新版本(pyyaml)

2.6.2

2019年8月27日星期三

  • 修复从Juju API服务器返回go interface{}类型(Any类型)时验证问题 (#344)

2.6.1

2019年8月21日星期三

  • Pylibjuju现在正确验证参数,而不是依赖于默认的位置参数值。

2.6.0

2019年8月14日星期三

  • 更新Juju 2.6.6的界面方法

  • Pylibjuju的发布现在遵循Juju的发布周期,这还包括将版本号提升到相应版本。

  • 固定API界面。Pylibjuju中的所有界面现在固定到一组更保守的界面版本,以防止与新功能冲突。在连接到控制器或模型后,可以覆盖固定的界面并指定自己的界面版本。

  • 在部署和添加关系时支持跨模型关系(CMR)。此外,在模型上还可以获取有关CMR提供的有关信息。

  • 捆绑中的跨模型关系(CMR)。

  • 能够导出包括覆盖在内的捆绑。

  • 在没有ubuntu用户的情况下手动提供 (#335)

  • 通过SAAS块添加关系时添加远程应用程序。

  • 对捆绑更改API响应应用拓扑排序,使得部署复杂捆绑成为可能。

  • 更新定义类型以包括Juju的最新信息。

  • 关键字参数(代码中的未知字段)现在可在Juju响应中找到。

0.11.7

2019年4月19日星期三

  • 更新Juju 2.6.4的界面方法

  • 支持受信任的捆绑和charms(参见:信任文档)

0.11.6

2019年5月22日星期三

  • 禁用控制器连接上的主机名检查 (#305)

  • 处理由登录RPC返回的RedirectError有效载荷 (#303)

0.11.5

2019年4月1日 星期一

  • 处理未知类型的delta(修复与Juju 2.6控制器连接的问题)(#299)

  • 测试修复(#298)

0.11.4

2019年4月1日 星期一

  • 与注释相关的额外工作。(#290)

  • 检查服务器证书。(#296)

0.11.3

2019年3月13日 星期三

  • k8s捆绑包不再具有应用程序放置(#293)

  • 如果所有端点失败,则添加连接重试(#288)

  • 支持生成用于模型共享的注册字符串。(#279)

  • 在发布时添加Twine进行分发上传。(#284)

0.11.2

2019年1月16日 星期三

  • 更新Juju 2.5-rc2的facade方法(#281)

  • 添加连接时的重定向测试用例(#275)

  • 在捆绑包中实现App.get_resources和pinned resources (#278)

0.11.1

2018年12月13日 星期四

  • 修复Juju <2.5的子级捆绑包(#277)

0.11.0

2018年12月11日 星期二

  • 针对新Juju版本的更新(#274)

  • 修复revoke_model函数中错误的变量名(#271)

0.10.2

2018年9月18日 星期二

  • 将include_stats设置为false以减少请求时间(#266)

0.10.1

2018年9月17日 星期一

  • 在手动提供测试中重试ssh(#265)

  • 清理lint并添加lint覆盖率到travis配置(#263)

  • 增加charmstore连接的超时时间(#262)

  • 修复《juju连接到驱动程序》消息的日志级别(#258)

0.10.0

2018年8月16日 星期四

  • 修复由于scp额外选项顺序导致的错误(#260)

  • 实现set/get model constraints (#253)

0.9.1

2018年7月16日 星期一

  • 将websockets更新到6.0以修复OS X支持(由于Brew更新到Py3.7)(#254)

0.9.0

2018年6月29日 星期五

  • python3.7兼容性更新(#251)

  • 在测试中处理is_bootstrapped中的juju未安装(#250)

  • 添加app.reset_config(list)。(#249)

  • 实现model.get_action_status (#248)

  • 修复Python 3.6中的《make client》(#247)

0.8.0

2018年6月14日 星期四

  • 添加支持添加手动(ssh)机器(#240)

  • 向后兼容性修复(#213)

  • 实现model.get_action_output (#242)

  • 修复包含lxd到单元放置的捆绑包的JSON序列化错误(#243)

  • 修复文档中connect_current的引用(#239)

  • 将机器代理状态的工作区包装在版本检查中(#238)

  • 对于juju.unit.run将秒转换为纳秒(#237)

  • 修复test_machines.py::test_status中的偶然间歇性失败(#236)

  • 为Travis定义未使用的juju-zfs lxd存储池(#235)

  • 添加对Application get_actions的支持(#234)

0.7.5

2018年5月18日 星期五

  • 暴露捆绑计划中的错误(#233)

  • 即使在macaroon身份验证的情况下也始终发送auth-tag(#217)

  • 在发送到控制器时内联jsonfile凭证(#231)

0.7.4

2018年4月24日 星期二

  • 始终将标签和空格约束解析为列表(#228)

  • 文档索引改进(#211)

  • 添加doc req以强制使用较新的pymacaroons修复RTD构建

  • 修复构建文档的依赖冲突

0.7.3

2018年2月20日 星期二

  • 完整的macaroon bakery支持(#206)

  • 修复部署本地charm的回归,添加测试用例(#209)

  • 公开机器系列(#208)

  • 自动化测试运行器修复(#205)

0.7.2

2018年2月9日 星期五

  • 支持直接部署bundle YAML文件(而不是仅目录)(#202)

0.7.1

2017年12月18日 星期一

  • 修复model_uuids的遗漏重命名(#197)

0.7.0

2017年12月15日 星期五

  • 修复添加关系时的竞争条件(#192)

  • 修复连接监控测试中的竞争条件(#183)

  • 修复README中的示例(#178)

  • 修复Unit.run期间的罕见挂起(#177)

  • 修复许可问题(#176)

  • 重构模型处理(#171)

  • 重构用户处理,添加get_users (#170)

  • 在添加模型时上传凭证到控制器(#168)

  • 支持捆绑包中的‘applications’键(#165)

  • 改进loop.run()的线程错误处理(#169)

  • 修复使用to_json()时的编码(#166)

  • 修复间歇性测试失败(#167)

0.6.1

2017年9月29日 星期五

  • 修复控制器支持较新facade版本时的失败(#145)

  • 修复测试失败(#163)

  • 修复添加新模型时的SSH密钥处理(#161)

  • Make Application.upgrade_charm升级资源(#158)

  • 将集成测试扩展到使用稳定的/边缘版本的juju (#155)

  • 将文档移动到ReadTheDocs (https://pythonlibjuju.readthedocs.io/en/latest/)

0.6.0

2017年6月29日,星期四

  • 实现scp功能 (#149)

  • 添加Unit.public_address属性 (#153)

  • 添加在模型上获取/设置配置的支持 (#152)

0.5.3

2017年6月22日,星期四

  • 改进处理已关闭连接的方式 (#148)

  • 可配置的更大最大消息大小 (#146)

0.5.2

2017年6月14日,星期三

  • 修复部署非稳定渠道和显式修订版本 (#144)

0.5.1

2017年6月13日,星期二

  • 更新Juju 2.3 alpha1的架构 (#142)

  • 改进API文档导航和覆盖范围 (#141)

  • 在Model.add_machine文档中添加类型信息 (#138)

0.5.0

2017年6月8日,星期四

  • 添加机器状态属性 (#133)

  • 添加模型上下文管理器 (#128)

  • 实现Application.upgrade_charm方法 (#132)

0.4.3

2017年6月1日,星期四

  • 优雅地接受新的/未知的API字段 (#131)

  • 在ModelInfo中添加新的agent-version字段的支持 (#131)

  • 在安装说明中用pip3替换pip (#129)

  • 从本地charm URL中移除local:-前缀 (#121)

0.4.2

2017年5月10日,星期三

  • 支持(并优先)每个控制器的macaroon文件 (#125)

0.4.1

2017年4月27日,星期三

  • 删除VERSION_MAP并依赖于控制器的外观列表 (#118)

  • 重构连接任务管理以避免取消 (#117)

  • 重构登录代码以更好地处理重定向 (#116)

0.4.0

2017年4月19日,星期三

  • 支持/添加功能/api版本 (#109)

  • 在controller.py中扩展基本用户功能,get_models和destroy (#89)

  • 在Connection中添加Monitor类 (#105)

  • 支持放置列表 (#103)

  • 部署时包含来自存储的资源 (#102)

  • 在访问模型属性时允许下划线到短划线的转换 (#101)

  • 添加到ssh修复的控制台 (#100)

  • 重新生成架构以获取缺失的API

  • 改进错误处理

  • 修复我们没有检查是否收到正确响应的问题。

  • 重试对charmstore的调用并增加超时到5秒

  • 使connect_model和deploy更友好

  • 修复模型名称不包括用户的问题

  • 实现Model.get_status

  • 添加集成测试。

0.3.0

2017年2月27日,星期一

  • 修复放置指令的docstrings。

  • 实现Model.add_machine()

  • 错误修复 - Model.deploy()中的“to”参数损坏

  • 为添加机器、容器以及将charm部署到它们的文档和示例。

  • 当Machine.destroy()阻塞当前协程时,返回只有在机器实际上从远程模型中删除后,这与其他API的工作方式(例如Model.deploy(),Application.add_unit()等)更一致。

  • 在所有未实现的方法存根中引发NotImplementedError,而不是静默传递。

0.2.0

2017年2月16日,星期四

  • 将默认SSH密钥添加到新创建的模型中。

  • 添加循环助手并简化examples/deploy.py

  • 添加支持部署本地charm和包含本地charm路径的包。

  • 添加获取控制器云名称的能力。

  • 错误修复 - 修复Model.destroy_unit()中使用的错误API

  • 在包部署中添加错误检测。

0.1.2

2016年12月22日,星期四

  • 错误修复 - 将文档包含在包中

0.1.1

2016年12月22日,星期四

  • 错误修复 - 将VERSION文件包含在包中

0.1.0

2016年12月21日,星期三

  • 初始发布

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适用于您平台的文件。如果您不确定该选择哪个,请了解更多关于 安装包 的信息。

源分布

juju-3.5.2.0.tar.gz (613.9 kB 查看哈希值)

上传时间

支持者