From 51d7d013fbff9706910be7cbecd1720967ff486f Mon Sep 17 00:00:00 2001 From: Samuli Silvius Date: Tue, 19 Mar 2019 08:45:54 +0200 Subject: Improve application role testability Remove different phases for application role as those are supposed to run after each other anyway from playbook and pre/post steps can be disabled by other means. Enable Helm override file generation customization by delegating it to separate role. Separate Helm file transfer to own module. NOTE: install.yml with all Helm commands (shell/command) is not idempotent and should be fixed with separate commit. Issue-ID: OOM-1655 Change-Id: Ib29773c4d64a0529c71c3f93c2af7265ae94059f Signed-off-by: Samuli Silvius --- ansible/roles/application/tasks/install.yml | 77 +++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 ansible/roles/application/tasks/install.yml (limited to 'ansible/roles/application/tasks/install.yml') diff --git a/ansible/roles/application/tasks/install.yml b/ansible/roles/application/tasks/install.yml new file mode 100644 index 00000000..103ecc8b --- /dev/null +++ b/ansible/roles/application/tasks/install.yml @@ -0,0 +1,77 @@ +--- +- 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 + +- 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 }} + {{ '' if app_skip_helm_override else '-f ' + app_helm_override_file }} + changed_when: true # when executed its a changed type of action + register: helm_install + failed_when: helm_install.stderr -- cgit 1.2.3-korg