#!/data/virtualenvs/linode/bin/python2 from __future__ import print_function import argparse import sys import utils import config parser = argparse.ArgumentParser() linode_group = parser.add_mutually_exclusive_group(required=True) linode_group.add_argument('--linode-id', type=int, dest='linode_id') linode_group.add_argument('--linode-label', dest='linode_label') parser.add_argument('--host-name', dest='host_name') parser.add_argument('--disk-size-mb', dest='disk_size_mb') parser.add_argument('--swap-size-mb', dest='swap_size_mb', required=True) parser.add_argument('--data-disk-size-mb', dest='data_disk_size_mb', required=True) args = parser.parse_args() api = utils.get_api(config.linode_api_key) if args.linode_id is not None: linode = utils.get_linode_by_id(api, args.linode_id) else: linode = utils.get_linode_by_label(api, args.linode_label) linode_id = linode['LINODEID'] host_name = linode['LABEL'] if args.host_name is None else args.host_name disk_size_mb = config.disk_size_mb if args.disk_size_mb is None else args.disk_size_mb ips = api.linode_ip_list(LinodeID=linode_id) for ip in ips: if not ip['ISPUBLIC']: break else: print('Adding private IP address to Linode') api.linode_ip_addprivate(LinodeID=linode_id) swap_disk = utils.get_swap_disk(api, linode_id) if swap_disk is None: swap_disk_id = utils.create_swap_disk(api, linode_id, args.swap_size_mb) else: swap_disk_id = swap_disk['DISKID'] print('Reusing existing swap disk', file=sys.stderr) data_disk = utils.get_data_disk(api, linode_id) if data_disk is None: data_disk_id = utils.create_data_disk(api, linode_id, args.data_disk_size_mb) else: data_disk_id = data_disk['DISKID'] print('Reusing existing data disk', file=sys.stderr) utils.deploy_linode_from_stackscript( api=api, linode_id=linode_id, configuration_label=config.configuration_label, stackscript_label=config.stackscript_label, stackscript_args=config.get_stackscript_args(host_name), distribution_label=config.distribution_label, disk_label=config.disk_label, disk_size_mb=disk_size_mb, root_password=config.root_password, extra_disk_ids=[swap_disk_id, data_disk_id] )