---
apiVersion: kubevirt.io/v1
kind: VirtualMachineInstance
metadata:
  generateName: {{ cloud_image }}-
  namespace: {{ pod_namespace }}
  annotations:
    kubespray.com/ci.template-path: "tests/cloud_playbooks/roles/packet-ci/templates/vm.yml.j2"
    ansible_groups: "{{ node_groups | join(',') }}"
    inventory_name: "{{ name | d(cloud_image ~ '-' ~ index) }}"
    # This does not use a dns prefix because dots are hard to escape with map(attribute=) in Jinja
  labels:
    kubevirt.io/os: {{ cloud_image }}
    kubevirt.io/size: small
    ci_job_id: "{{ ci_job_id }}"
    ci_job_name: "{{ lookup('ansible.builtin.env', 'CI_JOB_NAME_SLUG') }}"
  # leverage the Kubernetes GC for resources cleanup
  ownerReferences:
  - apiVersion: v1
    kind: Pod
    name: "{{ pod_name }}"
    uid: "{{ pod_uid }}"
spec:
  domain:
    devices:
      blockMultiQueue: true
      disks:
        - disk:
            bus: virtio
          name: containervolume
          cache: writethrough
        - disk:
            bus: virtio
          name: cloudinitvolume
      interfaces:
      - name: default
        bridge: {}
    cpu:
        cores: {{ vm_cpu_cores }}
        sockets: {{ vm_cpu_sockets }}
        threads: {{ vm_cpu_threads }}
    resources:
      requests:
        memory: "{{ vm_memory * memory_allocation_ratio }}Mi"
        cpu: {{ vm_cpu_cores * cpu_allocation_ratio }}
      limits:
        memory: "{{ vm_memory }}Mi"
        cpu: {{ vm_cpu_cores }}
  networks:
  - name: default
    pod: {}
  terminationGracePeriodSeconds: 0
  volumes:
    - name: containervolume
      containerDisk:
        image: quay.io/kubespray/vm-{{ cloud_image }}
    - name: cloudinitvolume
      cloudInitNoCloud:
        userData: |
          #cloud-config
           users:
             - name: {{ lookup('env', 'ANSIBLE_REMOTE_USER') }}
               sudo: ALL=(ALL) NOPASSWD:ALL
               shell: /bin/bash
               lock_passwd: False
               ssh_authorized_keys:
                 - {{ ssh_key.public_key }}
