-
Notifications
You must be signed in to change notification settings - Fork 190
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
controllers: Fix helmchart values file merge test #492
Closed
darkowlzz
wants to merge
23
commits into
fluxcd:helmchart-reconciler-dev
from
darkowlzz:helmchart-e2e-test-val-merge
Closed
controllers: Fix helmchart values file merge test #492
darkowlzz
wants to merge
23
commits into
fluxcd:helmchart-reconciler-dev
from
darkowlzz:helmchart-e2e-test-val-merge
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
This commits adds `LoadChartMetadataFromArchive` and `LoadChartMetadataFromDir` helpers to the internal `helm` package to be able to make observations to the Helm metadata file without loading the chart in full. The helpers are compatible with charts of the v1 format (with a separate `requirements.yaml` file), and an additional `LoadChartMetadata` helper is available to automatically call the right `LoadChartMetadataFrom*` version by looking at the file description of the given path. Signed-off-by: Hidde Beydals <hello@hidde.co>
This commits adds simple caching capabilities to the `ChartRepository`, which makes it possible to load the `Index` from a defined `CachePath` using `LoadFromCache()`, and to download the index to a new `CachePath` using `CacheIndex()`. In addition, the repository tests have been updated to make use of Gomega, and some missing ones have been added. Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit starts with the optimization of the `DepenendencyManager`, ensuring the chart indexes are lazy loaded, and replacing the (limitless) concurrency with a configurable number of workers with a default of 1. Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit starts with the creation of a `ChartBuilder` to facilitate the (conditional) build of a chart outside of the reconciler logic. The builder can be configured with a set of (modifying) options, which define together with the type of chart source what steps are taken during the build. To better facilitate the builder's needs and attempt to be more efficient, changes have been made to the `DependencyBuilder` and `ChartRepository` around (order of) operations and/or lazy-load capabilities. Signed-off-by: Hidde Beydals <hello@hidde.co>
This wires the `ChartRepository` changes into the reconciler to ensure it works. Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit refactors the `ChartBuilder` that used to be a do-it-all struct into an interace with two implementations: - `LocalChartBuilder`: to build charts from a source on the local filesystem, either from a directory or from a packaged chart. - `RemoteChartBuilder`: to build charts from a remote Helm repository index. The new logic within the builders validates the size of the Helm size it works with based on the `Max*Size` global variables in the internal `helm` package, to address the recommendation from the security audit. In addition, changes `ClientOptionsFromSecret` takes now a directory argument which temporary files are placed in, making it easier to perform a garbage collection of the whole directory at the end of a reconcile run. Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit starts wiring the factored out Helm chart build logic into the reconciler to ensure, validating the API capabilities. Signed-off-by: Hidde Beydals <hello@hidde.co>
With all the logic that used to reside in the `controllers` package factored into this package, it became cluttered. This commit tries to bring a bit more structure in place. Signed-off-by: Hidde Beydals <hello@hidde.co>
Dealing with some loose ends around making observations, and code style. The loaded byes of a chart are used as a revision to ensure e.g. periodic builds with unstable ordering of items do not trigger a false positive. Signed-off-by: Hidde Beydals <hello@hidde.co>
Add more chart local builder and dependency manager tests. Signed-off-by: Sunny <darkowlzz@protonmail.com>
- For remote builds, if the build option has a version metadata, the chart should be repackaged with the provided version. - Update internal/helm/testdata/charts/helmchart-0.1.0.tgz to include value files for testing merge chart values. Signed-off-by: Sunny <darkowlzz@protonmail.com>
Cached chart build tests for both local and remote builder. Signed-off-by: Sunny <darkowlzz@protonmail.com>
This makes the string less verbose and deals with the safe handling of some edge-case build states. Signed-off-by: Hidde Beydals <hello@hidde.co>
Signed-off-by: Hidde Beydals <hello@hidde.co>
This commit introduces a typed `BuildError` to be returned by `Builder.Build` in case of a failure. The `Reason` field in combination with `BuildErrorReason` can be used to signal (or determine) the reason of a returned error within the context of the build process. At present this is used to determine the correct Condition Reason, but in a future iteration this can be used to determine the negative polarity condition that should be set to indicate a precise failure to the user. Signed-off-by: Hidde Beydals <hello@hidde.co>
This includes a change of the defaults to more acceptible (higher) values. Signed-off-by: Sunny <darkowlzz@protonmail.com>
Previous usage while consistent, was incorrect, and inconsitent with the field in the API spec. Signed-off-by: Hidde Beydals <hello@hidde.co>
This allows custom configuration of the Helm file read limits, allowing a user to overwrite them to their likenings if the defaults are too restrictive for their specific setup using arguments: `--helm-{index,chart,chart-file}-limit` Signed-off-by: Hidde Beydals <hello@hidde.co>
- Add some more documentation around chart builders - Ensure correct indentation in some doc comments - Provide example of using `errors.Is` for typed `BuildError` - Mention "bytes" in file size limit errors - Add missing copyright header Signed-off-by: Hidde Beydals <hello@hidde.co>
This makes it possible to signal reference (validation) errors happening before the build process actually starts dealing with the chart. At present, this does not have a more specific counterpart in the API, but this is expected to change when the conditions logic is revised. Signed-off-by: Hidde Beydals <hello@hidde.co>
By providing the Generation of the object that is getting reconciled as version metadata to the builder if any custom values files are defined, the Artifact revision changes if the specification does, ensuring consumers of the Artifact are able to react to changes in values (and perform a release). Signed-off-by: Hidde Beydals <hello@hidde.co>
This helps detect e.g. path or chart name reference changes. Signed-off-by: Hidde Beydals <hello@hidde.co>
Test case "Setting valid valuesFile attribute" and the tests around it aren't isolated and most of the time pass because of the results from the previous tests being re-read as the test expectation match the previous test results. Failures are very rare to reproduce, even in the CI they aren't seen but it failed very frequently on my computer, especially this specific case because unlike the other cases, there is just one file to be merged, which invalidates the chart result from the previous cases. In order to ensure the test wait for the chart to be updated by its action and not by any other previous updates, status condition message seems to be the most reliable way, as it also contains the paths of the files that were merged. With this change, I could no longer reproduce the failure on my computer. Reordering the tests makes this issue more clear. Signed-off-by: Sunny <darkowlzz@protonmail.com>
hiddeco
force-pushed
the
helmchart-reconciler-dev
branch
4 times, most recently
from
November 19, 2021 16:16
3594188
to
2392326
Compare
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.
Test case "Setting valid valuesFile attribute" and the tests around it
aren't isolated and most of the time pass because of the results from
the previous tests being re-read as the test expectation match the
previous test results. Failures are very rare to reproduce, even in
the CI they aren't seen but it failed very frequently on my computer,
especially this specific case because unlike the other cases, there is
just one file to be merged, which invalidates the chart result from
the previous cases.
In order to ensure that the test waits for the chart to be updated by its
action and not by any other previous updates, status condition message
seems to be the most reliable way, as it also contains the paths of the
files that were merged.
With this change, I could no longer reproduce the failure on my
computer.
Reordering the tests makes this issue more clear.
Since the
reconcilers-dev
branch has all the new tests with newstructures, I'm not sure if we need to make these tests any better.
They do validate the results, but fail sometimes on some machines.
NOTE: This depends on the changes in #485.