Releases: canonical/operator
2.8.0: Unit.reboot, RelationMeta.optional, and type-checked tests
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
andpull_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
andContainer.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
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
This release has two significant improvements to testing.Harness
:
- Add
Harness.handle_exec
to allow charm tests to simulateContainer.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
andunit_data
parameters toHarness.add_relation
. Previously, charm tests would have to calladd_relation
followed byadd_relation_unit
andupdate_relation_data
-- now only a singleadd_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
2.5.1: Fix str vs bytes issue with testing push()
2.5.0: Collect-status, Harness.get_filesystem_root, Pebble service context
This release includes three significant additions:
- Multi-status: An initial version of the much-discussed "multi-status" handling in the form of the new
collect_app_status
andcollect_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 onCollectStatusEvent
. PR #954. - Harness.get_filesystem_root: Overhauling the
Harness
's test filesystem from an in-memory filesystem to use a temp directory on the real filesystem; useHarness.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. - 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:
- Add
JujuVersion.supports_open_port_on_k8s
by @carlcsaposs-canonical in PR #965 - Support reading
charmcraft.yaml
in the testing harness by @syu-w in PR #977
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
2.4.0: Improvements to API docs and type annotations
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
- @carlcsaposs-canonical made their first contribution in #946
Full Changelog: 2.3.0...2.4.0
2.3.0: Fix planned_units to exclude dying
1.5.5: Backport "error" status fix to 1.5
2.2.0: Harness.add_network, simplified "import ops"
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.