---

variables:
    # Complete local path to this repository (Required)
    GOSRC:
    # Relative path to this (packer) subdirectory (Required)
    PACKER_BASE:
    # Relative path to cirrus scripts subdirectory (Required)
    SCRIPT_BASE:
    # Unique ID for naming new base-images (required)
    TIMESTAMP:
    # Required for output from qemu builders
    TTYDEV:

    # Ubuntu releases are mearly copied to this project for control purposes
    UBUNTU_BASE_IMAGE:
    PRIOR_UBUNTU_BASE_IMAGE:

    # Latest Fedora release
    FEDORA_IMAGE_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Cloud/x86_64/images/Fedora-Cloud-Base-30-1.2.x86_64.qcow2"
    FEDORA_CSUM_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Cloud/x86_64/images/Fedora-Cloud-30-1.2-x86_64-CHECKSUM"
    FEDORA_BASE_IMAGE_NAME: 'fedora-cloud-base-30-1-2'

    # Prior Fedora release
    PRIOR_FEDORA_IMAGE_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/29/Cloud/x86_64/images/Fedora-Cloud-Base-29-1.2.x86_64.qcow2"
    PRIOR_FEDORA_CSUM_URL: "https://dl.fedoraproject.org/pub/fedora/linux/releases/29/Cloud/x86_64/images/Fedora-Cloud-29-1.2-x86_64-CHECKSUM"
    PRIOR_FEDORA_BASE_IMAGE_NAME: 'fedora-cloud-base-29-1-2'  # Name to use in GCE

    # The name of the image in GCE used for packer build libpod_images.yml
    IBI_BASE_NAME: 'image-builder-image'
    CIDATA_ISO: 'cidata.iso'  # produced by Makefile

    # Path to json file (required, likely ~/.config/gcloud/legacy_credentials/*/adc.json)
    GOOGLE_APPLICATION_CREDENTIALS:
    # The complete project ID (required, not the short name)
    GCP_PROJECT_ID:
    # Pre-existing storage bucket w/ lifecycle-enabled
    XFERBUCKET: "packer-import"  # pre-created, globally unique, lifecycle-enabled

# Don't leak sensitive values in error messages / output
sensitive-variables:
    - 'GOOGLE_APPLICATION_CREDENTIALS'
    - 'GCP_PROJECT_ID'

# What images to produce in which cloud
builders:
    - &nested_virt
      name: 'fedora'
      type: 'qemu'
      accelerator: "kvm"
      iso_url: '{{user `FEDORA_IMAGE_URL`}}'
      disk_image: true
      format: "raw"
      disk_size: 5120
      iso_checksum_url: '{{user `FEDORA_CSUM_URL`}}'
      iso_checksum_type: "sha256"
      output_directory: '/tmp/{{build_name}}'
      vm_name: "disk.raw"  # actually qcow2, name required for post-processing
      boot_wait: '5s'
      shutdown_command: 'shutdown -h now'
      headless: true
      qemu_binary: "/usr/libexec/qemu-kvm"
      qemuargs:  # List-of-list format required to override packer-generated args
        - - "-m"
          - "1024"
        - - "-cpu"
          - "host"
        - - "-device"
          - "virtio-rng-pci"
        - - "-chardev"
          - "tty,id=pts,path={{user `TTYDEV`}}"
        - - "-device"
          - "isa-serial,chardev=pts"
        - - "-cdrom"
          - "{{user `CIDATA_ISO`}}"
        - - "-netdev"
          - "user,id=net0,hostfwd=tcp::{{ .SSHHostPort }}-:22"
        - - "-device"
          - "virtio-net,netdev=net0"
      communicator: 'ssh'
      ssh_private_key_file: 'cidata.ssh'
      ssh_username: 'root'

    - <<: *nested_virt
      name: 'prior-fedora'
      iso_url: '{{user `PRIOR_FEDORA_IMAGE_URL`}}'
      iso_checksum_url: '{{user `PRIOR_FEDORA_CSUM_URL`}}'

    - &imgcopy
      name: 'ubuntu'
      type: 'googlecompute'
      image_name: '{{user `UBUNTU_BASE_IMAGE`}}'
      image_family: '{{build_name}}-base'
      source_image: '{{user `UBUNTU_BASE_IMAGE`}}'
      source_image_project_id: 'ubuntu-os-cloud'
      project_id: '{{user `GCP_PROJECT_ID`}}'
      account_file: '{{user `GOOGLE_APPLICATION_CREDENTIALS`}}'
      startup_script_file: "systemd_banish.sh"
      zone: 'us-central1-a'
      disk_size: 20
      communicator: 'none'

    - <<: *imgcopy
      name: 'prior-ubuntu'
      image_name: '{{user `PRIOR_UBUNTU_BASE_IMAGE`}}'
      source_image: '{{user `PRIOR_UBUNTU_BASE_IMAGE`}}'

provisioners:
    - type: 'shell'
      only: ['fedora', 'prior-fedora']
      inline:
        - 'mkdir -p /tmp/libpod/{{user `SCRIPT_BASE`}}'
        - 'mkdir -p /tmp/libpod/{{user `PACKER_BASE`}}'

    - type: 'file'
      only: ['fedora', 'prior-fedora']
      source: '{{user `GOSRC`}}/.cirrus.yml'
      destination: '/tmp/libpod/.cirrus.yml'

    - type: 'file'
      only: ['fedora', 'prior-fedora']
      source: '{{user `GOSRC`}}/{{user `SCRIPT_BASE`}}/'
      destination: '/tmp/libpod/{{user `SCRIPT_BASE`}}/'

    - type: 'file'
      only: ['fedora', 'prior-fedora']
      source: '{{user `GOSRC`}}/{{user `PACKER_BASE`}}/'
      destination: '/tmp/libpod/{{user `PACKER_BASE`}}/'

    - &shell_script
      only: ['fedora', 'prior-fedora']
      type: 'shell'
      inline:
        - 'chmod +x /tmp/libpod/{{user `PACKER_BASE`}}/*.sh'
        - '/tmp/libpod/{{user `PACKER_BASE`}}/{{build_name}}_base-setup.sh'
      expect_disconnect: true  # Allow this to reboot the VM if needed
      environment_vars:
          - 'TIMESTAMP={{user `TIMESTAMP`}}'
          - 'GOSRC=/tmp/libpod'
          - 'SCRIPT_BASE={{user `SCRIPT_BASE`}}'
          - 'PACKER_BASE={{user `PACKER_BASE`}}'

post-processors:
    - - type: "compress"
        only: ['fedora', 'prior-fedora']
        output: '/tmp/{{build_name}}/disk.raw.tar.gz'
        format: '.tar.gz'
        compression_level: 9
      - &gcp_import
        only: ['fedora']
        type: "googlecompute-import"
        project_id: '{{user `GCP_PROJECT_ID`}}'
        account_file: '{{user `GOOGLE_APPLICATION_CREDENTIALS`}}'
        bucket: '{{user `XFERBUCKET`}}'
        gcs_object_name: '{{build_name}}-{{user `TIMESTAMP`}}.tar.gz'
        image_name: "{{user `FEDORA_BASE_IMAGE_NAME`}}-{{user `TIMESTAMP`}}"
        image_description: 'Based on {{user `FEDORA_IMAGE_URL`}}'
        image_family: '{{build_name}}-base'
      - <<: *gcp_import
        only: ['prior-fedora']
        image_name: "{{user `PRIOR_FEDORA_BASE_IMAGE_NAME`}}-{{user `TIMESTAMP`}}"
        image_description: 'Based on {{user `PRIOR_FEDORA_IMAGE_URL`}}'
        image_family: '{{build_name}}-base'
      - type: 'manifest'