-
Notifications
You must be signed in to change notification settings - Fork 4.1k
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
fix(eks): KubernetesPatch
and FargateCluster
creates a circular dependency and breaks deployment
#10536
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Title does not follow the guidelines of Conventional Commits. Please adjust title before merge. |
eladb
approved these changes
Sep 25, 2020
Oops |
KubernetesPatch
creates a circular dependency and break deploymentKubernetesPatch
and FargateCluster
creates a circular dependency and breaks deployment
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
Thank you for contributing! Your pull request will be updated from master and then merged automatically (do not update manually, and be sure to allow changes to be pushed to your fork). |
iliapolo
added a commit
that referenced
this pull request
Sep 25, 2020
…ependency and breaks deployment (#10536) In version [`1.62.0`](https://github.com/aws/aws-cdk/releases/tag/v1.62.0) we introduced the ability to run `kubectl` commands on imported clusters. (See #9802). Part of this change included some refactoring with regards to how we use and create the `KubectlProvider`. Looks like we didn't consistently apply the same logic across all constructs that use it. Case in point: https://github.com/aws/aws-cdk/blob/e349004a522e2123c1e93bd3402dd7c3f9c5c17c/packages/%40aws-cdk/aws-eks/lib/k8s-manifest.ts#L58 Notice that here we use `this` as the scope to the `getOrCreate` call. Same goes for: https://github.com/aws/aws-cdk/blob/e349004a522e2123c1e93bd3402dd7c3f9c5c17c/packages/%40aws-cdk/aws-eks/lib/k8s-object-value.ts#L64 However, `KubernetesPatch` use `scope` instead. https://github.com/aws/aws-cdk/blob/e349004a522e2123c1e93bd3402dd7c3f9c5c17c/packages/%40aws-cdk/aws-eks/lib/k8s-patch.ts#L74 This means that the entire `scope` of the `KubernetesPatch` now depends, among others, on the `kubectlBarrier`. The scope will usually be either the cluster itself (when using `FargateCluster`), or the entire stack (when using `new KubernetesPatch`). In any case, the scope will most likely contain the cluster VPC. This creates the following dependency cycle: `Cluster => ClusterVpc => KubectlBarrier => Cluster`. The fix aligns the `KubernetesPatch` behavior to all other `kubectl` constructs and uses `this` as the scope, which will only add dependency on the barrier to the custom resource representing the patch. Fixes #10528 Fixes #10537 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In version
1.62.0
we introduced the ability to runkubectl
commands on imported clusters. (See #9802).Part of this change included some refactoring with regards to how we use and create the
KubectlProvider
.Looks like we didn't consistently apply the same logic across all constructs that use it.
Case in point:
aws-cdk/packages/@aws-cdk/aws-eks/lib/k8s-manifest.ts
Line 58 in e349004
Notice that here we use
this
as the scope to thegetOrCreate
call. Same goes for:aws-cdk/packages/@aws-cdk/aws-eks/lib/k8s-object-value.ts
Line 64 in e349004
However,
KubernetesPatch
usescope
instead.aws-cdk/packages/@aws-cdk/aws-eks/lib/k8s-patch.ts
Line 74 in e349004
This means that the entire
scope
of theKubernetesPatch
now depends, among others, on thekubectlBarrier
.The scope will usually be either the cluster itself (when using
FargateCluster
), or the entire stack (when usingnew KubernetesPatch
). In any case, the scope will most likely contain the cluster VPC.This creates the following dependency cycle:
Cluster => ClusterVpc => KubectlBarrier => Cluster
.The fix aligns the
KubernetesPatch
behavior to all otherkubectl
constructs and usesthis
as the scope, which will only add dependency on the barrier to the custom resource representing the patch.Fixes #10528
Fixes #10537
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license