Improve rancher role testability

Move functionality from playbook to rancher role.
Introduce defaults for holding default values in rancher role.
Other small changes noticed while testing rancher role with molecule.

Issue-ID: OOM-1729

Change-Id: I83befa9f0964c67e209d3def76bafd2a61c1ef33
Signed-off-by: Samuli Silvius <s.silvius@partner.samsung.com>
diff --git a/ansible/group_vars/infrastructure.yml b/ansible/group_vars/infrastructure.yml
index 9fd88f2..f0c4113 100755
--- a/ansible/group_vars/infrastructure.yml
+++ b/ansible/group_vars/infrastructure.yml
@@ -24,13 +24,8 @@
     - registry.npmjs.org
 all_simulated_hosts:
     "{{ simulated_hosts.git + simulated_hosts.http + simulated_hosts.nexus }}"
-rancher_server_url: "http://{{ hostvars[groups.infrastructure.0].ansible_host }}:8080"
 rancher_server_version: v1.6.22
-rancher_remove_other_env: yes
-rancher_redeploy_k8s_env: yes
-populate_nexus: no
-kube_directory: /root/.kube
-kubectl_bin_dir: /usr/local/bin
+populate_nexus: false
 helm_bin_dir: /usr/local/bin
 helm_repository_name: local
 helm_repository_url: http://127.0.0.1:8879
diff --git a/ansible/rancher_kubernetes.yml b/ansible/rancher_kubernetes.yml
index 196f1fc..e44f18d 100644
--- a/ansible/rancher_kubernetes.yml
+++ b/ansible/rancher_kubernetes.yml
@@ -1,31 +1,23 @@
 ---
-- name: Install binaries for controlling deployment
-  hosts: infrastructure
-  roles:
-    - kubectl
-    - helm
-
 - name: Deploy rancher server and create k8s env
   hosts: infrastructure
   roles:
-    - rancher
-  vars:
-     rancher_role: server
+    - role: rancher
+      vars:
+        mode: server
+    - kubectl
+    - helm
 
-- name: Deploy rancher agents
+- name: Deploy rancher agents for kube nodes
   hosts: kubernetes
   roles:
-    - rancher
-  vars:
-     rancher_role: agent
+    - role: rancher
+      vars:
+        mode: agent
 
 - name: Wait for Kubernetes environment to be healthy
   hosts: infrastructure
-  tasks:
-  - name: Check cluster health
-    uri:
-      url: "{{ rancher_server_url }}/v2-beta/projects/{{ k8s_env_id }}"
-    register: env_info
-    retries: 30
-    delay: 15
-    until: "env_info.json.healthState == 'healthy'"
+  roles:
+    - role: rancher
+      vars:
+        mode: health
\ No newline at end of file
diff --git a/ansible/roles/kubectl/defaults/main.yml b/ansible/roles/kubectl/defaults/main.yml
new file mode 100644
index 0000000..78c15c7
--- /dev/null
+++ b/ansible/roles/kubectl/defaults/main.yml
@@ -0,0 +1,5 @@
+---
+kubectl_bin_dir: /usr/local/bin
+kube_directory: ~/.kube
+# Defaulting to rancher setup
+kube_server: "https://{{ ansible_host }}:8080/r/projects/{{ k8s_env_id | mandatory }}/kubernetes:6443"
\ No newline at end of file
diff --git a/ansible/roles/kubectl/tasks/main.yml b/ansible/roles/kubectl/tasks/main.yml
index 7c77c3c..9ecb5c4 100644
--- a/ansible/roles/kubectl/tasks/main.yml
+++ b/ansible/roles/kubectl/tasks/main.yml
@@ -5,3 +5,13 @@
     dest: "{{ kubectl_bin_dir }}/kubectl"
     remote_src: true
     mode: 0755
+
+- name: Ensure .kube directory exists
+  file:
+    path: "{{ kube_directory }}"
+    state: directory
+
+- name: Create kube config
+  template:
+    src: kube_config.j2
+    dest: "{{ kube_directory }}/config"
diff --git a/ansible/roles/rancher/templates/kube_config.j2 b/ansible/roles/kubectl/templates/kube_config.j2
similarity index 81%
rename from ansible/roles/rancher/templates/kube_config.j2
rename to ansible/roles/kubectl/templates/kube_config.j2
index 87f332e..586c59d 100644
--- a/ansible/roles/rancher/templates/kube_config.j2
+++ b/ansible/roles/kubectl/templates/kube_config.j2
@@ -4,7 +4,7 @@
 - cluster:
     api-version: v1
     insecure-skip-tls-verify: true
-    server: "https://{{ ansible_host }}:8080/r/projects/{{ k8s_env_id }}/kubernetes:6443"
+    server: "{{ kube_server }}"
   name: "{{ app_name }}"
 contexts:
 - context:
diff --git a/ansible/roles/rancher/defaults/main.yml b/ansible/roles/rancher/defaults/main.yml
new file mode 100644
index 0000000..8edc518
--- /dev/null
+++ b/ansible/roles/rancher/defaults/main.yml
@@ -0,0 +1,4 @@
+---
+rancher_server_url: "http://{{ hostvars[groups.infrastructure.0].ansible_host }}:8080"
+rancher_remove_other_env: true
+rancher_redeploy_k8s_env: true
diff --git a/ansible/roles/rancher/tasks/main.yml b/ansible/roles/rancher/tasks/main.yml
index 1370a39..045363d 100644
--- a/ansible/roles/rancher/tasks/main.yml
+++ b/ansible/roles/rancher/tasks/main.yml
@@ -1,2 +1,2 @@
 ---
-- include_tasks: "rancher_{{ rancher_role }}.yml"
+- include_tasks: "rancher_{{ mode }}.yml"
diff --git a/ansible/roles/rancher/tasks/rancher_agent.yml b/ansible/roles/rancher/tasks/rancher_agent.yml
index 4c9cb8d..091503c 100644
--- a/ansible/roles/rancher/tasks/rancher_agent.yml
+++ b/ansible/roles/rancher/tasks/rancher_agent.yml
@@ -7,7 +7,7 @@
     volumes:
       - "/var/run/docker.sock:/var/run/docker.sock"
       - "/var/lib/rancher:/var/lib/rancher"
-    auto_remove: yes
-    privileged: yes
+    auto_remove: true
+    privileged: true
   vars:
     server_hostvars: "{{ hostvars[groups.infrastructure.0] }}"
diff --git a/ansible/roles/rancher/tasks/rancher_health.yml b/ansible/roles/rancher/tasks/rancher_health.yml
new file mode 100644
index 0000000..b032373
--- /dev/null
+++ b/ansible/roles/rancher/tasks/rancher_health.yml
@@ -0,0 +1,8 @@
+---
+- name: Check cluster health
+  uri:
+    url: "{{ rancher_server_url }}/v2-beta/projects/{{ k8s_env_id }}"
+  register: env_info
+  retries: 30
+  delay: 15
+  until: "env_info.json.healthState == 'healthy'"
diff --git a/ansible/roles/rancher/tasks/rancher_server.yml b/ansible/roles/rancher/tasks/rancher_server.yml
index 64b35e4..d30be72 100644
--- a/ansible/roles/rancher/tasks/rancher_server.yml
+++ b/ansible/roles/rancher/tasks/rancher_server.yml
@@ -2,7 +2,7 @@
 # DO NOT ADD SPACE AROUND ';'
 - name: Start rancher/server:{{ rancher_server_version }}
   docker_container:
-    name: rancher_server
+    name: rancher-server
     image: rancher/server:{{ rancher_server_version }}
     command: ["sh", "-c", "/usr/sbin/update-ca-certificates;/usr/bin/entry /usr/bin/s6-svscan /service"]
     ports: 8080:8080
@@ -39,13 +39,3 @@
     key_private: "{{ env.data.apikey.private }}"
     rancher_agent_image: "{{ env.data.registration_tokens.image }}"
     rancher_agent_reg_url: "{{ env.data.registration_tokens.reg_url }}"
-
-- name: Ensure .kube directory exists
-  file:
-    path: "{{ kube_directory }}"
-    state: directory
-
-- name: Create kube config
-  template:
-    src: kube_config.j2
-    dest: "{{ kube_directory }}/config"