| # Copyright 2021 Google LLC |
| # |
| # Licensed under the Apache License, Version 2.0 (the License); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an AS IS BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| substitutions: |
| '_TEST': 'ubuntu_ova_test' |
| '_INPUT_IMAGE': 'https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.ova' |
| steps: |
| # Build cos-customizer and tools container |
| - name: 'gcr.io/cloud-builders/bazel' |
| args: ['run', '--spawn_strategy=standalone', ':cos_customizer', '--', '--norun'] |
| - name: 'gcr.io/cloud-builders/docker' |
| entrypoint: 'bash' |
| args: |
| - '-c' |
| - | |
| cat <<EOF| docker build -t tools - |
| FROM ubuntu |
| RUN apt-get update && apt-get install -y qemu-utils |
| EOF |
| # Download input |
| - name: 'gcr.io/cloud-builders/wget' |
| args: ['-O', 'input.ova', '${_INPUT_IMAGE}'] |
| |
| # Convert to GCE image |
| - name: 'tools' |
| entrypoint: 'bash' |
| args: |
| - '-c' |
| - | |
| set -e |
| mkdir ova |
| pushd ova |
| mv ../input.ova . |
| tar xf input.ova |
| echo "Converting vmdk to disk.raw" |
| qemu-img convert -O raw *.vmdk disk.raw |
| tar czf ubuntu_gce.tar.gz disk.raw |
| - name: 'gcr.io/cloud-builders/gsutil' |
| args: ['cp', 'ova/ubuntu_gce.tar.gz', 'gs://${PROJECT_ID}_cloudbuild/build-ova-${BUILD_ID}/ubuntu_gce.tar.gz'] |
| - name: 'gcr.io/cloud-builders/gcloud' |
| args: ['compute', 'images', 'create', 'input-${BUILD_ID}', |
| '--source-uri', 'gs://${PROJECT_ID}_cloudbuild/build-ova-${BUILD_ID}/ubuntu_gce.tar.gz', |
| '--project', '${PROJECT_ID}'] |
| - name: 'gcr.io/cloud-builders/gsutil' |
| args: ['rm', 'gs://${PROJECT_ID}_cloudbuild/build-ova-${BUILD_ID}/ubuntu_gce.tar.gz'] |
| |
| # Run cos-customizer |
| - name: 'bazel:cos_customizer' |
| args: ['start-image-build', |
| '-build-context=testing/${_TEST}', |
| '-image-name=input-${BUILD_ID}', |
| '-image-project=${PROJECT_ID}', |
| '-gcs-bucket=${PROJECT_ID}_cloudbuild', |
| '-gcs-workdir=customizer-$BUILD_ID'] |
| - name: 'bazel:cos_customizer' |
| args: ['run-script', |
| '-script=preload.sh'] |
| - name: 'bazel:cos_customizer' |
| args: ['finish-image-build', |
| '-zone=us-west1-b', |
| '-project=${PROJECT_ID}', |
| '-image-name=preload-test-$BUILD_ID', |
| '-image-project=${PROJECT_ID}'] |
| |
| # Delete input image |
| - name: 'gcr.io/cloud-builders/gcloud' |
| args: ['compute', 'images', 'delete', 'input-${BUILD_ID}', '-q'] |
| |
| # Validate output image |
| - name: 'gcr.io/compute-image-tools/daisy' |
| args: ['-project=$PROJECT_ID', '-zone=us-west1-b', '-var:image_name', |
| 'preload-test-$BUILD_ID', '-var:image_project', '$PROJECT_ID', |
| '-var:test_cfg', '../${_TEST}/preload_test.cfg', 'testing/util/run_test.wf.json'] |
| options: |
| machineType: 'N1_HIGHCPU_8' |
| timeout: '7200s' |