Adding role for application handling 40/74940/1
authorMichal Ptacek <m.ptacek@partner.samsung.com>
Wed, 19 Dec 2018 19:42:03 +0000 (19:42 +0000)
committerMichal Ptacek <m.ptacek@partner.samsung.com>
Wed, 19 Dec 2018 19:42:03 +0000 (19:42 +0000)
this ansible role contains application specific tasks, it is
written in generic way and different helm charts can be used as
application. In addition operator can provide proprietary pre_install
and post_install hooks.

Change-Id: Ibe4b330e5a725dde41aca9f6a59d702cfaba6f52
Issue-ID: OOM-1551
Signed-off-by: Michal Ptacek <m.ptacek@partner.samsung.com>
ansible/roles/application-install/tasks/custom_role.yml [new file with mode: 0644]
ansible/roles/application-install/tasks/install.yml
ansible/roles/application-install/tasks/post-install.yml [new file with mode: 0644]
ansible/roles/application-install/tasks/pre-install.yml [new file with mode: 0644]

diff --git a/ansible/roles/application-install/tasks/custom_role.yml b/ansible/roles/application-install/tasks/custom_role.yml
new file mode 100644 (file)
index 0000000..3c6237e
--- /dev/null
@@ -0,0 +1,9 @@
+---
+# Caller fills application_custom_role variable with actual role name.
+- name: "Execute custom role {{ application_custom_role }} {{ phase }} Helm install."
+  include_role:
+    name: "{{ application_custom_role }}"
+  when:
+    - application_custom_role is defined
+    - application_custom_role is not none
+    - application_custom_role | trim != ''
index 54b6443..7ff6b62 100644 (file)
@@ -5,9 +5,14 @@
      --upgrade
      --skip-refresh
 
-- name: Wait for helm
-  wait_for: timeout=10
-  delegate_to: localhost
+#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
 
 - name: Get all helm repos
   command: "{{ helm_bin_dir }}/helm repo list"
 
 - name: Helm Make All
   make:
-    chdir: "{{ app_helm_charts_directory }}"
+    chdir: "{{ app_helm_charts_infra_directory }}"
     target: all
+  environment:
+    PATH: "{{ helm_bin_dir }}:{{ ansible_env.PATH }}"
 
 - name: Helm Install application {{ app_name }}
-  command: "helm install {{ helm_repository_name }}/{{ app_helm_chart_name }} --name {{ app_helm_release_name }} --namespace {{ app_kubernetes_namespace }}"
+  command: "{{ helm_bin_dir }}/helm install {{ helm_repository_name }}/{{ app_helm_chart_name }} --name {{ app_helm_release_name }} --namespace {{ app_kubernetes_namespace }}"
diff --git a/ansible/roles/application-install/tasks/post-install.yml b/ansible/roles/application-install/tasks/post-install.yml
new file mode 100644 (file)
index 0000000..1059423
--- /dev/null
@@ -0,0 +1,5 @@
+---
+- name: "Execute custome role {{ application_post_install_role }} if defined."
+  include_tasks: custom_role.yml
+  vars:
+    application_custom_role: "{{ application_post_install_role }}"
diff --git a/ansible/roles/application-install/tasks/pre-install.yml b/ansible/roles/application-install/tasks/pre-install.yml
new file mode 100644 (file)
index 0000000..b782ca7
--- /dev/null
@@ -0,0 +1,23 @@
+---
+# before custom specific code is executed we need to move helm charts to infra
+- name: Distribute helm charts to infra node
+  block:
+    - name: Archive helm charts
+      archive:
+        path: "{{ app_helm_charts_install_directory }}/*"
+        dest: "{{ app_helm_charts_install_directory }}.tgz"
+      delegate_to: localhost
+    - name: Create helm charts dir on infra
+      file:
+        path: "{{ app_helm_charts_infra_directory }}"
+        state: directory
+        mode: 0755
+    - name: Unarchive helm charts on infra node
+      unarchive:
+        src: "{{ app_helm_charts_install_directory }}.tgz"
+        dest: "{{ app_helm_charts_infra_directory }}"
+
+- name: "Execute custome role {{ application_pre_install_role }} if defined."
+  include_tasks: custom_role.yml
+  vars:
+    application_custom_role: "{{ application_pre_install_role }}"