---
- block:
    - name: ensure that k8s-log namespace exists
      k8s:
        kind: Namespace
        name: k8s-log

    - name: create hello-world deployment
      k8s:
        wait: yes
        definition:
          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: hello-world
            namespace: k8s-log
          spec:
            selector:
              matchLabels:
                app: hello-world
            template:
              metadata:
                labels:
                  app: hello-world
              spec:
                containers:
                  - image: busybox
                    name: hello-world
                    command: ['sh']
                    args: ['-c', 'while true ; do echo "hello world" && sleep 10 ; done']
                restartPolicy: Always

    - name: retrieve the log by providing the deployment
      k8s_log:
        api_version: apps/v1
        kind: Deployment
        namespace: k8s-log
        name: hello-world
      register: deployment_log

    - name: verify that the log can be retrieved via the deployment
      assert:
        that:
          - "'hello world' in deployment_log.log"
          - item == 'hello world' or item == ''
      with_items: '{{ deployment_log.log_lines }}'

    - name: retrieve the log with a label selector
      k8s_log:
        namespace: k8s-log
        label_selectors:
          - 'app=hello-world'
      register: label_selector_log

    - name: verify that the log can be retrieved via the label
      assert:
        that:
          - "'hello world' in label_selector_log.log"
          - item == 'hello world' or item == ''
      with_items: '{{ label_selector_log.log_lines }}'

    - name: get the hello-world pod
      k8s_info:
        kind: Pod
        namespace: k8s-log
        label_selectors:
          - 'app=hello-world'
      register: k8s_log_pods

    - name: retrieve the log directly with the pod name
      k8s_log:
        namespace: k8s-log
        name: '{{ k8s_log_pods.resources.0.metadata.name }}'
      register: pod_log

    - name: verify that the log can be retrieved via the pod name
      assert:
        that:
          - "'hello world' in pod_log.log"
          - item == 'hello world' or item == ''
      with_items: '{{ pod_log.log_lines }}'

    - name: Create a job that calculates 7
      k8s:
        state: present
        wait: yes
        wait_timeout: 120
        wait_condition:
          type: Complete
          status: 'True'
        definition:
          apiVersion: batch/v1
          kind: Job
          metadata:
            name: int-log
            namespace: k8s-log
          spec:
            template:
              spec:
                containers:
                  - name: busybox
                    image: busybox
                    command: ["echo", "7"]
                restartPolicy: Never
            backoffLimit: 4

    - name: retrieve logs from the job
      k8s_log:
        api_version: batch/v1
        kind: Job
        namespace: k8s-log
        name: int-log
      register: job_logs

    - name: verify the log was successfully retrieved
      assert:
        that: job_logs.log_lines[0] == "7"

  always:
    - name: ensure that namespace is removed
      k8s:
        kind: Namespace
        name: k8s-log
        state: absent
