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
This commit is contained in:
parent
d444a2fb83
commit
307d122a84
4 changed files with 156 additions and 0 deletions
39
roles/helm-apps/README.md
Normal file
39
roles/helm-apps/README.md
Normal file
|
@ -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"
|
||||
```
|
93
roles/helm-apps/meta/argument_specs.yml
Normal file
93
roles/helm-apps/meta/argument_specs.yml
Normal file
|
@ -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"
|
17
roles/helm-apps/tasks/main.yml
Normal file
17
roles/helm-apps/tasks/main.yml
Normal file
|
@ -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 }}"
|
7
roles/helm-apps/vars/main.yml
Normal file
7
roles/helm-apps/vars/main.yml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
helm_defaults:
|
||||
atomic: true
|
||||
binary_path: "{{ bin_dir }}/helm"
|
||||
|
||||
helm_repository_defaults:
|
||||
binary_path: "{{ bin_dir }}/helm"
|
Loading…
Reference in a new issue