--- - name: Helm init and upgrade command: | {{ helm_bin_dir }}/helm init --upgrade --skip-refresh changed_when: true # init is always changed type of action # A correct way to implement this would be using --wait option in helm init invocation. # However, it does not work due to https://github.com/helm/helm/issues/4031 (fixed in newer helm release) - name: "Wait for helm upgrade to finish" command: "{{ helm_bin_dir }}/helm version --tiller-connection-timeout 10" register: result until: result.rc == 0 delay: 10 retries: 12 changed_when: false # for idempotency - name: Get all helm repos command: "{{ helm_bin_dir }}/helm repo list" register: repos changed_when: false # for idempotency - name: Remove stable repo command: "{{ helm_bin_dir }}/helm repo remove stable" changed_when: true # when executed its a changed type of action when: "'stable' in repos.stdout" - name: Helm Serve shell: "{{ helm_bin_dir }}/helm serve &" async: 45 poll: 3 # wait 3sec to get a chance for some stderr register: helm_serve changed_when: "'address already in use' not in helm_serve.stderr" - name: List helm repos command: "{{ helm_bin_dir }}/helm repo list" register: helm_repo_list changed_when: false # for idempotency failed_when: - helm_repo_list.rc > 0 - "'Error: no repositories to show' not in helm_repo_list.stderr" - name: Helm Add Repo command: "{{ helm_bin_dir }}/helm repo add {{ helm_repository_name | mandatory }} {{ helm_repository_url | mandatory }}" when: "'local' not in helm_repo_list.stdout" changed_when: true # when executed its a changed type of action - name: Build local helm repository make: chdir: "{{ app_helm_charts_infra_directory }}" target: "{{ item }}" loop: "{{ app_helm_build_targets }}" environment: PATH: "{{ helm_bin_dir }}:{{ ansible_env.PATH }}" - name: Generate Helm application override file with custom role include_role: name: "{{ app_helm_override_role }}" when: not app_skip_helm_override # The generated override file is added to override list unless skipped. - name: Add application helm override file to list of overrides unless skipped set_fact: helm_override_files: "{{ (helm_override_files | default([])) + [app_helm_override_file] }}" when: not app_skip_helm_override - name: Print final list of override files debug: var: helm_override_files - name: Check for deploy plugin presence stat: path: '{{ helm_home_dir.stdout }}/plugins/deploy/deploy.sh' register: deploy_plugin_presence - name: "Helm Install application {{ app_name }}" command: > {{ helm_bin_dir }}/helm {{ 'deploy' if deploy_plugin_presence.stat.exists else 'install --name' }} {{ app_helm_release_name }} {{ helm_repository_name }}/{{ app_helm_chart_name }} --namespace {{ app_kubernetes_namespace }} {{ helm_override_files | map('regex_replace', '^', '-f ') | join(' ') }} {{ helm_extra_install_options | map(attribute='opt') | join(' ') }} changed_when: true # when executed its a changed type of action register: helm_install failed_when: helm_install.stderr