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

Roadmap #25

Closed
18 of 25 tasks
b-rowan opened this issue Jul 22, 2024 · 8 comments
Closed
18 of 25 tasks

Roadmap #25

b-rowan opened this issue Jul 22, 2024 · 8 comments
Labels
duplicate This issue or pull request already exists

Comments

@b-rowan
Copy link
Contributor

b-rowan commented Jul 22, 2024

As per #18, adding this separately so these should be able to be converted to issues independently, then closed nicely with PRs.

Basic Features Release (v0.2.0)

Basic features implemented. Can be deployed through docker.

Features

Stability Improvements

Operational Improvements

Quickstart Release (v0.3.0)

Lower the barrier to entry for new users by providing comprehensive documentation for both a quick start and a production-ready deployment of gooseBIt.

Documentation

  • Reduce README.md, move content to Read the Docs.
  • Getting started guide: explain steps to update a device.
  • Production deployment steps

Fixes / Minor Improvements

Enhanced Features Release (v0.4.0)

Extend gooseBit with additional functionality.

Features

Documentation

  • Contributors guide: how to change db schema, ...
@tsagadar
Copy link
Collaborator

To implement "Prevent unnecessary initial updates", have solid statistics for "Rollout abort" and to tick "Review action_id usage" we should find a conceptual agreement on how to track updates. Here some options I could imagine. Not really sure what the best approach is.

Only rely on device reporting "installed version"

gooseBit would mandate devices to report "installed_version". With this, it could easily prevent providing an outdated or no-op (same version) update to a device.

Downside: when feedback reports a successful update, it is not 100% clear if this is due to a manually assigned firmware or due to a rollout (as config could have changed in the meantime). Worse even for a failed update: it just has to be assumed that the currently matching config is what has failed. So a newly created rollout would update its statistics based on updates started with the previous rollout.

Use firmware_id as action_id

Introduce firmware DB table so that every firmware gets a unique identifier (use an always increasing PK). Provide this ID as the action_id when a device should install a firmware. This ensures, that device feedback can always be mapped to the firmware that was (tried to) install. So a newly created rollout won't get statistics attributed of updates that were in progress.

Downside: cannot prevent an initial no-op update. Not 100% clear if feedback relates to manually assigned firmware or rollout in case that config changed.

Use rollout_id as action_id

Idea: get rid of manually assigned updates, only support rollouts and use the rollout_id as action_id. So if single device should get specific update, create a rollout for a new feed and assign the device to the feed.

Downside: cannot prevent an initial no-op update. Somewhat limited user experience.

Create update_action for each update

Idea: before sending an available update to a device create an update_action record that captures device_id and firmware_id and has a PK. This PK can be used as the action id.

Downside: cannot prevent an initial no-op update. Becomes DB heavy (like hawkBit)

Open questions

Things I have not yet fully understood / tested

  • Behavior of swupdate if update image has lower version number? What are the configuration options? Do we expect a certain configuration?
  • Behavior of swupdate if update image has lower version number? What are the configuration options? Do we expect a certain configuration?

Proposal

Maybe best to combine the approach of mandating that devices report their installed version plus using a firmware_id as the action_id?

@easybe
Copy link
Collaborator

easybe commented Jul 23, 2024

Another important topic is token-bases API access. We need to be able to create firmware entries and rollouts with our CI system. Is this already possible?

@b-rowan
Copy link
Contributor Author

b-rowan commented Jul 23, 2024

Another important topic is token-bases API access. We need to be able to create firmware entries and rollouts with our CI system. Is this already possible?

It should be, or at least should be simple enough to implement. I think right now it is just using a session cookie, but easy enough to have it sent in the header. What is your preference here on how to get/use that token?

@b-rowan
Copy link
Contributor Author

b-rowan commented Jul 23, 2024

Maybe best to combine the approach of mandating that devices report their installed version plus using a firmware_id as the action_id?

I have no clue what the best way to do this is, it's quite a complicated problem. I know you have been doing some work on rollouts though, so I'm willing to defer to your proposal here. Worst case scenario you find out it doesn't work the way you want and we have to change it, which I think is totally acceptable. This will be a learning experience in any case.

@easybe
Copy link
Collaborator

easybe commented Jul 23, 2024

Another important topic is token-bases API access. We need to be able to create firmware entries and rollouts with our CI system. Is this already possible?

It should be, or at least should be simple enough to implement. I think right now it is just using a session cookie, but easy enough to have it sent in the header. What is your preference here on how to get/use that token?

Some user management, where a static token can be generated or a password can be set, would be great. The token would then be passed in a header. Normally basic auth is used for that, don’t know if and how it can be done with oauth.

@b-rowan
Copy link
Contributor Author

b-rowan commented Jul 23, 2024

Some user management, where a static token can be generated or a password can be set, would be great. The token would then be passed in a header. Normally basic auth is used for that, don’t know if and how it can be done with oauth.

Technically the token is already static PROVIDED a static SECRET value is set, since then it is just a JWT with the claim holding the username of the authenticated user. With the secret value being randomized on each startup this doesn't work though.

@tsagadar
Copy link
Collaborator

tsagadar commented Sep 2, 2024

Updated roadmap with v0.3.0 and v0.4.0. Any opinions if this is the proper focus / order?

Currently I think it is hard for interested parties to quickly try out gooseBit. This is what I'd wanted to improve first.

@b-rowan b-rowan added the duplicate This issue or pull request already exists label Sep 4, 2024
@tsagadar
Copy link
Collaborator

tsagadar commented Sep 6, 2024

As we moved roadmapping to use milestones, this issue can be closed.

@tsagadar tsagadar closed this as completed Sep 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
duplicate This issue or pull request already exists
Projects
None yet
Development

No branches or pull requests

3 participants