3 # Copyright 2016 The Linux Foundation
5 source ${CI_MGMT}/vagrant/lib/vagrant-functions.sh
9 pip install -q --upgrade pip setuptools python-{cinder,glance,keystone,neutron,nova,openstack}client
13 # AGE_JSON=$(latest_src_age ${DIST} ${VERSION} ${ARCH})
15 function latest_src_age ()
17 SRC_TS=$(latest_src_timestamp "$@")
18 NOW_TS=$(new_timestamp)
20 perl -I${CI_MGMT}/vagrant/lib -MRespin -e 'Respin::latest_src_age( "${NOW_TS}", "${SRC_TS}" )'
25 function new_timestamp ()
27 date +'%F T %T' | sed -e 's/[-: ]//g'
30 function new_dst_timestamp ()
32 if [ -z "${DST_TIMESTAMP}" ]
34 DST_TIMESTAMP=$(new_timestamp)
41 function new_src_timestamp ()
43 if [ -z "${SRC_TIMESTAMP}" ]
45 SRC_TIMESTAMP=$(date +'%F T %T' | sed -e 's/[-: ]//g')
52 function latest_src_timestamp ()
54 if [ -z "${SRC_TIMESTAMP}" ]
56 SRC_TIMESTAMP=$(glance image-list | perl -n -e 'if( /\((\S+)\) - LF upload/ ){ print "$1\n" }' | sort | tail -1)
65 # glance_image_create ${IMG_NAME} ${IMG_PATH}
68 # glance_image_create "CentOS 7 (20160517T143002) - LF upload" /var/lib/libvirt/images/CentOS-7-x86_64-GenericCloud.qcow2c
70 function glance_image_create ()
72 glance image-create --disk-format qcow2 --container-format bare --progress \
73 --name "${1}" --file "${2}"
78 SRC_TIMESTAMP=$(new_src_timestamp)
82 ARCH=${ARCH:-${RH_ARCH64}}
83 IMG_FNAME="${DIST}-${VERSION}-${ARCH}-GenericCloud.qcow2c"
84 IMG_PATH="${LV_IMG_DIR}/${IMG_FNAME}"
85 IMG_NAME="${DIST} ${VERSION} (${SRC_TIMESTAMP}) - LF upload"
90 # create_rh_image ${DIST} ${VERSION} ${ARCH}
93 # create_rh_image CentOS 7 x86_64
95 function create_rh_image ()
99 if [ ! -f ${IMG_PATH} ]; then download_rh_image "$@"; fi
101 glance_image_create "${IMG_NAME}" "${IMG_PATH}"
104 function download_rh_image ()
107 echo "--> Fetching image file for ${DIST} ${VERSION}"
108 wget -qcP ${LV_IMG_DIR} "http://cloud.centos.org/centos/${VERSION}/images/${IMG_FNAME}"
112 declare -A deb_codename_map
113 deb_codename_map=(['3.0']=woody \
123 declare -A ubuntu_codename_map
124 ubuntu_codename_map=(['6.06']=dapper \
131 DEB_CURRENT_VER='8.4.0'
132 DEB_CURRENT_CODENAME='jessie'
134 DEB_TESTING_VER='9.0.0'
135 DEB_TESTING_CODENAME='stretch'
137 DEB_UNSTABLE_VER='10.0.0'
138 DEB_UNSTABLE_CODENAME='buster'
140 function setup_deb ()
142 SRC_TIMESTAMP=$(new_src_timestamp)
146 ARCH=${ARCH:-${DEB_ARCH64}}
149 VVAL=$(echo ${VERSION} | perl -ne 'm/(?:(\d+)(?:\.(\d+))?)(?:\.(\d+))?/; $min=$2 // 0; $mic = $3 // 0; print qq{([maj]=$1 [min]=$min [mic]=$mic)}')
152 LCDIST=$(echo ${DIST} | perl -ne 'print lc')
154 MAJOR_VERSION="${V['maj']}"
155 MINOR_VERSION="${MAJOR_VERSION}.${V['min']}"
156 MICRO_VERSION="${MINOR_VERSION}.${V['mic']}"
160 if [ "Debian" == "${DIST}" ]
162 CODENAME="${deb_codename_map[$MINOR_VERSION]}"
163 CODENAME=${CODENAME:-${deb_codename_map[$MAJOR_VERSION]}}
164 if [ -z "$CODENAME" ]
166 echo "--> no codename for ${DIST} v${MICRO_VERSION}"
170 URL_PFX="http://cdimage.debian.org/cdimage/openstack/"
172 if [ "${DEB_CURRENT_CODENAME}" == "${CODENAME}" ]
174 OSTACK_SUBDIR='current'
175 QCOW_VER=${MICRO_VERSION}
176 elif [ "${DEB_TESTING_CODENAME}" == "${CODENAME}" ]
178 OSTACK_SUBDIR='testing'
181 echo "--> Not certain where to find images for ${DIST} v${MICRO_VERSION}"
184 IMG_FNAME="${LCDIST}-${QCOW_VER}-openstack-${ARCH}.qcow2"
185 URL="http://cdimage.debian.org/cdimage/openstack/${OSTACK_SUBDIR}/${IMG_FNAME}"
187 elif [ "Ubuntu" == "${DIST}" ]
189 CODENAME="${ubuntu_codename_map[$MINOR_VERSION]}"
190 if [ -z "$CODENAME" ]
192 echo "--> no codename for ${DIST} v${MICRO_VERSION}"
196 IMG_FNAME="${CODENAME}-server-cloudimg-${ARCH}-disk1.img"
197 URL="https://cloud-images.ubuntu.com/${CODENAME}/current/${IMG_FNAME}"
199 echo "--> unrecognized distribution: ${DIST}"
203 export IMG_PATH="${LV_IMG_DIR}/${IMG_FNAME}"
204 export IMG_NAME="${DIST} ${VERSION} (${SRC_TIMESTAMP}) - LF upload"
209 # download_deb_image ${DIST} ${VERSION} ${ARCH}
212 # download_deb_image Ubuntu 14.04 amd64
214 function download_deb_image ()
218 if [ -z "$URL" ]; then echo "Cannot fetch qcow2 image for ${DIST} v${MICRO_VERSION}"; return -3; fi
219 echo "--> Fetching image file for ${DIST} ${VERSION}"
220 wget -qcP ${LV_IMG_DIR} "${URL}"
226 # create_deb_image ${DIST} ${VERSION} ${ARCH}
229 # create_deb_image Ubuntu 14.04 amd64
231 function create_deb_image ()
235 if [ ! -f ${IMG_PATH} ]; then download_deb_image "$@"; fi
237 echo "--> Pushing image ${IMG_NAME}"
238 glance_image_create "${IMG_NAME}" "${IMG_PATH}"
241 function respin_deb_image ()
243 SRC_TIMESTAMP=$(latest_src_timestamp)
244 DST_TIMESTAMP=$(new_dst_timestamp)
246 export IMAGE="${IMG_NAME}"
247 echo "--> creating instance of image '${IMAGE}' as server name '${SERVER_NAME}'"
248 vagrant up --provider=openstack
249 if [ "Ubuntu" == "${DIST}" ]
251 DST_IMAGE="${DIST} ${VERSION} LTS - basebuild - ${DST_TIMESTAMP}"
252 elif [ "Debian" == "${DIST}" ]
254 DST_IMAGE="${DIST} ${VERSION} - basebuild - ${DST_TIMESTAMP}"
256 echo "unrecognized disribution: ${DIST}"
259 echo "--> Taking snapshot of image '${IMG_NAME}' with name '${DST_IMAGE}'"
260 nova image-create --poll "${SERVER_NAME}" "${DST_IMAGE}"
261 echo "--> Bringing down vagrant instance"
265 function respin_rh_image ()
267 SRC_TIMESTAMP=$(latest_src_timestamp)
268 DST_TIMESTAMP=$(new_dst_timestamp)
271 echo "--> creating instance of image '${IMG_NAME}' as server name '${SERVER_NAME}'"
272 vagrant up --provider=openstack
273 DST_IMAGE="${DIST} ${VERSION} - basebuild - ${DST_TIMESTAMP}"
274 echo "--> Taking snapshot of image '${IMG_NAME}' with name '${DST_IMAGE}'"
275 nova image-create --poll "${SERVER_NAME}" "${DST_IMAGE}"
276 echo "--> Bringing down vagrant instance"
280 function dist_type ()
283 CentOS | RHEL | SuSE)
285 Debian | Ubuntu | Kali | ProxMox | VyOS)
288 echo "Unrecognized distribution: ${1}"