3 # Makefile for producing and uploading Vagrant boxes to Hashicorp Atlas
6 # Create a Vagrant image for VirtualBox:
7 # make vagrant-box WITH_VMIMAGES=y WITH_CLOUDWARE=y \
8 # CLOUDWARE=vagrant-virtualbox VMFORMATS=vmdk
10 # To create a Vagrant image for VMWare and Upload it to Atlas:
11 # VAGRANT_KEY is your Atlas API Token
12 # VAGRANT_USERNAME is your Atlas Username
13 # env VAGRANT_KEY=foo VAGRANT_USERNAME=bar make vagrant-upload \
14 # WITH_VMIMAGES=y WITH_CLOUDWARE=y CLOUDWARE=vagrant-vmware \
16 # For more info: https://www.vagrantup.com/docs/other/atlas.html
19 VAGRANT_IMG?= ${.OBJDIR}/vagrant.vmdk
20 VAGRANT_UPLOAD_TGTS= vagrant-check-depends
21 CLEANFILES+= ${VAGRANT_UPLOAD_TGTS}
23 .if defined(VAGRANT_UPLOAD_CONF) && !empty(VAGRANT_UPLOAD_CONF)
24 . for VAR in _KEY _USERNAME
25 VAGRANT${VAR}!= grep -E ^VAGRANT${VAR} ${VAGRANT_UPLOAD_CONF} | awk -F' ' '{print $$2}'
26 ATLAS${VAR}:= ${VAGRANT${VAR}}
30 .if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
31 SNAPSHOT_DATE!= date +-${BUILDDATE}
34 VAGRANT_VERSION!= date +%Y.%m.%d
35 VAGRANT_TARGET:= ${OSRELEASE}${SNAPSHOT_DATE}
37 . for _PROVIDER in ${CLOUDWARE}
38 . if ${_PROVIDER:tu:MVAGRANT*}
39 VAGRANT_PROVIDERS+= ${_PROVIDER:tu:S/VAGRANT-//:tl}
43 VAGRANT_PROVIDERS?= vmware virtualbox
46 vagrant-check-depends:
47 .for VAR in _KEY _USERNAME _VERSION
48 . if !defined(VAGRANT${VAR}) || empty(VAGRANT${VAR})
49 @echo "Variable VAGRANT${VAR} cannot be empty."
53 .if !exists(/usr/local/bin/curl)
54 . if !exists(${PORTSDIR}/ftp/curl/Makefile)
55 . if !exists(/usr/local/sbin/pkg-static)
56 env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
58 env ASSUME_ALWAYS_YES=yes pkg install -y curl
60 env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/ftp/curl BATCH=1 all install clean
64 .for PROVIDER in ${VAGRANT_PROVIDERS}
65 CLEANFILES+= vagrant-do-package-${PROVIDER} ${VAGRANT_TARGET}.${PROVIDER}.box
66 CLEANDIRS+= ${PROVIDER}
67 VAGRANT_UPLOAD_TGTS+= vagrant-do-upload-${PROVIDER}
72 ${VAGRANT_TARGET}.${PROVIDER}.box: ${PROVIDER} cw-vagrant-${PROVIDER} vagrant-create-${PROVIDER}-metadata
73 @echo "==> PACKAGING: ${VAGRANT_TARGET}.${PROVIDER}.box in `pwd`"
74 @cp vagrant-${PROVIDER}.vmdk ${PROVIDER}/vagrant.vmdk
75 . if ${PROVIDER} == "virtualbox"
76 @(cd ${.OBJDIR}/${PROVIDER} && echo '{"provider":"${PROVIDER}"}' > metadata.json)
77 @(cd ${.OBJDIR}/${PROVIDER} && tar -czf ../${VAGRANT_TARGET}.${PROVIDER}.box metadata.json box.ovf vagrant.vmdk)
78 . elif ${PROVIDER} == "vmware"
79 @(cd ${.OBJDIR}/${PROVIDER} && echo '{"provider":"${PROVIDER}_desktop"}' > metadata.json)
80 @(cd ${.OBJDIR}/${PROVIDER} && tar -czf ../${VAGRANT_TARGET}.${PROVIDER}.box metadata.json vagrant.vmx vagrant.vmdk)
83 CLEANFILES+= vagrant-do-upload-${PROVIDER}
84 vagrant-do-upload-${PROVIDER}: vagrant-box
85 . if ${PROVIDER} == "virtualbox"
86 ${.CURDIR}/scripts/atlas-upload.sh -b ${TYPE}-${REVISION}-${BRANCH} -f ${VAGRANT_TARGET}.${PROVIDER}.box -p ${PROVIDER} -k ${VAGRANT_KEY} -u ${VAGRANT_USERNAME} -v ${VAGRANT_VERSION}
87 . elif ${PROVIDER} == "vmware"
88 ${.CURDIR}/scripts/atlas-upload.sh -b ${TYPE}-${REVISION}-${BRANCH} -f ${VAGRANT_TARGET}.${PROVIDER}.box -p ${PROVIDER}_desktop -k ${VAGRANT_KEY} -u ${VAGRANT_USERNAME} -v ${VAGRANT_VERSION}
90 touch ${.OBJDIR}/${.TARGET}
92 vagrant-box: ${VAGRANT_TARGET}.${PROVIDER}.box
96 vagrant-upload: ${VAGRANT_UPLOAD_TGTS}
98 vagrant-create-virtualbox-metadata: virtualbox/box.ovf
100 virtualbox/box.ovf: ${.CURDIR}/scripts/box.ovf
101 cp ${.ALLSRC} virtualbox/
103 vmware/vagrant.vmx: ${.CURDIR}/scripts/vagrant.vmx
104 cp ${.ALLSRC} vmware/
106 vagrant-create-vmware-metadata: vmware/vagrant.vmx