def _ask_basebox(): _title('Basebox') basebox_list = default_baseboxes # if we have a custom bucket, also use that bucket_baseboxes = [] if basebox_bucket(): bucket_baseboxes = list(set([ '%s/%s' % (infra, box[:box.rfind('-')]) for infra, boxes in baseboxes().iteritems() for box in boxes ])) basebox_list += bucket_baseboxes basebox_list.sort() selected_boxes = AerisCompletableList(basebox_list) prompt = AerisPrompt('> ', completer=selected_boxes) click.echo(""" You will now need to select a basebox to use for your project, we have small selection of boxes available if you press TAB. It is recommended you use a box that matches your production servers. You can also enter any box you find on Atlas: https://atlas.hashicorp.com/boxes/search?provider=virtualbox If none is entered, %s will be selected as a default. """ % (click.style(default_basebox, bold=True))) while True: basebox = prompt.get_input().strip() if basebox: if basebox not in bucket_baseboxes: if not _check_atlas_basebox(basebox): continue return basebox, None else: return basebox, _fix_basebox_url(basebox_bucket()) else: break return default_basebox, None
def _ask_services(organization, enabled_services=None): """ Ask the user which services to enable/disable, returns a list of services """ service_list = list_services(organization) if not service_list: return [] _title('Services') click.secho('You now will need to select what %s you would like to ' 'install, from the following list:' % style('services', bold=True)) service_complete = _show_service_list(service_list, enabled_services) selected_services = AerisCompletableList(service_complete.keys(), service_complete) if enabled_services: for service in enabled_services: selected_services.select(service) click.echo(''' Which {0} do you wish to use? (autocomplete available) You can enter {0} on different lines, or several on the same line separated \ by spaces. '''.format(style('services', bold=True))) service_cli = AerisPrompt('> ', completer=selected_services) while True: if selected_services.selected: click.secho(''' Current enabled services: %s Press %s to validate, or add another %s from the list. You can remove a service from the list by putting a %s before its name. ''' % ( style(','.join(selected_services.selected) or 'None', fg='cyan'), style('ENTER', bold=True), style('service', bold=True), style('-', bold=True)) ) services_input = service_cli.get_input() if services_input: for service in services_input.strip().split(' '): if not service: continue if service in service_list: selected_services.select(service) elif service[0] == '-' \ and service[1:] in service_list: selected_services.unselect(service[1:]) else: error('''%s was not recognized as a valid service. Please enter a valid service.''' % service) else: break return selected_services.selected