-
Notifications
You must be signed in to change notification settings - Fork 508
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
Ensure refresh uses version #12879
Ensure refresh uses version #12879
Conversation
The risk is there to be used sometime in the future, we don't know how to handle it atm, but we shouldn't error out when we see it. The following allows the parsing of that. I expect the future implementation to just drop the risk on the floor, but we shouldn't prevent charmhub charms from dying because of it.
The following ensures that we handle the version correctly when installing a charm. Currently we get a series from the charm URL and we actually need the version. The following code gets the version from the series and drops the channel risk on the floor.
Looks okay in the microk8s world. The charm installed and is active. |
As @SimonRichardson found, we need to track down why this charm was able to look like it's deploying on lxd, which it shouldn't |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM,
|
|
||
platform = charmhub.RefreshPlatform{ | ||
Architecture: origin.Platform.Architecture, | ||
OS: origin.Platform.OS, | ||
Series: origin.Platform.Series, | ||
Series: version, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are we passing Series here vs Base?
It feels like we are spending a lot of effort to map Platform back to series in order to refresh with series, but Charmhub is passing us back
$ curl -XPOST -s https://api.charmhub.io/v2/charms/refresh -H 'Content-type: application/json' -d '{"context": [], "actions": [{"name": "facundo-snappass-test", "base": {"architecture": "amd64", "name": "NA", "channel": "NA"}, "action": "install", "instance-key": "a-test"}]}' | jq
{
"error-list": [],
"results": [
{
"charm": null,
"error": {
"code": "invalid-charm-platform",
"extra": {
"default-bases": [
{
"architecture": "amd64",
"channel": "20.04",
"name": "ubuntu"
}
],
"default-platforms": [
{
"architecture": "amd64",
"os": "ubuntu",
"series": "focal"
}
]
},
"message": "Instance key 'a-test' invalid 'platform' in 'install' for charm_id=C3cqgiAPo0liBr4vwGUzTFl297c5SpMs name=facundo-snappass-test"
},
"id": "C3cqgiAPo0liBr4vwGUzTFl297c5SpMs",
"instance-key": "a-test",
"name": "facundo-snappass-test",
"released-at": null,
"result": "error"
}
]
}
Which does have platform, but it also has bases, which we can pass back in.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is part of the boundary of where we're using series vs base in juju. Eventually RefreshPlatform must become RefreshBase, but currently that's hidden inside of charmhub pkg.
Though it brings up a good question of why the change charmhub wasn't enough for this, perhaps that should have been tweaked instead.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Perhaps this should have been addressed in here:
Line 443 in d25ae72
func constructRefreshBase(platform RefreshPlatform) (transport.Base, error) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I can fix this tomorrow morning
// Base channel can be found as either just the version `20.04` (focal) | ||
// or as `20.04/latest` (focal latest). We should future proof ourself | ||
// for now and just drop the risk on the floor. | ||
parts := strings.Split(channel, "/") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I appreciate future proofing. But I'm concerned that we are future proofing in a way that just says "don't do what they say to do in the future".
I'd rather validate that the rest of the string is something that matches (eg, '/stable' or '/latest' or '/latest/stable') and otherwise fail rather than silently doing the wrong thing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'll validate based on the risk tomorrow morning
#12909 Merge 2.9 #12827 Unsubscribe from hub when closing state pool #12829 Correct default bootstrap-timeout value displayed in help. #12840 Constraint tags can be used for pod affinity #12842 Fix upgrade series agent version handling #12794 Add disk provisioning customization #12845 Restore space support for manual machines #12839 Support merging of netplan configs #12853 Add display type for network-get results #12854 Fix for LP1921557 sni in Juju login. #12850 Use Base in Charmhub packge and its response structures. #12858 Ensure assess-upgrade-series does not report started prematuremly #12860 Removed logging from core annotations. #12861 Fixes bug where empty error can happen in storage #12865 Update Pebble version to include new files API #12866 Workaround for k8s dashboard URL with k8s client proxy #12862 Fix/lp 1923051 #12867 Fix/lp 1923561 #12870 Use channel logic in charm library #12873 Add support for setting pod affinity topology key #12874 Use Patch instead of Update for ensuring ingress resources #12831 Integration fixes #12879 Ensure refresh uses version #12864 bug: fix for bootstrap fail on vsphere 7 + multi network #12883 Initial work to allow juju trust for sidecar charms #12884 Fix ssh with sidecar charms and containers. #12886 Charmhub bases #12881 Use charm pkg updates #12889 Ignore projected volume mounts when looking up juju storage #12890 Fix passing empty string container name to unit params #12893 Add CLA checker GH action and remove codecov push action #12897 Use production charmhub endpoint #12887 Resource validation error #12888 Ensure we validate the model target #12898 Remove usage of systems package from CAAS application provisioner #12899 CAAS bundle deployments #12900 Bump up Pebble version to include user/group in list-files #12901 charm Format helper #12902 charm Iskubernetes helper #12903 Display ... for really long k8s app versions in status #12904 Filter out more full registry paths for app version in status #12905 Fix k8s bundle deploys with v2 charms #12906 Register resource-get for containeragent binary Conflicts mostly due to charm v8 vs v9 imports. The other one was due to changes to dashboard CLI. ``` # Conflicts: # api/common/charms/common.go # api/common/charms/common_test.go # apiserver/facades/client/application/application.go # apiserver/facades/client/application/charmstore.go # apiserver/facades/client/application/update_series_mocks_test.go # apiserver/facades/client/charms/client.go # apiserver/facades/client/charms/convertions.go # apiserver/facades/client/machinemanager/types_mock_test.go # apiserver/facades/controller/caasoperatorprovisioner/provisioner.go # cmd/juju/application/deployer/bundlehandler_test.go # cmd/juju/application/refresh_test.go # cmd/juju/application/refresher/refresher_mock_test.go # cmd/juju/dashboard/dashboard.go # core/charm/strategies_mock_test.go # core/model/model.go # core/model/model_test.go # go.mod # go.sum # resource/resourceadapters/charmhub.go # scripts/win-installer/setup.iss # service/agentconf_test.go # snap/snapcraft.yaml # state/charm.go # state/migration_export.go # state/state.go # version/version.go # worker/caasfirewallerembedded/applicationworker.go # worker/caasfirewallerembedded/applicationworker_test.go ``` ## QA steps See PRs
The following ensures that we handle the version correctly when
installing a charm. Currently, we get a series from the charm URL and we
actually need the version. The following code gets the version from the
series and drops the channel risk on the floor.
QA steps