Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[JUJU-1542] Fix run actions on units #698

Merged
merged 2 commits into from
Aug 2, 2022

Conversation

cderici
Copy link
Contributor

@cderici cderici commented Aug 1, 2022

Description

This changes the function that's used for running an action on a unit from Action.Enqueue to Action.EnqueueOperation, because it's the most up to date one and also the former one is deprecated in Action v7 facade.

QA Steps

The qa steps I followed were with a k8s model. So get a controller on a k8s cloud.
The following then should work fine.

async def _get_password():
    model = Model()
    await model.connect()
    await model.deploy('zinc-k8s')
    await model.wait_for_idle(status="active")

    unit = model.applications['zinc-k8s'].units[0]
    action = await unit.run_action("get-admin-password")
    results = await action.wait()
    print(results["admin-password"])
    await model.disconnect()

Notes & Discussion

  • Maybe we should also add an integration test with an example action to make sure we won't regress from this in the future.

@juanmanuel-tirado
Copy link
Contributor

Rerun tests after merging #697

Copy link
Contributor

@juanmanuel-tirado juanmanuel-tirado left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG2M

@juanmanuel-tirado
Copy link
Contributor

/merge

@jujubot jujubot merged commit 34981c5 into juju:master Aug 2, 2022
@sed-i
Copy link
Contributor

sed-i commented Aug 2, 2022

I'm now getting

  File "/home/runner/work/prometheus-k8s-operator/prometheus-k8s-operator/.tox/integration/lib/python3.8/site-packages/juju/unit.py", line 167, in run_action
    res = await action_facade.EnqueueOperation(actions=[client.Action(
AttributeError: 'ActionFacade' object has no attribute 'EnqueueOperation'

Not sure if it's because of this change.

@cderici
Copy link
Contributor Author

cderici commented Aug 2, 2022

@sed-i It's for sure because of this change, but afaik the juju 2.9's Action v6 facade should have an EnqueueOperation function. Is it possible for you to upgrade to juju 2.9/stable (that's 2.9.32 I think)?

@sed-i
Copy link
Contributor

sed-i commented Aug 3, 2022

Oh nice, I didn't know.
Most (all?) observability tests are pinned to 2.9.29 because of https://bugs.launchpad.net/juju/+bug/1977582, so only if 2.9.33 fixes it we would unpin.

BTW would it be easy for pylibjuju to raise a runtime error if the controller version is too old?

@juanmanuel-tirado
Copy link
Contributor

We have not decided so far the list of Juju controllers to be supported by every pylibjuju version. But that makes perfect sense.

jujubot added a commit that referenced this pull request Aug 9, 2022
#704

Tuesday August 9 2022

## What's Changed

Switching to semantic versioning. From this release on, at least the major release number matches
the most recent Juju supported. Hence the jump to `3.0.0` since this release supports `Juju 3.0`.
(This also means that `python-libjuju <= 2.9.11` only support up to `Juju 2.x`)

* [JUJU-1439] Initial fixes for `test_model` to pass with juju 3.0 by @cderici in #689
* [JUJU-1464] More fixes for 3.0 compatibility by @cderici in #691
* [JUJU-1457] Merge 3.0 compatibility branch onto master by @cderici in #692
* Fix conditional by @sed-i in #696
* [JUJU-1534] Fix `model.connect_current()` by @cderici in #697
* [JUJU-1542] Fix run actions on units by @cderici in #698
* [JUJU-1577] Replace k8s bundles with machine bundles for tests by @cderici in #703
* [JUJU-1528] Add storage implementation by @cderici in #701

[JUJU-1439]: https://warthogs.atlassian.net/browse/JUJU-1439?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-1464]: https://warthogs.atlassian.net/browse/JUJU-1464?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-1457]: https://warthogs.atlassian.net/browse/JUJU-1457?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-1534]: https://warthogs.atlassian.net/browse/JUJU-1534?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-1542]: https://warthogs.atlassian.net/browse/JUJU-1542?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-1577]: https://warthogs.atlassian.net/browse/JUJU-1577?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
[JUJU-1528]: https://warthogs.atlassian.net/browse/JUJU-1528?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
@cderici cderici deleted the fix-run-actions-on-units branch August 9, 2022 21:55
jujubot added a commit that referenced this pull request Aug 11, 2022
#706

#### Description

This change attempts to fix the `Unit.run_actions` issue where the resulting object is different based on the used Facade (which is based on whether the `2.9` or `3.0` juju client is being used). With this change both ways will return the same type of object as a result of running the action on the unit. It's also a continuation/possible-regression-fix of #698.

Also adding the `EnvironUpgrader` facade that's introduced in `Juju 3.0`, so we shouldn't get the "unexpected facade" warning anymore.

Also updating the clients with the latest schema from juju 3.0. In particuılar the Application facade version is bumped up `13` -> `14`.

With this #705 should be fixed too. 

#### QA Steps

QA steps for this is sort of a simulation of one of the real world libjuju uses in a function on [mongodb-operator](https://github.com/canonical/mongodb-operator/blob/8796be02e10b84f990da0426ad1cff5922dc506a/tests/integration/helpers.py#L39).

Get a controller on a k8s cloud (I did it on `microk8s`). The following then should work fine.
Full QA should be done with 2 separate controllers (at least that's what I did): one bootstrapped with `juju 2.9` and another with `juju 3.0`.

```python
async def _get_password():
 model = Model()
 await model.connect()
 await model.deploy('zinc-k8s')
 await model.wait_for_idle(status="active")

 unit = model.applications['zinc-k8s'].units[0]
 action = await unit.run_action("get-admin-password")
 action = await action.wait()
 print(action.results["admin-password"])
 await model.disconnect()
```

#### Notes & Discussion

This is also related (and most likely a fix) to:
* openstack-charmers/zaza#545
* openstack-charmers/zaza#546
* https://github.com/canonical/mongodb-operator/runs/7761747331?check_suite_focus=true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants