fix(render): do not overwrite function docker network if set, start crossplane-container in same network#65
Conversation
|
Thanks for the PR, @nkzk! Would you mind creating an issue for this as well, for discoverability and tracking? I haven't reviewed in detail yet, but the described fixes sound reasonable. |
cad5894 to
abb26bd
Compare
|
I see that there are already tests for passing function annotations to the engine. I had copilot help me create unit tests for injectNetworkAnnotations. Also ran flake check. |
|
Hmm, i got it to work in a devcontainer with this fix, but the current implemention has some issues in CI. But i think this can be solved on the user-side. One of our earliest approaches was to start up functions as service-containers before running multiple/different renders, and it worked because gitlab/github connects the job-container to the bridge-network used by service-containers. But since crossplane render will start up crossplane in another temporary bridge network, it doesnt seem that this will continue to work. However, my theory is that the user can specify the docker-network in their CI-provider (gitlab/github), and then specify the the docker-network flag in the crossplane render command with the fix in this branch to solve this. We have another workflow which uses rootless DinD/PinP, but kind of the same issue there. I'll do some more testing soon. But let me know if something i say sounds off :D |
Signed-off-by: Nikita Z <nkzk95@gmail.com>
…ntainer in it Signed-off-by: Nikita Z <nkzk95@gmail.com>
Signed-off-by: Nikita Z <nkzk95@gmail.com>
Signed-off-by: Nikita Z <nkzk95@gmail.com>
Signed-off-by: Nikita Z <nkzk95@gmail.com>
669f038 to
396a2d1
Compare
|
Think this PR is ready for review, i did some more testing in CI and did not completely figure it out yet, but i think its just an issue of configuring the docker-network in CI and setting that value as the function-docker-network flag in the render-command. A quality of life improvement for us would be if we can spin up the crossplane container ourselves and make render use it. If we could configure the crossplane-containerthe same way as functions, with the development annotation to manage the container lifecycle ourselves, it would just simplify this alot for us. But maybe its out of scope for this PR, i'm not sure whats the best way to implement this would be. But open to work on it if someone has some ideas. |
Signed-off-by: Nikita Z <nkzk95@gmail.com>
|
Warning Review limit reached
More reviews will be available in 34 minutes and 44 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
📝 WalkthroughWalkthroughThe PR enables the render engine to accept a preconfigured Docker network, allowing callers to reuse existing networks instead of creating temporary ones on each render invocation. Both render subcommands now parse function annotations to detect and apply preconfigured network settings. ChangesDocker network preconfiguration support
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related issues
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 error, 1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
…tions in comment Signed-off-by: Nikita Z <nkzk95@gmail.com>
@nkzk Good thought - I can see how this would be useful. It's a little tricky, since the crossplane container in For your use-case, would it be easier to download a crossplane binary and use the |
adamwg
left a comment
There was a problem hiding this comment.
Thanks for filing an issue for this, and for the fix. A few comments inline, but the overall approach looks good to me.
| } | ||
| var networkID, networkName string | ||
|
|
||
| if e.network == "" { |
There was a problem hiding this comment.
I think this will also fix #96 :-).
Style nit: prefer to return early and keep the larger logic outdented, so:
if e.network != "" {
return func() {}, nil
}
// Network creation logic goes here.| // using the resolved image reference. The network parameter sets the Docker | ||
| // network the render container should join; it is derived from function | ||
| // annotations (AnnotationKeyRuntimeDockerNetwork) by the caller. | ||
| func NewEngineFromFlags(f *EngineFlags, network string, log logging.Logger) Engine { |
There was a problem hiding this comment.
I'd prefer not to introduce a new string argument here. Two possible options:
- Add
DockerNetworktoEngineFlags. This would let users specify--docker-networkon the command-line, which seems like it could be useful, butRuncan still infer it from function annotations by default. - Introduce functional arguments (
EngineWithNework(...)) here, so that we have a place to put all the possible optional things.WithLoggercould become one of these, simplifying the signature futher.
I think I lean toward option 1 since it has the side-effect of letting users specify the docker network name as a flag.
|
|
||
| engine := c.newEngine(&c.EngineFlags, log) | ||
| var network string | ||
| annotations := render.NewAnnotationsFromStrings(c.FunctionAnnotations) |
There was a problem hiding this comment.
Should we also consider network annotations on the functions in the functions file? c.FunctionAnnotations would override those, but it seems like it would be nice to have render work by default when all functions are already annotated with the same network name.
Description of your changes
Closes #75
Fixes:
FunctionAnnotationsflag, run crossplane-container in it.I have:
./nix.sh flake checkto ensure this PR is ready for review.backport release-x.ylabels to auto-backport this PR.Need help with this checklist? See the cheat sheet.