fuel-main/bin/create_release

126 lines
4.2 KiB
Python
Executable File

#!/usr/bin/env python
import json
import os
import os.path
import logging
import pprint
import sys
import httplib
import argparse
console = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(name)-12s %(levelname)-8s %(message)s')
console.setFormatter(formatter)
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logger.addHandler(console)
parser = argparse.ArgumentParser()
parser.add_argument("-n", "--dry-run", dest="dry_run",
action='store_true', default=False,
help="Do not really create release")
parser.add_argument("-H", "--host", dest="host",
action='store', type=str, default="127.0.0.1",
help="API host")
parser.add_argument("-P", "--port", dest="port",
action='store', type=int, default=8000,
help="API port")
parser.add_argument("-f", "--file", dest="release_file",
action='store', type=str, required=True,
help="Release file")
params = parser.parse_args()
if not params.release_file:
parser.error("Release file is not set. Use -f option.")
def main():
logger.info("=== Creating release ===")
with open(params.release_file, "r") as f:
logger.debug("Trying to parse release file")
data = json.load(f)
httpconn = httplib.HTTPConnection(host=params.host, port=params.port)
httpheaders = {"Content-Type": "application/json"}
httpdata = {}
for field in ('name', 'version', 'description', 'networks_metadata'):
httpdata[field] = data[field]
logger.info("Request url: %s, data: %s" % \
('/api/releases', json.dumps(httpdata)))
if params.dry_run:
release_dict = {'id': '1'}
else:
release_dict = {}
logger.debug("Sending request")
try:
httpconn.request(method="POST",
url="/api/releases",
body=json.dumps(httpdata),
headers=httpheaders)
except Exception as e:
logger.error("Error: %s" % str(e))
sys.exit(1)
else:
response = httpconn.getresponse()
response_body = response.read()
logger.debug("Response status: %s" % response.status)
logger.debug("Response body: %s" % response_body)
if response.status == 201:
logger.info("Release '%s' has been successfully added" % \
httpdata['name'])
release_dict = json.loads(response_body)
logger.info("Release id: %s" % release_dict['id'])
elif response.status == 409:
logger.error("Release '%s' already exists" % httpdata['name'])
sys.exit(0)
elif response.status < 201 or response.status >= 300:
logger.error("Error in creating release: %s" % response.read())
sys.exit(1)
def add_item(httpconn, handler_url, release,
item_collection, item_fields):
for item in item_collection:
httpdata = {}
for field in item_fields:
httpdata[field] = item[field]
if params.dry_run:
httpdata['release'] = '1'
else:
httpdata['release'] = release
logger.debug("Request: url: %s, data: %s" % \
(handler_url, json.dumps(httpdata)))
if not params.dry_run:
logger.debug("Sending request")
try:
httpconn.request(method="POST",
url=handler_url,
body=json.dumps(httpdata),
headers=httpheaders)
except Exception as e:
logger.error("Error: %s" % str(e))
raise e
else:
response = httpconn.getresponse()
response_body = response.read()
logger.debug("Response status: %s" % response.status)
logger.debug("Response body: %s" % response_body)
if __name__ == "__main__":
main()