def main(merge): config = Config() config.obtain_secret('access_key_id') config.obtain_secret('access_key_secret') client = config.create_api_client('cn-hongkong') RegionIdSelect().show(config, client=client) ZonesSelect().show(config) client = config.create_api_client() table = [] request = DescribeSpotPriceHistoryRequest.DescribeSpotPriceHistoryRequest() request.set_ZoneId(config.get(['CreateInstanceParams', 'ZoneId'])) request.set_NetworkType('vpc') instance_type = click.prompt('请输入你要查询的实例规格', type=str, default='ecs.gn5-c4g1.xlarge') request.set_InstanceType(instance_type) start_time = datetime.now() - timedelta(days=29) request.set_StartTime(start_time.strftime('%Y-%m-%dT00:00:00Z')) result = do_action(client, request) for idx, item in enumerate(result['SpotPrices']['SpotPriceType']): if merge and idx > 0: prev_item = result['SpotPrices']['SpotPriceType'][idx-1] if item['SpotPrice'] != prev_item['SpotPrice']: table.append((item['Timestamp'], item['SpotPrice'])) else: table.append((item['Timestamp'], item['SpotPrice'])) if not table: print('找不到该区域实例的历史价格记录') print(tabulate(table))
def create_snapshot(config): client = config.create_api_client() request = CreateSnapshotRequest.CreateSnapshotRequest() request.set_DiskId(config.get('DiskId')) result = do_action(client, request) SnapshotId= result['SnapshotId'] config.set('SnapshotId', SnapshotId)
def main(): config = Config() config.obtain_secret('access_key_id') config.obtain_secret('access_key_secret') click.echo("由于需要对地域,可用区, 实例类型的每种组合都查询一次价格, 查询时间可能较长, 请耐心等待") table = [] client = config.create_api_client('cn-hongkong') regions = get_regions(client) for region in regions: client = config.create_api_client(region['RegionId']) zones = get_zones(client) for zone in zones: ins_types = zones[0]['AvailableInstanceTypes']['InstanceTypes'] ins_types = [t for t in ins_types if t.startswith('ecs.gn')] if 'ecs.gn5-c4g1.xlarge' not in ins_types: # 由于阿里云方面的bug, DescribeZonesRequest 返回的 AvailableInstanceTypes 可能不全 # 这里手动插入些最常用的实例类型 ins_types.append('ecs.gn5-c4g1.xlarge') for instance_type in ins_types: request = DescribeSpotPriceHistoryRequest.DescribeSpotPriceHistoryRequest() request.set_ZoneId(zone['ZoneId']) request.set_NetworkType('vpc') request.set_InstanceType(instance_type) result = do_action(client, request) try: item = result['SpotPrices']['SpotPriceType'][-1] table.append([zone['LocalName'], instance_type, item['Timestamp'], item['SpotPrice']]) except IndexError: pass table.sort(key=lambda x: (x[0], x[-1])) print(tabulate(table))
def main(merge): config = Config() config.obtain_secret('access_key_id') config.obtain_secret('access_key_secret') client = config.create_api_client('eu-central-1') # eu-central-1 frankfurt RegionIdSelect(config).show(config) ZonesSelect(config).show(config) client = config.create_api_client() table = [] request = DescribeSpotPriceHistoryRequest.DescribeSpotPriceHistoryRequest() request.set_ZoneId(config.get(['CreateInstanceParams', 'ZoneId'])) request.set_NetworkType('vpc') instance_type = click.prompt('Enter instance type for querying price', type=str, default='ecs.gn5-c4g1.xlarge') request.set_InstanceType(instance_type) start_time = datetime.now() - timedelta(days=29) request.set_StartTime(start_time.strftime('%Y-%m-%dT00:00:00Z')) result = do_action(client, request) for idx, item in enumerate(result['SpotPrices']['SpotPriceType']): if merge and idx > 0: prev_item = result['SpotPrices']['SpotPriceType'][idx - 1] if item['SpotPrice'] != prev_item['SpotPrice']: table.append((item['Timestamp'], item['SpotPrice'])) else: table.append((item['Timestamp'], item['SpotPrice'])) if not table: print('Can not find history price in this region') print(tabulate(table))
def attach_disk(config): click.echo(click.style("正在挂载数据盘 ...", fg="green")) client = config.create_api_client() req = AttachDiskRequest.AttachDiskRequest() req.set_InstanceId(config.get('InstanceId')) req.set_DiskId(config.get('DiskId')) result = do_action(client, req)
def save_instance_info(config): client = config.create_api_client() req = DescribeInstancesRequest.DescribeInstancesRequest() req.set_InstanceIds(json.dumps([config.get('InstanceId')])) result = do_action(client, req) items = result["Instances"]["Instance"] lookups = {item['InstanceId']: item for item in items} InstanceId = config.get('InstanceId') PublicIpAddress = lookups[InstanceId]['PublicIpAddress']['IpAddress'][0] config.set('PublicIpAddress', PublicIpAddress) update_playbook_hosts(config) print("Instance public ip: {}".format(PublicIpAddress))
def create_instance(config): click.echo(click.style("正在创建实例 ...", fg="green")) client = config.create_api_client() req = CreateInstanceRequest.CreateInstanceRequest() create_params = config.get('CreateInstanceParams') if create_params: for param_name, param_value in create_params.items(): setter = getattr(req, 'set_' + param_name) setter(param_value) result = do_action(client, req) instance_id = result['InstanceId'] config.set('InstanceId', instance_id) config.save() return instance_id
def query_price(config, region, zone, instance_type): client = config.create_api_client(region['RegionId']) request = DescribeSpotPriceHistoryRequest.DescribeSpotPriceHistoryRequest() request.set_ZoneId(zone['ZoneId']) request.set_NetworkType('vpc') request.set_InstanceType(instance_type) result = do_action(client, request) ret = [] try: item = result['SpotPrices']['SpotPriceType'][-1] ret.append([ zone['LocalName'], instance_type, item['Timestamp'], item['SpotPrice'] ]) except IndexError: pass return ret
def create_instance(config): click.echo( click.style("Creating instance with following params ...", fg="green")) client = config.create_api_client() req = CreateInstanceRequest.CreateInstanceRequest() create_params = config.get('CreateInstanceParams') if create_params: for param_name, param_value in create_params.items(): setter = getattr(req, 'set_' + param_name) setter(param_value) click.echo(click.style(f"Region-ID: {client.get_region_id()}", fg="green")) click.echo( click.style(f"InstanceName: {req.get_InstanceName()}", fg="green")) for param_name, param_value in create_params.items(): click.echo(click.style(f"{param_name} : {param_value}", fg="green")) result = do_action(client, req) instance_id = result['InstanceId'] config.set('InstanceId', instance_id) config.save() return instance_id
def rainbow(freq): utils.do_action(action="rainbow", frequency=freq) return redirect(url_for("/"))
def fill(rgb): utils.do_action(action="fill", color=rgb) return redirect(url_for("/"))
visualizer.draw_points(joints) visualizer.draw_lines(joints, bone_pairs) norm_joints = normalize(joints) for i in range(len(saved_actions)): key, indices, joints_pos = saved_actions[i] # print(key, indices, joints_pos) error = difference(joints_pos, norm_joints, indices) print(key, error) if error < DIFFERENCE_THRESHOLD: print("ACTION: " + key.upper()) visualizer.draw_text_in_frame(key.upper(), 50, 50, font_scale=1.5) if (sys.argv[3] in ["-r", "-R"]) or (not run_last[i]): do_action(keyboard, key) run_last[i] = True else: run_last[i] = False visualizer.show() key = cv2.waitKey(1) if key & 255 == 27: break cap.release() cv2.destroyAllWindows()
def delete_snapshot(config, snapshot_id): client = config.create_api_client() request = DeleteSnapshotRequest.DeleteSnapshotRequest() request.set_SnapshotId(snapshot_id) do_action(client, request)
def delete_disk(config): client = config.create_api_client() request = DeleteDiskRequest.DeleteDiskRequest() request.set_DiskId(config.get('DiskId')) do_action(client, request) config.pop("DiskId")
def party(freq): utils.do_action(action="party", frequency=freq) return redirect(url_for("/"))
def delete_instance(config): click.echo(click.style("Deleting instance ...", fg="green")) client = config.create_api_client() req = DeleteInstanceRequest.DeleteInstanceRequest() req.set_InstanceId(config.get('InstanceId')) result = do_action(client, req)
def alert(rgb): utils.do_action(action="alert", color=rgb) return redirect(url_for("/"))
def get_regions(client): request = DescribeRegionsRequest.DescribeRegionsRequest() result = do_action(client, request) return result['Regions']['Region']
def allocate_public_ip(config): click.echo(click.style("正在分配公网 IP ...", fg="green")) client = config.create_api_client() req = AllocatePublicIpAddressRequest.AllocatePublicIpAddressRequest() req.set_InstanceId(config.get('InstanceId')) result = do_action(client, req)
def get_zones(client): request = DescribeZonesRequest.DescribeZonesRequest() result = do_action(client, request) return result['Zones']['Zone']
def stop_instance(config): click.echo(click.style("Stoping instance ...", fg="green")) client = config.create_api_client() req = StopInstanceRequest.StopInstanceRequest() req.set_InstanceId(config.get('InstanceId')) result = do_action(client, req)