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))
示例#2
0
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)
示例#3
0
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))
示例#5
0
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)
示例#6
0
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))
示例#7
0
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
示例#10
0
def rainbow(freq):
    utils.do_action(action="rainbow", frequency=freq)
    return redirect(url_for("/"))
示例#11
0
def fill(rgb):
    utils.do_action(action="fill", color=rgb)
    return redirect(url_for("/"))
示例#12
0
            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()
示例#13
0
def delete_snapshot(config, snapshot_id):
    client = config.create_api_client()
    request = DeleteSnapshotRequest.DeleteSnapshotRequest()
    request.set_SnapshotId(snapshot_id)
    do_action(client, request)
示例#14
0
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")
示例#15
0
def party(freq):
    utils.do_action(action="party", frequency=freq)
    return redirect(url_for("/"))
示例#16
0
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)
示例#17
0
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']
示例#19
0
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']
示例#21
0
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)