Skip to content

Apps per namespace

Source

If you want to install each application in your own namespace.

Create the project

Project structure

├── README.md
├── helmwave.yml.tpl
├── values
│   ├── harbor.yml
│   ├── minio.yml
│   ├── plantuml.yml
│   └── renovate.yml
└── vars.yaml

Step 1. Create helmwave.yml.tpl

version: 0.18.0


repositories:
  - name: bitnami
    url: https://charts.bitnami.com/bitnami
  - name: renovate
    url: https://docs.renovatebot.com/helm-charts
  - name: stevehipwell
    url: https://stevehipwell.github.io/helm-charts



# General options
.options: &options
  wait: true
  wait_for_jobs: true
  force: false
  timeout: 10m
  atomic: false
  max_history: 3
  create_namespace: true


releases:
{{- with readFile "vars.yaml" | fromYaml | get "releases" }}
{{ range $v := . }}

#################################
#                               #
#      {{ $v | get "name" }}
#                               #
#################################
- name: {{ $v | get "name" }}
  chart:
    name: {{ $v | get "repo" }}/{{ $v | get "name" }}
    version: {{ $v | get "version" }}
  namespace: {{ $v | get "name" }}
  tags: [{{ $v | get "name" }}]
  values:
    - values/{{ $v | get "name" }}.yml
  <<: *options

{{ end }}
{{- end }}

Step 2. Create vars.yaml

We will manage list apps with additional vars.yaml file

releases:
  - name: harbor
    repo: bitnami
    version: 11.0.5

  - name: minio
    repo: bitnami
    version: 9.0.2

  - name: plantuml
    repo: stevehipwell
    version: 3.3.0

  - name: renovate
    repo: renovate
    version: 25.76.1

Step 3. Render helmwave.yml.tpl -> helmwave.yml

helmwave yml

You will get it

version: 0.18.0

repositories:
  - name: bitnami
    url: https://charts.bitnami.com/bitnami
  - name: renovate
    url: https://docs.renovatebot.com/helm-charts
  - name: stevehipwell
    url: https://stevehipwell.github.io/helm-charts



# General options
.options: &options
  wait: true
  waitforjobs: true
  force: false
  timeout: 10m
  atomic: false
  maxhistory: 3
  createnamespace: true

releases:
  #################################
  #                               #
  #      harbor
  #                               #
  #################################
  - name: harbor
    chart:
      name: bitnami/harbor
      version: 11.0.5
    namespace: harbor
    tags: [harbor]
    values:
      - values/harbor.yml
    <<: *options

  #################################
  #                               #
  #      minio
  #                               #
  #################################
  - name: minio
    chart:
      name: bitnami/minio
      version: 9.0.2
    namespace: minio
    tags: [minio]
    values:
      - values/minio.yml
    <<: *options

  #################################
  #                               #
  #      plantuml
  #                               #
  #################################
  - name: plantuml
    chart:
      name: stevehipwell/plantuml
      version: 3.3.0
    namespace: plantuml
    tags: [plantuml]
    values:
      - values/plantuml.yml
    <<: *options

  #################################
  #                               #
  #      renovate
  #                               #
  #################################
  - name: renovate
    chart:
      name: renovate/renovate
      version: 25.76.1
    namespace: renovate
    tags: [renovate]
    values:
      - values/renovate.yml
    <<: *options

Step 4. Build plan

helmwave build

Step 5. Deploy plan

if we want to deploy only plantuml

helmwave build -t plantuml
helmwave up

looks how to work HELMWAVE_TAGS

CI/CD with Gitlab-CI

variables:
  HELMWAVE_LOG_LEVEL: debug

deploy to prod:
  stage: deploy
  when: manual
  environment:
    name: prod
  image:
    name: ghcr.io/helmwave/helmwave:0.17.2
    entrypoint: [""]
  before_script:
  - printenv | grep HELMWAVE
  script:
  - helmwave yml
  - helmwave build
  - helmwave up
  artifacts:
    paths:
    - .helmwave
    expire_in: 2 week

if you want to deploy only plantuml via CI.