Makefile.gce revision 334963
1139826Simp#
253541Sshin# $FreeBSD: stable/10/release/Makefile.gce 334963 2018-06-11 17:22:27Z gjb $
353541Sshin#
453541Sshin#
553541Sshin# Makefile for uploading Google Compute Engine disk images.
653541Sshin#
753541Sshin
853541SshinGCE_IMG?=		${.OBJDIR}/gce.raw
953541SshinGCE_UPLOAD_TGTS=	gce-check-depends \
1053541Sshin			gce-do-package \
1153541Sshin			gce-do-upload
1253541Sshin# I do not yet have a better way to deal with the "must be run interactively"
1353541Sshin# thing, so this is a fail-safe "do not do anything."
1453541Sshin.if !defined(GCE_LOGIN_SKIP) || empty(GCE_LOGIN_SKIP)
1553541SshinGCE_UPLOAD_TGTS=	gce-do-login
1653541Sshin.endif
1753541SshinCLEANFILES+=		${GCE_UPLOAD_TGTS}
1853541Sshin
1953541SshinGCE_BUCKET?=
2053541SshinGCE_LICENSE?=
2153541Sshin
2253541Sshin.if !defined(GCE_FAMILY) || empty(GCE_FAMILY)
2353541SshinGCE_FAMILY=		${TYPE:tl}-${REVISION:S,.,-,}
2453541Sshin.endif
2553541Sshin
2653541Sshin.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
2753541Sshin_SNAPSHOT_DATE!=	date +%Y%m%d
2853541SshinSNAPSHOT_DATE=		-v${_SNAPSHOT_DATE}
2953541SshinGCE_FAMILY_SUFX=	-snap
30139826Simp.endif
3153541Sshin
32171328Srwatson# Really?  Uppercase characters are not allowed?  Sigh...
33171328Srwatson# And don't even get me started on the '.'.
3453541SshinGCE_TARGET:=		${OSRELEASE:S,.raw,,:tl:S,.,-,g}${SNAPSHOT_DATE}
3553541Sshin
3653541Sshingce-upload:		${GCE_UPLOAD_TGTS}
3753541Sshin
3853541Sshingce-check-depends:
3953541Sshin.for VAR in _BUCKET
4053541Sshin. if !defined(GCE${VAR}) || empty(GCE${VAR})
4153541Sshin	@echo "Variable GCE${VAR} cannot be empty."
4253541Sshin	@false
4353541Sshin. endif
4453541Sshin.endfor
4553541Sshin.if !exists(/usr/local/bin/gcloud)
4653541Sshin. if !exists(${PORTSDIR}/net/google-cloud-sdk/Makefile)
4753541Sshin.  if !exists(/usr/local/sbin/pkg-static)
4853541Sshin	env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
4953541Sshin.  endif
5053541Sshin	env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk
5153541Sshin. else
5253541Sshin	make -C ${PORTSDIR}/net/google-cloud-sdk BATCH=1 all install clean
5353541Sshin. endif
5453541Sshin.endif
5553541Sshin
5653541Sshingce-do-package:
5753541Sshin	@# Yes, really...  Sigh.
5853541Sshin	cd ${.OBJDIR} && mv gce.raw disk.raw
5953541Sshin	cd ${.OBJDIR} && tar --format=gnutar -zcf \
60174510Sobrien		${GCE_TARGET:S,${.OBJDIR}/,,}.tar.gz disk.raw
6153541Sshin	cd ${.OBJDIR} && mv disk.raw gce.raw
6253541Sshin	touch ${.OBJDIR}/${.TARGET}
6353541Sshin
6462587Sitojungce-do-login:
6553541Sshin	@echo "This requires human interaction, which is not yet supported."
6655205Speter	@true
6754263Sshin
6854263Sshingce-do-upload:
69171328Srwatson	@# Fallthrough in case the bucket already exists.
7053541Sshin	/usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true
71171328Srwatson	/usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET}.tar.gz \
72265946Skevlo		gs://${GCE_BUCKET}/
73171328Srwatson	/usr/local/bin/gcloud compute images create ${GCE_TARGET} \
7455205Speter		--family=${GCE_FAMILY}${GCE_FAMILY_SUFX} ${GCE_LICENSE} \
7553541Sshin		--source-uri gs://${GCE_BUCKET}/${GCE_TARGET}.tar.gz
7653541Sshin	touch ${.OBJDIR}/${.TARGET}
77
78