def delete_rax_scaling_group(args): """Function for deleting Autoscale Groups""" print("--- Cleaning Autoscale Groups matching '%s'" % args.match_re) for region in pyrax.identity.services.autoscale.regions: asg = pyrax.connect_to_autoscale(region=region) for group in rax_list_iterator(asg): if re.search(args.match_re, group.name): group.manager._delete = \ _force_delete_rax_scaling_group(group.manager) prompt_and_delete(group, 'Delete matching %s? [y/n]: ' % group, args.assumeyes)
def delete_rax_scaling_group(args): """Function for deleting Autoscale Groups""" print ("--- Cleaning Autoscale Groups matching '%s'" % args.match_re) for region in pyrax.identity.services.autoscale.regions: asg = pyrax.connect_to_autoscale(region=region) for group in rax_list_iterator(asg): if re.search(args.match_re, group.name): group.manager._delete = \ _force_delete_rax_scaling_group(group.manager) prompt_and_delete(group, 'Delete matching %s? [y/n]: ' % group, args.assumeyes)
def __init__(self, username, api_key, region, group_name, server_name='consumer', cooldown=None, min_entities=None, max_entities=None, flavor='performance1-1', image=None, load_balancers=(), networks=[{'uuid': '11111111-1111-1111-1111-111111111111'}, {'uuid': '00000000-0000-0000-0000-000000000000'}], metadata={}, debug=False): # set the scaling group attributes pyrax.set_setting('identity_type', 'rackspace') if debug: print "username: %s" % username print "api_key: %s" % api_key print "min_entites beg: %s" % min_entities print "max_entites beg: %s" % max_entities pyrax.set_credentials(username, api_key) self.sg = None self.au = pyrax.connect_to_autoscale(region=region) self.cq = pyrax.connect_to_queues(region=region) self.cs = pyrax.connect_to_cloudservers(region=region) self.server_name = server_name self.load_balancers = load_balancers self.networks = networks self.image = image self.flavor = flavor self.debug = debug if not group_name in [i.name for i in self.au.list()]: # set sane default values here scaling group creation self.cooldown = int(cooldown) or 60 # set default 60 self.min_entities = int(min_entities) or 0 # set default to 0 self.max_entities = int(max_entities) or 1 # set default to 1 self._create_scaling_group(group_name, metadata) else: # go ahead and take default here however if they are empty they will # be overriden by an existing scaling group self.cooldown = int(cooldown) self.min_entities = int(min_entities) self.max_entities = int(max_entities) self._get_scaling_group(group_name, metadata)
parser.add_argument('--as-group', required=True, help='The autoscale group config ID') parser.add_argument('--region', required=False, default='SYD', help='The region to authenticate to') args = vars(parser.parse_args()) pyrax.set_setting("identity_type", "rackspace") # Using credentials file try: pyrax.set_credential_file(os.path.expanduser("~/.cloud_credentials")) except Exception, e: sys.stderr.write("Failed to authenticate: %s" % str(e)) au = pyrax.connect_to_autoscale(region=args['region']) cs = pyrax.connect_to_cloudservers(region=args['region']) as_group = au.get(args['as_group']); snet_ips = [] for s_id in as_group.get_state()['active']: try server = cs.servers.get(s_id) snet_ips.append(server.networks['private'][0]) except: pass generate_lsync_config(snet_ips)
def main(): # # Create may of class objects # mode0 = {"producer": Producer, "consumer": Consumer, "status": Status} mode1 = {"monitor": Monitor, "delete": Monitor} usage = '''Usage: queue_demo.py [options] status: print out the queue status consumer: claim and delete a message of the queue as specified by the options producer: add a message onto the queue as specified by the options monitor: use autoscale to spin up or down a server as specified by the options delete: remove autoscale group by name. currently you have to delete queues manually. (if a server was provisioned by the scaling group that will be removed by this action.) ''' parser = OptionParser(usage=usage) parser.add_option("-u", "--user", dest="user", help="username") parser.add_option("-k", "--api_key", dest="api_key", help="apikey as shown in mycloud control panel.") parser.add_option("-d", action="store_true", help="debug", dest="debug") parser.add_option("-g", "--group_name", dest="group_name", help="scaling group name. default name demo", default="demo") parser.add_option("-c", "--cool_down", dest="cool_down", help="cool down time in seconds. default 60 secs.", default="60") parser.add_option("-x", "--max", dest="max", help="max number of servers in group. default 2.", default="2") parser.add_option("-m", "--min", dest="min", help="min number of servers in group. default 0.", default="0") parser.add_option("-i", "--image", dest="image", help="server image id.") parser.add_option("-l", "--flavor", dest="flavor", help="flavor name. default performance1-1", default="performance1-1") parser.add_option("-s", "--server_name", dest="server_name", help="server name. default server name consumer.", default="consumer") parser.add_option("-q", "--queue_name", dest="queue_name", help="queue name for cloud queue. default is demo0000", default="demo0000") parser.add_option("-t", "--time_interval", dest="time_interval", help="producer: time in seconds between message post to queue. \ consumer: time in seconds between subscribing to a message and deleting. \ monitor: time in seconds between queue monitoring. \ status: time in seconds between status checks of the queue.", default=2) parser.add_option("-r", "--region_name", dest="region_name", help="region (IAD, DFW, or ORD) for cloud queue.", default="IAD") parser.add_option("-j", "--scale_up_threshold", dest="scale_up_threshold", help="Number of free messages (i.e. not claimed) to trigger scale up", default="100") parser.add_option("-n", "--scale_dn_threshold", dest="scale_dn_threshold", help="Number of messages (i.e. not claimed) to trigger scale down", default="0") (options, args) = parser.parse_args() if not args: l = mode0.keys() + mode1.keys() print "You need to specify a mode like %s" % l sys.exit(1) if not options.user: parser.print_help() print "You need -u or --user option" sys.exit(1) if not options.api_key: parser.print_help() print "You need -a or --api_key option" sys.exit(1) if args[0] in mode0: obj_init = mode0[args[0]] m = obj_init(options.user, options.api_key, options.queue_name, options.time_interval, options.region_name, options.debug) elif args[0] in mode1: if args[0] == 'delete': pyrax.set_setting('identity_type', 'rackspace') pyrax.set_credentials(options.user, options.api_key) au = pyrax.connect_to_autoscale(region=options.region_name) if options.group_name in [i.name for i in au.list()]: scaling_group = DemoScalingGroup(username=options.user, api_key=options.api_key, region=options.region_name, group_name=options.group_name, server_name=options.server_name, cooldown=0, min_entities=0, max_entities=0, flavor=options.flavor, image=None, debug=False) print "Delete scaling_group: %s (if not given --group_name option default is demo)" % scaling_group.sg.name scaling_group.delete_scaling_group() sys.exit(0) else: print "Scaling group %s doesn't exist (if not given --group_name option default is demo)" % options.group_name sys.exit(0) rax_cld_queue_client = RaxCloudQueueClient(options.user, options.api_key, options.queue_name, options.time_interval, options.region_name, options.debug) # if options.image not set then try and create a image if not options.image: image_obj = ServerImage(username=options.user, api_key=options.api_key, region=options.region_name, debug=options.debug) # Retrieve existing snapshot named with snapshot_image_name image = image_obj.get_server_image(image_name='consumer-demo-template') if not image: # we installed the /tmp/docker_install.sh file with the arg files, installing it here install_docker = '/bin/bash /tmp/docker_install.sh' start_containers = \ "/usr/bin/docker run -d raxcloud/queue-demo consumer -u %s -k %s --region_name %s --time_interval %s" \ % (options.user, options.api_key, options.region_name, options.time_interval) shell_provisioner = ShellProvisioner( [ install_docker, start_containers ] ) image = image_obj.create_server_image(files=files, provisioner=shell_provisioner, snapshot_image_name='consumer-demo-template', base_image_name='Ubuntu 13.10 (Saucy Salamander)', flavor=options.flavor, time_interval=options.time_interval) if not image: parser.print_help() print "You need -i or --image option" sys.exit(1) else: pyrax.set_setting('identity_type', 'rackspace') cs = pyrax.connect_to_cloudservers(region=options.region_name) # Really just need image id but may need # image object sometime in the future image = cs.images.get(options.image) metadata = {'queue_id' : rax_cld_queue_client.queue_name, 'snapshot_id' : image.id} scaling_group = DemoScalingGroup(username=options.user, api_key=options.api_key, region=options.region_name, group_name=options.group_name, server_name=options.server_name, cooldown=options.cool_down, min_entities=options.min, max_entities=options.max, flavor=options.flavor, image=image.id, metadata=metadata, debug=False) m = Monitor(rax_cld_queue_client=rax_cld_queue_client, scaling_group=scaling_group, scale_up_threshold=options.scale_up_threshold, scale_dn_threshold=options.scale_dn_threshold, time_interval=options.time_interval) else: print "The mode %s doesn't exist it must be one of %s" \ % (args[0], mode0.keys() + mode1.keys()) sys.exit(1) try: m.run() except KeyboardInterrupt: print "Bye!"
for o, a in opts: if o in ('-g', '--group'): group_id = a elif o in ('-u', '--up'): up_policy_id = a elif o in ('-d', '--down'): down_policy_id = a yml = yaml.load(open('creds.yml')) pyrax.set_setting("identity_type", "rackspace") pyrax.set_credentials(yml['username'], yml['api_key']) cm = pyrax.cloud_monitoring au = pyrax.connect_to_autoscale(region="IAD") policy = au.get(group_id) # Create webhook for UP policy up = policy.get_policy(up_policy_id) up_hook = up.add_webhook("default") # Create webhook for DOWN policy down = policy.get_policy(down_policy_id) down_hook = down.add_webhook("default") # Extract capability URLs down_hook_link = None up_hook_link = None
parser.add_argument('--as-group', required=True, help='The autoscale group config ID') parser.add_argument('--region', required=False, default='SYD', help='The region to authenticate to') args = vars(parser.parse_args()) pyrax.set_setting("identity_type", "rackspace") # Using credentials file try: pyrax.set_credential_file(os.path.expanduser("~/.cloud_credentials")) except Exception, e: sys.stderr.write("Failed to authenticate: %s" % str(e)) au = pyrax.connect_to_autoscale(region=args['region']) cs = pyrax.connect_to_cloudservers(region=args['region']) as_group = au.get(args['as_group']); snet_ips = [] for s_id in as_group.get_state()['active']: server = cs.servers.get(s_id) snet_ips.append(server.networks['private'][0]) generate_lsync_config(snet_ips) if __name__ == '__main__': main()
if o in ('-g', '--group'): group_id = a elif o in ('-u', '--up'): up_policy_id = a elif o in ('-d', '--down'): down_policy_id = a config_yml = yaml.load(open("vars.yml")) pyrax.set_setting("identity_type", "rackspace") pyrax.set_credentials(config_yml['username'], config_yml['api_key']) region = config_yml["rs_region"] if config_yml["rs_region"] else "IAD" cm = pyrax.cloud_monitoring au = pyrax.connect_to_autoscale(region=region) policy = au.get(group_id) # Create webhook for UP policy up = policy.get_policy(up_policy_id) up_hook = up.add_webhook("default") # Create webhook for DOWN policy down = policy.get_policy(down_policy_id) down_hook = down.add_webhook("default") # Extract capability URLs down_hook_link = None up_hook_link = None