3 # Copyright 2016 The Linux Foundation
5 source ${CI_MGMT}/vagrant/lib/vagrant-functions.sh
10 pip install -q --upgrade pip setuptools python-{cinder,glance,keystone,neutron,nova,openstack}client
14 # AGE_JSON=$(latest_src_age ${DIST} ${VERSION} ${ARCH})
16 function latest_src_age ()
18 SRC_TS=$(latest_src_timestamp "$@")
19 NOW_TS=$(new_timestamp)
21 perl -I${CI_MGMT}/vagrant/lib -MRespin -e 'Respin::latest_src_age( @ARGV )' "${NOW_TS}" "${SRC_TS}"
26 function new_timestamp ()
28 date +'%F T %T' | sed -e 's/[-: ]//g'
31 function new_dst_timestamp ()
33 if [ -z "${DST_TIMESTAMP}" ]
35 DST_TIMESTAMP=$(new_timestamp)
42 function new_src_timestamp ()
44 if [ -z "${SRC_TIMESTAMP}" ]
46 SRC_TIMESTAMP=$(date +'%F T %T' | sed -e 's/[-: ]//g')
53 function latest_src_timestamp ()
55 if [ -z "${SRC_TIMESTAMP}" ]
57 SRC_TIMESTAMP=$(glance image-list | perl -n -e 'if( /\((\S+)\) - LF upload/ ){ print "$1\n" }' | sort | tail -1)
66 # glance_image_create ${IMG_NAME} ${IMG_PATH}
69 # glance_image_create "CentOS 7 (20160517T143002) - LF upload" /var/lib/libvirt/images/CentOS-7-x86_64-GenericCloud.qcow2c
71 function glance_image_create ()
73 glance image-create --disk-format qcow2 --container-format bare --progress \
74 --name "${1}" --file "${2}"
79 SRC_TIMESTAMP=$(new_src_timestamp)
83 ARCH=${ARCH:-${RH_ARCH64}}
84 IMG_FNAME="${DIST}-${VERSION}-${ARCH}-GenericCloud.qcow2c"
85 IMG_PATH="${LV_IMG_DIR}/${IMG_FNAME}"
86 IMG_NAME="${DIST} ${VERSION} (${SRC_TIMESTAMP}) - LF upload"
91 # create_rh_image ${DIST} ${VERSION} ${ARCH}
94 # create_rh_image CentOS 7 x86_64
96 function create_rh_image ()
100 if [ ! -f ${IMG_PATH} ]; then download_rh_image "$@"; fi
102 glance_image_create "${IMG_NAME}" "${IMG_PATH}"
105 function download_rh_image ()
108 echo "--> Fetching image file for ${DIST} ${VERSION}"
109 wget -qcP ${LV_IMG_DIR} "http://cloud.centos.org/centos/${VERSION}/images/${IMG_FNAME}"
113 declare -A deb_codename_map
114 deb_codename_map=(['3.0']=woody \
124 declare -A ubuntu_codename_map
125 ubuntu_codename_map=(['6.06']=dapper \
132 DEB_CURRENT_VER='8.4.0'
133 DEB_CURRENT_CODENAME='jessie'
135 DEB_TESTING_VER='9.0.0'
136 DEB_TESTING_CODENAME='stretch'
138 DEB_UNSTABLE_VER='10.0.0'
139 DEB_UNSTABLE_CODENAME='buster'
141 function setup_deb ()
143 SRC_TIMESTAMP=$(new_src_timestamp)
147 ARCH=${ARCH:-${DEB_ARCH64}}
150 VVAL=$(echo ${VERSION} | perl -ne 'm/(?:(\d+)(?:\.(\d+))?)(?:\.(\d+))?/; $min=$2 // 0; $mic = $3 // 0; print qq{([maj]=$1 [min]=$min [mic]=$mic)}')
153 LCDIST=$(echo ${DIST} | perl -ne 'print lc')
155 MAJOR_VERSION="${V['maj']}"
156 MINOR_VERSION="${MAJOR_VERSION}.${V['min']}"
157 MICRO_VERSION="${MINOR_VERSION}.${V['mic']}"
161 if [ "Debian" == "${DIST}" ]
163 CODENAME="${deb_codename_map[$MINOR_VERSION]}"
164 CODENAME=${CODENAME:-${deb_codename_map[$MAJOR_VERSION]}}
165 if [ -z "$CODENAME" ]
167 echo "--> no codename for ${DIST} v${MICRO_VERSION}"
171 URL_PFX="http://cdimage.debian.org/cdimage/openstack/"
173 if [ "${DEB_CURRENT_CODENAME}" == "${CODENAME}" ]
175 OSTACK_SUBDIR='current'
176 QCOW_VER=${MICRO_VERSION}
177 elif [ "${DEB_TESTING_CODENAME}" == "${CODENAME}" ]
179 OSTACK_SUBDIR='testing'
182 echo "--> Not certain where to find images for ${DIST} v${MICRO_VERSION}"
185 IMG_FNAME="${LCDIST}-${QCOW_VER}-openstack-${ARCH}.qcow2"
186 URL="http://cdimage.debian.org/cdimage/openstack/${OSTACK_SUBDIR}/${IMG_FNAME}"
188 elif [ "Ubuntu" == "${DIST}" ]
190 CODENAME="${ubuntu_codename_map[$MINOR_VERSION]}"
191 if [ -z "$CODENAME" ]
193 echo "--> no codename for ${DIST} v${MICRO_VERSION}"
197 IMG_FNAME="${CODENAME}-server-cloudimg-${ARCH}-disk1.img"
198 URL="https://cloud-images.ubuntu.com/${CODENAME}/current/${IMG_FNAME}"
200 echo "--> unrecognized distribution: ${DIST}"
204 export IMG_PATH="${LV_IMG_DIR}/${IMG_FNAME}"
205 export IMG_NAME="${DIST} ${VERSION} (${SRC_TIMESTAMP}) - LF upload"
210 # download_deb_image ${DIST} ${VERSION} ${ARCH}
213 # download_deb_image Ubuntu 14.04 amd64
215 function download_deb_image ()
219 if [ -z "$URL" ]; then echo "Cannot fetch qcow2 image for ${DIST} v${MICRO_VERSION}"; return -3; fi
220 echo "--> Fetching image file for ${DIST} ${VERSION}"
221 wget -qcP ${LV_IMG_DIR} "${URL}"
227 # create_deb_image ${DIST} ${VERSION} ${ARCH}
230 # create_deb_image Ubuntu 14.04 amd64
232 function create_deb_image ()
236 if [ ! -f ${IMG_PATH} ]; then download_deb_image "$@"; fi
238 echo "--> Pushing image ${IMG_NAME}"
239 glance_image_create "${IMG_NAME}" "${IMG_PATH}"
242 function respin_deb_image ()
244 SRC_TIMESTAMP=$(latest_src_timestamp)
245 DST_TIMESTAMP=$(new_dst_timestamp)
247 export IMAGE="${IMG_NAME}"
248 echo "--> creating instance of image '${IMG_NAME}' as server name '${SERVER_NAME}'"
249 vagrant up --provider=openstack
250 if [ "Ubuntu" == "${DIST}" ]
252 DST_IMAGE="${DIST} ${VERSION} LTS - basebuild - ${DST_TIMESTAMP}"
253 elif [ "Debian" == "${DIST}" ]
255 DST_IMAGE="${DIST} ${VERSION} - basebuild - ${DST_TIMESTAMP}"
257 echo "unrecognized disribution: ${DIST}"
260 echo "--> Taking snapshot of image '${IMG_NAME}' with name '${DST_IMAGE}'"
261 nova image-create --poll "${SERVER_NAME}" "${DST_IMAGE}"
262 echo "--> Bringing down vagrant instance"
266 function respin_rh_image ()
268 SRC_TIMESTAMP=$(latest_src_timestamp)
269 DST_TIMESTAMP=$(new_dst_timestamp)
271 export IMAGE="${IMG_NAME}"
272 echo "--> creating instance of image '${IMG_NAME}' as server name '${SERVER_NAME}'"
273 vagrant up --provider=openstack
274 DST_IMAGE="${DIST} ${VERSION} - basebuild - ${DST_TIMESTAMP}"
275 echo "--> Taking snapshot of image '${IMG_NAME}' with name '${DST_IMAGE}'"
276 nova image-create --poll "${SERVER_NAME}" "${DST_IMAGE}"
277 echo "--> Bringing down vagrant instance"
281 function dist_type ()
284 CentOS | RHEL | SuSE)
286 Debian | Ubuntu | Kali | ProxMox | VyOS)
289 echo "Unrecognized distribution: ${1}"