Skip to content

Releases: canonical/operator

2.8.0: Unit.reboot, RelationMeta.optional, and type-checked tests

25 Oct 01:45
7904739
Compare
Choose a tag to compare

This release includes a few small improvements: a new function Unit.reboot() (for machine charms only), the "optional" attribute of relations in metadata.yaml is now available in the RelationMeta object, and if the Pebble socket is missing (for example, if the container has just rebooted) we provide a clearer exception:

  • feat: add Unit.reboot for machine charms in #1041
  • feat: add RelationMeta.optional in #1038
  • feat: provide a clearer exception when the Pebble socket is missing in #1049

We fixed a couple of small issues:

  • fix: push_path and pull_path include empty directories in #1024
  • fix: reset collected statuses in Harness.evaluate_status in #1048

We've also made a few small improvements to the documentation:

  • docs: note that status changes are immediate in #1029
  • docs: add note to ActionEvent.set_results about maximum size in #1047
  • docs: document more of the exceptions that may be raised in #1044
  • docs: make pebble.Client.remove_path and Container.remove_path docs consistent in #1031
  • docs: update the PyPI development status to production/stable in #1020

Finally, we wrapped up our work on #1007, so the test suite is now fully type checked, did a couple of other minor type hinting improvements, and broke out the 'real' Pebble tests into a separate file for more clarity (you can still just run tox -e pebble):

  • test: add type hints to test_testing in #1017
  • test: add type hints to test_model in #1015
  • test: add type hints to test_charm in #1022
  • test: add type hints to test_storage in #1023
  • test: add type hints to test_framework in #1025
  • test: add type hints to test_main in #1028
  • test: add type hints to pebble-related tests in #1030
  • test: separate the real pebble tests into a separate module in #1018
  • chore: remove as much 'if typing.TYPE_CHECKING:' as possible in #1034
  • feat: narrow the type for 'app' and 'unit' in relation events by in #1032

Full Changelog: 2.7.0...2.8.0

2.7.0: Unit.set_ports(), and minor docs, CI, and test improvements

28 Sep 22:16
a59f50f
Compare
Choose a tag to compare

This release includes one new feature, a new function Unit.set_ports() to declare which ports should be open. We recommend using this method rather than managing multiple Unit.open_port() and Unit.close_port() calls:

  • feat: add Unit.set_ports() for declarative port opening #1005

We've also made a few small improvements to the documentation:

  • docs: reduce the amount of detail in the open/close port methods in #1006
  • docs: remove 'you' and 'your' from docstrings in #1003
  • docs: minor cleanup of the HACKING doc in #1016

Finally, we've also made a start expanding our type hinting to cover the test suite, and made a couple of minor improvements/fixes to our CI:

  • test: add type hints to the test_infra tests in #1008
  • test: add type hints to test_log tests by in #1009
  • test: fix type hinting on test_jujuversion tests in #1011
  • test: fix type hint warnings in test_private tests in #1012
  • test: add type hinting to test_lib by in #1012
  • test: add type hinting to test_helpers in #1014
  • ci: use Go 1.20 for real Pebble tests in #1004
  • ci: re-enable integration tests with mysql-*operator by in #1013

(Thanks @tonyandrewmeyer for your first contributions, and welcome to the team!)

Full Changelog: 2.6.0...2.7.0

2.6.0: Harness.handle_exec, Harness.add_relation improvements, and more

30 Aug 21:24
c4e3266
Compare
Choose a tag to compare

This release has two significant improvements to testing.Harness:

  • Add Harness.handle_exec to allow charm tests to simulate Container.exec calls (Pebble one-shot commands) and provide expected output. Thanks @weiiwang01 for the design and implementation (PR 993).
  • Simplify adding relation units and relation data by adding app_data and unit_data parameters to Harness.add_relation. Previously, charm tests would have to call add_relation followed by add_relation_unit and update_relation_data -- now only a single add_relation call is required. Implemented in PR 994.

In addition, several small improvements and fixes are included:

  • feat(model): add Secret.unique_identifier (XID part); improve id/label docs in #986
  • fix(testing): ignore push() encoding if source is a binary file or stream in #991
  • fix(pebble): remove use of deprecated cgi module in Pebble code in #996
  • fix(model): ensure Secret.get_content returns a copy of the dict in #1000
  • fix(model): make Secret.set_content invalidate local cache by in #1001

See all changes from 2.5.0 to 2.6.0.

2.5.1: Fix str vs bytes issue with testing push()

16 Aug 08:29
Compare
Choose a tag to compare

This is a patch fix on top of 2.5.0 to fix #990: "TypeError: write() argument must be str, not bytes" in Container.push under Harness.

2.5.0: Collect-status, Harness.get_filesystem_root, Pebble service context

31 Jul 22:26
ca04872
Compare
Choose a tag to compare

This release includes three significant additions:

  1. Multi-status: An initial version of the much-discussed "multi-status" handling in the form of the new collect_app_status and collect_unit_status events. This is useful for letting the framework automatically evaluate application (or unit) status from various components of the charm. We'll be documenting this properly soon, but in the meantime, read the API reference docs on CollectStatusEvent. PR #954.
  2. Harness.get_filesystem_root: Overhauling the Harness's test filesystem from an in-memory filesystem to use a temp directory on the real filesystem; use Harness.get_filesystem_root to get the temp filesystem directory for a specific container. This makes testing container filesystem operations significantly easier and allows tests to use the regular Python file APIs to interact with it. Thanks @weiiwang01 for his efforts on this in #960.
  3. Service context: Added support for Pebble's new "service context" feature, to allow you to exec commands in the context of a specified service (where context means environment variables, working directory, and user/group). PR #957.

Other notable changes:

In addition, the following developers made their first contribution:

  • @paulomach in #975 (Add kill-delay to pebble ServiceDict type)
  • @sobolevn in #978 (Replace typing.AnyStr with Union[str, bytes])
  • @syu-w in #977 (Support reading charmcraft.yaml in testing harness)

We also made several other minor improvements to type annotations and a few other tweaks. See the full changelog: 2.4.1...2.5.0

2.4.1: Add type annotation for PebbleReadyEvent.workload

04 Jul 04:58
eb57958
Compare
Choose a tag to compare

This is a patch release: a minor but important type annotation forgotten in 2.4.0. Without it, charms that use type annotation on the pebble-ready events will fail type checking, because attributes of the workload won't be available as Pyright/MyPy doesn't know the type.

Fix in #962.

2.4.0: Improvements to API docs and type annotations

04 Jul 03:42
384ef3a
Compare
Choose a tag to compare

This release has no new functionality, but includes various improvements to API docs (docstrings) and type annotations, as well as a couple of minor bug fixes. Our API reference docs on Read The Docs look nicer, are more consistent, and have better types.

One change that may affect charms that use type checking: the new ops.X syntax will now work with type checkers (Pyright and MyPy) due to adding an explicit __all__ to ops/__init__.py (#937). Oh, and we fixed a bug with relative paths in Container.push_path -- thanks @yanksyoon!

See the full list of PRs merged below.

What's Changed

  • Lock docs dependencies; build docs with recent Sphinx version by @benhoyt in #938
  • Explicitly add all public ops.X names to __all__ in __init__.py by @benhoyt in #937
  • Use Canonical-ish theme from canonical/sphinx-docs-starter-pack by @benhoyt in #941
  • Use PurePath type annotation when path casted to string by @carlcsaposs-canonical in #946
  • Update Pyright version to latest (1.1.313) by @benhoyt in #944
  • Fix sphinx-build warnings and turn warnings into errors by @benhoyt in #942
  • Reinstate alertmanager-k8s-operator CI tests now that issue is fixed by @benhoyt in #951
  • Remove jargon from and simplify README by @benhoyt in #950
  • Fix issue with relative paths in Container.push_path by @yanksyoon in #949
  • Avoid error in FileInfo repr due to permissions being None by @benhoyt in #956
  • Various docstring and type annotation updates by @benhoyt in #953
  • Add "-> None" to methods without other types by @benhoyt in #961

New Contributors

Full Changelog: 2.3.0...2.4.0

2.3.0: Fix planned_units to exclude dying

31 May 00:28
b06697c
Compare
Choose a tag to compare

This release includes only one minor functional changes: a fix to Application.planned_units to exclude dying units from the total (#936).

Also included is a type annotation fix to an internal testing method (#926).

To use this version, update the ops line in your requirements.txt to ops==2.3.0.

1.5.5: Backport "error" status fix to 1.5

25 Apr 12:42
5bbc50f
Compare
Choose a tag to compare

This releases the backport of the "error" status fix #875 to the 1.5-maintenance branch (PR #927).

2.2.0: Harness.add_network, simplified "import ops"

27 Mar 23:34
a8717ea
Compare
Choose a tag to compare

This is version 2.1.0 of ops, which includes the following changes:

Harness.add_network

In #846 we added Harness.add_network, which allows developers who write charm unit tests to easily add simulated data for the bind address and network information. This is a small but long-requested feature that will avoid charmers patching internal ops methods. Fixes #456.

Simplified way to import ops

In #910 we added a simplified way to import ops: it pulls most of the names in the various ops.foo sub-modules into the top-level ops module so that charmers don’t have to remember which sub-module each class comes from. This also makes the various ops classes more discoverable with an IDE’s autocomplete. Fixes #731.

Other minor changes

There are also a few other minor changes, including the addition of Layer.__eq__ to allow you to compare pebble.Layer objects with the == operator. See the full list of commits in this release.