4 # Makefile for uploading Google Compute Engine disk images.
7 GCE_UPLOAD_TGTS= gce-check-depends \
10 # I do not yet have a better way to deal with the "must be run interactively"
11 # thing, so this is a fail-safe "do not do anything."
12 .if !defined(GCE_LOGIN_SKIP) || empty(GCE_LOGIN_SKIP)
13 GCE_UPLOAD_TGTS= gce-do-login
15 CLEANFILES+= ${GCE_UPLOAD_TGTS}
20 .if !defined(GCE_FAMILY) || empty(GCE_FAMILY)
21 GCE_FAMILY= ${TYPE:tl}-${REVISION:S,.,-,}
24 .if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
25 SNAPSHOT_DATE= -v${BUILDDATE}
26 GCE_FAMILY_SUFX= -snap
29 gce-upload: ${GCE_UPLOAD_TGTS}
33 . if !defined(GCE${VAR}) || empty(GCE${VAR})
34 @echo "Variable GCE${VAR} cannot be empty."
38 .if !exists(/usr/local/bin/gcloud)
39 . if !exists(${PORTSDIR}/net/google-cloud-sdk/Makefile)
40 . if !exists(/usr/local/sbin/pkg-static)
41 env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
43 env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk \
46 env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/google-cloud-sdk \
47 BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
49 env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/lang/python \
50 BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
56 @echo "This requires human interaction, which is not yet supported."
59 .for _FS in ${GCE_FSLIST}
60 GCE_IMG_${_FS}= ${.OBJDIR}/gce.${_FS}.raw
61 # Really? Uppercase characters are not allowed? Sigh...
62 # And don't even get me started on the '.'.
63 GCE_TARGET_${_FS}= ${OSRELEASE:S,.raw,,:tl:S,.,-,g}-${_FS}${SNAPSHOT_DATE}
65 gce-do-package-${_FS}:
66 @# Yes, really... Sigh.
67 cd ${.OBJDIR} && mv ${GCE_IMG_${_FS}} disk.raw
68 cd ${.OBJDIR} && tar --format=gnutar -zcf \
69 ${GCE_TARGET_${_FS}:S,${.OBJDIR}/,,}.tar.gz disk.raw
70 cd ${.OBJDIR} && mv disk.raw ${GCE_IMG_${_FS}}
71 touch ${.OBJDIR}/${.TARGET}
74 @# Fallthrough in case the bucket already exists.
75 /usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true
76 /usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET_${_FS}}.tar.gz \
78 /usr/local/bin/gcloud compute images create ${GCE_TARGET_${_FS}} \
79 --family=${GCE_FAMILY}${GCE_FAMILY_SUFX} ${GCE_LICENSE} \
80 --guest-os-features=GVNIC,UEFI_COMPATIBLE \
81 --source-uri gs://${GCE_BUCKET}/${GCE_TARGET_${_FS}}.tar.gz
82 touch ${.OBJDIR}/${.TARGET}
85 gce-do-package: gce-do-package-${VMFS}
86 gce-do-upload: gce-do-upload-${VMFS}