Skip to content

Add filtering to all API collections #1679

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

Merged
merged 18 commits into from
Feb 27, 2025
Merged

Add filtering to all API collections #1679

merged 18 commits into from
Feb 27, 2025

Conversation

gwenya
Copy link
Contributor

@gwenya gwenya commented Feb 21, 2025

This PR aims to make odata-like filtering available for all collection endpoints (see #1674).

So far I have only implemented it for /1.0/networks, could someone take a quick look and tell me if the way I'm doing this is alright, before I work on the other endpoints?

Closes #1674

@stgraber
Copy link
Member

You're missing the Signed-off-by line and the extra import needs to be moved down with the other internal imports.

@stgraber
Copy link
Member

@gwenya is that the whole set?

If so, I can take a look at the remaining test failures and get this merged.

@github-actions github-actions bot added Documentation Documentation needs updating API Changes to the REST API labels Feb 27, 2025
@stgraber stgraber changed the title odata filtering for all collections Add filtering to all API collections Feb 27, 2025
@stgraber
Copy link
Member

I've fixed the issues reported by make static-analysis and did a quick rebase with minor re-titling of the commits, added the output of make update-api and added an API extension so we can detect this change.

Assuming this passes all tests and that there isn't anything missing, we should be good to go with this.

@stgraber
Copy link
Member

Looking good, just need to retry that random failure

@gwenya
Copy link
Contributor Author

gwenya commented Feb 27, 2025

@stgraber it is the whole set unless I missed something, but I am not yet actually certain that it works :D

There aren't any tests for it and I'm not sure how or where to write any, and I haven't gotten around yet to manually testing all of them.

There's also something weird with the formatting of the swagger specs, something (probably my IDE) kept indenting them with mixed tabs and spaces when I committed, and I only noticed afterwards and didn't yet get around to fix that.

I would also like to add the filtering support to the client like we have it for the existing filter-capable endpoints, but maybe that should be a separate PR.

@stgraber
Copy link
Member

There aren't any tests for it and I'm not sure how or where to write any, and I haven't gotten around yet to manually testing all of them.

I'll take a quick look at that. We should be able to do a few basic tests with incus query until the various CLI commands get updated to use the server-side filtering logic.

There's also something weird with the formatting of the swagger specs, something (probably my IDE) kept indenting them with mixed tabs and spaces when I committed, and I only noticed afterwards and didn't yet get around to fix that.

Yeah, it's a bit of a mess and definitely inconsistent. I've been tempted a few times to try and sort that mess out but always ran out of time ;)

I would also like to add the filtering support to the client like we have it for the existing filter-capable endpoints, but maybe that should be a separate PR.

Incus 6.10 is getting tagged later today so I think it'd make sense to merge the API side today (after I do some manual tests and add a few automatic ones), then 6.11 can start making use of it from the CLI.

That basically allows for API users to start kicking the tires on this without the new logic being used for everyone, allowing for a slower roll out.

@stgraber
Copy link
Member

I edited all the swagger chunks in those files to remove the tabs. That took some effort as gofmt kept wanting to put them back in.

@stgraber
Copy link
Member

I still need to fix a crash in the buckets code and validate certificates, profiles and projects, but otherwise this is starting to behave.

I had to fix a few cases where a pointer was being passed to the filter which then leads to a crash when processing the request, that's been the most common issue so far.

@stgraber stgraber marked this pull request as ready for review February 27, 2025 21:43
@stgraber stgraber self-requested a review as a code owner February 27, 2025 21:43
@stgraber stgraber enabled auto-merge February 27, 2025 21:43
@gwenya
Copy link
Contributor Author

gwenya commented Feb 27, 2025

thank you, that is amazing!
Sorry for letting you do half the work, I got pretty busy the past couple days and couldn't give it the attention I wanted to :/

@stgraber
Copy link
Member

There really wasn't much left.

Most of the time was spent fighting gofmt trying to mess with the swagger text and then running into a limitation of the filters on structs with multiple in-line yaml statements. The rest was pretty smooth sailing, just testing everything and occasionally having to fix the exact struct being passed to the filter, but that just took a few minutes to work out.

@stgraber stgraber merged commit 383b6d9 into lxc:main Feb 27, 2025
36 checks passed
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Mar 2, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [lxc/incus](https://github.com/lxc/incus) | minor | `v6.9.0` -> `v6.10.0` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>lxc/incus (lxc/incus)</summary>

### [`v6.10.0`](https://github.com/lxc/incus/releases/tag/v6.10.0): Incus 6.10

[Compare Source](lxc/incus@v6.9.0...v6.10.0)

#### What's Changed

-   incusd/instance/drivers/qmp: Handle missing log directory by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1604
-   incus-user: keep track of socket path used to connect to the server by [@&#8203;bboozzoo](https://github.com/bboozzoo) in lxc/incus#1607
-   incus-user: unify logging, support --verbose and --debug by [@&#8203;bboozzoo](https://github.com/bboozzoo) in lxc/incus#1606
-   Add project support to profiles in preseed init by [@&#8203;megheaiulian](https://github.com/megheaiulian) in lxc/incus#1608
-   incusd/network/ovn: Fix bad route check by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1616
-   incus/file/pull: Ensure we have a leading / in all paths by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1617
-   incus/file/pull: Read files in chunks by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1623
-   doc/installing: mention incus group on NixOS by [@&#8203;dawidd6](https://github.com/dawidd6) in lxc/incus#1622
-   incus/file/pull: Actually make read buffer 1MiB by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1624
-   Translations update from Hosted Weblate by [@&#8203;weblate](https://github.com/weblate) in lxc/incus#1639
-   incusd/device/disk: Allow virtiofsd on non-x86 by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1638
-   Translations update from Hosted Weblate by [@&#8203;weblate](https://github.com/weblate) in lxc/incus#1640
-   Translations update from Hosted Weblate by [@&#8203;weblate](https://github.com/weblate) in lxc/incus#1642
-   incusd/instance/drivers/qemu: Add IOMMU device by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1644
-   incus/file: Remove unused function by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1645
-   Translations update from Hosted Weblate by [@&#8203;weblate](https://github.com/weblate) in lxc/incus#1646
-   incus/network/info (ovn): Fix object not found. by [@&#8203;rxtom](https://github.com/rxtom) in lxc/incus#1628
-   incusd/instance/drivers: Improve NUMA balancing by [@&#8203;lnutimura](https://github.com/lnutimura) in lxc/incus#1626
-   incusd/network/bridge: Fix deletion of tunnels and dummy devices by [@&#8203;montag451](https://github.com/montag451) in lxc/incus#1627
-   incus/file: Move from path to filepath by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1647
-   Added LZ4 support for incus import by [@&#8203;Spitfireap](https://github.com/Spitfireap) in lxc/incus#1611
-   Add `vrf` parameter for routed-nic devices by [@&#8203;ibot3](https://github.com/ibot3) in lxc/incus#1615
-   Translations update from Hosted Weblate by [@&#8203;weblate](https://github.com/weblate) in lxc/incus#1648
-   Translations update from Hosted Weblate by [@&#8203;weblate](https://github.com/weblate) in lxc/incus#1651
-   Move generators to the cmd package by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1652
-   Fix incorrect volume group naming when `vg_name` is not specified by [@&#8203;presztak](https://github.com/presztak) in lxc/incus#1653
-   Rename incus-generate and incus-doc by [@&#8203;breml](https://github.com/breml) in lxc/incus#1654
-   Implement `smbios11` config keys by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1655
-   Fix instance copy error when using '--refresh' flag by [@&#8203;presztak](https://github.com/presztak) in lxc/incus#1658
-   Fix docs for load balancer create backend by [@&#8203;gwenya](https://github.com/gwenya) in lxc/incus#1661
-   incusd/instance/utils: Only check uid/gid for containers by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1662
-   incusd/main_nsexec: Fix change_namespaces fallback to handle multiple… by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1664
-   Check if disk is remote when migrating with an extra disk by [@&#8203;presztak](https://github.com/presztak) in lxc/incus#1669
-   incusd/instance/edk2: Look for bios.bin in /usr/share/seabios by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1672
-   Replace ast.Package with types.Package by [@&#8203;breml](https://github.com/breml) in lxc/incus#1665
-   list/format: provide more information on error by [@&#8203;rxtom](https://github.com/rxtom) in lxc/incus#1666
-   Add additional validation when joining a new cluster member by [@&#8203;presztak](https://github.com/presztak) in lxc/incus#1680
-   Upgrade flosch/pongo2 to v6 by [@&#8203;nanjj](https://github.com/nanjj) in lxc/incus#1677
-   incusd/resources: Prevent concurrent runs and cache data for 10s by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1681
-   Fix importing from older backups by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1683
-   fix: Don't attempt to download signatures for oci by [@&#8203;m2Giles](https://github.com/m2Giles) in lxc/incus#1685
-   Ensure directories have 755 permissions in `incus file push -p` command by [@&#8203;presztak](https://github.com/presztak) in lxc/incus#1687
-   devcontainer: Update Go to 1.23 by [@&#8203;breml](https://github.com/breml) in lxc/incus#1689
-   Make "Code generated" comments for generate-database Go conformant by [@&#8203;breml](https://github.com/breml) in lxc/incus#1690
-   Disclaimer internal tool for generate-database and generate-config by [@&#8203;breml](https://github.com/breml) in lxc/incus#1694
-   Truncate the block file during custom volume migration by [@&#8203;presztak](https://github.com/presztak) in lxc/incus#1696
-   Rework virtiofsd uid/gid map handling by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1692
-   Remove unused arguments and parameters by [@&#8203;presztak](https://github.com/presztak) in lxc/incus#1699
-   generate-database: Use deferred func to map errors & make generated code self-sufficient by [@&#8203;breml](https://github.com/breml) in lxc/incus#1695
-   incus/top: Fix handling of all-projects by [@&#8203;stgraber](https://github.com/stgraber) in lxc/incus#1701
-   Ceph refactor by [@&#8203;MadnessASAP](https://github.com/MadnessASAP) in lxc/incus#1538
-   incus/file: Port remaining functions to SFTP by [@&#8203;HassanAlsamahi](https://github.com/HassanAlsamahi) in lxc/incus#1649
-   Add filtering to all API collections by [@&#8203;gwenya](https://github.com/gwenya) in lxc/incus#1679
-   Add provider for DNS-01 ACME challenge by [@&#8203;accuser](https://github.com/accuser) in lxc/incus#1668

#### New Contributors

-   [@&#8203;bboozzoo](https://github.com/bboozzoo) made their first contribution in lxc/incus#1607
-   [@&#8203;dawidd6](https://github.com/dawidd6) made their first contribution in lxc/incus#1622
-   [@&#8203;rxtom](https://github.com/rxtom) made their first contribution in lxc/incus#1628
-   [@&#8203;lnutimura](https://github.com/lnutimura) made their first contribution in lxc/incus#1626
-   [@&#8203;ibot3](https://github.com/ibot3) made their first contribution in lxc/incus#1615
-   [@&#8203;gwenya](https://github.com/gwenya) made their first contribution in lxc/incus#1661
-   [@&#8203;accuser](https://github.com/accuser) made their first contribution in lxc/incus#1668

**Full Changelog**: lxc/incus@v6.9.0...v6.10.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xODIuMyIsInVwZGF0ZWRJblZlciI6IjM5LjE4Mi4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
API Changes to the REST API Documentation Documentation needs updating
Development

Successfully merging this pull request may close these issues.

Filtering for other object collections
2 participants