Advertisement
Guest User

Untitled

a guest
Jul 27th, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. from fabric.api import run
  2. from fabric.api import env
  3. import boto.ec2
  4. import time
  5. from fabric.api import prompt
  6. from fabric.api import execute
  7. from fabric.api import sudo
  8.  
  9. env.hosts = ['localhost', ]
  10. # add an environmental setting
  11. env.aws_region = 'us-west-2'
  12.  
  13.  
  14. def host_type():
  15. run('uname -s')
  16.  
  17.  
  18. def get_ec2_connection():
  19. if 'ec2' not in env:
  20. conn = boto.ec2.connect_to_region(env.aws_region)
  21. if conn is not None:
  22. env.ec2 = conn
  23. print "Connected to EC2 region %s" % env.aws_region
  24. else:
  25. msg = "Unable to connect to EC2 region %s"
  26. raise IOError(msg % env.aws_region)
  27. return env.ec2
  28.  
  29.  
  30. def provision_instance(wait_for_running=False, timeout=60, interval=2):
  31. wait_val = int(interval)
  32. timeout_val = int(timeout)
  33. conn = get_ec2_connection()
  34. instance_type = 't1.micro'#changed from t2.micro
  35. key_name = 'pk-aws'
  36. security_group = 'ssh-access'
  37. image_id = 'ami-b5471c85' #'ami-d0d8b8e0'
  38.  
  39. reservations = conn.run_instances(
  40. image_id,
  41. key_name=key_name,
  42. instance_type=instance_type,
  43. security_groups=[security_group, ]
  44. )
  45. new_instances = [i for i in reservations.instances if i.state == u'pending']
  46. running_instance = []
  47. if wait_for_running:
  48. waited = 0
  49. while new_instances and (waited < timeout_val):
  50. time.sleep(wait_val)
  51. waited += int(wait_val)
  52. for instance in new_instances:
  53. state = instance.state
  54. print "Instance %s is %s" % (instance.id, state)
  55. if state == "running":
  56. running_instance.append(
  57. new_instances.pop(new_instances.index(i))
  58. )
  59. instance.update()
  60.  
  61. def list_aws_instances(verbose=False, state='all'):
  62. conn = get_ec2_connection()
  63.  
  64. reservations = conn.get_all_reservations()
  65. instances = []
  66. for res in reservations:
  67. for instance in res.instances:
  68. if state == 'all' or instance.state == state:
  69. instance = {
  70. 'id': instance.id,
  71. 'type': instance.instance_type,
  72. 'image': instance.image_id,
  73. 'state': instance.state,
  74. 'instance': instance,
  75. }
  76. instances.append(instance)
  77. env.instances = instances
  78. if verbose:
  79. import pprint
  80. pprint.pprint(env.instances)
  81.  
  82.  
  83. def select_instance(state='running'):
  84. if env.get('active_instance', False):
  85. return
  86.  
  87. list_aws_instances(state=state)
  88.  
  89. prompt_text = "Please select from the following instances:\n"
  90. instance_template = " %(ct)d: %(state)s instance %(id)s\n"
  91. for idx, instance in enumerate(env.instances):
  92. ct = idx + 1
  93. args = {'ct': ct}
  94. args.update(instance)
  95. prompt_text += instance_template % args
  96. prompt_text += "Choose an instance: "
  97.  
  98. def validation(input):
  99. choice = int(input)
  100. if not choice in range(1, len(env.instances) + 1):
  101. raise ValueError("%d is not a valid instance" % choice)
  102. return choice
  103.  
  104. choice = prompt(prompt_text, validate=validation)
  105. env.active_instance = env.instances[choice - 1]['instance']
  106.  
  107.  
  108. def run_command_on_selected_server(command):
  109. select_instance()
  110. selected_hosts = [
  111. 'ubuntu@' + env.active_instance.public_dns_name
  112. ]
  113. execute(command, hosts=selected_hosts)
  114.  
  115.  
  116. def _install_nginx():
  117. sudo('apt-get install nginx')
  118. sudo('/etc/init.d/nginx start')
  119.  
  120.  
  121. def install_nginx():
  122. run_command_on_selected_server(_install_nginx)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement