Skip to content

Helm: Update chart's on-disk dependencies (k8s:helm-dependency-update) #2110

@jmesnil

Description

@jmesnil

Describe the bug

Requires/blocked by #2392

k8s:helm-dependency-update https://helm.sh/docs/helm/helm_dependency_update

As an user, I want to create a Helm chart with JKube that has a dependency.

Eclipse JKube version

1.11.0

Component

Kubernetes Maven Plugin

Apache Maven version

other (please specify in additional context)

Gradle version

None

Steps to reproduce

Use my fork of https://github.com/rohankanojia-forks/eclipse-jkube-helm-demo which uses the kubernetes-maven-plugin instead of the openshift-maven-plugin and has a dependency on the wildlfly Helm chart.

git clone https://github.com/jmesnil/eclipse-jkube-helm-demo
cd eclipse-jkube-helm-demo/jkube-helm-maven
mvn clean k8s:resource k8s:helm -Pxml-configuration
helm install -g target/jkube/helm/kubernetes/

Installation of the Helm chart fails with the error:

Error: INSTALLATION FAILED: An error occurred while checking for chart dependencies. You may need to run `helm dependency build` to fetch missing dependencies: found in Chart.yaml, but missing in charts/ directory: wildfly

Content of the Chart.yaml file is correct (with a wildfly dependency):

$ cat target/jkube/helm/kubernetes/Chart.yaml
---
---
apiVersion: v1
name: jkube-helm-maven
home: https://www.eclipse.org/jkube/
sources:
- https://github.com/eclipse/jkube
version: 1.0.0-SNAPSHOT
description: JKube Helm Maven demo Helm Chart (XML)
keywords:
- eclipse
- jkube
- kubernetes
- maven
maintainers:
- name: Maintainer1
  email: [email protected]
  url: maintainer1.org
- name: Maintainer2
  email: [email protected]
  url: maintainer2.org
icon: https://helm.sh/img/helm.svg
dependencies:
- name: wildfly
  version: 1.3.0
  repository: https://docs.wildfly.org/wildfly-charts/

Expected behavior

The Helm Chart is successfully installed.

Runtime

Kubernetes (vanilla)

Kubernetes API Server version

1.25.3

Environment

macOS

Eclipse JKube Logs

[INFO] --- k8s:1.11.0:resource (default-cli) @ jkube-helm-maven ---
[INFO] k8s: Running generator quarkus
[INFO] k8s: quarkus: Using Docker image quay.io/jkube/jkube-java:0.0.17 as base / builder
[INFO] k8s: Using resource templates from /Users/jmesnil/tmp/eclipse-jkube-helm-demo/jkube-helm-maven/src/main/jkube
[INFO] k8s: jkube-controller: Adding a default Deployment
[INFO] k8s: jkube-service: Adding a default service 'jkube-helm-maven' with ports [8080]
[INFO] k8s: jkube-service-discovery: Using first mentioned service port '8080'
[INFO] k8s: jkube-revision-history: Adding revision history limit to 2
[INFO] k8s: validating /Users/jmesnil/tmp/eclipse-jkube-helm-demo/jkube-helm-maven/target/classes/META-INF/jkube/kubernetes/jkube-helm-maven-deployment.yml resource
[INFO] k8s: validating /Users/jmesnil/tmp/eclipse-jkube-helm-demo/jkube-helm-maven/target/classes/META-INF/jkube/kubernetes/jkube-helm-maven-service.yml resource
[INFO]
[INFO] --- k8s:1.11.0:helm (default-cli) @ jkube-helm-maven ---
[INFO] k8s: Creating Helm Chart "jkube-helm-maven" for Kubernetes

Sample Reproducer Project

https://github.com/jmesnil/eclipse-jkube-helm-demo/tree/main/jkube-helm-maven

Additional context

The installation is failing as JKube does not update the dependencies in the Chart directory.

When the Helm chart is generated it contains:

$ tree target/jkube/helm/kubernetes/
target/jkube/helm/kubernetes/
├── Chart.yaml
├── README.md
├── templates
│   ├── jkube-helm-maven-deployment.yaml
│   └── jkube-helm-maven-service.yaml
└── values.yaml

To be able to install the chart with its wildfly dependency, I must run helm dependency update:

$ helm dependency update ./target/jkube/helm/kubernetes
Getting updates for unmanaged Helm repositories...
...Successfully got an update from the "https://docs.wildfly.org/wildfly-charts/" chart repository
Update Complete. ⎈Happy Helming!⎈
Saving 1 charts
Downloading wildfly from repo https://docs.wildfly.org/wildfly-charts/
Deleting outdated charts

The content of the Chart is then correct:

$ tree target/jkube/helm/kubernetes
target/jkube/helm/kubernetes
├── Chart.yaml
├── README.md
├── charts
│   └── wildfly-1.3.0.tgz
├── requirements.lock
├── templates
│   ├── jkube-helm-maven-deployment.yaml
│   └── jkube-helm-maven-service.yaml
└── values.yaml

And I can finally install it:

$ helm install -g target/jkube/helm/kubernetes/ --set wildfly.build.uri=https://github.com/wildfly-up-and-running/wuar-demo --set wildfly.build.enabled=false --set wildfly.deploy.route.enabled=false
NAME: kubernetes-1680096807
LAST DEPLOYED: Wed Mar 29 15:33:27 2023
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

(Don't pay attention to the --set values, they are required by the wildfly Helm Chart to deploy on Kubernetes instead of OpenShift)

At first glance, the code at https://github.com/eclipse/jkube/blob/1b6af6b4f49f25cd0db4df6554df6566a28bf174/jkube-kit/resource/helm/src/main/java/org/eclipse/jkube/kit/resource/helm/HelmService.java#L80 is missing the helm dependency update execution to provide an installable Helm Chart.

Metadata

Metadata

Assignees

Type

No type

Projects

Status

Done

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions