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