diff --git a/generate-files-for-simplestream.py b/generate-files-for-simplestream.py new file mode 100755 index 0000000000000000000000000000000000000000..fa161e4a865a3260e766c15607aaaf2ca803186a --- /dev/null +++ b/generate-files-for-simplestream.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import shade +import yaml +import json +import time + +OUTPUT_DIR="./output/" +REGIONS = ['garr-pa1', 'garr-ct1'] +KEYSTONE_ENDPOINT = "https://keystone.cloud.garr.it:5000/v3" + +config = None +with open('config.yml') as fh_config: + config = yaml.load(fh_config) + fh_config.close() + +openstack_cloud_connection = shade.openstack_cloud() + +simplestream_images = [] +for image_key in sorted(config['images'].keys()): + if not 'simplestreams' in config['images'][image_key]: + continue + element = {} + image_name = config['images'][image_key]['name'] + image = openstack_cloud_connection.get_image(name_or_id=image_name) + element['name'] = image_name + element['id'] = image['id'] + element['simplestreams_name'] = config['images'][image_key]['simplestreams'] + element['arch'] = element['simplestreams_name'].split(':')[-1] + element['version'] = element['simplestreams_name'].split(':')[-2] + simplestream_images.append(element) +print(yaml.dump({'simplestream_images': simplestream_images}, default_flow_style=False)) + +now = time.strftime('%a, %d %b %Y %H:%M:%S %z') +today = time.strftime('%Y%m%d') + +# update index +index = {} +index['index'] = {} +index['index']['com.ubuntu.cloud:custom'] = {} +index['index']['com.ubuntu.cloud:custom']['updated'] = now +index['index']['com.ubuntu.cloud:custom']['format'] = "products:1.0" +index['index']['com.ubuntu.cloud:custom']['datatype'] = "image-ids" +index['index']['com.ubuntu.cloud:custom']['cloudname'] = "custom" +index['index']['com.ubuntu.cloud:custom']['clouds'] = [{"region": region, "endpoint": KEYSTONE_ENDPOINT} for region in REGIONS] +index['index']['com.ubuntu.cloud:custom']['path'] = "streams/v1/com.ubuntu.cloud-released-imagemetadata.json" +index['index']['com.ubuntu.cloud:custom']['products'] = [si['simplestreams_name'] for si in simplestream_images] +index['updated'] = now +index['format'] = "index:1.0" + +with open(OUTPUT_DIR + "index.json", 'w') as index_json: + json.dump(index, index_json, indent=4) + +# update metadata +metadata = {} +metadata['products'] = {} +for si in simplestream_images: + key = si['simplestreams_name'] + metadata['products'][key] = {} + metadata['products'][key]['version'] = si['version'] + metadata['products'][key]['arch'] = si['arch'] + metadata['products'][key]['versions'] = {} + metadata['products'][key]['versions'][today] = {} + metadata['products'][key]['versions'][today]['items'] = {} + i = 1 + for region in REGIONS: + metadata['products'][key]['versions'][today]['items'][str(i)] = {} + metadata['products'][key]['versions'][today]['items'][str(i)]['id'] = si['id'] + metadata['products'][key]['versions'][today]['items'][str(i)]["region"] = region + metadata['products'][key]['versions'][today]['items'][str(i)]["endpoint"] = KEYSTONE_ENDPOINT + i+=1 + +metadata['updated'] = now +metadata['format'] = "products:1.0" +metadata['content_id'] = "com.ubuntu.cloud:custom" + +with open(OUTPUT_DIR + "com.ubuntu.cloud-released-imagemetadata.json", 'w') as metadata_json: + json.dump(metadata, metadata_json, indent=4) + diff --git a/output/README.rst b/output/README.rst new file mode 100644 index 0000000000000000000000000000000000000000..1af8e27adc38cf452f9d28e448afe12b96b01822 --- /dev/null +++ b/output/README.rst @@ -0,0 +1 @@ +output directory for simplestream files