In this post, I'd like to describe the issue I've recently encountered when using Helm umbrella charts. Long story short, it turned out that subcharts are not completely isolated from each other, contrary to what we probably would expect. This feature has also some important consequences for building umbrella charts and combining different dependencies into one parent chart, which I want to outline as well.
Helm umbrella charts are an easy and powerful way of installing multiple components as a single one. They allow us to set up pretty complex configurations like Kafka cluster or Elastic stack with minimal effort - by installing just a single chart (one helm install call).
All components (dependencies) an umbrella chart contain, are also Helm charts - this makes it in fact a chart of charts. Those dependencies could be defined within the Chart.yaml file inside a dedicated section called dependencies (in Helm 2 compatible syntax, this has to be placed in the requirements.yaml file) like this:
Let's assume we want to build an umbrella chart containing two services. Each of the services will have a dependency on the MongoDB chart. However, in both cases, the MongoDB chart will come from a bit different distribution. As a result, we would like to create a structure like in the diagram below:As you can see, there would be no direct dependency between svc1 and svc2. We can say, that those services should know nothing about each other.
Additionally, to avoid name conflicts between secrets, etc., we should provide different naming for both MongoDB installations. The easiest way to achieve that is to override dependant charts' properties from within the umbrella chart's values.yaml file:
The exact reason for the error message we've seen when installing the example umbrella chart is the lack of isolation combined with the order in which Helm processes the subchart. Lucky for us, installation failed before actually doing anything on the cluster. Unfortunately, this is not always to be the case.
Helm docs state clearly, that for template resolution the last loaded wins strategy is used. Unfortunately, it seems to be undocumented, in which order the subcharts are being processed when installing the parent umbrella chart. This encouraged me to experiment even further.
The best what we have for now is to avoid template conflicts when designing our umbrella charts. To do so, the following rules should be followed within the scope of a single umbrella chart:
It should be kept in mind, that the parent chart's dependencies are not fully isolated from each other. Because all templates defined in subcharts are considered global, name conflicts may occur. Since the tooling does not provide any warnings currently, umbrella chart maintainers have to be careful when including the dependencies - otherwise, the results may be very hard to predict.
This is an fast implementation of the weighted histogram analysis methodwritten in Rust. It allows the calculation of multidimensional free energy profilesfrom umbrella sampling simulations. For more details on the method, I suggest Roux, B.(1995). The calculation of the potential of mean force using computer simulations, CPC, 91(1), 275-282.
SEMOPy is an umbrella package that includes verstatile Structural Equation Modelling (SEM) optimization (Optimizator, Model), model selection (StructureAnalyzer) and model generation (model_generator) modules.
This package is just an umbrella for a group of other packages, it has no description.Description samples from packages in group: Open Container Project - development files
The cordova-lib npm package has been updated to 7.0.1, along withcordova-android (6.2.3) and cordova-ios (4.4.0), and various plugins.PR #8919 resolves theumbrella issue #8686, aswell as several Android build issues:#8408,#8424, and#8464.
Add api.imply, which allows one package to "imply" another. Ifpackage A implies package B, then anything that depends on packageA automatically depends on package B as well (and receives packageB's imports). This is useful for creating umbrella packages(standard-app-packages) or sometimes for factoring common codeout of related packages (accounts-base). 2b1af7f3a8