- name: Prepare for the monitoring exercise
  hosts: workstation.lab.example.com
  gather_subset: min
  become: no
  vars:
    ge_nsp: monitoring-apps
  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: Ensure siege is on workstation
      become: yes
      package:
        name: siege
        state: latest

    - 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 the finish playbook and then re-run this one."
      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 manifests
      k8s:
        kubeconfig: tmp/kubeconfig-ocp4
        validate_certs: no
        namespace: "{{ ge_nsp }}"
        src: ../labs/monitoring/apps/{{ item }}
      loop:
        - python-app.yaml
        - frontend.yaml
        - exoplanets.yaml
...