Bez popisu

deploy_disk_image.py 2.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/data/virtualenvs/linode/bin/python2
  2. from __future__ import print_function
  3. import argparse
  4. import sys
  5. import utils
  6. import config
  7. parser = argparse.ArgumentParser()
  8. linode_group = parser.add_mutually_exclusive_group(required=True)
  9. linode_group.add_argument('--linode-id', type=int, dest='linode_id')
  10. linode_group.add_argument('--linode-label', dest='linode_label')
  11. parser.add_argument('--host-name', dest='host_name')
  12. parser.add_argument('--disk-size-mb', dest='disk_size_mb')
  13. parser.add_argument('--swap-size-mb', dest='swap_size_mb', required=True)
  14. parser.add_argument('--data-disk-size-mb', dest='data_disk_size_mb', required=True)
  15. args = parser.parse_args()
  16. api = utils.get_api(config.linode_api_key)
  17. if args.linode_id is not None:
  18. linode = utils.get_linode_by_id(api, args.linode_id)
  19. else:
  20. linode = utils.get_linode_by_label(api, args.linode_label)
  21. linode_id = linode['LINODEID']
  22. host_name = linode['LABEL'] if args.host_name is None else args.host_name
  23. disk_size_mb = config.disk_size_mb if args.disk_size_mb is None else args.disk_size_mb
  24. ips = api.linode_ip_list(LinodeID=linode_id)
  25. for ip in ips:
  26. if not ip['ISPUBLIC']:
  27. break
  28. else:
  29. print('Adding private IP address to Linode')
  30. api.linode_ip_addprivate(LinodeID=linode_id)
  31. swap_disk = utils.get_swap_disk(api, linode_id)
  32. if swap_disk is None:
  33. swap_disk_id = utils.create_swap_disk(api, linode_id, args.swap_size_mb)
  34. else:
  35. swap_disk_id = swap_disk['DISKID']
  36. print('Reusing existing swap disk', file=sys.stderr)
  37. data_disk = utils.get_data_disk(api, linode_id)
  38. if data_disk is None:
  39. data_disk_id = utils.create_data_disk(api, linode_id, args.data_disk_size_mb)
  40. else:
  41. data_disk_id = data_disk['DISKID']
  42. print('Reusing existing data disk', file=sys.stderr)
  43. utils.deploy_linode_from_stackscript(
  44. api=api,
  45. linode_id=linode_id,
  46. configuration_label=config.configuration_label,
  47. stackscript_label=config.stackscript_label,
  48. stackscript_args=config.get_stackscript_args(host_name),
  49. distribution_label=config.distribution_label,
  50. disk_label=config.disk_label,
  51. disk_size_mb=disk_size_mb,
  52. root_password=config.root_password,
  53. extra_disk_ids=[swap_disk_id, data_disk_id]
  54. )