import digitalocean from digitalocean_key import CLIENT_ID, API_KEY manager = digitalocean.Manager(client_id=CLIENT_ID, api_key=API_KEY) global_images = dict([(image.name, image) for image in manager.get_global_images()]) all_regions = dict([(region.name, region) for region in manager.get_all_regions()]) all_sizes = dict([(size.name, size) for size in manager.get_all_sizes()]) all_ssh_keys = dict([(key.name, key) for key in manager.get_all_sshkeys()]) def make_standard_droplet(name, size='512MB'): droplet = digitalocean.Droplet(client_id=CLIENT_ID, api_key=API_KEY, name = name, region_id=all_regions['San Francisco 1'].id, #San Francisco 1 image_id=global_images['Ubuntu 12.04.3 x64'].id, #Ubuntu 12.04.3 x64 Server size_id=all_sizes[size].id, #512MB backup_active=False) droplet.create(ssh_key_ids=all_ssh_keys['RY laptop'].id) [(size_label, size.id) for (size_label, size) in all_sizes.iteritems()] global_images # create a droplet droplets_to_create = ['minecraft1'] for name in droplets_to_create: make_standard_droplet(name) import digitalocean from digitalocean_key import CLIENT_ID, API_KEY manager = digitalocean.Manager(client_id=CLIENT_ID, api_key=API_KEY) droplets = manager.get_all_droplets() [(droplet.id, droplet.name, droplet.ip_address) for droplet in droplets] instance = droplets[0] # copy a command to ssh into the instance cmdstring = "ssh -oStrictHostKeyChecking=no root@{0}".format(instance.ip_address) # works on a mac ! echo "$cmdstring" | pbcopy cmdstring from ansible.playbook import PlayBook from ansible import callbacks from ansible import utils import jinja2 from tempfile import NamedTemporaryFile import os # this example fills in mandatory params: playbook, callbacks, runner_callbacks, stats # drawing inspiration from https://github.com/ansible/ansible/blob/release1.3.3/bin/ansible-playbook#L138 playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY) stats = callbacks.AggregateStats() runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY) # let's dynamically generate the host_list HOST_LIST_TEMPLATE = """ [local] localhost [{{group_name}}] {{ip_address}} """ template = jinja2.Template(HOST_LIST_TEMPLATE) from tempfile import NamedTemporaryFile temp = NamedTemporaryFile(delete=False) temp.write(template.render({'group_name':'minecraft_do', 'ip_address':instance.ip_address})) temp.close() playbook = PlayBook(remote_user='root', playbook='/Users/raymondyee/D/Document/Working_with_Open_Data/working-open-data/notebooks/minecraft.yml', callbacks=playbook_cb, runner_callbacks=runner_cb, stats=stats, host_list=temp.name ) results = playbook.run() # clean up os.remove(temp.name) results # run this cell if you want to destroy droplet for droplet in droplets: droplet.destroy() import digitalocean from digitalocean_key import CLIENT_ID, API_KEY manager = digitalocean.Manager(client_id=CLIENT_ID, api_key=API_KEY) global_images = dict([(image.name, image) for image in manager.get_global_images()]) all_regions = dict([(region.name, region) for region in manager.get_all_regions()]) all_sizes = dict([(size.name, size) for size in manager.get_all_sizes()]) all_ssh_keys = dict([(key.name, key) for key in manager.get_all_sshkeys()]) PLAYBOOK_PATH = '/Users/raymondyee/D/Document/Working_with_Open_Data/working-open-data/notebooks/minecraft_do.yml' EXTRA_VARS = {'ansible_client_id':CLIENT_ID, 'ansible_api_key': API_KEY, 'ssh_key_id': all_ssh_keys['RY laptop'].id, 'image_id':global_images['Ubuntu 12.04 x64'].id, 'region_id': all_regions['San Francisco 1'].id, 'size_id': all_sizes['512MB'].id, 'java_memory': '512M' } extra_vars = " ".join(["{0}={1}".format(k,v) for (k,v) in EXTRA_VARS.items()]) !ansible-playbook --verbose -u root --extra-vars "$extra_vars" $PLAYBOOK_PATH ansible_command = 'ansible-playbook --verbose -u root --extra-vars "{0}" {1}'.format(extra_vars, PLAYBOOK_PATH) ! echo '$ansible_command' | pbcopy ansible_command try: import dopy from dopy.manager import DoError, DoManager except ImportError as e: print "failed=True msg='dopy >= 0.2.2 required for this module'" sys.exit(1) if dopy.__version__ < '0.2.2': print "failed=True msg='dopy >= 0.2.2 required for this module'" sys.exit(1) import dopy from dopy.manager import DoError, DoManager dopy.__version__