Version 0.10.0 of `ops` released!

ops, the Operator Framework, provides a simple, lightweight, and powerful way of
writing Juju charms, the best way to encapsulate operational experience in code.

The framework will help you to:

  • model the integration of your services
  • manage the lifecycle of your application
  • create reusable and scalable components
  • keep your code simple and readable

You can read more about the project, including how to get involved, on github.

Release highlights:

  • deleting a non-existent key from relation data will no longer fail.
    Thanks to @stub42 for the fix.

  • calling begin_with_initial_hooks() on the testing harness of a charm
    that has a relation that isn’t set up before the call will no longer fail.
    Thanks to @zzehring for the fix.

  • the testing harness now starts with default config values, specified in the
    same way as for actions.yaml and metadata.yaml (i.e. snippets if given,
    otherwise from the canonical yaml file).
    Thanks to @johnsca for the work.

  • some classes now have custom __repr__ methods that should aid debugging.

  • event deferral and reëmission is now logged (at DEBUG).

  • if use_juju_for_storage is specified for a charm running in a Juju that does
    not support this feature, a clear and explicit error is raised.

  • the public attributes of model are now immutable. This is to discourage
    people from overwriting these attributes in tests, given there is a fair
    amount of internal state. Please use the harness instead (or mocking if you
    must).

  • the test suite now passes on Windows, and we run the full suite on Windows for
    every commit, as we do for linux and macos.