Created
January 16, 2014 06:53
-
-
Save christophchamp/8450845 to your computer and use it in GitHub Desktop.
This script creates a Cloud Server in your Rackspace account. It then creates an image of that server, and, finally, creates a new server from that saved image.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# NAME: pyrax_create_cloud_server | |
# AUTHOR: Christoph Champ | |
# DESCRIPTION: This script creates a Cloud Server in your Rackspace account. | |
# It then creates an image of that server, and, finally, creates a new server | |
# from that saved image. | |
# | |
# NOTES: Within each of the created VMs, the generated credentials are in | |
# master_server.adminPass and clone_server.adminPass. To access the box, use | |
# master_server.accessIPv4 and clone_server.accessIPv4. | |
# However, it is _much_ better/safer/wiser to use SSH keypairs. | |
# | |
# SEE: https://github.com/rackspace/pyrax | |
import os | |
import pyrax | |
USERNAME = "" # This is your Rackspace account username | |
API_KEY = "" | |
REGION = "" # E.g., DFW, HKG, IAD, LON, ORD, SYD | |
# Authenticate with Rackspace | |
pyrax.set_setting('identity_type', 'rackspace') | |
pyrax.set_credentials(USERNAME, API_KEY, region=REGION) | |
cs = pyrax.connect_to_cloudservers() | |
# NOTE: You could use the API to get an image ID instead | |
image_id = u'f70ed7c7-b42e-4d77-83d8-40fa29825b85' # CentOS 6.4 | |
flavor = u'performance1-1' | |
# Create the master server | |
print "Creating master_server...\n" | |
master_server = cs.servers.create("master_server", image_id, flavor) | |
# It takes time to create the server, so poll it until it completes | |
master_server = pyrax.utils.wait_for_build(master_server, verbose=True) | |
# Create an image of the master server | |
print "\nCreating image of master_server...\n" | |
im = master_server.create_image("master_image") | |
image = cs.images.get(im) | |
# Wait for image creation to finish before moving on to clone | |
image = pyrax.utils.wait_until(image, "status", ["ACTIVE","ERROR"], attempts=0) | |
# NOTE: This clone can be a larger flavor (VM size), if needed/wanted | |
# Here we use the same flavor of the master server | |
print "Creating clone_server from master_image...\n" | |
clone_server = cs.servers.create(name="clone_server", | |
image=image.id, | |
flavor=master_server.flavor['id']) | |
clone_server = pyrax.utils.wait_for_build(clone_server, verbose=True) | |
print "Master_root_password: %s" % master_server.adminPass | |
print "Master_public_IPv4: %s" % master_server.accessIPv4 | |
print "Clone_root_password: %s" % clone_server.adminPass | |
print "Clone_public_IPv4: %s" % clone_server.accessIPv4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment