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