Example #1
0
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)
Example #2
0
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)
Example #4
0
  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
Example #7
0
  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