From f18b747865b073211389ebe652d5f3098f729649 Mon Sep 17 00:00:00 2001 From: Fulvio Galeazzi <fulvio.galeazzi@garr.it> Date: Fri, 14 Sep 2018 15:57:27 +0000 Subject: [PATCH] 2018-09-14: FG; 1) handle image parameters like min_size,min_ram 2) handle tags within extraargs 3) do not remove old image, rather rename - set private - update description. --- config.yml | 35 +++++++++++++++++++++-------------- update-images.py | 34 ++++++++++++++++++++++++++-------- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/config.yml b/config.yml index b401e83..ba58ef2 100644 --- a/config.yml +++ b/config.yml @@ -3,6 +3,9 @@ images: name: Debian 8 - GARR url: https://cdimage.debian.org/cdimage/openstack/current-8/debian-8-openstack-amd64.qcow2 disk_format: qcow2 + extraargs: + - "min_disk=5" + - "min_ram=1024" tags: - "os_distro=debian" - "os_type=linux" @@ -10,12 +13,13 @@ images: - "architecture=amd64" - "os_require_quiesce=yes" - "hw_qemu_guest_agent=yes" - - "hw_scsi_model=virtio-scsi" - - "hw_disk_bus=scsi" debian9: name: Debian 9 - GARR url: https://cdimage.debian.org/cdimage/openstack/current-9/debian-9-openstack-amd64.qcow2 disk_format: qcow2 + extraargs: + - "min_disk=5" + - "min_ram=1024" tags: - "os_distro=debian" - "os_type=linux" @@ -23,13 +27,14 @@ images: - "architecture=amd64" - "os_require_quiesce=yes" - "hw_qemu_guest_agent=yes" - - "hw_scsi_model=virtio-scsi" - - "hw_disk_bus=scsi" - "hw_vif_multiqueue_enabled=true" fedora28q: name: Fedora 28 - GARR url: https://download.fedoraproject.org/pub/fedora/linux/releases/28/Cloud/x86_64/images/Fedora-Cloud-Base-28-1.1.x86_64.qcow2 disk_format: qcow2 + extraargs: + - "min_disk=5" + - "min_ram=1024" tags: - "os_distro=fedora" - "os_type=linux" @@ -37,13 +42,14 @@ images: - "architecture=x86_64" - "os_require_quiesce=yes" - "hw_qemu_guest_agent=yes" - - "hw_scsi_model=virtio-scsi" - - "hw_disk_bus=scsi" - "hw_vif_multiqueue_enabled=true" centos7: name: CentOS 7 - GARR url: http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2 disk_format: qcow2 + extraargs: + - "min_disk=5" + - "min_ram=1024" tags: - "os_distro=centos" - "os_type=linux" @@ -51,13 +57,14 @@ images: - "architecture=x86_64" - "os_require_quiesce=yes" - "hw_qemu_guest_agent=yes" - - "hw_scsi_model=virtio-scsi" - - "hw_disk_bus=scsi" - "hw_vif_multiqueue_enabled=true" centos6: name: CentOS 6 - GARR url: http://cloud.centos.org/centos/6/images/CentOS-6-x86_64-GenericCloud.qcow2 disk_format: qcow2 + extraargs: + - "min_disk=5" + - "min_ram=1024" tags: - "os_distro=centos" - "os_type=linux" @@ -65,12 +72,13 @@ images: - "architecture=x86_64" - "os_require_quiesce=yes" - "hw_qemu_guest_agent=yes" - - "hw_scsi_model=virtio-scsi" - - "hw_disk_bus=scsi" ubuntu-14.04: name: Ubuntu 14.04 - GARR url: https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloudimg-amd64-disk1.img disk_format: qcow2 + extraargs: + - "min_disk=5" + - "min_ram=1024" tags: - "os_distro=ubuntu" - "os_type=linux" @@ -78,12 +86,13 @@ images: - "architecture=amd64" - "os_require_quiesce=yes" - "hw_qemu_guest_agent=yes" - - "hw_scsi_model=virtio-scsi" - - "hw_disk_bus=scsi" ubuntu-16.04: name: Ubuntu 16.04 - GARR url: https://cloud-images.ubuntu.com/releases/16.04/release/ubuntu-16.04-server-cloudimg-amd64-disk1.img disk_format: qcow2 + extraargs: + - "min_disk=5" + - "min_ram=1024" tags: - "os_distro=ubuntu" - "os_type=linux" @@ -91,6 +100,4 @@ images: - "architecture=amd64" - "os_require_quiesce=yes" - "hw_qemu_guest_agent=yes" - - "hw_scsi_model=virtio-scsi" - - "hw_disk_bus=scsi" - "hw_vif_multiqueue_enabled=true" diff --git a/update-images.py b/update-images.py index c756cc7..b0ad961 100755 --- a/update-images.py +++ b/update-images.py @@ -7,6 +7,8 @@ import time import os from pprint import pprint import shade +import subprocess + from tqdm import tqdm requests_session = requests.Session() @@ -44,13 +46,14 @@ for image_key in sorted(config['images'].keys()): request_response.raise_for_status() http_last_modified = request_response.headers['Last-Modified'] - last_modified_time = datetime.datetime.strptime(http_last_modified, '%a, %d %b %Y %H:%M:%S GMT') - image_name = config['images'][image_key]['name'] image = openstack_cloud_connection.get_image(name_or_id=image_name) download = False + dateNow = datetime.datetime.now() + dateNowStr = dateNow.strftime("%Y/%m/%d") + descNewImg = "%s: downloaded from %s" % (dateNowStr, url) if image == None: download = True else: @@ -69,7 +72,15 @@ for image_key in sorted(config['images'].keys()): download = True if download: - openstack_cloud_connection.delete_image(name_or_id=image_name, wait=True) + # Add to description field + descOldImg = "%s: superceded by new image" % (dateNowStr) + if 'properties' in image and 'description' in image['properties']: + descCur = image['properties']['description'] + descOldImg = "%s \n %s" % (descOldImg, descCur) + # Rename image, update description, set image as private + image_name_old = "%s %s" % (image_name, dateNowStr) + print ("Rename old image, set private, update description: \n \t openstack image set --private --property description=\"{}\" --name \"{}\" {}".format(descOldImg[:30], image_name_old, image['id'])) + subprocess.call("openstack image set --private --property description=\"{}\" --name \"{}\" {}".format(descOldImg, image_name_old, image['id']), shell=True) if download: download_image_file = download_dir @@ -93,13 +104,20 @@ for image_key in sorted(config['images'].keys()): tagDict["last_modified"] = str(last_modified_time) if config['images'][image_key]['tags']: tagDict = dict(tag_desc.split('=',1) for tag_desc in sorted(config['images'][image_key]['tags'])) - print("Tag dictionary: {}".format(tagDict)) + + argsDict = {} + if config['images'][image_key]['extraargs']: + argsDict = dict(args_desc.split('=',1) for args_desc in sorted(config['images'][image_key]['extraargs'])) + if config['images'][image_key]['tags']: + argsDict.update({'meta':tagDict}) + print("Args dictionary: {}".format(argsDict)) time0 = int(time.time()) openstack_cloud_connection.create_image(image_name, - filename=download_image_file, - disk_format=config['images'][image_key]['disk_format'], - meta=tagDict, - wait=True,is_public=True) + filename=download_image_file, + disk_format=config['images'][image_key]['disk_format'], + description=descNewImg, + **argsDict, + wait=True,is_public=True) time1 = int(time.time()) print("Uploaded to Glance in {} seconds".format(time1-time0)) -- GitLab