---
- name: Prepare for the navigate exercise
  hosts: workstation.lab.example.com
  gather_subset: min
  become: no
  vars:
    ge_nsp: deploy-introduction
  tasks:
    - name: Make sure kubeconfig is there on utility
      delegate_to: utility.lab.example.com
      file:
        path: /home/lab/{{ item }}/auth/kubeconfig
        state: file
      loop: "{{ clusters }}"

    - name: Create a temp dir
      file:
        path: tmp
        state: directory

    - name: Copy over the kubeconfig
      delegate_to: utility.lab.example.com
      fetch:
        src: /home/lab/{{ item }}/auth/kubeconfig
        dest: tmp/kubeconfig-{{ item }}
        flat: yes
      loop: "{{ clusters }}"

    - name: Check whether the namespace is already there
      k8s_info:
        kubeconfig: tmp/kubeconfig-ocp4
        validate_certs: no
        api_version: v1
        kind: namespace
        name: "{{ ge_nsp }}"
      register: ge_exists

    - name: Fail if the namespace exists
      fail:
        msg: "The exercise namespace already exists: {{ ge_nsp }}; please run strategy-finish.yml to clean up first and then re-run this playbook."
      when: ge_exists.resources | length > 0

    - name: Ensure there is a namespace for the exercise
      k8s:
        kubeconfig: tmp/kubeconfig-ocp4
        validate_certs: no
        api_version: v1
        kind: namespace
        name: "{{ ge_nsp }}"

    - name: Give developer admin role in the project
      k8s:
        kubeconfig: tmp/kubeconfig-ocp4
        validate_certs: no
        api_version: rbac.authorization.k8s.io/v1
        kind: rolebinding
        namespace: "{{ ge_nsp }}"
        name: dev-admin
        definition:
          roleRef:
            apiGroup: rbac.authorization.k8s.io
            kind: ClusterRole
            name: admin
          subjects:
          - apiGroup: rbac.authorization.k8s.io
            kind: User
            name: developer

    - name: Deploy the sample app manifest
      k8s:
        kubeconfig: tmp/kubeconfig-ocp4
        validate_certs: no
        namespace: "{{ ge_nsp }}"
        src: ../labs/health/navigate/sample-node-app.yaml