def execute(self, args): update_with_template_args(args) mgr = HardwareManager(self.client) # Disks will be a comma-separated list. Let's make it a real list. if isinstance(args.get('--disk'), str): args['--disk'] = args.get('--disk').split(',') # Do the same thing for SSH keys if isinstance(args.get('--key'), str): args['--key'] = args.get('--key').split(',') self._validate_args(args) ds_options = mgr.get_dedicated_server_create_options(args['--chassis']) order = { 'hostname': args['--hostname'], 'domain': args['--domain'], 'bare_metal': False, 'package_id': args['--chassis'], } # Convert the OS code back into a price ID os_price = self._get_price_id_from_options(ds_options, 'os', args['--os']) if os_price: order['os'] = os_price else: raise CLIAbort('Invalid operating system specified.') order['location'] = args['--datacenter'] or 'FIRST_AVAILABLE' order['server'] = args['--cpu'] order['ram'] = self._get_price_id_from_options(ds_options, 'memory', int(args['--memory'])) # Set the disk sizes disk_prices = [] disk_number = 0 for disk in args.get('--disk'): disk_price = self._get_disk_price(ds_options, disk, disk_number) disk_number += 1 if disk_price: disk_prices.append(disk_price) if not disk_prices: disk_prices.append(self._get_default_value(ds_options, 'disk0')) order['disks'] = disk_prices # Set the disk controller price if args.get('--controller'): dc_price = self._get_price_id_from_options( ds_options, 'disk_controller', args.get('--controller')) else: dc_price = self._get_price_id_from_options(ds_options, 'disk_controller', 'None') order['disk_controller'] = dc_price # Set the port speed port_speed = args.get('--network') or '100' nic_price = self._get_price_id_from_options(ds_options, 'nic', port_speed) if nic_price: order['port_speed'] = nic_price else: raise CLIAbort('Invalid NIC speed specified.') if args.get('--postinstall'): order['post_uri'] = args.get('--postinstall') # Get the SSH keys if args.get('--key'): keys = [] for key in args.get('--key'): key_id = resolve_id(SshKeyManager(self.client).resolve_ids, key, 'SshKey') keys.append(key_id) order['ssh_keys'] = keys if args.get('--vlan_public'): order['public_vlan'] = args['--vlan_public'] if args.get('--vlan_private'): order['private_vlan'] = args['--vlan_private'] # Do not create hardware server with --test or --export do_create = not (args['--export'] or args['--test']) output = None if args.get('--test'): result = mgr.verify_order(**order) table = Table(['Item', 'cost']) table.align['Item'] = 'r' table.align['cost'] = 'r' total = 0.0 for price in result['prices']: total += float(price.get('recurringFee', 0.0)) rate = "%.2f" % float(price['recurringFee']) table.add_row([price['item']['description'], rate]) table.add_row(['Total monthly cost', "%.2f" % total]) output = [] output.append(table) output.append(FormattedItem( '', ' -- ! Prices reflected here are retail and do not ' 'take account level discounts and are not guaranteed.') ) if args['--export']: export_file = args.pop('--export') export_to_template(export_file, args, exclude=['--wait', '--test']) return 'Successfully exported options to a template file.' if do_create: if args['--really'] or confirm( "This action will incur charges on your account. " "Continue?"): result = mgr.place_order(**order) table = KeyValueTable(['name', 'value']) table.align['name'] = 'r' table.align['value'] = 'l' table.add_row(['id', result['orderId']]) table.add_row(['created', result['orderDate']]) output = table else: raise CLIAbort('Aborting dedicated server order.') return output
def execute(self, args): update_with_template_args(args) mgr = HardwareManager(self.client) # Disks will be a comma-separated list. Let's make it a real list. if isinstance(args.get('--disk'), str): args['--disk'] = args.get('--disk').split(',') # Do the same thing for SSH keys if isinstance(args.get('--key'), str): args['--key'] = args.get('--key').split(',') self._validate_args(args) bmi_options = mgr.get_bare_metal_create_options() order = { 'hostname': args['--hostname'], 'domain': args['--domain'], 'bare_metal': True, } # Validate the CPU/Memory combination and get the price ID server_core = self._get_cpu_and_memory_price_ids(bmi_options, args['--cpu'], args['--memory']) if server_core: order['server'] = server_core else: raise CLIAbort('Invalid CPU/memory combination specified.') order['hourly'] = args['--hourly'] # Convert the OS code back into a price ID os_price = self._get_price_id_from_options(bmi_options, 'os', args['--os']) if os_price: order['os'] = os_price else: raise CLIAbort('Invalid operating system specified.') order['location'] = args['--datacenter'] or 'FIRST_AVAILABLE' # Set the disk size disk_prices = [] for disk in args.get('--disk'): disk_price = self._get_price_id_from_options(bmi_options, 'disk', disk) if disk_price: disk_prices.append(disk_price) if not disk_prices: disk_prices.append(self._get_default_value(bmi_options, 'disk0')) order['disks'] = disk_prices # Set the port speed port_speed = args.get('--network') or 100 nic_price = self._get_price_id_from_options(bmi_options, 'nic', str(port_speed)) if nic_price: order['port_speed'] = nic_price else: raise CLIAbort('Invalid network speed specified.') # Get the SSH keys if args.get('--key'): keys = [] for key in args.get('--key'): key_id = resolve_id(SshKeyManager(self.client).resolve_ids, key, 'SshKey') keys.append(key_id) order['ssh_keys'] = keys if args.get('--vlan_public'): order['public_vlan'] = args['--vlan_public'] if args.get('--vlan_private'): order['private_vlan'] = args['--vlan_private'] # Begin output table = Table(['Item', 'cost']) table.align['Item'] = 'r' table.align['cost'] = 'r' if args.get('--test'): result = mgr.verify_order(**order) total_monthly = 0.0 total_hourly = 0.0 for price in result['prices']: monthly_fee = float(price.get('recurringFee', 0.0)) hourly_fee = float(price.get('hourlyRecurringFee', 0.0)) total_monthly += monthly_fee total_hourly += hourly_fee if args.get('--hourly'): rate = "%.2f" % hourly_fee else: rate = "%.2f" % monthly_fee table.add_row([price['item']['description'], rate]) if args.get('--hourly'): total = total_hourly else: total = total_monthly billing_rate = 'monthly' if args.get('--hourly'): billing_rate = 'hourly' table.add_row(['Total %s cost' % billing_rate, "%.2f" % total]) output = SequentialOutput() output.append(table) output.append(FormattedItem( '', ' -- ! Prices reflected here are retail and do not ' 'take account level discounts and are not guaranteed.') ) elif args['--really'] or confirm( "This action will incur charges on your account. Continue?"): result = mgr.place_order(**order) table = KeyValueTable(['name', 'value']) table.align['name'] = 'r' table.align['value'] = 'l' table.add_row(['id', result['orderId']]) table.add_row(['created', result['orderDate']]) output = table else: raise CLIAbort('Aborting bare metal instance order.') return output
def execute(self, args): update_with_template_args(args) mgr = HardwareManager(self.client) # Disks will be a comma-separated list. Let's make it a real list. if isinstance(args.get("--disk"), str): args["--disk"] = args.get("--disk").split(",") # Do the same thing for SSH keys if isinstance(args.get("--key"), str): args["--key"] = args.get("--key").split(",") self._validate_args(args) bmi_options = mgr.get_bare_metal_create_options() order = {"hostname": args["--hostname"], "domain": args["--domain"], "bare_metal": True} # Validate the CPU/Memory combination and get the price ID server_core = self._get_cpu_and_memory_price_ids(bmi_options, args["--cpu"], args["--memory"]) if server_core: order["server"] = server_core else: raise CLIAbort("Invalid CPU/memory combination specified.") order["hourly"] = args["--hourly"] # Convert the OS code back into a price ID os_price = self._get_price_id_from_options(bmi_options, "os", args["--os"]) if os_price: order["os"] = os_price else: raise CLIAbort("Invalid operating system specified.") order["location"] = args["--datacenter"] or "FIRST_AVAILABLE" # Set the disk size disk_prices = [] for disk in args.get("--disk"): disk_price = self._get_price_id_from_options(bmi_options, "disk", disk) if disk_price: disk_prices.append(disk_price) if not disk_prices: disk_prices.append(self._get_default_value(bmi_options, "disk0")) order["disks"] = disk_prices # Set the port speed port_speed = args.get("--network") or 100 nic_price = self._get_price_id_from_options(bmi_options, "nic", str(port_speed)) if nic_price: order["port_speed"] = nic_price else: raise CLIAbort("Invalid network speed specified.") # Get the SSH keys if args.get("--key"): keys = [] for key in args.get("--key"): key_id = resolve_id(SshKeyManager(self.client).resolve_ids, key, "SshKey") keys.append(key_id) order["ssh_keys"] = keys if args.get("--vlan_public"): order["public_vlan"] = args["--vlan_public"] if args.get("--vlan_private"): order["private_vlan"] = args["--vlan_private"] # Begin output t = Table(["Item", "cost"]) t.align["Item"] = "r" t.align["cost"] = "r" if args.get("--test"): result = mgr.verify_order(**order) total_monthly = 0.0 total_hourly = 0.0 for price in result["prices"]: monthly_fee = float(price.get("recurringFee", 0.0)) hourly_fee = float(price.get("hourlyRecurringFee", 0.0)) total_monthly += monthly_fee total_hourly += hourly_fee if args.get("--hourly"): rate = "%.2f" % hourly_fee else: rate = "%.2f" % monthly_fee t.add_row([price["item"]["description"], rate]) if args.get("--hourly"): total = total_hourly else: total = total_monthly billing_rate = "monthly" if args.get("--hourly"): billing_rate = "hourly" t.add_row(["Total %s cost" % billing_rate, "%.2f" % total]) output = SequentialOutput() output.append(t) output.append( FormattedItem( "", " -- ! Prices reflected here are retail and do not " "take account level discounts and are not guaranteed.", ) ) elif args["--really"] or confirm("This action will incur charges on your account. Continue?"): result = mgr.place_order(**order) t = KeyValueTable(["name", "value"]) t.align["name"] = "r" t.align["value"] = "l" t.add_row(["id", result["orderId"]]) t.add_row(["created", result["orderDate"]]) output = t else: raise CLIAbort("Aborting bare metal instance order.") return output
def execute(self, args): update_with_template_args(args) cci = CCIManager(self.client) self._update_with_like_args(args) # Disks will be a comma-separated list. Let's make it a real list. if isinstance(args.get('--disk'), str): args['--disk'] = args.get('--disk').split(',') # SSH keys may be a comma-separated list. Let's make it a real list. if isinstance(args.get('--key'), str): args['--key'] = args.get('--key').split(',') self._validate_args(args) # Do not create CCI with --test or --export do_create = not (args['--export'] or args['--test']) table = Table(['Item', 'cost']) table.align['Item'] = 'r' table.align['cost'] = 'r' data = self._parse_create_args(args) output = [] if args.get('--test'): result = cci.verify_create_instance(**data) total_monthly = 0.0 total_hourly = 0.0 table = Table(['Item', 'cost']) table.align['Item'] = 'r' table.align['cost'] = 'r' for price in result['prices']: total_monthly += float(price.get('recurringFee', 0.0)) total_hourly += float(price.get('hourlyRecurringFee', 0.0)) if args.get('--hourly'): rate = "%.2f" % float(price['hourlyRecurringFee']) else: rate = "%.2f" % float(price['recurringFee']) table.add_row([price['item']['description'], rate]) if args.get('--hourly'): total = total_hourly else: total = total_monthly billing_rate = 'monthly' if args.get('--hourly'): billing_rate = 'hourly' table.add_row(['Total %s cost' % billing_rate, "%.2f" % total]) output.append(table) output.append(FormattedItem( None, ' -- ! Prices reflected here are retail and do not ' 'take account level discounts and are not guaranteed.') ) if args['--export']: export_file = args.pop('--export') export_to_template(export_file, args, exclude=['--wait', '--test']) return 'Successfully exported options to a template file.' if do_create: if args['--really'] or confirm( "This action will incur charges on your account. " "Continue?"): result = cci.create_instance(**data) table = KeyValueTable(['name', 'value']) table.align['name'] = 'r' table.align['value'] = 'l' table.add_row(['id', result['id']]) table.add_row(['created', result['createDate']]) table.add_row(['guid', result['globalIdentifier']]) output.append(table) if args.get('--wait'): ready = cci.wait_for_ready( result['id'], int(args.get('--wait') or 1)) table.add_row(['ready', ready]) else: raise CLIAbort('Aborting CCI order.') return output
def execute(self, args): update_with_template_args(args) mgr = HardwareManager(self.client) # Disks will be a comma-separated list. Let's make it a real list. if isinstance(args.get('--disk'), str): args['--disk'] = args.get('--disk').split(',') # Do the same thing for SSH keys if isinstance(args.get('--key'), str): args['--key'] = args.get('--key').split(',') self._validate_args(args) ds_options = mgr.get_dedicated_server_create_options(args['--chassis']) order = self._process_args(args, ds_options) # Do not create hardware server with --test or --export do_create = not (args['--export'] or args['--test']) output = None if args.get('--test'): result = mgr.verify_order(**order) table = Table(['Item', 'cost']) table.align['Item'] = 'r' table.align['cost'] = 'r' total = 0.0 for price in result['prices']: total += float(price.get('recurringFee', 0.0)) rate = "%.2f" % float(price['recurringFee']) table.add_row([price['item']['description'], rate]) table.add_row(['Total monthly cost', "%.2f" % total]) output = [] output.append(table) output.append(FormattedItem( '', ' -- ! Prices reflected here are retail and do not ' 'take account level discounts and are not guaranteed.') ) if args['--export']: export_file = args.pop('--export') export_to_template(export_file, args, exclude=['--wait', '--test']) return 'Successfully exported options to a template file.' if do_create: if args['--really'] or confirm( "This action will incur charges on your account. " "Continue?"): result = mgr.place_order(**order) table = KeyValueTable(['name', 'value']) table.align['name'] = 'r' table.align['value'] = 'l' table.add_row(['id', result['orderId']]) table.add_row(['created', result['orderDate']]) output = table else: raise CLIAbort('Aborting dedicated server order.') return output