Browse Source
Helm-apps role for installing helm charts (#8347 )
* Sketch of helm-apps role interface
* helm-apps: Early implementation and settings
* helm-apps: Fix README.md example playbook
* fixup! Sketch of helm-apps role interface
* Make the argument specs more explicit
* Remove exposed options from hardcoded default
* Simplify example playbook in README.md
- Define directly the roles parameters
- Add an example of option override for one chart only
* Use release instead of charts
Make explicit that the role is mananing releases, not charts.
Simplify parameters naming
pull/8624/head
Max Gautier
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
156 additions and
0 deletions
roles/helm-apps/README.md
roles/helm-apps/meta/argument_specs.yml
roles/helm-apps/tasks/main.yml
roles/helm-apps/vars/main.yml
@ -0,0 +1,39 @@
Role Name
=========
This role is intended to be used to fetch and deploy Helm Charts as part of
cluster installation or upgrading with kubespray.
Requirements
------------
The role needs to be executed on a host with access to the Kubernetes API, and
with the helm binary in place.
Role Variables
--------------
See meta/argument_specs.yml
Playbook example:
```yaml
---
- hosts: kube_control_plane[0]
gather_facts: no
roles:
- name: helm-apps
releases:
- name: app
namespace: app
chart_ref: simple-app/simple-app
- name: app2
namespace: app
chart_ref: simple-app/simple-app
wait_timeout: "10m" # override the same option in `release_common_opts`
repositories: "{{ repos }}"
- repo_name: simple-app
repo_url: "https://blog.leiwang.info/simple-app"
release_common_opts: "{{ helm_params }}"
wait_timeout: "5m"
```
@ -0,0 +1,93 @@
---
argument_specs:
main:
short_description : Install a list of Helm charts.
options:
releases:
type : list
elements : dict
required : true
description : |
List of dictionaries passed as arguments to kubernetes.core.helm.
Arguments passed here will override those in `helm_settings`. For
structure of the dictionary, see the documentation for
kubernetes.core.helm ansible module.
options:
chart_ref:
type : path
required : true
chart_version:
type : str
name:
type : str
required : true
namespace:
type : str
required : true
values:
type : dict
# Possibly general options
create_namespace:
type : bool
chart_repo_url:
type : str
disable_hook:
type : bool
history_max:
type : int
purge:
type : bool
replace:
type : bool
skip_crds:
type : bool
wait:
type : bool
default : true
wait_timeout:
type : str
repositories:
type : list
elements : dict
description : |
List of dictionaries passed as arguments to
kubernetes.core.helm_repository.
default : [ ]
options:
name:
type : str
required : true
password:
type : str
username:
type : str
url:
type : str
release_common_opts:
type : dict
description : |
Common arguments for every helm invocation.
default : {}
options:
create_namespace:
type : bool
default : true
chart_repo_url:
type : str
disable_hook:
type : bool
history_max:
type : int
purge:
type : bool
replace:
type : bool
skip_crds:
type : bool
wait:
type : bool
default : true
wait_timeout:
type : str
default : "5m"
@ -0,0 +1,17 @@
---
- name : Add Helm repositories
kubernetes.core.helm_repository : "{{ helm_repository_defaults | combine(item) }}"
loop : "{{ repositories }}"
- name : Update Helm repositories
kubernetes.core.helm:
state : absent
binary_path : "{{ bin_dir }}/helm"
release_name : dummy # trick needed to refresh in separate step
release_namespace : kube-system
update_repo_cache : true
when : repositories != []
- name : Install Helm Applications
kubernetes.core.helm : "{{ helm_defaults | combine(release_common_opts, item) }}"
loop : "{{ releases }}"
@ -0,0 +1,7 @@
---
helm_defaults:
atomic : true
binary_path : "{{ bin_dir }}/helm"
helm_repository_defaults:
binary_path : "{{ bin_dir }}/helm"