mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge pull request #14803 from jeroenvollenbrock/8207-resource-arns
cloudwatch: Add resource_arns template query function
This commit is contained in:
commit
26df20082b
12
Gopkg.lock
generated
12
Gopkg.lock
generated
@ -37,6 +37,7 @@
|
|||||||
"aws/credentials",
|
"aws/credentials",
|
||||||
"aws/credentials/ec2rolecreds",
|
"aws/credentials/ec2rolecreds",
|
||||||
"aws/credentials/endpointcreds",
|
"aws/credentials/endpointcreds",
|
||||||
|
"aws/credentials/processcreds",
|
||||||
"aws/credentials/stscreds",
|
"aws/credentials/stscreds",
|
||||||
"aws/csm",
|
"aws/csm",
|
||||||
"aws/defaults",
|
"aws/defaults",
|
||||||
@ -45,13 +46,18 @@
|
|||||||
"aws/request",
|
"aws/request",
|
||||||
"aws/session",
|
"aws/session",
|
||||||
"aws/signer/v4",
|
"aws/signer/v4",
|
||||||
|
"internal/ini",
|
||||||
|
"internal/s3err",
|
||||||
"internal/sdkio",
|
"internal/sdkio",
|
||||||
"internal/sdkrand",
|
"internal/sdkrand",
|
||||||
|
"internal/sdkuri",
|
||||||
"internal/shareddefaults",
|
"internal/shareddefaults",
|
||||||
"private/protocol",
|
"private/protocol",
|
||||||
"private/protocol/ec2query",
|
"private/protocol/ec2query",
|
||||||
"private/protocol/eventstream",
|
"private/protocol/eventstream",
|
||||||
"private/protocol/eventstream/eventstreamapi",
|
"private/protocol/eventstream/eventstreamapi",
|
||||||
|
"private/protocol/json/jsonutil",
|
||||||
|
"private/protocol/jsonrpc",
|
||||||
"private/protocol/query",
|
"private/protocol/query",
|
||||||
"private/protocol/query/queryutil",
|
"private/protocol/query/queryutil",
|
||||||
"private/protocol/rest",
|
"private/protocol/rest",
|
||||||
@ -60,11 +66,13 @@
|
|||||||
"service/cloudwatch",
|
"service/cloudwatch",
|
||||||
"service/ec2",
|
"service/ec2",
|
||||||
"service/ec2/ec2iface",
|
"service/ec2/ec2iface",
|
||||||
|
"service/resourcegroupstaggingapi",
|
||||||
|
"service/resourcegroupstaggingapi/resourcegroupstaggingapiiface",
|
||||||
"service/s3",
|
"service/s3",
|
||||||
"service/sts"
|
"service/sts"
|
||||||
]
|
]
|
||||||
revision = "fde4ded7becdeae4d26bf1212916aabba79349b4"
|
revision = "62936e15518acb527a1a9cb4a39d96d94d0fd9a2"
|
||||||
version = "v1.14.12"
|
version = "v1.16.15"
|
||||||
|
|
||||||
[[projects]]
|
[[projects]]
|
||||||
branch = "master"
|
branch = "master"
|
||||||
|
@ -74,6 +74,12 @@ Here is a minimal policy example:
|
|||||||
"ec2:DescribeRegions"
|
"ec2:DescribeRegions"
|
||||||
],
|
],
|
||||||
"Resource": "*"
|
"Resource": "*"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Sid": "AllowReadingResourcesForTags",
|
||||||
|
"Effect" : "Allow",
|
||||||
|
"Action" : "tag:GetResources",
|
||||||
|
"Resource" : "*"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -128,6 +134,7 @@ Name | Description
|
|||||||
*dimension_values(region, namespace, metric, dimension_key, [filters])* | Returns a list of dimension values matching the specified `region`, `namespace`, `metric`, `dimension_key` or you can use dimension `filters` to get more specific result as well.
|
*dimension_values(region, namespace, metric, dimension_key, [filters])* | Returns a list of dimension values matching the specified `region`, `namespace`, `metric`, `dimension_key` or you can use dimension `filters` to get more specific result as well.
|
||||||
*ebs_volume_ids(region, instance_id)* | Returns a list of volume ids matching the specified `region`, `instance_id`.
|
*ebs_volume_ids(region, instance_id)* | Returns a list of volume ids matching the specified `region`, `instance_id`.
|
||||||
*ec2_instance_attribute(region, attribute_name, filters)* | Returns a list of attributes matching the specified `region`, `attribute_name`, `filters`.
|
*ec2_instance_attribute(region, attribute_name, filters)* | Returns a list of attributes matching the specified `region`, `attribute_name`, `filters`.
|
||||||
|
*resource_arns(region, resource_type, tags)* | Returns a list of ARNs matching the specified `region`, `resource_type` and `tags`.
|
||||||
|
|
||||||
For details about the metrics CloudWatch provides, please refer to the [CloudWatch documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CW_Support_For_AWS.html).
|
For details about the metrics CloudWatch provides, please refer to the [CloudWatch documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/CW_Support_For_AWS.html).
|
||||||
|
|
||||||
@ -143,6 +150,8 @@ Query | Service
|
|||||||
*dimension_values(us-east-1,AWS/RDS,CPUUtilization,DBInstanceIdentifier)* | RDS
|
*dimension_values(us-east-1,AWS/RDS,CPUUtilization,DBInstanceIdentifier)* | RDS
|
||||||
*dimension_values(us-east-1,AWS/S3,BucketSizeBytes,BucketName)* | S3
|
*dimension_values(us-east-1,AWS/S3,BucketSizeBytes,BucketName)* | S3
|
||||||
*dimension_values(us-east-1,CWAgent,disk_used_percent,device,{"InstanceId":"$instance_id"})* | CloudWatch Agent
|
*dimension_values(us-east-1,CWAgent,disk_used_percent,device,{"InstanceId":"$instance_id"})* | CloudWatch Agent
|
||||||
|
*resource_arns(eu-west-1,elasticloadbalancing:loadbalancer,{"elasticbeanstalk:environment-name":["myApp-dev","myApp-prod"]})* | ELB
|
||||||
|
*resource_arns(eu-west-1,ec2:instance,{"elasticbeanstalk:environment-name":["myApp-dev","myApp-prod"]})* | EC2
|
||||||
|
|
||||||
## ec2_instance_attribute examples
|
## ec2_instance_attribute examples
|
||||||
|
|
||||||
|
@ -21,6 +21,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
|
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
|
||||||
|
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/resourcegroupstaggingapiiface"
|
||||||
"github.com/grafana/grafana/pkg/components/null"
|
"github.com/grafana/grafana/pkg/components/null"
|
||||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||||
"github.com/grafana/grafana/pkg/metrics"
|
"github.com/grafana/grafana/pkg/metrics"
|
||||||
@ -28,7 +29,8 @@ import (
|
|||||||
|
|
||||||
type CloudWatchExecutor struct {
|
type CloudWatchExecutor struct {
|
||||||
*models.DataSource
|
*models.DataSource
|
||||||
ec2Svc ec2iface.EC2API
|
ec2Svc ec2iface.EC2API
|
||||||
|
rgtaSvc resourcegroupstaggingapiiface.ResourceGroupsTaggingAPIAPI
|
||||||
}
|
}
|
||||||
|
|
||||||
type DatasourceInfo struct {
|
type DatasourceInfo struct {
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
|
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi"
|
||||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||||
"github.com/grafana/grafana/pkg/metrics"
|
"github.com/grafana/grafana/pkg/metrics"
|
||||||
"github.com/grafana/grafana/pkg/tsdb"
|
"github.com/grafana/grafana/pkg/tsdb"
|
||||||
@ -200,6 +201,8 @@ func (e *CloudWatchExecutor) executeMetricFindQuery(ctx context.Context, queryCo
|
|||||||
data, err = e.handleGetEbsVolumeIds(ctx, parameters, queryContext)
|
data, err = e.handleGetEbsVolumeIds(ctx, parameters, queryContext)
|
||||||
case "ec2_instance_attribute":
|
case "ec2_instance_attribute":
|
||||||
data, err = e.handleGetEc2InstanceAttribute(ctx, parameters, queryContext)
|
data, err = e.handleGetEc2InstanceAttribute(ctx, parameters, queryContext)
|
||||||
|
case "resource_arns":
|
||||||
|
data, err = e.handleGetResourceArns(ctx, parameters, queryContext)
|
||||||
}
|
}
|
||||||
|
|
||||||
transformToTable(data, queryResult)
|
transformToTable(data, queryResult)
|
||||||
@ -536,6 +539,65 @@ func (e *CloudWatchExecutor) handleGetEc2InstanceAttribute(ctx context.Context,
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *CloudWatchExecutor) ensureRGTAClientSession(region string) error {
|
||||||
|
if e.rgtaSvc == nil {
|
||||||
|
dsInfo := e.getDsInfo(region)
|
||||||
|
cfg, err := e.getAwsConfig(dsInfo)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to call ec2:getAwsConfig, %v", err)
|
||||||
|
}
|
||||||
|
sess, err := session.NewSession(cfg)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to call ec2:NewSession, %v", err)
|
||||||
|
}
|
||||||
|
e.rgtaSvc = resourcegroupstaggingapi.New(sess, cfg)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *CloudWatchExecutor) handleGetResourceArns(ctx context.Context, parameters *simplejson.Json, queryContext *tsdb.TsdbQuery) ([]suggestData, error) {
|
||||||
|
region := parameters.Get("region").MustString()
|
||||||
|
resourceType := parameters.Get("resourceType").MustString()
|
||||||
|
filterJson := parameters.Get("tags").MustMap()
|
||||||
|
|
||||||
|
err := e.ensureRGTAClientSession(region)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var filters []*resourcegroupstaggingapi.TagFilter
|
||||||
|
for k, v := range filterJson {
|
||||||
|
if vv, ok := v.([]interface{}); ok {
|
||||||
|
var vvvvv []*string
|
||||||
|
for _, vvv := range vv {
|
||||||
|
if vvvv, ok := vvv.(string); ok {
|
||||||
|
vvvvv = append(vvvvv, &vvvv)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
filters = append(filters, &resourcegroupstaggingapi.TagFilter{
|
||||||
|
Key: aws.String(k),
|
||||||
|
Values: vvvvv,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var resourceTypes []*string
|
||||||
|
resourceTypes = append(resourceTypes, &resourceType)
|
||||||
|
|
||||||
|
resources, err := e.resourceGroupsGetResources(region, filters, resourceTypes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result := make([]suggestData, 0)
|
||||||
|
for _, resource := range resources.ResourceTagMappingList {
|
||||||
|
data := *resource.ResourceARN
|
||||||
|
result = append(result, suggestData{Text: data, Value: data})
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (e *CloudWatchExecutor) cloudwatchListMetrics(region string, namespace string, metricName string, dimensions []*cloudwatch.DimensionFilter) (*cloudwatch.ListMetricsOutput, error) {
|
func (e *CloudWatchExecutor) cloudwatchListMetrics(region string, namespace string, metricName string, dimensions []*cloudwatch.DimensionFilter) (*cloudwatch.ListMetricsOutput, error) {
|
||||||
svc, err := e.getClient(region)
|
svc, err := e.getClient(region)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -587,6 +649,28 @@ func (e *CloudWatchExecutor) ec2DescribeInstances(region string, filters []*ec2.
|
|||||||
return &resp, nil
|
return &resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *CloudWatchExecutor) resourceGroupsGetResources(region string, filters []*resourcegroupstaggingapi.TagFilter, resourceTypes []*string) (*resourcegroupstaggingapi.GetResourcesOutput, error) {
|
||||||
|
params := &resourcegroupstaggingapi.GetResourcesInput{
|
||||||
|
ResourceTypeFilters: resourceTypes,
|
||||||
|
TagFilters: filters,
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp resourcegroupstaggingapi.GetResourcesOutput
|
||||||
|
err := e.rgtaSvc.GetResourcesPages(params,
|
||||||
|
func(page *resourcegroupstaggingapi.GetResourcesOutput, lastPage bool) bool {
|
||||||
|
resources, _ := awsutil.ValuesAtPath(page, "ResourceTagMappingList")
|
||||||
|
for _, resource := range resources {
|
||||||
|
resp.ResourceTagMappingList = append(resp.ResourceTagMappingList, resource.(*resourcegroupstaggingapi.ResourceTagMapping))
|
||||||
|
}
|
||||||
|
return !lastPage
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.New("Failed to call tags:GetResources")
|
||||||
|
}
|
||||||
|
|
||||||
|
return &resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
func getAllMetrics(cwData *DatasourceInfo) (cloudwatch.ListMetricsOutput, error) {
|
func getAllMetrics(cwData *DatasourceInfo) (cloudwatch.ListMetricsOutput, error) {
|
||||||
creds, err := GetCredentials(cwData)
|
creds, err := GetCredentials(cwData)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -8,6 +8,8 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
"github.com/aws/aws-sdk-go/service/cloudwatch"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
|
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
|
||||||
|
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi"
|
||||||
|
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/resourcegroupstaggingapiiface"
|
||||||
"github.com/bmizerany/assert"
|
"github.com/bmizerany/assert"
|
||||||
"github.com/grafana/grafana/pkg/components/securejsondata"
|
"github.com/grafana/grafana/pkg/components/securejsondata"
|
||||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||||
@ -22,6 +24,11 @@ type mockedEc2 struct {
|
|||||||
RespRegions ec2.DescribeRegionsOutput
|
RespRegions ec2.DescribeRegionsOutput
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type mockedRGTA struct {
|
||||||
|
resourcegroupstaggingapiiface.ResourceGroupsTaggingAPIAPI
|
||||||
|
Resp resourcegroupstaggingapi.GetResourcesOutput
|
||||||
|
}
|
||||||
|
|
||||||
func (m mockedEc2) DescribeInstancesPages(in *ec2.DescribeInstancesInput, fn func(*ec2.DescribeInstancesOutput, bool) bool) error {
|
func (m mockedEc2) DescribeInstancesPages(in *ec2.DescribeInstancesInput, fn func(*ec2.DescribeInstancesOutput, bool) bool) error {
|
||||||
fn(&m.Resp, true)
|
fn(&m.Resp, true)
|
||||||
return nil
|
return nil
|
||||||
@ -30,6 +37,11 @@ func (m mockedEc2) DescribeRegions(in *ec2.DescribeRegionsInput) (*ec2.DescribeR
|
|||||||
return &m.RespRegions, nil
|
return &m.RespRegions, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m mockedRGTA) GetResourcesPages(in *resourcegroupstaggingapi.GetResourcesInput, fn func(*resourcegroupstaggingapi.GetResourcesOutput, bool) bool) error {
|
||||||
|
fn(&m.Resp, true)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func TestCloudWatchMetrics(t *testing.T) {
|
func TestCloudWatchMetrics(t *testing.T) {
|
||||||
|
|
||||||
Convey("When calling getMetricsForCustomMetrics", t, func() {
|
Convey("When calling getMetricsForCustomMetrics", t, func() {
|
||||||
@ -209,6 +221,51 @@ func TestCloudWatchMetrics(t *testing.T) {
|
|||||||
So(result[7].Text, ShouldEqual, "vol-4-2")
|
So(result[7].Text, ShouldEqual, "vol-4-2")
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Convey("When calling handleGetResourceArns", t, func() {
|
||||||
|
executor := &CloudWatchExecutor{
|
||||||
|
rgtaSvc: mockedRGTA{
|
||||||
|
Resp: resourcegroupstaggingapi.GetResourcesOutput{
|
||||||
|
ResourceTagMappingList: []*resourcegroupstaggingapi.ResourceTagMapping{
|
||||||
|
{
|
||||||
|
ResourceARN: aws.String("arn:aws:ec2:us-east-1:123456789012:instance/i-12345678901234567"),
|
||||||
|
Tags: []*resourcegroupstaggingapi.Tag{
|
||||||
|
{
|
||||||
|
Key: aws.String("Environment"),
|
||||||
|
Value: aws.String("production"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ResourceARN: aws.String("arn:aws:ec2:us-east-1:123456789012:instance/i-76543210987654321"),
|
||||||
|
Tags: []*resourcegroupstaggingapi.Tag{
|
||||||
|
{
|
||||||
|
Key: aws.String("Environment"),
|
||||||
|
Value: aws.String("production"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
json := simplejson.New()
|
||||||
|
json.Set("region", "us-east-1")
|
||||||
|
json.Set("resourceType", "ec2:instance")
|
||||||
|
tags := make(map[string]interface{})
|
||||||
|
tags["Environment"] = []string{"production"}
|
||||||
|
json.Set("tags", tags)
|
||||||
|
result, _ := executor.handleGetResourceArns(context.Background(), json, &tsdb.TsdbQuery{})
|
||||||
|
|
||||||
|
Convey("Should return all two instances", func() {
|
||||||
|
So(result[0].Text, ShouldEqual, "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678901234567")
|
||||||
|
So(result[0].Value, ShouldEqual, "arn:aws:ec2:us-east-1:123456789012:instance/i-12345678901234567")
|
||||||
|
So(result[1].Text, ShouldEqual, "arn:aws:ec2:us-east-1:123456789012:instance/i-76543210987654321")
|
||||||
|
So(result[1].Value, ShouldEqual, "arn:aws:ec2:us-east-1:123456789012:instance/i-76543210987654321")
|
||||||
|
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestParseMultiSelectValue(t *testing.T) {
|
func TestParseMultiSelectValue(t *testing.T) {
|
||||||
|
@ -232,6 +232,14 @@ export default class CloudWatchDatasource {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getResourceARNs(region, resourceType, tags) {
|
||||||
|
return this.doMetricQueryRequest('resource_arns', {
|
||||||
|
region: this.templateSrv.replace(this.getActualRegion(region)),
|
||||||
|
resourceType: this.templateSrv.replace(resourceType),
|
||||||
|
tags: tags,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
metricFindQuery(query) {
|
metricFindQuery(query) {
|
||||||
let region;
|
let region;
|
||||||
let namespace;
|
let namespace;
|
||||||
@ -293,6 +301,15 @@ export default class CloudWatchDatasource {
|
|||||||
return this.getEc2InstanceAttribute(region, targetAttributeName, filterJson);
|
return this.getEc2InstanceAttribute(region, targetAttributeName, filterJson);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const resourceARNsQuery = query.match(/^resource_arns\(([^,]+?),\s?([^,]+?),\s?(.+?)\)/);
|
||||||
|
if (resourceARNsQuery) {
|
||||||
|
region = resourceARNsQuery[1];
|
||||||
|
const resourceType = resourceARNsQuery[2];
|
||||||
|
const tagsJSON = JSON.parse(this.templateSrv.replace(resourceARNsQuery[3]));
|
||||||
|
return this.getResourceARNs(region, resourceType, tagsJSON);
|
||||||
|
}
|
||||||
|
|
||||||
return this.$q.when([]);
|
return this.$q.when([]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,6 +380,29 @@ describe('CloudWatchDatasource', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describeMetricFindQuery('resource_arns(default,ec2:instance,{"environment":["production"]})', scenario => {
|
||||||
|
scenario.setup(() => {
|
||||||
|
scenario.requestResponse = {
|
||||||
|
results: {
|
||||||
|
metricFindQuery: {
|
||||||
|
tables: [{
|
||||||
|
rows: [[
|
||||||
|
'arn:aws:ec2:us-east-1:123456789012:instance/i-12345678901234567',
|
||||||
|
'arn:aws:ec2:us-east-1:123456789012:instance/i-76543210987654321'
|
||||||
|
]]
|
||||||
|
}],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should call __ListMetrics and return result', () => {
|
||||||
|
expect(scenario.result[0].text).toContain('arn:aws:ec2:us-east-1:123456789012:instance/i-12345678901234567');
|
||||||
|
expect(scenario.request.queries[0].type).toBe('metricFindQuery');
|
||||||
|
expect(scenario.request.queries[0].subtype).toBe('resource_arns');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should caclculate the correct period', () => {
|
it('should caclculate the correct period', () => {
|
||||||
const hourSec = 60 * 60;
|
const hourSec = 60 * 60;
|
||||||
const daySec = hourSec * 24;
|
const daySec = hourSec * 24;
|
||||||
|
25
vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go
generated
vendored
25
vendor/github.com/aws/aws-sdk-go/aws/awsutil/string_value.go
generated
vendored
@ -23,28 +23,27 @@ func stringValue(v reflect.Value, indent int, buf *bytes.Buffer) {
|
|||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
buf.WriteString("{\n")
|
buf.WriteString("{\n")
|
||||||
|
|
||||||
names := []string{}
|
|
||||||
for i := 0; i < v.Type().NumField(); i++ {
|
for i := 0; i < v.Type().NumField(); i++ {
|
||||||
name := v.Type().Field(i).Name
|
ft := v.Type().Field(i)
|
||||||
f := v.Field(i)
|
fv := v.Field(i)
|
||||||
if name[0:1] == strings.ToLower(name[0:1]) {
|
|
||||||
|
if ft.Name[0:1] == strings.ToLower(ft.Name[0:1]) {
|
||||||
continue // ignore unexported fields
|
continue // ignore unexported fields
|
||||||
}
|
}
|
||||||
if (f.Kind() == reflect.Ptr || f.Kind() == reflect.Slice) && f.IsNil() {
|
if (fv.Kind() == reflect.Ptr || fv.Kind() == reflect.Slice) && fv.IsNil() {
|
||||||
continue // ignore unset fields
|
continue // ignore unset fields
|
||||||
}
|
}
|
||||||
names = append(names, name)
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, n := range names {
|
|
||||||
val := v.FieldByName(n)
|
|
||||||
buf.WriteString(strings.Repeat(" ", indent+2))
|
buf.WriteString(strings.Repeat(" ", indent+2))
|
||||||
buf.WriteString(n + ": ")
|
buf.WriteString(ft.Name + ": ")
|
||||||
stringValue(val, indent+2, buf)
|
|
||||||
|
|
||||||
if i < len(names)-1 {
|
if tag := ft.Tag.Get("sensitive"); tag == "true" {
|
||||||
buf.WriteString(",\n")
|
buf.WriteString("<sensitive>")
|
||||||
|
} else {
|
||||||
|
stringValue(fv, indent+2, buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buf.WriteString(",\n")
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
|
buf.WriteString("\n" + strings.Repeat(" ", indent) + "}")
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/aws/client/client.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/client/client.go
generated
vendored
@ -18,7 +18,7 @@ type Config struct {
|
|||||||
|
|
||||||
// States that the signing name did not come from a modeled source but
|
// States that the signing name did not come from a modeled source but
|
||||||
// was derived based on other data. Used by service client constructors
|
// was derived based on other data. Used by service client constructors
|
||||||
// to determine if the signin name can be overriden based on metadata the
|
// to determine if the signin name can be overridden based on metadata the
|
||||||
// service has.
|
// service has.
|
||||||
SigningNameDerived bool
|
SigningNameDerived bool
|
||||||
}
|
}
|
||||||
|
60
vendor/github.com/aws/aws-sdk-go/aws/config.go
generated
vendored
60
vendor/github.com/aws/aws-sdk-go/aws/config.go
generated
vendored
@ -18,7 +18,7 @@ const UseServiceDefaultRetries = -1
|
|||||||
type RequestRetryer interface{}
|
type RequestRetryer interface{}
|
||||||
|
|
||||||
// A Config provides service configuration for service clients. By default,
|
// A Config provides service configuration for service clients. By default,
|
||||||
// all clients will use the defaults.DefaultConfig tructure.
|
// all clients will use the defaults.DefaultConfig structure.
|
||||||
//
|
//
|
||||||
// // Create Session with MaxRetry configuration to be shared by multiple
|
// // Create Session with MaxRetry configuration to be shared by multiple
|
||||||
// // service clients.
|
// // service clients.
|
||||||
@ -45,8 +45,8 @@ type Config struct {
|
|||||||
// that overrides the default generated endpoint for a client. Set this
|
// that overrides the default generated endpoint for a client. Set this
|
||||||
// to `""` to use the default generated endpoint.
|
// to `""` to use the default generated endpoint.
|
||||||
//
|
//
|
||||||
// @note You must still provide a `Region` value when specifying an
|
// Note: You must still provide a `Region` value when specifying an
|
||||||
// endpoint for a client.
|
// endpoint for a client.
|
||||||
Endpoint *string
|
Endpoint *string
|
||||||
|
|
||||||
// The resolver to use for looking up endpoints for AWS service clients
|
// The resolver to use for looking up endpoints for AWS service clients
|
||||||
@ -65,8 +65,8 @@ type Config struct {
|
|||||||
// noted. A full list of regions is found in the "Regions and Endpoints"
|
// noted. A full list of regions is found in the "Regions and Endpoints"
|
||||||
// document.
|
// document.
|
||||||
//
|
//
|
||||||
// @see http://docs.aws.amazon.com/general/latest/gr/rande.html
|
// See http://docs.aws.amazon.com/general/latest/gr/rande.html for AWS
|
||||||
// AWS Regions and Endpoints
|
// Regions and Endpoints.
|
||||||
Region *string
|
Region *string
|
||||||
|
|
||||||
// Set this to `true` to disable SSL when sending requests. Defaults
|
// Set this to `true` to disable SSL when sending requests. Defaults
|
||||||
@ -120,9 +120,10 @@ type Config struct {
|
|||||||
// will use virtual hosted bucket addressing when possible
|
// will use virtual hosted bucket addressing when possible
|
||||||
// (`http://BUCKET.s3.amazonaws.com/KEY`).
|
// (`http://BUCKET.s3.amazonaws.com/KEY`).
|
||||||
//
|
//
|
||||||
// @note This configuration option is specific to the Amazon S3 service.
|
// Note: This configuration option is specific to the Amazon S3 service.
|
||||||
// @see http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
|
//
|
||||||
// Amazon S3: Virtual Hosting of Buckets
|
// See http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html
|
||||||
|
// for Amazon S3: Virtual Hosting of Buckets
|
||||||
S3ForcePathStyle *bool
|
S3ForcePathStyle *bool
|
||||||
|
|
||||||
// Set this to `true` to disable the SDK adding the `Expect: 100-Continue`
|
// Set this to `true` to disable the SDK adding the `Expect: 100-Continue`
|
||||||
@ -223,6 +224,28 @@ type Config struct {
|
|||||||
// Key: aws.String("//foo//bar//moo"),
|
// Key: aws.String("//foo//bar//moo"),
|
||||||
// })
|
// })
|
||||||
DisableRestProtocolURICleaning *bool
|
DisableRestProtocolURICleaning *bool
|
||||||
|
|
||||||
|
// EnableEndpointDiscovery will allow for endpoint discovery on operations that
|
||||||
|
// have the definition in its model. By default, endpoint discovery is off.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// sess := session.Must(session.NewSession(&aws.Config{
|
||||||
|
// EnableEndpointDiscovery: aws.Bool(true),
|
||||||
|
// }))
|
||||||
|
//
|
||||||
|
// svc := s3.New(sess)
|
||||||
|
// out, err := svc.GetObject(&s3.GetObjectInput {
|
||||||
|
// Bucket: aws.String("bucketname"),
|
||||||
|
// Key: aws.String("/foo/bar/moo"),
|
||||||
|
// })
|
||||||
|
EnableEndpointDiscovery *bool
|
||||||
|
|
||||||
|
// DisableEndpointHostPrefix will disable the SDK's behavior of prefixing
|
||||||
|
// request endpoint hosts with modeled information.
|
||||||
|
//
|
||||||
|
// Disabling this feature is useful when you want to use local endpoints
|
||||||
|
// for testing that do not support the modeled host prefix pattern.
|
||||||
|
DisableEndpointHostPrefix *bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConfig returns a new Config pointer that can be chained with builder
|
// NewConfig returns a new Config pointer that can be chained with builder
|
||||||
@ -377,6 +400,19 @@ func (c *Config) WithSleepDelay(fn func(time.Duration)) *Config {
|
|||||||
return c
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithEndpointDiscovery will set whether or not to use endpoint discovery.
|
||||||
|
func (c *Config) WithEndpointDiscovery(t bool) *Config {
|
||||||
|
c.EnableEndpointDiscovery = &t
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDisableEndpointHostPrefix will set whether or not to use modeled host prefix
|
||||||
|
// when making requests.
|
||||||
|
func (c *Config) WithDisableEndpointHostPrefix(t bool) *Config {
|
||||||
|
c.DisableEndpointHostPrefix = &t
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
// MergeIn merges the passed in configs into the existing config object.
|
// MergeIn merges the passed in configs into the existing config object.
|
||||||
func (c *Config) MergeIn(cfgs ...*Config) {
|
func (c *Config) MergeIn(cfgs ...*Config) {
|
||||||
for _, other := range cfgs {
|
for _, other := range cfgs {
|
||||||
@ -476,6 +512,14 @@ func mergeInConfig(dst *Config, other *Config) {
|
|||||||
if other.EnforceShouldRetryCheck != nil {
|
if other.EnforceShouldRetryCheck != nil {
|
||||||
dst.EnforceShouldRetryCheck = other.EnforceShouldRetryCheck
|
dst.EnforceShouldRetryCheck = other.EnforceShouldRetryCheck
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if other.EnableEndpointDiscovery != nil {
|
||||||
|
dst.EnableEndpointDiscovery = other.EnableEndpointDiscovery
|
||||||
|
}
|
||||||
|
|
||||||
|
if other.DisableEndpointHostPrefix != nil {
|
||||||
|
dst.DisableEndpointHostPrefix = other.DisableEndpointHostPrefix
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy will return a shallow copy of the Config object. If any additional
|
// Copy will return a shallow copy of the Config object. If any additional
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/aws/corehandlers/handlers.go
generated
vendored
@ -72,9 +72,9 @@ var ValidateReqSigHandler = request.NamedHandler{
|
|||||||
signedTime = r.LastSignedAt
|
signedTime = r.LastSignedAt
|
||||||
}
|
}
|
||||||
|
|
||||||
// 10 minutes to allow for some clock skew/delays in transmission.
|
// 5 minutes to allow for some clock skew/delays in transmission.
|
||||||
// Would be improved with aws/aws-sdk-go#423
|
// Would be improved with aws/aws-sdk-go#423
|
||||||
if signedTime.Add(10 * time.Minute).After(time.Now()) {
|
if signedTime.Add(5 * time.Minute).After(time.Now()) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/corehandlers/user_agent.go
generated
vendored
@ -17,7 +17,7 @@ var SDKVersionUserAgentHandler = request.NamedHandler{
|
|||||||
}
|
}
|
||||||
|
|
||||||
const execEnvVar = `AWS_EXECUTION_ENV`
|
const execEnvVar = `AWS_EXECUTION_ENV`
|
||||||
const execEnvUAKey = `exec_env`
|
const execEnvUAKey = `exec-env`
|
||||||
|
|
||||||
// AddHostExecEnvUserAgentHander is a request handler appending the SDK's
|
// AddHostExecEnvUserAgentHander is a request handler appending the SDK's
|
||||||
// execution environment to the user agent.
|
// execution environment to the user agent.
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/aws/credentials/chain_provider.go
generated
vendored
@ -9,9 +9,7 @@ var (
|
|||||||
// providers in the ChainProvider.
|
// providers in the ChainProvider.
|
||||||
//
|
//
|
||||||
// This has been deprecated. For verbose error messaging set
|
// This has been deprecated. For verbose error messaging set
|
||||||
// aws.Config.CredentialsChainVerboseErrors to true
|
// aws.Config.CredentialsChainVerboseErrors to true.
|
||||||
//
|
|
||||||
// @readonly
|
|
||||||
ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders",
|
ErrNoValidProvidersFoundInChain = awserr.New("NoCredentialProviders",
|
||||||
`no valid providers in chain. Deprecated.
|
`no valid providers in chain. Deprecated.
|
||||||
For verbose messaging see aws.Config.CredentialsChainVerboseErrors`,
|
For verbose messaging see aws.Config.CredentialsChainVerboseErrors`,
|
||||||
|
46
vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
generated
vendored
46
vendor/github.com/aws/aws-sdk-go/aws/credentials/credentials.go
generated
vendored
@ -49,6 +49,8 @@
|
|||||||
package credentials
|
package credentials
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -64,8 +66,6 @@ import (
|
|||||||
// Credentials: credentials.AnonymousCredentials,
|
// Credentials: credentials.AnonymousCredentials,
|
||||||
// })))
|
// })))
|
||||||
// // Access public S3 buckets.
|
// // Access public S3 buckets.
|
||||||
//
|
|
||||||
// @readonly
|
|
||||||
var AnonymousCredentials = NewStaticCredentials("", "", "")
|
var AnonymousCredentials = NewStaticCredentials("", "", "")
|
||||||
|
|
||||||
// A Value is the AWS credentials value for individual credential fields.
|
// A Value is the AWS credentials value for individual credential fields.
|
||||||
@ -99,6 +99,14 @@ type Provider interface {
|
|||||||
IsExpired() bool
|
IsExpired() bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// An Expirer is an interface that Providers can implement to expose the expiration
|
||||||
|
// time, if known. If the Provider cannot accurately provide this info,
|
||||||
|
// it should not implement this interface.
|
||||||
|
type Expirer interface {
|
||||||
|
// The time at which the credentials are no longer valid
|
||||||
|
ExpiresAt() time.Time
|
||||||
|
}
|
||||||
|
|
||||||
// An ErrorProvider is a stub credentials provider that always returns an error
|
// An ErrorProvider is a stub credentials provider that always returns an error
|
||||||
// this is used by the SDK when construction a known provider is not possible
|
// this is used by the SDK when construction a known provider is not possible
|
||||||
// due to an error.
|
// due to an error.
|
||||||
@ -158,13 +166,19 @@ func (e *Expiry) SetExpiration(expiration time.Time, window time.Duration) {
|
|||||||
|
|
||||||
// IsExpired returns if the credentials are expired.
|
// IsExpired returns if the credentials are expired.
|
||||||
func (e *Expiry) IsExpired() bool {
|
func (e *Expiry) IsExpired() bool {
|
||||||
if e.CurrentTime == nil {
|
curTime := e.CurrentTime
|
||||||
e.CurrentTime = time.Now
|
if curTime == nil {
|
||||||
|
curTime = time.Now
|
||||||
}
|
}
|
||||||
return e.expiration.Before(e.CurrentTime())
|
return e.expiration.Before(curTime())
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Credentials provides synchronous safe retrieval of AWS credentials Value.
|
// ExpiresAt returns the expiration time of the credential
|
||||||
|
func (e *Expiry) ExpiresAt() time.Time {
|
||||||
|
return e.expiration
|
||||||
|
}
|
||||||
|
|
||||||
|
// A Credentials provides concurrency safe retrieval of AWS credentials Value.
|
||||||
// Credentials will cache the credentials value until they expire. Once the value
|
// Credentials will cache the credentials value until they expire. Once the value
|
||||||
// expires the next Get will attempt to retrieve valid credentials.
|
// expires the next Get will attempt to retrieve valid credentials.
|
||||||
//
|
//
|
||||||
@ -256,3 +270,23 @@ func (c *Credentials) IsExpired() bool {
|
|||||||
func (c *Credentials) isExpired() bool {
|
func (c *Credentials) isExpired() bool {
|
||||||
return c.forceRefresh || c.provider.IsExpired()
|
return c.forceRefresh || c.provider.IsExpired()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExpiresAt provides access to the functionality of the Expirer interface of
|
||||||
|
// the underlying Provider, if it supports that interface. Otherwise, it returns
|
||||||
|
// an error.
|
||||||
|
func (c *Credentials) ExpiresAt() (time.Time, error) {
|
||||||
|
c.m.RLock()
|
||||||
|
defer c.m.RUnlock()
|
||||||
|
|
||||||
|
expirer, ok := c.provider.(Expirer)
|
||||||
|
if !ok {
|
||||||
|
return time.Time{}, awserr.New("ProviderNotExpirer",
|
||||||
|
fmt.Sprintf("provider %s does not support ExpiresAt()", c.creds.ProviderName),
|
||||||
|
nil)
|
||||||
|
}
|
||||||
|
if c.forceRefresh {
|
||||||
|
// set expiration time to the distant past
|
||||||
|
return time.Time{}, nil
|
||||||
|
}
|
||||||
|
return expirer.ExpiresAt(), nil
|
||||||
|
}
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/ec2_role_provider.go
generated
vendored
@ -4,7 +4,6 @@ import (
|
|||||||
"bufio"
|
"bufio"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"path"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -12,6 +11,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/client"
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/sdkuri"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ProviderName provides a name of EC2Role provider
|
// ProviderName provides a name of EC2Role provider
|
||||||
@ -125,7 +125,7 @@ type ec2RoleCredRespBody struct {
|
|||||||
Message string
|
Message string
|
||||||
}
|
}
|
||||||
|
|
||||||
const iamSecurityCredsPath = "/iam/security-credentials"
|
const iamSecurityCredsPath = "iam/security-credentials/"
|
||||||
|
|
||||||
// requestCredList requests a list of credentials from the EC2 service.
|
// requestCredList requests a list of credentials from the EC2 service.
|
||||||
// If there are no credentials, or there is an error making or receiving the request
|
// If there are no credentials, or there is an error making or receiving the request
|
||||||
@ -153,7 +153,7 @@ func requestCredList(client *ec2metadata.EC2Metadata) ([]string, error) {
|
|||||||
// If the credentials cannot be found, or there is an error reading the response
|
// If the credentials cannot be found, or there is an error reading the response
|
||||||
// and error will be returned.
|
// and error will be returned.
|
||||||
func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) {
|
func requestCred(client *ec2metadata.EC2Metadata, credsName string) (ec2RoleCredRespBody, error) {
|
||||||
resp, err := client.GetMetadata(path.Join(iamSecurityCredsPath, credsName))
|
resp, err := client.GetMetadata(sdkuri.PathJoin(iamSecurityCredsPath, credsName))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ec2RoleCredRespBody{},
|
return ec2RoleCredRespBody{},
|
||||||
awserr.New("EC2RoleRequestError",
|
awserr.New("EC2RoleRequestError",
|
||||||
|
7
vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
generated
vendored
7
vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/provider.go
generated
vendored
@ -65,6 +65,10 @@ type Provider struct {
|
|||||||
//
|
//
|
||||||
// If ExpiryWindow is 0 or less it will be ignored.
|
// If ExpiryWindow is 0 or less it will be ignored.
|
||||||
ExpiryWindow time.Duration
|
ExpiryWindow time.Duration
|
||||||
|
|
||||||
|
// Optional authorization token value if set will be used as the value of
|
||||||
|
// the Authorization header of the endpoint credential request.
|
||||||
|
AuthorizationToken string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewProviderClient returns a credentials Provider for retrieving AWS credentials
|
// NewProviderClient returns a credentials Provider for retrieving AWS credentials
|
||||||
@ -152,6 +156,9 @@ func (p *Provider) getCredentials() (*getCredentialsOutput, error) {
|
|||||||
out := &getCredentialsOutput{}
|
out := &getCredentialsOutput{}
|
||||||
req := p.Client.NewRequest(op, nil, out)
|
req := p.Client.NewRequest(op, nil, out)
|
||||||
req.HTTPRequest.Header.Set("Accept", "application/json")
|
req.HTTPRequest.Header.Set("Accept", "application/json")
|
||||||
|
if authToken := p.AuthorizationToken; len(authToken) != 0 {
|
||||||
|
req.HTTPRequest.Header.Set("Authorization", authToken)
|
||||||
|
}
|
||||||
|
|
||||||
return out, req.Send()
|
return out, req.Send()
|
||||||
}
|
}
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/aws/credentials/env_provider.go
generated
vendored
@ -12,14 +12,10 @@ const EnvProviderName = "EnvProvider"
|
|||||||
var (
|
var (
|
||||||
// ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be
|
// ErrAccessKeyIDNotFound is returned when the AWS Access Key ID can't be
|
||||||
// found in the process's environment.
|
// found in the process's environment.
|
||||||
//
|
|
||||||
// @readonly
|
|
||||||
ErrAccessKeyIDNotFound = awserr.New("EnvAccessKeyNotFound", "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment", nil)
|
ErrAccessKeyIDNotFound = awserr.New("EnvAccessKeyNotFound", "AWS_ACCESS_KEY_ID or AWS_ACCESS_KEY not found in environment", nil)
|
||||||
|
|
||||||
// ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key
|
// ErrSecretAccessKeyNotFound is returned when the AWS Secret Access Key
|
||||||
// can't be found in the process's environment.
|
// can't be found in the process's environment.
|
||||||
//
|
|
||||||
// @readonly
|
|
||||||
ErrSecretAccessKeyNotFound = awserr.New("EnvSecretNotFound", "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment", nil)
|
ErrSecretAccessKeyNotFound = awserr.New("EnvSecretNotFound", "AWS_SECRET_ACCESS_KEY or AWS_SECRET_KEY not found in environment", nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
425
vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go
generated
vendored
Normal file
425
vendor/github.com/aws/aws-sdk-go/aws/credentials/processcreds/provider.go
generated
vendored
Normal file
@ -0,0 +1,425 @@
|
|||||||
|
/*
|
||||||
|
Package processcreds is a credential Provider to retrieve `credential_process`
|
||||||
|
credentials.
|
||||||
|
|
||||||
|
WARNING: The following describes a method of sourcing credentials from an external
|
||||||
|
process. This can potentially be dangerous, so proceed with caution. Other
|
||||||
|
credential providers should be preferred if at all possible. If using this
|
||||||
|
option, you should make sure that the config file is as locked down as possible
|
||||||
|
using security best practices for your operating system.
|
||||||
|
|
||||||
|
You can use credentials from a `credential_process` in a variety of ways.
|
||||||
|
|
||||||
|
One way is to setup your shared config file, located in the default
|
||||||
|
location, with the `credential_process` key and the command you want to be
|
||||||
|
called. You also need to set the AWS_SDK_LOAD_CONFIG environment variable
|
||||||
|
(e.g., `export AWS_SDK_LOAD_CONFIG=1`) to use the shared config file.
|
||||||
|
|
||||||
|
[default]
|
||||||
|
credential_process = /command/to/call
|
||||||
|
|
||||||
|
Creating a new session will use the credential process to retrieve credentials.
|
||||||
|
NOTE: If there are credentials in the profile you are using, the credential
|
||||||
|
process will not be used.
|
||||||
|
|
||||||
|
// Initialize a session to load credentials.
|
||||||
|
sess, _ := session.NewSession(&aws.Config{
|
||||||
|
Region: aws.String("us-east-1")},
|
||||||
|
)
|
||||||
|
|
||||||
|
// Create S3 service client to use the credentials.
|
||||||
|
svc := s3.New(sess)
|
||||||
|
|
||||||
|
Another way to use the `credential_process` method is by using
|
||||||
|
`credentials.NewCredentials()` and providing a command to be executed to
|
||||||
|
retrieve credentials:
|
||||||
|
|
||||||
|
// Create credentials using the ProcessProvider.
|
||||||
|
creds := processcreds.NewCredentials("/path/to/command")
|
||||||
|
|
||||||
|
// Create service client value configured for credentials.
|
||||||
|
svc := s3.New(sess, &aws.Config{Credentials: creds})
|
||||||
|
|
||||||
|
You can set a non-default timeout for the `credential_process` with another
|
||||||
|
constructor, `credentials.NewCredentialsTimeout()`, providing the timeout. To
|
||||||
|
set a one minute timeout:
|
||||||
|
|
||||||
|
// Create credentials using the ProcessProvider.
|
||||||
|
creds := processcreds.NewCredentialsTimeout(
|
||||||
|
"/path/to/command",
|
||||||
|
time.Duration(500) * time.Millisecond)
|
||||||
|
|
||||||
|
If you need more control, you can set any configurable options in the
|
||||||
|
credentials using one or more option functions. For example, you can set a two
|
||||||
|
minute timeout, a credential duration of 60 minutes, and a maximum stdout
|
||||||
|
buffer size of 2k.
|
||||||
|
|
||||||
|
creds := processcreds.NewCredentials(
|
||||||
|
"/path/to/command",
|
||||||
|
func(opt *ProcessProvider) {
|
||||||
|
opt.Timeout = time.Duration(2) * time.Minute
|
||||||
|
opt.Duration = time.Duration(60) * time.Minute
|
||||||
|
opt.MaxBufSize = 2048
|
||||||
|
})
|
||||||
|
|
||||||
|
You can also use your own `exec.Cmd`:
|
||||||
|
|
||||||
|
// Create an exec.Cmd
|
||||||
|
myCommand := exec.Command("/path/to/command")
|
||||||
|
|
||||||
|
// Create credentials using your exec.Cmd and custom timeout
|
||||||
|
creds := processcreds.NewCredentialsCommand(
|
||||||
|
myCommand,
|
||||||
|
func(opt *processcreds.ProcessProvider) {
|
||||||
|
opt.Timeout = time.Duration(1) * time.Second
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
package processcreds
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ProviderName is the name this credentials provider will label any
|
||||||
|
// returned credentials Value with.
|
||||||
|
ProviderName = `ProcessProvider`
|
||||||
|
|
||||||
|
// ErrCodeProcessProviderParse error parsing process output
|
||||||
|
ErrCodeProcessProviderParse = "ProcessProviderParseError"
|
||||||
|
|
||||||
|
// ErrCodeProcessProviderVersion version error in output
|
||||||
|
ErrCodeProcessProviderVersion = "ProcessProviderVersionError"
|
||||||
|
|
||||||
|
// ErrCodeProcessProviderRequired required attribute missing in output
|
||||||
|
ErrCodeProcessProviderRequired = "ProcessProviderRequiredError"
|
||||||
|
|
||||||
|
// ErrCodeProcessProviderExecution execution of command failed
|
||||||
|
ErrCodeProcessProviderExecution = "ProcessProviderExecutionError"
|
||||||
|
|
||||||
|
// errMsgProcessProviderTimeout process took longer than allowed
|
||||||
|
errMsgProcessProviderTimeout = "credential process timed out"
|
||||||
|
|
||||||
|
// errMsgProcessProviderProcess process error
|
||||||
|
errMsgProcessProviderProcess = "error in credential_process"
|
||||||
|
|
||||||
|
// errMsgProcessProviderParse problem parsing output
|
||||||
|
errMsgProcessProviderParse = "parse failed of credential_process output"
|
||||||
|
|
||||||
|
// errMsgProcessProviderVersion version error in output
|
||||||
|
errMsgProcessProviderVersion = "wrong version in process output (not 1)"
|
||||||
|
|
||||||
|
// errMsgProcessProviderMissKey missing access key id in output
|
||||||
|
errMsgProcessProviderMissKey = "missing AccessKeyId in process output"
|
||||||
|
|
||||||
|
// errMsgProcessProviderMissSecret missing secret acess key in output
|
||||||
|
errMsgProcessProviderMissSecret = "missing SecretAccessKey in process output"
|
||||||
|
|
||||||
|
// errMsgProcessProviderPrepareCmd prepare of command failed
|
||||||
|
errMsgProcessProviderPrepareCmd = "failed to prepare command"
|
||||||
|
|
||||||
|
// errMsgProcessProviderEmptyCmd command must not be empty
|
||||||
|
errMsgProcessProviderEmptyCmd = "command must not be empty"
|
||||||
|
|
||||||
|
// errMsgProcessProviderPipe failed to initialize pipe
|
||||||
|
errMsgProcessProviderPipe = "failed to initialize pipe"
|
||||||
|
|
||||||
|
// DefaultDuration is the default amount of time in minutes that the
|
||||||
|
// credentials will be valid for.
|
||||||
|
DefaultDuration = time.Duration(15) * time.Minute
|
||||||
|
|
||||||
|
// DefaultBufSize limits buffer size from growing to an enormous
|
||||||
|
// amount due to a faulty process.
|
||||||
|
DefaultBufSize = 1024
|
||||||
|
|
||||||
|
// DefaultTimeout default limit on time a process can run.
|
||||||
|
DefaultTimeout = time.Duration(1) * time.Minute
|
||||||
|
)
|
||||||
|
|
||||||
|
// ProcessProvider satisfies the credentials.Provider interface, and is a
|
||||||
|
// client to retrieve credentials from a process.
|
||||||
|
type ProcessProvider struct {
|
||||||
|
staticCreds bool
|
||||||
|
credentials.Expiry
|
||||||
|
originalCommand []string
|
||||||
|
|
||||||
|
// Expiry duration of the credentials. Defaults to 15 minutes if not set.
|
||||||
|
Duration time.Duration
|
||||||
|
|
||||||
|
// ExpiryWindow will allow the credentials to trigger refreshing prior to
|
||||||
|
// the credentials actually expiring. This is beneficial so race conditions
|
||||||
|
// with expiring credentials do not cause request to fail unexpectedly
|
||||||
|
// due to ExpiredTokenException exceptions.
|
||||||
|
//
|
||||||
|
// So a ExpiryWindow of 10s would cause calls to IsExpired() to return true
|
||||||
|
// 10 seconds before the credentials are actually expired.
|
||||||
|
//
|
||||||
|
// If ExpiryWindow is 0 or less it will be ignored.
|
||||||
|
ExpiryWindow time.Duration
|
||||||
|
|
||||||
|
// A string representing an os command that should return a JSON with
|
||||||
|
// credential information.
|
||||||
|
command *exec.Cmd
|
||||||
|
|
||||||
|
// MaxBufSize limits memory usage from growing to an enormous
|
||||||
|
// amount due to a faulty process.
|
||||||
|
MaxBufSize int
|
||||||
|
|
||||||
|
// Timeout limits the time a process can run.
|
||||||
|
Timeout time.Duration
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCredentials returns a pointer to a new Credentials object wrapping the
|
||||||
|
// ProcessProvider. The credentials will expire every 15 minutes by default.
|
||||||
|
func NewCredentials(command string, options ...func(*ProcessProvider)) *credentials.Credentials {
|
||||||
|
p := &ProcessProvider{
|
||||||
|
command: exec.Command(command),
|
||||||
|
Duration: DefaultDuration,
|
||||||
|
Timeout: DefaultTimeout,
|
||||||
|
MaxBufSize: DefaultBufSize,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, option := range options {
|
||||||
|
option(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
return credentials.NewCredentials(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCredentialsTimeout returns a pointer to a new Credentials object with
|
||||||
|
// the specified command and timeout, and default duration and max buffer size.
|
||||||
|
func NewCredentialsTimeout(command string, timeout time.Duration) *credentials.Credentials {
|
||||||
|
p := NewCredentials(command, func(opt *ProcessProvider) {
|
||||||
|
opt.Timeout = timeout
|
||||||
|
})
|
||||||
|
|
||||||
|
return p
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCredentialsCommand returns a pointer to a new Credentials object with
|
||||||
|
// the specified command, and default timeout, duration and max buffer size.
|
||||||
|
func NewCredentialsCommand(command *exec.Cmd, options ...func(*ProcessProvider)) *credentials.Credentials {
|
||||||
|
p := &ProcessProvider{
|
||||||
|
command: command,
|
||||||
|
Duration: DefaultDuration,
|
||||||
|
Timeout: DefaultTimeout,
|
||||||
|
MaxBufSize: DefaultBufSize,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, option := range options {
|
||||||
|
option(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
return credentials.NewCredentials(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
type credentialProcessResponse struct {
|
||||||
|
Version int
|
||||||
|
AccessKeyID string `json:"AccessKeyId"`
|
||||||
|
SecretAccessKey string
|
||||||
|
SessionToken string
|
||||||
|
Expiration *time.Time
|
||||||
|
}
|
||||||
|
|
||||||
|
// Retrieve executes the 'credential_process' and returns the credentials.
|
||||||
|
func (p *ProcessProvider) Retrieve() (credentials.Value, error) {
|
||||||
|
out, err := p.executeCredentialProcess()
|
||||||
|
if err != nil {
|
||||||
|
return credentials.Value{ProviderName: ProviderName}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialize and validate response
|
||||||
|
resp := &credentialProcessResponse{}
|
||||||
|
if err = json.Unmarshal(out, resp); err != nil {
|
||||||
|
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||||
|
ErrCodeProcessProviderParse,
|
||||||
|
fmt.Sprintf("%s: %s", errMsgProcessProviderParse, string(out)),
|
||||||
|
err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.Version != 1 {
|
||||||
|
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||||
|
ErrCodeProcessProviderVersion,
|
||||||
|
errMsgProcessProviderVersion,
|
||||||
|
nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(resp.AccessKeyID) == 0 {
|
||||||
|
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||||
|
ErrCodeProcessProviderRequired,
|
||||||
|
errMsgProcessProviderMissKey,
|
||||||
|
nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(resp.SecretAccessKey) == 0 {
|
||||||
|
return credentials.Value{ProviderName: ProviderName}, awserr.New(
|
||||||
|
ErrCodeProcessProviderRequired,
|
||||||
|
errMsgProcessProviderMissSecret,
|
||||||
|
nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle expiration
|
||||||
|
p.staticCreds = resp.Expiration == nil
|
||||||
|
if resp.Expiration != nil {
|
||||||
|
p.SetExpiration(*resp.Expiration, p.ExpiryWindow)
|
||||||
|
}
|
||||||
|
|
||||||
|
return credentials.Value{
|
||||||
|
ProviderName: ProviderName,
|
||||||
|
AccessKeyID: resp.AccessKeyID,
|
||||||
|
SecretAccessKey: resp.SecretAccessKey,
|
||||||
|
SessionToken: resp.SessionToken,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsExpired returns true if the credentials retrieved are expired, or not yet
|
||||||
|
// retrieved.
|
||||||
|
func (p *ProcessProvider) IsExpired() bool {
|
||||||
|
if p.staticCreds {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return p.Expiry.IsExpired()
|
||||||
|
}
|
||||||
|
|
||||||
|
// prepareCommand prepares the command to be executed.
|
||||||
|
func (p *ProcessProvider) prepareCommand() error {
|
||||||
|
|
||||||
|
var cmdArgs []string
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
cmdArgs = []string{"cmd.exe", "/C"}
|
||||||
|
} else {
|
||||||
|
cmdArgs = []string{"sh", "-c"}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(p.originalCommand) == 0 {
|
||||||
|
p.originalCommand = make([]string, len(p.command.Args))
|
||||||
|
copy(p.originalCommand, p.command.Args)
|
||||||
|
|
||||||
|
// check for empty command because it succeeds
|
||||||
|
if len(strings.TrimSpace(p.originalCommand[0])) < 1 {
|
||||||
|
return awserr.New(
|
||||||
|
ErrCodeProcessProviderExecution,
|
||||||
|
fmt.Sprintf(
|
||||||
|
"%s: %s",
|
||||||
|
errMsgProcessProviderPrepareCmd,
|
||||||
|
errMsgProcessProviderEmptyCmd),
|
||||||
|
nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cmdArgs = append(cmdArgs, p.originalCommand...)
|
||||||
|
p.command = exec.Command(cmdArgs[0], cmdArgs[1:]...)
|
||||||
|
p.command.Env = os.Environ()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// executeCredentialProcess starts the credential process on the OS and
|
||||||
|
// returns the results or an error.
|
||||||
|
func (p *ProcessProvider) executeCredentialProcess() ([]byte, error) {
|
||||||
|
|
||||||
|
if err := p.prepareCommand(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup the pipes
|
||||||
|
outReadPipe, outWritePipe, err := os.Pipe()
|
||||||
|
if err != nil {
|
||||||
|
return nil, awserr.New(
|
||||||
|
ErrCodeProcessProviderExecution,
|
||||||
|
errMsgProcessProviderPipe,
|
||||||
|
err)
|
||||||
|
}
|
||||||
|
|
||||||
|
p.command.Stderr = os.Stderr // display stderr on console for MFA
|
||||||
|
p.command.Stdout = outWritePipe // get creds json on process's stdout
|
||||||
|
p.command.Stdin = os.Stdin // enable stdin for MFA
|
||||||
|
|
||||||
|
output := bytes.NewBuffer(make([]byte, 0, p.MaxBufSize))
|
||||||
|
|
||||||
|
stdoutCh := make(chan error, 1)
|
||||||
|
go readInput(
|
||||||
|
io.LimitReader(outReadPipe, int64(p.MaxBufSize)),
|
||||||
|
output,
|
||||||
|
stdoutCh)
|
||||||
|
|
||||||
|
execCh := make(chan error, 1)
|
||||||
|
go executeCommand(*p.command, execCh)
|
||||||
|
|
||||||
|
finished := false
|
||||||
|
var errors []error
|
||||||
|
for !finished {
|
||||||
|
select {
|
||||||
|
case readError := <-stdoutCh:
|
||||||
|
errors = appendError(errors, readError)
|
||||||
|
finished = true
|
||||||
|
case execError := <-execCh:
|
||||||
|
err := outWritePipe.Close()
|
||||||
|
errors = appendError(errors, err)
|
||||||
|
errors = appendError(errors, execError)
|
||||||
|
if errors != nil {
|
||||||
|
return output.Bytes(), awserr.NewBatchError(
|
||||||
|
ErrCodeProcessProviderExecution,
|
||||||
|
errMsgProcessProviderProcess,
|
||||||
|
errors)
|
||||||
|
}
|
||||||
|
case <-time.After(p.Timeout):
|
||||||
|
finished = true
|
||||||
|
return output.Bytes(), awserr.NewBatchError(
|
||||||
|
ErrCodeProcessProviderExecution,
|
||||||
|
errMsgProcessProviderTimeout,
|
||||||
|
errors) // errors can be nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
out := output.Bytes()
|
||||||
|
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
// windows adds slashes to quotes
|
||||||
|
out = []byte(strings.Replace(string(out), `\"`, `"`, -1))
|
||||||
|
}
|
||||||
|
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// appendError conveniently checks for nil before appending slice
|
||||||
|
func appendError(errors []error, err error) []error {
|
||||||
|
if err != nil {
|
||||||
|
return append(errors, err)
|
||||||
|
}
|
||||||
|
return errors
|
||||||
|
}
|
||||||
|
|
||||||
|
func executeCommand(cmd exec.Cmd, exec chan error) {
|
||||||
|
// Start the command
|
||||||
|
err := cmd.Start()
|
||||||
|
if err == nil {
|
||||||
|
err = cmd.Wait()
|
||||||
|
}
|
||||||
|
|
||||||
|
exec <- err
|
||||||
|
}
|
||||||
|
|
||||||
|
func readInput(r io.Reader, w io.Writer, read chan error) {
|
||||||
|
tee := io.TeeReader(r, w)
|
||||||
|
|
||||||
|
_, err := ioutil.ReadAll(tee)
|
||||||
|
|
||||||
|
if err == io.EOF {
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
read <- err // will only arrive here when write end of pipe is closed
|
||||||
|
}
|
30
vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
generated
vendored
30
vendor/github.com/aws/aws-sdk-go/aws/credentials/shared_credentials_provider.go
generated
vendored
@ -4,9 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/go-ini/ini"
|
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/ini"
|
||||||
"github.com/aws/aws-sdk-go/internal/shareddefaults"
|
"github.com/aws/aws-sdk-go/internal/shareddefaults"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -77,36 +76,37 @@ func (p *SharedCredentialsProvider) IsExpired() bool {
|
|||||||
// The credentials retrieved from the profile will be returned or error. Error will be
|
// The credentials retrieved from the profile will be returned or error. Error will be
|
||||||
// returned if it fails to read from the file, or the data is invalid.
|
// returned if it fails to read from the file, or the data is invalid.
|
||||||
func loadProfile(filename, profile string) (Value, error) {
|
func loadProfile(filename, profile string) (Value, error) {
|
||||||
config, err := ini.Load(filename)
|
config, err := ini.OpenFile(filename)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err)
|
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to load shared credentials file", err)
|
||||||
}
|
}
|
||||||
iniProfile, err := config.GetSection(profile)
|
|
||||||
if err != nil {
|
iniProfile, ok := config.GetSection(profile)
|
||||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", err)
|
if !ok {
|
||||||
|
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsLoad", "failed to get profile", nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
id, err := iniProfile.GetKey("aws_access_key_id")
|
id := iniProfile.String("aws_access_key_id")
|
||||||
if err != nil {
|
if len(id) == 0 {
|
||||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsAccessKey",
|
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsAccessKey",
|
||||||
fmt.Sprintf("shared credentials %s in %s did not contain aws_access_key_id", profile, filename),
|
fmt.Sprintf("shared credentials %s in %s did not contain aws_access_key_id", profile, filename),
|
||||||
err)
|
nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
secret, err := iniProfile.GetKey("aws_secret_access_key")
|
secret := iniProfile.String("aws_secret_access_key")
|
||||||
if err != nil {
|
if len(secret) == 0 {
|
||||||
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsSecret",
|
return Value{ProviderName: SharedCredsProviderName}, awserr.New("SharedCredsSecret",
|
||||||
fmt.Sprintf("shared credentials %s in %s did not contain aws_secret_access_key", profile, filename),
|
fmt.Sprintf("shared credentials %s in %s did not contain aws_secret_access_key", profile, filename),
|
||||||
nil)
|
nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default to empty string if not found
|
// Default to empty string if not found
|
||||||
token := iniProfile.Key("aws_session_token")
|
token := iniProfile.String("aws_session_token")
|
||||||
|
|
||||||
return Value{
|
return Value{
|
||||||
AccessKeyID: id.String(),
|
AccessKeyID: id,
|
||||||
SecretAccessKey: secret.String(),
|
SecretAccessKey: secret,
|
||||||
SessionToken: token.String(),
|
SessionToken: token,
|
||||||
ProviderName: SharedCredsProviderName,
|
ProviderName: SharedCredsProviderName,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/credentials/static_provider.go
generated
vendored
@ -9,8 +9,6 @@ const StaticProviderName = "StaticProvider"
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
// ErrStaticCredentialsEmpty is emitted when static credentials are empty.
|
// ErrStaticCredentialsEmpty is emitted when static credentials are empty.
|
||||||
//
|
|
||||||
// @readonly
|
|
||||||
ErrStaticCredentialsEmpty = awserr.New("EmptyStaticCreds", "static credentials are empty", nil)
|
ErrStaticCredentialsEmpty = awserr.New("EmptyStaticCreds", "static credentials are empty", nil)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
58
vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go
generated
vendored
58
vendor/github.com/aws/aws-sdk-go/aws/csm/metric.go
generated
vendored
@ -3,6 +3,8 @@ package csm
|
|||||||
import (
|
import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
)
|
)
|
||||||
|
|
||||||
type metricTime time.Time
|
type metricTime time.Time
|
||||||
@ -39,6 +41,12 @@ type metric struct {
|
|||||||
SDKException *string `json:"SdkException,omitempty"`
|
SDKException *string `json:"SdkException,omitempty"`
|
||||||
SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"`
|
SDKExceptionMessage *string `json:"SdkExceptionMessage,omitempty"`
|
||||||
|
|
||||||
|
FinalHTTPStatusCode *int `json:"FinalHttpStatusCode,omitempty"`
|
||||||
|
FinalAWSException *string `json:"FinalAwsException,omitempty"`
|
||||||
|
FinalAWSExceptionMessage *string `json:"FinalAwsExceptionMessage,omitempty"`
|
||||||
|
FinalSDKException *string `json:"FinalSdkException,omitempty"`
|
||||||
|
FinalSDKExceptionMessage *string `json:"FinalSdkExceptionMessage,omitempty"`
|
||||||
|
|
||||||
DestinationIP *string `json:"DestinationIp,omitempty"`
|
DestinationIP *string `json:"DestinationIp,omitempty"`
|
||||||
ConnectionReused *int `json:"ConnectionReused,omitempty"`
|
ConnectionReused *int `json:"ConnectionReused,omitempty"`
|
||||||
|
|
||||||
@ -48,4 +56,54 @@ type metric struct {
|
|||||||
DNSLatency *int `json:"DnsLatency,omitempty"`
|
DNSLatency *int `json:"DnsLatency,omitempty"`
|
||||||
TCPLatency *int `json:"TcpLatency,omitempty"`
|
TCPLatency *int `json:"TcpLatency,omitempty"`
|
||||||
SSLLatency *int `json:"SslLatency,omitempty"`
|
SSLLatency *int `json:"SslLatency,omitempty"`
|
||||||
|
|
||||||
|
MaxRetriesExceeded *int `json:"MaxRetriesExceeded,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *metric) TruncateFields() {
|
||||||
|
m.ClientID = truncateString(m.ClientID, 255)
|
||||||
|
m.UserAgent = truncateString(m.UserAgent, 256)
|
||||||
|
|
||||||
|
m.AWSException = truncateString(m.AWSException, 128)
|
||||||
|
m.AWSExceptionMessage = truncateString(m.AWSExceptionMessage, 512)
|
||||||
|
|
||||||
|
m.SDKException = truncateString(m.SDKException, 128)
|
||||||
|
m.SDKExceptionMessage = truncateString(m.SDKExceptionMessage, 512)
|
||||||
|
|
||||||
|
m.FinalAWSException = truncateString(m.FinalAWSException, 128)
|
||||||
|
m.FinalAWSExceptionMessage = truncateString(m.FinalAWSExceptionMessage, 512)
|
||||||
|
|
||||||
|
m.FinalSDKException = truncateString(m.FinalSDKException, 128)
|
||||||
|
m.FinalSDKExceptionMessage = truncateString(m.FinalSDKExceptionMessage, 512)
|
||||||
|
}
|
||||||
|
|
||||||
|
func truncateString(v *string, l int) *string {
|
||||||
|
if v != nil && len(*v) > l {
|
||||||
|
nv := (*v)[:l]
|
||||||
|
return &nv
|
||||||
|
}
|
||||||
|
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *metric) SetException(e metricException) {
|
||||||
|
switch te := e.(type) {
|
||||||
|
case awsException:
|
||||||
|
m.AWSException = aws.String(te.exception)
|
||||||
|
m.AWSExceptionMessage = aws.String(te.message)
|
||||||
|
case sdkException:
|
||||||
|
m.SDKException = aws.String(te.exception)
|
||||||
|
m.SDKExceptionMessage = aws.String(te.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *metric) SetFinalException(e metricException) {
|
||||||
|
switch te := e.(type) {
|
||||||
|
case awsException:
|
||||||
|
m.FinalAWSException = aws.String(te.exception)
|
||||||
|
m.FinalAWSExceptionMessage = aws.String(te.message)
|
||||||
|
case sdkException:
|
||||||
|
m.FinalSDKException = aws.String(te.exception)
|
||||||
|
m.FinalSDKExceptionMessage = aws.String(te.message)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
26
vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go
generated
vendored
Normal file
26
vendor/github.com/aws/aws-sdk-go/aws/csm/metric_exception.go
generated
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package csm
|
||||||
|
|
||||||
|
type metricException interface {
|
||||||
|
Exception() string
|
||||||
|
Message() string
|
||||||
|
}
|
||||||
|
|
||||||
|
type requestException struct {
|
||||||
|
exception string
|
||||||
|
message string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e requestException) Exception() string {
|
||||||
|
return e.exception
|
||||||
|
}
|
||||||
|
func (e requestException) Message() string {
|
||||||
|
return e.message
|
||||||
|
}
|
||||||
|
|
||||||
|
type awsException struct {
|
||||||
|
requestException
|
||||||
|
}
|
||||||
|
|
||||||
|
type sdkException struct {
|
||||||
|
requestException
|
||||||
|
}
|
70
vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
generated
vendored
70
vendor/github.com/aws/aws-sdk-go/aws/csm/reporter.go
generated
vendored
@ -82,27 +82,29 @@ func (rep *Reporter) sendAPICallAttemptMetric(r *request.Request) {
|
|||||||
|
|
||||||
if r.Error != nil {
|
if r.Error != nil {
|
||||||
if awserr, ok := r.Error.(awserr.Error); ok {
|
if awserr, ok := r.Error.(awserr.Error); ok {
|
||||||
setError(&m, awserr)
|
m.SetException(getMetricException(awserr))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.TruncateFields()
|
||||||
rep.metricsCh.Push(m)
|
rep.metricsCh.Push(m)
|
||||||
}
|
}
|
||||||
|
|
||||||
func setError(m *metric, err awserr.Error) {
|
func getMetricException(err awserr.Error) metricException {
|
||||||
msg := err.Message()
|
msg := err.Error()
|
||||||
code := err.Code()
|
code := err.Code()
|
||||||
|
|
||||||
switch code {
|
switch code {
|
||||||
case "RequestError",
|
case "RequestError",
|
||||||
"SerializationError",
|
"SerializationError",
|
||||||
request.CanceledErrorCode:
|
request.CanceledErrorCode:
|
||||||
|
return sdkException{
|
||||||
m.SDKException = &code
|
requestException{exception: code, message: msg},
|
||||||
m.SDKExceptionMessage = &msg
|
}
|
||||||
default:
|
default:
|
||||||
m.AWSException = &code
|
return awsException{
|
||||||
m.AWSExceptionMessage = &msg
|
requestException{exception: code, message: msg},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,16 +115,31 @@ func (rep *Reporter) sendAPICallMetric(r *request.Request) {
|
|||||||
|
|
||||||
now := time.Now()
|
now := time.Now()
|
||||||
m := metric{
|
m := metric{
|
||||||
ClientID: aws.String(rep.clientID),
|
ClientID: aws.String(rep.clientID),
|
||||||
API: aws.String(r.Operation.Name),
|
API: aws.String(r.Operation.Name),
|
||||||
Service: aws.String(r.ClientInfo.ServiceID),
|
Service: aws.String(r.ClientInfo.ServiceID),
|
||||||
Timestamp: (*metricTime)(&now),
|
Timestamp: (*metricTime)(&now),
|
||||||
Type: aws.String("ApiCall"),
|
UserAgent: aws.String(r.HTTPRequest.Header.Get("User-Agent")),
|
||||||
AttemptCount: aws.Int(r.RetryCount + 1),
|
Type: aws.String("ApiCall"),
|
||||||
Latency: aws.Int(int(time.Now().Sub(r.Time) / time.Millisecond)),
|
AttemptCount: aws.Int(r.RetryCount + 1),
|
||||||
XAmzRequestID: aws.String(r.RequestID),
|
Region: r.Config.Region,
|
||||||
|
Latency: aws.Int(int(time.Now().Sub(r.Time) / time.Millisecond)),
|
||||||
|
XAmzRequestID: aws.String(r.RequestID),
|
||||||
|
MaxRetriesExceeded: aws.Int(boolIntValue(r.RetryCount >= r.MaxRetries())),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.HTTPResponse != nil {
|
||||||
|
m.FinalHTTPStatusCode = aws.Int(r.HTTPResponse.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.Error != nil {
|
||||||
|
if awserr, ok := r.Error.(awserr.Error); ok {
|
||||||
|
m.SetFinalException(getMetricException(awserr))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m.TruncateFields()
|
||||||
|
|
||||||
// TODO: Probably want to figure something out for logging dropped
|
// TODO: Probably want to figure something out for logging dropped
|
||||||
// metrics
|
// metrics
|
||||||
rep.metricsCh.Push(m)
|
rep.metricsCh.Push(m)
|
||||||
@ -222,9 +239,22 @@ func (rep *Reporter) InjectHandlers(handlers *request.Handlers) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
apiCallHandler := request.NamedHandler{Name: APICallMetricHandlerName, Fn: rep.sendAPICallMetric}
|
handlers.Complete.PushFrontNamed(request.NamedHandler{
|
||||||
handlers.Complete.PushFrontNamed(apiCallHandler)
|
Name: APICallMetricHandlerName,
|
||||||
|
Fn: rep.sendAPICallMetric,
|
||||||
|
})
|
||||||
|
|
||||||
apiCallAttemptHandler := request.NamedHandler{Name: APICallAttemptMetricHandlerName, Fn: rep.sendAPICallAttemptMetric}
|
handlers.CompleteAttempt.PushFrontNamed(request.NamedHandler{
|
||||||
handlers.AfterRetry.PushFrontNamed(apiCallAttemptHandler)
|
Name: APICallAttemptMetricHandlerName,
|
||||||
|
Fn: rep.sendAPICallAttemptMetric,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// boolIntValue return 1 for true and 0 for false.
|
||||||
|
func boolIntValue(b bool) int {
|
||||||
|
if b {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
31
vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
generated
vendored
31
vendor/github.com/aws/aws-sdk-go/aws/defaults/defaults.go
generated
vendored
@ -24,6 +24,7 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
||||||
"github.com/aws/aws-sdk-go/aws/endpoints"
|
"github.com/aws/aws-sdk-go/aws/endpoints"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/shareddefaults"
|
||||||
)
|
)
|
||||||
|
|
||||||
// A Defaults provides a collection of default values for SDK clients.
|
// A Defaults provides a collection of default values for SDK clients.
|
||||||
@ -92,17 +93,28 @@ func Handlers() request.Handlers {
|
|||||||
func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials {
|
func CredChain(cfg *aws.Config, handlers request.Handlers) *credentials.Credentials {
|
||||||
return credentials.NewCredentials(&credentials.ChainProvider{
|
return credentials.NewCredentials(&credentials.ChainProvider{
|
||||||
VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),
|
VerboseErrors: aws.BoolValue(cfg.CredentialsChainVerboseErrors),
|
||||||
Providers: []credentials.Provider{
|
Providers: CredProviders(cfg, handlers),
|
||||||
&credentials.EnvProvider{},
|
|
||||||
&credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
|
|
||||||
RemoteCredProvider(*cfg, handlers),
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CredProviders returns the slice of providers used in
|
||||||
|
// the default credential chain.
|
||||||
|
//
|
||||||
|
// For applications that need to use some other provider (for example use
|
||||||
|
// different environment variables for legacy reasons) but still fall back
|
||||||
|
// on the default chain of providers. This allows that default chaint to be
|
||||||
|
// automatically updated
|
||||||
|
func CredProviders(cfg *aws.Config, handlers request.Handlers) []credentials.Provider {
|
||||||
|
return []credentials.Provider{
|
||||||
|
&credentials.EnvProvider{},
|
||||||
|
&credentials.SharedCredentialsProvider{Filename: "", Profile: ""},
|
||||||
|
RemoteCredProvider(*cfg, handlers),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
httpProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_FULL_URI"
|
httpProviderAuthorizationEnvVar = "AWS_CONTAINER_AUTHORIZATION_TOKEN"
|
||||||
ecsCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
|
httpProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_FULL_URI"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RemoteCredProvider returns a credentials provider for the default remote
|
// RemoteCredProvider returns a credentials provider for the default remote
|
||||||
@ -112,8 +124,8 @@ func RemoteCredProvider(cfg aws.Config, handlers request.Handlers) credentials.P
|
|||||||
return localHTTPCredProvider(cfg, handlers, u)
|
return localHTTPCredProvider(cfg, handlers, u)
|
||||||
}
|
}
|
||||||
|
|
||||||
if uri := os.Getenv(ecsCredsProviderEnvVar); len(uri) > 0 {
|
if uri := os.Getenv(shareddefaults.ECSCredsProviderEnvVar); len(uri) > 0 {
|
||||||
u := fmt.Sprintf("http://169.254.170.2%s", uri)
|
u := fmt.Sprintf("%s%s", shareddefaults.ECSContainerCredentialsURI, uri)
|
||||||
return httpCredProvider(cfg, handlers, u)
|
return httpCredProvider(cfg, handlers, u)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,6 +188,7 @@ func httpCredProvider(cfg aws.Config, handlers request.Handlers, u string) crede
|
|||||||
return endpointcreds.NewProviderClient(cfg, handlers, u,
|
return endpointcreds.NewProviderClient(cfg, handlers, u,
|
||||||
func(p *endpointcreds.Provider) {
|
func(p *endpointcreds.Provider) {
|
||||||
p.ExpiryWindow = 5 * time.Minute
|
p.ExpiryWindow = 5 * time.Minute
|
||||||
|
p.AuthorizationToken = os.Getenv(httpProviderAuthorizationEnvVar)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
12
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
generated
vendored
12
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/api.go
generated
vendored
@ -4,12 +4,12 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"path"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/sdkuri"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetMetadata uses the path provided to request information from the EC2
|
// GetMetadata uses the path provided to request information from the EC2
|
||||||
@ -19,7 +19,7 @@ func (c *EC2Metadata) GetMetadata(p string) (string, error) {
|
|||||||
op := &request.Operation{
|
op := &request.Operation{
|
||||||
Name: "GetMetadata",
|
Name: "GetMetadata",
|
||||||
HTTPMethod: "GET",
|
HTTPMethod: "GET",
|
||||||
HTTPPath: path.Join("/", "meta-data", p),
|
HTTPPath: sdkuri.PathJoin("/meta-data", p),
|
||||||
}
|
}
|
||||||
|
|
||||||
output := &metadataOutput{}
|
output := &metadataOutput{}
|
||||||
@ -35,7 +35,7 @@ func (c *EC2Metadata) GetUserData() (string, error) {
|
|||||||
op := &request.Operation{
|
op := &request.Operation{
|
||||||
Name: "GetUserData",
|
Name: "GetUserData",
|
||||||
HTTPMethod: "GET",
|
HTTPMethod: "GET",
|
||||||
HTTPPath: path.Join("/", "user-data"),
|
HTTPPath: "/user-data",
|
||||||
}
|
}
|
||||||
|
|
||||||
output := &metadataOutput{}
|
output := &metadataOutput{}
|
||||||
@ -56,7 +56,7 @@ func (c *EC2Metadata) GetDynamicData(p string) (string, error) {
|
|||||||
op := &request.Operation{
|
op := &request.Operation{
|
||||||
Name: "GetDynamicData",
|
Name: "GetDynamicData",
|
||||||
HTTPMethod: "GET",
|
HTTPMethod: "GET",
|
||||||
HTTPPath: path.Join("/", "dynamic", p),
|
HTTPPath: sdkuri.PathJoin("/dynamic", p),
|
||||||
}
|
}
|
||||||
|
|
||||||
output := &metadataOutput{}
|
output := &metadataOutput{}
|
||||||
@ -118,6 +118,10 @@ func (c *EC2Metadata) Region() (string, error) {
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(resp) == 0 {
|
||||||
|
return "", awserr.New("EC2MetadataError", "invalid Region response", nil)
|
||||||
|
}
|
||||||
|
|
||||||
// returns region without the suffix. Eg: us-west-2a becomes us-west-2
|
// returns region without the suffix. Eg: us-west-2a becomes us-west-2
|
||||||
return resp[:len(resp)-1], nil
|
return resp[:len(resp)-1], nil
|
||||||
}
|
}
|
||||||
|
3
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
generated
vendored
3
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/service.go
generated
vendored
@ -4,7 +4,7 @@
|
|||||||
// This package's client can be disabled completely by setting the environment
|
// This package's client can be disabled completely by setting the environment
|
||||||
// variable "AWS_EC2_METADATA_DISABLED=true". This environment variable set to
|
// variable "AWS_EC2_METADATA_DISABLED=true". This environment variable set to
|
||||||
// true instructs the SDK to disable the EC2 Metadata client. The client cannot
|
// true instructs the SDK to disable the EC2 Metadata client. The client cannot
|
||||||
// be used while the environemnt variable is set to true, (case insensitive).
|
// be used while the environment variable is set to true, (case insensitive).
|
||||||
package ec2metadata
|
package ec2metadata
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -72,6 +72,7 @@ func NewClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio
|
|||||||
cfg,
|
cfg,
|
||||||
metadata.ClientInfo{
|
metadata.ClientInfo{
|
||||||
ServiceName: ServiceName,
|
ServiceName: ServiceName,
|
||||||
|
ServiceID: ServiceName,
|
||||||
Endpoint: endpoint,
|
Endpoint: endpoint,
|
||||||
APIVersion: "latest",
|
APIVersion: "latest",
|
||||||
},
|
},
|
||||||
|
31
vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
generated
vendored
31
vendor/github.com/aws/aws-sdk-go/aws/endpoints/decode.go
generated
vendored
@ -84,6 +84,7 @@ func decodeV3Endpoints(modelDef modelDefinition, opts DecodeModelOptions) (Resol
|
|||||||
custAddEC2Metadata(p)
|
custAddEC2Metadata(p)
|
||||||
custAddS3DualStack(p)
|
custAddS3DualStack(p)
|
||||||
custRmIotDataService(p)
|
custRmIotDataService(p)
|
||||||
|
custFixAppAutoscalingChina(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
return ps, nil
|
return ps, nil
|
||||||
@ -94,7 +95,12 @@ func custAddS3DualStack(p *partition) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
s, ok := p.Services["s3"]
|
custAddDualstack(p, "s3")
|
||||||
|
custAddDualstack(p, "s3-control")
|
||||||
|
}
|
||||||
|
|
||||||
|
func custAddDualstack(p *partition, svcName string) {
|
||||||
|
s, ok := p.Services[svcName]
|
||||||
if !ok {
|
if !ok {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -102,7 +108,7 @@ func custAddS3DualStack(p *partition) {
|
|||||||
s.Defaults.HasDualStack = boxedTrue
|
s.Defaults.HasDualStack = boxedTrue
|
||||||
s.Defaults.DualStackHostname = "{service}.dualstack.{region}.{dnsSuffix}"
|
s.Defaults.DualStackHostname = "{service}.dualstack.{region}.{dnsSuffix}"
|
||||||
|
|
||||||
p.Services["s3"] = s
|
p.Services[svcName] = s
|
||||||
}
|
}
|
||||||
|
|
||||||
func custAddEC2Metadata(p *partition) {
|
func custAddEC2Metadata(p *partition) {
|
||||||
@ -122,6 +128,27 @@ func custRmIotDataService(p *partition) {
|
|||||||
delete(p.Services, "data.iot")
|
delete(p.Services, "data.iot")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func custFixAppAutoscalingChina(p *partition) {
|
||||||
|
if p.ID != "aws-cn" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const serviceName = "application-autoscaling"
|
||||||
|
s, ok := p.Services[serviceName]
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const expectHostname = `autoscaling.{region}.amazonaws.com`
|
||||||
|
if e, a := s.Defaults.Hostname, expectHostname; e != a {
|
||||||
|
fmt.Printf("custFixAppAutoscalingChina: ignoring customization, expected %s, got %s\n", e, a)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s.Defaults.Hostname = expectHostname + ".cn"
|
||||||
|
p.Services[serviceName] = s
|
||||||
|
}
|
||||||
|
|
||||||
type decodeModelError struct {
|
type decodeModelError struct {
|
||||||
awsError
|
awsError
|
||||||
}
|
}
|
||||||
|
993
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
generated
vendored
993
vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go
generated
vendored
File diff suppressed because it is too large
Load Diff
141
vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
generated
vendored
Normal file
141
vendor/github.com/aws/aws-sdk-go/aws/endpoints/dep_service_ids.go
generated
vendored
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
package endpoints
|
||||||
|
|
||||||
|
// Service identifiers
|
||||||
|
//
|
||||||
|
// Deprecated: Use client package's EndpointID value instead of these
|
||||||
|
// ServiceIDs. These IDs are not maintained, and are out of date.
|
||||||
|
const (
|
||||||
|
A4bServiceID = "a4b" // A4b.
|
||||||
|
AcmServiceID = "acm" // Acm.
|
||||||
|
AcmPcaServiceID = "acm-pca" // AcmPca.
|
||||||
|
ApiMediatailorServiceID = "api.mediatailor" // ApiMediatailor.
|
||||||
|
ApiPricingServiceID = "api.pricing" // ApiPricing.
|
||||||
|
ApiSagemakerServiceID = "api.sagemaker" // ApiSagemaker.
|
||||||
|
ApigatewayServiceID = "apigateway" // Apigateway.
|
||||||
|
ApplicationAutoscalingServiceID = "application-autoscaling" // ApplicationAutoscaling.
|
||||||
|
Appstream2ServiceID = "appstream2" // Appstream2.
|
||||||
|
AppsyncServiceID = "appsync" // Appsync.
|
||||||
|
AthenaServiceID = "athena" // Athena.
|
||||||
|
AutoscalingServiceID = "autoscaling" // Autoscaling.
|
||||||
|
AutoscalingPlansServiceID = "autoscaling-plans" // AutoscalingPlans.
|
||||||
|
BatchServiceID = "batch" // Batch.
|
||||||
|
BudgetsServiceID = "budgets" // Budgets.
|
||||||
|
CeServiceID = "ce" // Ce.
|
||||||
|
ChimeServiceID = "chime" // Chime.
|
||||||
|
Cloud9ServiceID = "cloud9" // Cloud9.
|
||||||
|
ClouddirectoryServiceID = "clouddirectory" // Clouddirectory.
|
||||||
|
CloudformationServiceID = "cloudformation" // Cloudformation.
|
||||||
|
CloudfrontServiceID = "cloudfront" // Cloudfront.
|
||||||
|
CloudhsmServiceID = "cloudhsm" // Cloudhsm.
|
||||||
|
Cloudhsmv2ServiceID = "cloudhsmv2" // Cloudhsmv2.
|
||||||
|
CloudsearchServiceID = "cloudsearch" // Cloudsearch.
|
||||||
|
CloudtrailServiceID = "cloudtrail" // Cloudtrail.
|
||||||
|
CodebuildServiceID = "codebuild" // Codebuild.
|
||||||
|
CodecommitServiceID = "codecommit" // Codecommit.
|
||||||
|
CodedeployServiceID = "codedeploy" // Codedeploy.
|
||||||
|
CodepipelineServiceID = "codepipeline" // Codepipeline.
|
||||||
|
CodestarServiceID = "codestar" // Codestar.
|
||||||
|
CognitoIdentityServiceID = "cognito-identity" // CognitoIdentity.
|
||||||
|
CognitoIdpServiceID = "cognito-idp" // CognitoIdp.
|
||||||
|
CognitoSyncServiceID = "cognito-sync" // CognitoSync.
|
||||||
|
ComprehendServiceID = "comprehend" // Comprehend.
|
||||||
|
ConfigServiceID = "config" // Config.
|
||||||
|
CurServiceID = "cur" // Cur.
|
||||||
|
DatapipelineServiceID = "datapipeline" // Datapipeline.
|
||||||
|
DaxServiceID = "dax" // Dax.
|
||||||
|
DevicefarmServiceID = "devicefarm" // Devicefarm.
|
||||||
|
DirectconnectServiceID = "directconnect" // Directconnect.
|
||||||
|
DiscoveryServiceID = "discovery" // Discovery.
|
||||||
|
DmsServiceID = "dms" // Dms.
|
||||||
|
DsServiceID = "ds" // Ds.
|
||||||
|
DynamodbServiceID = "dynamodb" // Dynamodb.
|
||||||
|
Ec2ServiceID = "ec2" // Ec2.
|
||||||
|
Ec2metadataServiceID = "ec2metadata" // Ec2metadata.
|
||||||
|
EcrServiceID = "ecr" // Ecr.
|
||||||
|
EcsServiceID = "ecs" // Ecs.
|
||||||
|
ElasticacheServiceID = "elasticache" // Elasticache.
|
||||||
|
ElasticbeanstalkServiceID = "elasticbeanstalk" // Elasticbeanstalk.
|
||||||
|
ElasticfilesystemServiceID = "elasticfilesystem" // Elasticfilesystem.
|
||||||
|
ElasticloadbalancingServiceID = "elasticloadbalancing" // Elasticloadbalancing.
|
||||||
|
ElasticmapreduceServiceID = "elasticmapreduce" // Elasticmapreduce.
|
||||||
|
ElastictranscoderServiceID = "elastictranscoder" // Elastictranscoder.
|
||||||
|
EmailServiceID = "email" // Email.
|
||||||
|
EntitlementMarketplaceServiceID = "entitlement.marketplace" // EntitlementMarketplace.
|
||||||
|
EsServiceID = "es" // Es.
|
||||||
|
EventsServiceID = "events" // Events.
|
||||||
|
FirehoseServiceID = "firehose" // Firehose.
|
||||||
|
FmsServiceID = "fms" // Fms.
|
||||||
|
GameliftServiceID = "gamelift" // Gamelift.
|
||||||
|
GlacierServiceID = "glacier" // Glacier.
|
||||||
|
GlueServiceID = "glue" // Glue.
|
||||||
|
GreengrassServiceID = "greengrass" // Greengrass.
|
||||||
|
GuarddutyServiceID = "guardduty" // Guardduty.
|
||||||
|
HealthServiceID = "health" // Health.
|
||||||
|
IamServiceID = "iam" // Iam.
|
||||||
|
ImportexportServiceID = "importexport" // Importexport.
|
||||||
|
InspectorServiceID = "inspector" // Inspector.
|
||||||
|
IotServiceID = "iot" // Iot.
|
||||||
|
IotanalyticsServiceID = "iotanalytics" // Iotanalytics.
|
||||||
|
KinesisServiceID = "kinesis" // Kinesis.
|
||||||
|
KinesisanalyticsServiceID = "kinesisanalytics" // Kinesisanalytics.
|
||||||
|
KinesisvideoServiceID = "kinesisvideo" // Kinesisvideo.
|
||||||
|
KmsServiceID = "kms" // Kms.
|
||||||
|
LambdaServiceID = "lambda" // Lambda.
|
||||||
|
LightsailServiceID = "lightsail" // Lightsail.
|
||||||
|
LogsServiceID = "logs" // Logs.
|
||||||
|
MachinelearningServiceID = "machinelearning" // Machinelearning.
|
||||||
|
MarketplacecommerceanalyticsServiceID = "marketplacecommerceanalytics" // Marketplacecommerceanalytics.
|
||||||
|
MediaconvertServiceID = "mediaconvert" // Mediaconvert.
|
||||||
|
MedialiveServiceID = "medialive" // Medialive.
|
||||||
|
MediapackageServiceID = "mediapackage" // Mediapackage.
|
||||||
|
MediastoreServiceID = "mediastore" // Mediastore.
|
||||||
|
MeteringMarketplaceServiceID = "metering.marketplace" // MeteringMarketplace.
|
||||||
|
MghServiceID = "mgh" // Mgh.
|
||||||
|
MobileanalyticsServiceID = "mobileanalytics" // Mobileanalytics.
|
||||||
|
ModelsLexServiceID = "models.lex" // ModelsLex.
|
||||||
|
MonitoringServiceID = "monitoring" // Monitoring.
|
||||||
|
MturkRequesterServiceID = "mturk-requester" // MturkRequester.
|
||||||
|
NeptuneServiceID = "neptune" // Neptune.
|
||||||
|
OpsworksServiceID = "opsworks" // Opsworks.
|
||||||
|
OpsworksCmServiceID = "opsworks-cm" // OpsworksCm.
|
||||||
|
OrganizationsServiceID = "organizations" // Organizations.
|
||||||
|
PinpointServiceID = "pinpoint" // Pinpoint.
|
||||||
|
PollyServiceID = "polly" // Polly.
|
||||||
|
RdsServiceID = "rds" // Rds.
|
||||||
|
RedshiftServiceID = "redshift" // Redshift.
|
||||||
|
RekognitionServiceID = "rekognition" // Rekognition.
|
||||||
|
ResourceGroupsServiceID = "resource-groups" // ResourceGroups.
|
||||||
|
Route53ServiceID = "route53" // Route53.
|
||||||
|
Route53domainsServiceID = "route53domains" // Route53domains.
|
||||||
|
RuntimeLexServiceID = "runtime.lex" // RuntimeLex.
|
||||||
|
RuntimeSagemakerServiceID = "runtime.sagemaker" // RuntimeSagemaker.
|
||||||
|
S3ServiceID = "s3" // S3.
|
||||||
|
S3ControlServiceID = "s3-control" // S3Control.
|
||||||
|
SagemakerServiceID = "api.sagemaker" // Sagemaker.
|
||||||
|
SdbServiceID = "sdb" // Sdb.
|
||||||
|
SecretsmanagerServiceID = "secretsmanager" // Secretsmanager.
|
||||||
|
ServerlessrepoServiceID = "serverlessrepo" // Serverlessrepo.
|
||||||
|
ServicecatalogServiceID = "servicecatalog" // Servicecatalog.
|
||||||
|
ServicediscoveryServiceID = "servicediscovery" // Servicediscovery.
|
||||||
|
ShieldServiceID = "shield" // Shield.
|
||||||
|
SmsServiceID = "sms" // Sms.
|
||||||
|
SnowballServiceID = "snowball" // Snowball.
|
||||||
|
SnsServiceID = "sns" // Sns.
|
||||||
|
SqsServiceID = "sqs" // Sqs.
|
||||||
|
SsmServiceID = "ssm" // Ssm.
|
||||||
|
StatesServiceID = "states" // States.
|
||||||
|
StoragegatewayServiceID = "storagegateway" // Storagegateway.
|
||||||
|
StreamsDynamodbServiceID = "streams.dynamodb" // StreamsDynamodb.
|
||||||
|
StsServiceID = "sts" // Sts.
|
||||||
|
SupportServiceID = "support" // Support.
|
||||||
|
SwfServiceID = "swf" // Swf.
|
||||||
|
TaggingServiceID = "tagging" // Tagging.
|
||||||
|
TransferServiceID = "transfer" // Transfer.
|
||||||
|
TranslateServiceID = "translate" // Translate.
|
||||||
|
WafServiceID = "waf" // Waf.
|
||||||
|
WafRegionalServiceID = "waf-regional" // WafRegional.
|
||||||
|
WorkdocsServiceID = "workdocs" // Workdocs.
|
||||||
|
WorkmailServiceID = "workmail" // Workmail.
|
||||||
|
WorkspacesServiceID = "workspaces" // Workspaces.
|
||||||
|
XrayServiceID = "xray" // Xray.
|
||||||
|
)
|
2
vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/endpoints/endpoints.go
generated
vendored
@ -35,7 +35,7 @@ type Options struct {
|
|||||||
//
|
//
|
||||||
// If resolving an endpoint on the partition list the provided region will
|
// If resolving an endpoint on the partition list the provided region will
|
||||||
// be used to determine which partition's domain name pattern to the service
|
// be used to determine which partition's domain name pattern to the service
|
||||||
// endpoint ID with. If both the service and region are unkonwn and resolving
|
// endpoint ID with. If both the service and region are unknown and resolving
|
||||||
// the endpoint on partition list an UnknownEndpointError error will be returned.
|
// the endpoint on partition list an UnknownEndpointError error will be returned.
|
||||||
//
|
//
|
||||||
// If resolving and endpoint on a partition specific resolver that partition's
|
// If resolving and endpoint on a partition specific resolver that partition's
|
||||||
|
24
vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go
generated
vendored
24
vendor/github.com/aws/aws-sdk-go/aws/endpoints/v3model_codegen.go
generated
vendored
@ -16,6 +16,10 @@ import (
|
|||||||
type CodeGenOptions struct {
|
type CodeGenOptions struct {
|
||||||
// Options for how the model will be decoded.
|
// Options for how the model will be decoded.
|
||||||
DecodeModelOptions DecodeModelOptions
|
DecodeModelOptions DecodeModelOptions
|
||||||
|
|
||||||
|
// Disables code generation of the service endpoint prefix IDs defined in
|
||||||
|
// the model.
|
||||||
|
DisableGenerateServiceIDs bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set combines all of the option functions together
|
// Set combines all of the option functions together
|
||||||
@ -39,8 +43,16 @@ func CodeGenModel(modelFile io.Reader, outFile io.Writer, optFns ...func(*CodeGe
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v := struct {
|
||||||
|
Resolver
|
||||||
|
CodeGenOptions
|
||||||
|
}{
|
||||||
|
Resolver: resolver,
|
||||||
|
CodeGenOptions: opts,
|
||||||
|
}
|
||||||
|
|
||||||
tmpl := template.Must(template.New("tmpl").Funcs(funcMap).Parse(v3Tmpl))
|
tmpl := template.Must(template.New("tmpl").Funcs(funcMap).Parse(v3Tmpl))
|
||||||
if err := tmpl.ExecuteTemplate(outFile, "defaults", resolver); err != nil {
|
if err := tmpl.ExecuteTemplate(outFile, "defaults", v); err != nil {
|
||||||
return fmt.Errorf("failed to execute template, %v", err)
|
return fmt.Errorf("failed to execute template, %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,15 +178,17 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
)
|
)
|
||||||
|
|
||||||
{{ template "partition consts" . }}
|
{{ template "partition consts" $.Resolver }}
|
||||||
|
|
||||||
{{ range $_, $partition := . }}
|
{{ range $_, $partition := $.Resolver }}
|
||||||
{{ template "partition region consts" $partition }}
|
{{ template "partition region consts" $partition }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
{{ template "service consts" . }}
|
{{ if not $.DisableGenerateServiceIDs -}}
|
||||||
|
{{ template "service consts" $.Resolver }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
{{ template "endpoint resolvers" . }}
|
{{ template "endpoint resolvers" $.Resolver }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{ define "partition consts" }}
|
{{ define "partition consts" }}
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/aws/errors.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/aws/errors.go
generated
vendored
@ -5,13 +5,9 @@ import "github.com/aws/aws-sdk-go/aws/awserr"
|
|||||||
var (
|
var (
|
||||||
// ErrMissingRegion is an error that is returned if region configuration is
|
// ErrMissingRegion is an error that is returned if region configuration is
|
||||||
// not found.
|
// not found.
|
||||||
//
|
|
||||||
// @readonly
|
|
||||||
ErrMissingRegion = awserr.New("MissingRegion", "could not find region configuration", nil)
|
ErrMissingRegion = awserr.New("MissingRegion", "could not find region configuration", nil)
|
||||||
|
|
||||||
// ErrMissingEndpoint is an error that is returned if an endpoint cannot be
|
// ErrMissingEndpoint is an error that is returned if an endpoint cannot be
|
||||||
// resolved for a service.
|
// resolved for a service.
|
||||||
//
|
|
||||||
// @readonly
|
|
||||||
ErrMissingEndpoint = awserr.New("MissingEndpoint", "'Endpoint' configuration is required for this service", nil)
|
ErrMissingEndpoint = awserr.New("MissingEndpoint", "'Endpoint' configuration is required for this service", nil)
|
||||||
)
|
)
|
||||||
|
3
vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
generated
vendored
3
vendor/github.com/aws/aws-sdk-go/aws/request/handlers.go
generated
vendored
@ -19,6 +19,7 @@ type Handlers struct {
|
|||||||
UnmarshalError HandlerList
|
UnmarshalError HandlerList
|
||||||
Retry HandlerList
|
Retry HandlerList
|
||||||
AfterRetry HandlerList
|
AfterRetry HandlerList
|
||||||
|
CompleteAttempt HandlerList
|
||||||
Complete HandlerList
|
Complete HandlerList
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,6 +37,7 @@ func (h *Handlers) Copy() Handlers {
|
|||||||
UnmarshalMeta: h.UnmarshalMeta.copy(),
|
UnmarshalMeta: h.UnmarshalMeta.copy(),
|
||||||
Retry: h.Retry.copy(),
|
Retry: h.Retry.copy(),
|
||||||
AfterRetry: h.AfterRetry.copy(),
|
AfterRetry: h.AfterRetry.copy(),
|
||||||
|
CompleteAttempt: h.CompleteAttempt.copy(),
|
||||||
Complete: h.Complete.copy(),
|
Complete: h.Complete.copy(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -53,6 +55,7 @@ func (h *Handlers) Clear() {
|
|||||||
h.ValidateResponse.Clear()
|
h.ValidateResponse.Clear()
|
||||||
h.Retry.Clear()
|
h.Retry.Clear()
|
||||||
h.AfterRetry.Clear()
|
h.AfterRetry.Clear()
|
||||||
|
h.CompleteAttempt.Clear()
|
||||||
h.Complete.Clear()
|
h.Complete.Clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
127
vendor/github.com/aws/aws-sdk-go/aws/request/request.go
generated
vendored
127
vendor/github.com/aws/aws-sdk-go/aws/request/request.go
generated
vendored
@ -122,7 +122,6 @@ func New(cfg aws.Config, clientInfo metadata.ClientInfo, handlers Handlers,
|
|||||||
Handlers: handlers.Copy(),
|
Handlers: handlers.Copy(),
|
||||||
|
|
||||||
Retryer: retryer,
|
Retryer: retryer,
|
||||||
AttemptTime: time.Now(),
|
|
||||||
Time: time.Now(),
|
Time: time.Now(),
|
||||||
ExpireTime: 0,
|
ExpireTime: 0,
|
||||||
Operation: operation,
|
Operation: operation,
|
||||||
@ -266,7 +265,9 @@ func (r *Request) SetReaderBody(reader io.ReadSeeker) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Presign returns the request's signed URL. Error will be returned
|
// Presign returns the request's signed URL. Error will be returned
|
||||||
// if the signing fails.
|
// if the signing fails. The expire parameter is only used for presigned Amazon
|
||||||
|
// S3 API requests. All other AWS services will use a fixed expiration
|
||||||
|
// time of 15 minutes.
|
||||||
//
|
//
|
||||||
// It is invalid to create a presigned URL with a expire duration 0 or less. An
|
// It is invalid to create a presigned URL with a expire duration 0 or less. An
|
||||||
// error is returned if expire duration is 0 or less.
|
// error is returned if expire duration is 0 or less.
|
||||||
@ -283,7 +284,9 @@ func (r *Request) Presign(expire time.Duration) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PresignRequest behaves just like presign, with the addition of returning a
|
// PresignRequest behaves just like presign, with the addition of returning a
|
||||||
// set of headers that were signed.
|
// set of headers that were signed. The expire parameter is only used for
|
||||||
|
// presigned Amazon S3 API requests. All other AWS services will use a fixed
|
||||||
|
// expiration time of 15 minutes.
|
||||||
//
|
//
|
||||||
// It is invalid to create a presigned URL with a expire duration 0 or less. An
|
// It is invalid to create a presigned URL with a expire duration 0 or less. An
|
||||||
// error is returned if expire duration is 0 or less.
|
// error is returned if expire duration is 0 or less.
|
||||||
@ -462,80 +465,78 @@ func (r *Request) Send() error {
|
|||||||
r.Handlers.Complete.Run(r)
|
r.Handlers.Complete.Run(r)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
if err := r.Error; err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
r.Error = nil
|
||||||
r.AttemptTime = time.Now()
|
r.AttemptTime = time.Now()
|
||||||
if aws.BoolValue(r.Retryable) {
|
|
||||||
if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) {
|
|
||||||
r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d",
|
|
||||||
r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount))
|
|
||||||
}
|
|
||||||
|
|
||||||
// The previous http.Request will have a reference to the r.Body
|
if err := r.Sign(); err != nil {
|
||||||
// and the HTTP Client's Transport may still be reading from
|
debugLogReqError(r, "Sign Request", false, err)
|
||||||
// the request's body even though the Client's Do returned.
|
return err
|
||||||
r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil)
|
|
||||||
r.ResetBody()
|
|
||||||
|
|
||||||
// Closing response body to ensure that no response body is leaked
|
|
||||||
// between retry attempts.
|
|
||||||
if r.HTTPResponse != nil && r.HTTPResponse.Body != nil {
|
|
||||||
r.HTTPResponse.Body.Close()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r.Sign()
|
if err := r.sendRequest(); err == nil {
|
||||||
if r.Error != nil {
|
return nil
|
||||||
return r.Error
|
} else if !shouldRetryCancel(r) {
|
||||||
}
|
return err
|
||||||
|
} else {
|
||||||
r.Retryable = nil
|
|
||||||
|
|
||||||
r.Handlers.Send.Run(r)
|
|
||||||
if r.Error != nil {
|
|
||||||
if !shouldRetryCancel(r) {
|
|
||||||
return r.Error
|
|
||||||
}
|
|
||||||
|
|
||||||
err := r.Error
|
|
||||||
r.Handlers.Retry.Run(r)
|
r.Handlers.Retry.Run(r)
|
||||||
r.Handlers.AfterRetry.Run(r)
|
r.Handlers.AfterRetry.Run(r)
|
||||||
if r.Error != nil {
|
|
||||||
debugLogReqError(r, "Send Request", false, err)
|
if r.Error != nil || !aws.BoolValue(r.Retryable) {
|
||||||
return r.Error
|
return r.Error
|
||||||
}
|
}
|
||||||
debugLogReqError(r, "Send Request", true, err)
|
|
||||||
|
r.prepareRetry()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
r.Handlers.UnmarshalMeta.Run(r)
|
}
|
||||||
r.Handlers.ValidateResponse.Run(r)
|
}
|
||||||
if r.Error != nil {
|
|
||||||
r.Handlers.UnmarshalError.Run(r)
|
|
||||||
err := r.Error
|
|
||||||
|
|
||||||
r.Handlers.Retry.Run(r)
|
func (r *Request) prepareRetry() {
|
||||||
r.Handlers.AfterRetry.Run(r)
|
if r.Config.LogLevel.Matches(aws.LogDebugWithRequestRetries) {
|
||||||
if r.Error != nil {
|
r.Config.Logger.Log(fmt.Sprintf("DEBUG: Retrying Request %s/%s, attempt %d",
|
||||||
debugLogReqError(r, "Validate Response", false, err)
|
r.ClientInfo.ServiceName, r.Operation.Name, r.RetryCount))
|
||||||
return r.Error
|
}
|
||||||
}
|
|
||||||
debugLogReqError(r, "Validate Response", true, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
r.Handlers.Unmarshal.Run(r)
|
// The previous http.Request will have a reference to the r.Body
|
||||||
if r.Error != nil {
|
// and the HTTP Client's Transport may still be reading from
|
||||||
err := r.Error
|
// the request's body even though the Client's Do returned.
|
||||||
r.Handlers.Retry.Run(r)
|
r.HTTPRequest = copyHTTPRequest(r.HTTPRequest, nil)
|
||||||
r.Handlers.AfterRetry.Run(r)
|
r.ResetBody()
|
||||||
if r.Error != nil {
|
|
||||||
debugLogReqError(r, "Unmarshal Response", false, err)
|
|
||||||
return r.Error
|
|
||||||
}
|
|
||||||
debugLogReqError(r, "Unmarshal Response", true, err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
break
|
// Closing response body to ensure that no response body is leaked
|
||||||
|
// between retry attempts.
|
||||||
|
if r.HTTPResponse != nil && r.HTTPResponse.Body != nil {
|
||||||
|
r.HTTPResponse.Body.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *Request) sendRequest() (sendErr error) {
|
||||||
|
defer r.Handlers.CompleteAttempt.Run(r)
|
||||||
|
|
||||||
|
r.Retryable = nil
|
||||||
|
r.Handlers.Send.Run(r)
|
||||||
|
if r.Error != nil {
|
||||||
|
debugLogReqError(r, "Send Request", r.WillRetry(), r.Error)
|
||||||
|
return r.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Handlers.UnmarshalMeta.Run(r)
|
||||||
|
r.Handlers.ValidateResponse.Run(r)
|
||||||
|
if r.Error != nil {
|
||||||
|
r.Handlers.UnmarshalError.Run(r)
|
||||||
|
debugLogReqError(r, "Validate Response", r.WillRetry(), r.Error)
|
||||||
|
return r.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
r.Handlers.Unmarshal.Run(r)
|
||||||
|
if r.Error != nil {
|
||||||
|
debugLogReqError(r, "Unmarshal Response", r.WillRetry(), r.Error)
|
||||||
|
return r.Error
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
3
vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
generated
vendored
3
vendor/github.com/aws/aws-sdk-go/aws/request/retryer.go
generated
vendored
@ -40,6 +40,7 @@ var throttleCodes = map[string]struct{}{
|
|||||||
"RequestThrottled": {},
|
"RequestThrottled": {},
|
||||||
"TooManyRequestsException": {}, // Lambda functions
|
"TooManyRequestsException": {}, // Lambda functions
|
||||||
"PriorRequestNotComplete": {}, // Route53
|
"PriorRequestNotComplete": {}, // Route53
|
||||||
|
"TransactionInProgressException": {},
|
||||||
}
|
}
|
||||||
|
|
||||||
// credsExpiredCodes is a collection of error codes which signify the credentials
|
// credsExpiredCodes is a collection of error codes which signify the credentials
|
||||||
@ -97,7 +98,7 @@ func isNestedErrorRetryable(parentErr awserr.Error) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if t, ok := err.(temporaryError); ok {
|
if t, ok := err.(temporaryError); ok {
|
||||||
return t.Temporary()
|
return t.Temporary() || isErrConnectionReset(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return isErrConnectionReset(err)
|
return isErrConnectionReset(err)
|
||||||
|
52
vendor/github.com/aws/aws-sdk-go/aws/request/validation.go
generated
vendored
52
vendor/github.com/aws/aws-sdk-go/aws/request/validation.go
generated
vendored
@ -17,6 +17,12 @@ const (
|
|||||||
ParamMinValueErrCode = "ParamMinValueError"
|
ParamMinValueErrCode = "ParamMinValueError"
|
||||||
// ParamMinLenErrCode is the error code for fields without enough elements.
|
// ParamMinLenErrCode is the error code for fields without enough elements.
|
||||||
ParamMinLenErrCode = "ParamMinLenError"
|
ParamMinLenErrCode = "ParamMinLenError"
|
||||||
|
// ParamMaxLenErrCode is the error code for value being too long.
|
||||||
|
ParamMaxLenErrCode = "ParamMaxLenError"
|
||||||
|
|
||||||
|
// ParamFormatErrCode is the error code for a field with invalid
|
||||||
|
// format or characters.
|
||||||
|
ParamFormatErrCode = "ParamFormatInvalidError"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Validator provides a way for types to perform validation logic on their
|
// Validator provides a way for types to perform validation logic on their
|
||||||
@ -232,3 +238,49 @@ func NewErrParamMinLen(field string, min int) *ErrParamMinLen {
|
|||||||
func (e *ErrParamMinLen) MinLen() int {
|
func (e *ErrParamMinLen) MinLen() int {
|
||||||
return e.min
|
return e.min
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// An ErrParamMaxLen represents a maximum length parameter error.
|
||||||
|
type ErrParamMaxLen struct {
|
||||||
|
errInvalidParam
|
||||||
|
max int
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewErrParamMaxLen creates a new maximum length parameter error.
|
||||||
|
func NewErrParamMaxLen(field string, max int, value string) *ErrParamMaxLen {
|
||||||
|
return &ErrParamMaxLen{
|
||||||
|
errInvalidParam: errInvalidParam{
|
||||||
|
code: ParamMaxLenErrCode,
|
||||||
|
field: field,
|
||||||
|
msg: fmt.Sprintf("maximum size of %v, %v", max, value),
|
||||||
|
},
|
||||||
|
max: max,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MaxLen returns the field's required minimum length.
|
||||||
|
func (e *ErrParamMaxLen) MaxLen() int {
|
||||||
|
return e.max
|
||||||
|
}
|
||||||
|
|
||||||
|
// An ErrParamFormat represents a invalid format parameter error.
|
||||||
|
type ErrParamFormat struct {
|
||||||
|
errInvalidParam
|
||||||
|
format string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewErrParamFormat creates a new invalid format parameter error.
|
||||||
|
func NewErrParamFormat(field string, format, value string) *ErrParamFormat {
|
||||||
|
return &ErrParamFormat{
|
||||||
|
errInvalidParam: errInvalidParam{
|
||||||
|
code: ParamFormatErrCode,
|
||||||
|
field: field,
|
||||||
|
msg: fmt.Sprintf("format %v, %v", format, value),
|
||||||
|
},
|
||||||
|
format: format,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Format returns the field's required format.
|
||||||
|
func (e *ErrParamFormat) Format() string {
|
||||||
|
return e.format
|
||||||
|
}
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/aws/session/doc.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/aws/session/doc.go
generated
vendored
@ -99,7 +99,7 @@ handler logs every request and its payload made by a service client:
|
|||||||
|
|
||||||
sess.Handlers.Send.PushFront(func(r *request.Request) {
|
sess.Handlers.Send.PushFront(func(r *request.Request) {
|
||||||
// Log every request made and its payload
|
// Log every request made and its payload
|
||||||
logger.Println("Request: %s/%s, Payload: %s",
|
logger.Printf("Request: %s/%s, Payload: %s",
|
||||||
r.ClientInfo.ServiceName, r.Operation, r.Params)
|
r.ClientInfo.ServiceName, r.Operation, r.Params)
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -128,7 +128,7 @@ read. The Session will be created from configuration values from the shared
|
|||||||
credentials file (~/.aws/credentials) over those in the shared config file (~/.aws/config).
|
credentials file (~/.aws/credentials) over those in the shared config file (~/.aws/config).
|
||||||
|
|
||||||
Credentials are the values the SDK should use for authenticating requests with
|
Credentials are the values the SDK should use for authenticating requests with
|
||||||
AWS Services. They arfrom a configuration file will need to include both
|
AWS Services. They are from a configuration file will need to include both
|
||||||
aws_access_key_id and aws_secret_access_key must be provided together in the
|
aws_access_key_id and aws_secret_access_key must be provided together in the
|
||||||
same file to be considered valid. The values will be ignored if not a complete
|
same file to be considered valid. The values will be ignored if not a complete
|
||||||
group. aws_session_token is an optional field that can be provided if both of
|
group. aws_session_token is an optional field that can be provided if both of
|
||||||
@ -183,7 +183,7 @@ be returned when creating the session.
|
|||||||
// from assumed role.
|
// from assumed role.
|
||||||
svc := s3.New(sess)
|
svc := s3.New(sess)
|
||||||
|
|
||||||
To setup assume role outside of a session see the stscrds.AssumeRoleProvider
|
To setup assume role outside of a session see the stscreds.AssumeRoleProvider
|
||||||
documentation.
|
documentation.
|
||||||
|
|
||||||
Environment Variables
|
Environment Variables
|
||||||
|
19
vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/aws/session/env_config.go
generated
vendored
@ -4,6 +4,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/aws/aws-sdk-go/aws/defaults"
|
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||||
)
|
)
|
||||||
@ -79,7 +80,7 @@ type envConfig struct {
|
|||||||
// AWS_CONFIG_FILE=$HOME/my_shared_config
|
// AWS_CONFIG_FILE=$HOME/my_shared_config
|
||||||
SharedConfigFile string
|
SharedConfigFile string
|
||||||
|
|
||||||
// Sets the path to a custom Credentials Authroity (CA) Bundle PEM file
|
// Sets the path to a custom Credentials Authority (CA) Bundle PEM file
|
||||||
// that the SDK will use instead of the system's root CA bundle.
|
// that the SDK will use instead of the system's root CA bundle.
|
||||||
// Only use this if you want to configure the SDK to use a custom set
|
// Only use this if you want to configure the SDK to use a custom set
|
||||||
// of CAs.
|
// of CAs.
|
||||||
@ -101,6 +102,12 @@ type envConfig struct {
|
|||||||
CSMEnabled bool
|
CSMEnabled bool
|
||||||
CSMPort string
|
CSMPort string
|
||||||
CSMClientID string
|
CSMClientID string
|
||||||
|
|
||||||
|
enableEndpointDiscovery string
|
||||||
|
// Enables endpoint discovery via environment variables.
|
||||||
|
//
|
||||||
|
// AWS_ENABLE_ENDPOINT_DISCOVERY=true
|
||||||
|
EnableEndpointDiscovery *bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -125,6 +132,10 @@ var (
|
|||||||
"AWS_SESSION_TOKEN",
|
"AWS_SESSION_TOKEN",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enableEndpointDiscoveryEnvKey = []string{
|
||||||
|
"AWS_ENABLE_ENDPOINT_DISCOVERY",
|
||||||
|
}
|
||||||
|
|
||||||
regionEnvKeys = []string{
|
regionEnvKeys = []string{
|
||||||
"AWS_REGION",
|
"AWS_REGION",
|
||||||
"AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set
|
"AWS_DEFAULT_REGION", // Only read if AWS_SDK_LOAD_CONFIG is also set
|
||||||
@ -194,6 +205,12 @@ func envConfigLoad(enableSharedConfig bool) envConfig {
|
|||||||
setFromEnvVal(&cfg.Region, regionKeys)
|
setFromEnvVal(&cfg.Region, regionKeys)
|
||||||
setFromEnvVal(&cfg.Profile, profileKeys)
|
setFromEnvVal(&cfg.Profile, profileKeys)
|
||||||
|
|
||||||
|
// endpoint discovery is in reference to it being enabled.
|
||||||
|
setFromEnvVal(&cfg.enableEndpointDiscovery, enableEndpointDiscoveryEnvKey)
|
||||||
|
if len(cfg.enableEndpointDiscovery) > 0 {
|
||||||
|
cfg.EnableEndpointDiscovery = aws.Bool(cfg.enableEndpointDiscovery != "false")
|
||||||
|
}
|
||||||
|
|
||||||
setFromEnvVal(&cfg.SharedCredentialsFile, sharedCredsFileEnvKey)
|
setFromEnvVal(&cfg.SharedCredentialsFile, sharedCredsFileEnvKey)
|
||||||
setFromEnvVal(&cfg.SharedConfigFile, sharedConfigFileEnvKey)
|
setFromEnvVal(&cfg.SharedConfigFile, sharedConfigFileEnvKey)
|
||||||
|
|
||||||
|
128
vendor/github.com/aws/aws-sdk-go/aws/session/session.go
generated
vendored
128
vendor/github.com/aws/aws-sdk-go/aws/session/session.go
generated
vendored
@ -14,13 +14,32 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/client"
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
"github.com/aws/aws-sdk-go/aws/corehandlers"
|
"github.com/aws/aws-sdk-go/aws/corehandlers"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/credentials/processcreds"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
|
||||||
"github.com/aws/aws-sdk-go/aws/csm"
|
"github.com/aws/aws-sdk-go/aws/csm"
|
||||||
"github.com/aws/aws-sdk-go/aws/defaults"
|
"github.com/aws/aws-sdk-go/aws/defaults"
|
||||||
"github.com/aws/aws-sdk-go/aws/endpoints"
|
"github.com/aws/aws-sdk-go/aws/endpoints"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/shareddefaults"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ErrCodeSharedConfig represents an error that occurs in the shared
|
||||||
|
// configuration logic
|
||||||
|
ErrCodeSharedConfig = "SharedConfigErr"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ErrSharedConfigSourceCollision will be returned if a section contains both
|
||||||
|
// source_profile and credential_source
|
||||||
|
var ErrSharedConfigSourceCollision = awserr.New(ErrCodeSharedConfig, "only source profile or credential source can be specified, not both", nil)
|
||||||
|
|
||||||
|
// ErrSharedConfigECSContainerEnvVarEmpty will be returned if the environment
|
||||||
|
// variables are empty and Environment was set as the credential source
|
||||||
|
var ErrSharedConfigECSContainerEnvVarEmpty = awserr.New(ErrCodeSharedConfig, "EcsContainer was specified as the credential_source, but 'AWS_CONTAINER_CREDENTIALS_RELATIVE_URI' was not set", nil)
|
||||||
|
|
||||||
|
// ErrSharedConfigInvalidCredSource will be returned if an invalid credential source was provided
|
||||||
|
var ErrSharedConfigInvalidCredSource = awserr.New(ErrCodeSharedConfig, "credential source values must be EcsContainer, Ec2InstanceMetadata, or Environment", nil)
|
||||||
|
|
||||||
// A Session provides a central location to create service clients from and
|
// A Session provides a central location to create service clients from and
|
||||||
// store configurations and request handlers for those services.
|
// store configurations and request handlers for those services.
|
||||||
//
|
//
|
||||||
@ -434,8 +453,67 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg share
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if cfg.EnableEndpointDiscovery == nil {
|
||||||
|
if envCfg.EnableEndpointDiscovery != nil {
|
||||||
|
cfg.WithEndpointDiscovery(*envCfg.EnableEndpointDiscovery)
|
||||||
|
} else if envCfg.EnableSharedConfig && sharedCfg.EnableEndpointDiscovery != nil {
|
||||||
|
cfg.WithEndpointDiscovery(*sharedCfg.EnableEndpointDiscovery)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Configure credentials if not already set
|
// Configure credentials if not already set
|
||||||
if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {
|
if cfg.Credentials == credentials.AnonymousCredentials && userCfg.Credentials == nil {
|
||||||
|
|
||||||
|
// inspect the profile to see if a credential source has been specified.
|
||||||
|
if envCfg.EnableSharedConfig && len(sharedCfg.AssumeRole.CredentialSource) > 0 {
|
||||||
|
|
||||||
|
// if both credential_source and source_profile have been set, return an error
|
||||||
|
// as this is undefined behavior.
|
||||||
|
if len(sharedCfg.AssumeRole.SourceProfile) > 0 {
|
||||||
|
return ErrSharedConfigSourceCollision
|
||||||
|
}
|
||||||
|
|
||||||
|
// valid credential source values
|
||||||
|
const (
|
||||||
|
credSourceEc2Metadata = "Ec2InstanceMetadata"
|
||||||
|
credSourceEnvironment = "Environment"
|
||||||
|
credSourceECSContainer = "EcsContainer"
|
||||||
|
)
|
||||||
|
|
||||||
|
switch sharedCfg.AssumeRole.CredentialSource {
|
||||||
|
case credSourceEc2Metadata:
|
||||||
|
cfgCp := *cfg
|
||||||
|
p := defaults.RemoteCredProvider(cfgCp, handlers)
|
||||||
|
cfgCp.Credentials = credentials.NewCredentials(p)
|
||||||
|
|
||||||
|
if len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {
|
||||||
|
// AssumeRole Token provider is required if doing Assume Role
|
||||||
|
// with MFA.
|
||||||
|
return AssumeRoleTokenProviderNotSetError{}
|
||||||
|
}
|
||||||
|
|
||||||
|
cfg.Credentials = assumeRoleCredentials(cfgCp, handlers, sharedCfg, sessOpts)
|
||||||
|
case credSourceEnvironment:
|
||||||
|
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
||||||
|
envCfg.Creds,
|
||||||
|
)
|
||||||
|
case credSourceECSContainer:
|
||||||
|
if len(os.Getenv(shareddefaults.ECSCredsProviderEnvVar)) == 0 {
|
||||||
|
return ErrSharedConfigECSContainerEnvVarEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
cfgCp := *cfg
|
||||||
|
p := defaults.RemoteCredProvider(cfgCp, handlers)
|
||||||
|
creds := credentials.NewCredentials(p)
|
||||||
|
|
||||||
|
cfg.Credentials = creds
|
||||||
|
default:
|
||||||
|
return ErrSharedConfigInvalidCredSource
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if len(envCfg.Creds.AccessKeyID) > 0 {
|
if len(envCfg.Creds.AccessKeyID) > 0 {
|
||||||
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
||||||
envCfg.Creds,
|
envCfg.Creds,
|
||||||
@ -445,36 +523,22 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg share
|
|||||||
cfgCp.Credentials = credentials.NewStaticCredentialsFromCreds(
|
cfgCp.Credentials = credentials.NewStaticCredentialsFromCreds(
|
||||||
sharedCfg.AssumeRoleSource.Creds,
|
sharedCfg.AssumeRoleSource.Creds,
|
||||||
)
|
)
|
||||||
|
|
||||||
if len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {
|
if len(sharedCfg.AssumeRole.MFASerial) > 0 && sessOpts.AssumeRoleTokenProvider == nil {
|
||||||
// AssumeRole Token provider is required if doing Assume Role
|
// AssumeRole Token provider is required if doing Assume Role
|
||||||
// with MFA.
|
// with MFA.
|
||||||
return AssumeRoleTokenProviderNotSetError{}
|
return AssumeRoleTokenProviderNotSetError{}
|
||||||
}
|
}
|
||||||
cfg.Credentials = stscreds.NewCredentials(
|
|
||||||
&Session{
|
|
||||||
Config: &cfgCp,
|
|
||||||
Handlers: handlers.Copy(),
|
|
||||||
},
|
|
||||||
sharedCfg.AssumeRole.RoleARN,
|
|
||||||
func(opt *stscreds.AssumeRoleProvider) {
|
|
||||||
opt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName
|
|
||||||
|
|
||||||
// Assume role with external ID
|
cfg.Credentials = assumeRoleCredentials(cfgCp, handlers, sharedCfg, sessOpts)
|
||||||
if len(sharedCfg.AssumeRole.ExternalID) > 0 {
|
|
||||||
opt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Assume role with MFA
|
|
||||||
if len(sharedCfg.AssumeRole.MFASerial) > 0 {
|
|
||||||
opt.SerialNumber = aws.String(sharedCfg.AssumeRole.MFASerial)
|
|
||||||
opt.TokenProvider = sessOpts.AssumeRoleTokenProvider
|
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
|
||||||
} else if len(sharedCfg.Creds.AccessKeyID) > 0 {
|
} else if len(sharedCfg.Creds.AccessKeyID) > 0 {
|
||||||
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
cfg.Credentials = credentials.NewStaticCredentialsFromCreds(
|
||||||
sharedCfg.Creds,
|
sharedCfg.Creds,
|
||||||
)
|
)
|
||||||
|
} else if len(sharedCfg.CredentialProcess) > 0 {
|
||||||
|
cfg.Credentials = processcreds.NewCredentials(
|
||||||
|
sharedCfg.CredentialProcess,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
// Fallback to default credentials provider, include mock errors
|
// Fallback to default credentials provider, include mock errors
|
||||||
// for the credential chain so user can identify why credentials
|
// for the credential chain so user can identify why credentials
|
||||||
@ -493,6 +557,30 @@ func mergeConfigSrcs(cfg, userCfg *aws.Config, envCfg envConfig, sharedCfg share
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func assumeRoleCredentials(cfg aws.Config, handlers request.Handlers, sharedCfg sharedConfig, sessOpts Options) *credentials.Credentials {
|
||||||
|
return stscreds.NewCredentials(
|
||||||
|
&Session{
|
||||||
|
Config: &cfg,
|
||||||
|
Handlers: handlers.Copy(),
|
||||||
|
},
|
||||||
|
sharedCfg.AssumeRole.RoleARN,
|
||||||
|
func(opt *stscreds.AssumeRoleProvider) {
|
||||||
|
opt.RoleSessionName = sharedCfg.AssumeRole.RoleSessionName
|
||||||
|
|
||||||
|
// Assume role with external ID
|
||||||
|
if len(sharedCfg.AssumeRole.ExternalID) > 0 {
|
||||||
|
opt.ExternalID = aws.String(sharedCfg.AssumeRole.ExternalID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assume role with MFA
|
||||||
|
if len(sharedCfg.AssumeRole.MFASerial) > 0 {
|
||||||
|
opt.SerialNumber = aws.String(sharedCfg.AssumeRole.MFASerial)
|
||||||
|
opt.TokenProvider = sessOpts.AssumeRoleTokenProvider
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
// AssumeRoleTokenProviderNotSetError is an error returned when creating a session when the
|
// AssumeRoleTokenProviderNotSetError is an error returned when creating a session when the
|
||||||
// MFAToken option is not set when shared config is configured load assume a
|
// MFAToken option is not set when shared config is configured load assume a
|
||||||
// role with an MFA token.
|
// role with an MFA token.
|
||||||
|
108
vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go
generated
vendored
108
vendor/github.com/aws/aws-sdk-go/aws/session/shared_config.go
generated
vendored
@ -2,11 +2,11 @@ package session
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/aws/awserr"
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
"github.com/aws/aws-sdk-go/aws/credentials"
|
"github.com/aws/aws-sdk-go/aws/credentials"
|
||||||
"github.com/go-ini/ini"
|
|
||||||
|
"github.com/aws/aws-sdk-go/internal/ini"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -16,15 +16,21 @@ const (
|
|||||||
sessionTokenKey = `aws_session_token` // optional
|
sessionTokenKey = `aws_session_token` // optional
|
||||||
|
|
||||||
// Assume Role Credentials group
|
// Assume Role Credentials group
|
||||||
roleArnKey = `role_arn` // group required
|
roleArnKey = `role_arn` // group required
|
||||||
sourceProfileKey = `source_profile` // group required
|
sourceProfileKey = `source_profile` // group required (or credential_source)
|
||||||
externalIDKey = `external_id` // optional
|
credentialSourceKey = `credential_source` // group required (or source_profile)
|
||||||
mfaSerialKey = `mfa_serial` // optional
|
externalIDKey = `external_id` // optional
|
||||||
roleSessionNameKey = `role_session_name` // optional
|
mfaSerialKey = `mfa_serial` // optional
|
||||||
|
roleSessionNameKey = `role_session_name` // optional
|
||||||
|
|
||||||
// Additional Config fields
|
// Additional Config fields
|
||||||
regionKey = `region`
|
regionKey = `region`
|
||||||
|
|
||||||
|
// endpoint discovery group
|
||||||
|
enableEndpointDiscoveryKey = `endpoint_discovery_enabled` // optional
|
||||||
|
// External Credential Process
|
||||||
|
credentialProcessKey = `credential_process`
|
||||||
|
|
||||||
// DefaultSharedConfigProfile is the default profile to be used when
|
// DefaultSharedConfigProfile is the default profile to be used when
|
||||||
// loading configuration from the config files if another profile name
|
// loading configuration from the config files if another profile name
|
||||||
// is not provided.
|
// is not provided.
|
||||||
@ -32,11 +38,12 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type assumeRoleConfig struct {
|
type assumeRoleConfig struct {
|
||||||
RoleARN string
|
RoleARN string
|
||||||
SourceProfile string
|
SourceProfile string
|
||||||
ExternalID string
|
CredentialSource string
|
||||||
MFASerial string
|
ExternalID string
|
||||||
RoleSessionName string
|
MFASerial string
|
||||||
|
RoleSessionName string
|
||||||
}
|
}
|
||||||
|
|
||||||
// sharedConfig represents the configuration fields of the SDK config files.
|
// sharedConfig represents the configuration fields of the SDK config files.
|
||||||
@ -55,16 +62,25 @@ type sharedConfig struct {
|
|||||||
AssumeRole assumeRoleConfig
|
AssumeRole assumeRoleConfig
|
||||||
AssumeRoleSource *sharedConfig
|
AssumeRoleSource *sharedConfig
|
||||||
|
|
||||||
|
// An external process to request credentials
|
||||||
|
CredentialProcess string
|
||||||
|
|
||||||
// Region is the region the SDK should use for looking up AWS service endpoints
|
// Region is the region the SDK should use for looking up AWS service endpoints
|
||||||
// and signing requests.
|
// and signing requests.
|
||||||
//
|
//
|
||||||
// region
|
// region
|
||||||
Region string
|
Region string
|
||||||
|
|
||||||
|
// EnableEndpointDiscovery can be enabled in the shared config by setting
|
||||||
|
// endpoint_discovery_enabled to true
|
||||||
|
//
|
||||||
|
// endpoint_discovery_enabled = true
|
||||||
|
EnableEndpointDiscovery *bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type sharedConfigFile struct {
|
type sharedConfigFile struct {
|
||||||
Filename string
|
Filename string
|
||||||
IniData *ini.File
|
IniData ini.Sections
|
||||||
}
|
}
|
||||||
|
|
||||||
// loadSharedConfig retrieves the configuration from the list of files
|
// loadSharedConfig retrieves the configuration from the list of files
|
||||||
@ -105,19 +121,16 @@ func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) {
|
|||||||
files := make([]sharedConfigFile, 0, len(filenames))
|
files := make([]sharedConfigFile, 0, len(filenames))
|
||||||
|
|
||||||
for _, filename := range filenames {
|
for _, filename := range filenames {
|
||||||
b, err := ioutil.ReadFile(filename)
|
sections, err := ini.OpenFile(filename)
|
||||||
if err != nil {
|
if aerr, ok := err.(awserr.Error); ok && aerr.Code() == ini.ErrCodeUnableToReadFile {
|
||||||
// Skip files which can't be opened and read for whatever reason
|
// Skip files which can't be opened and read for whatever reason
|
||||||
continue
|
continue
|
||||||
}
|
} else if err != nil {
|
||||||
|
|
||||||
f, err := ini.Load(b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, SharedConfigLoadError{Filename: filename, Err: err}
|
return nil, SharedConfigLoadError{Filename: filename, Err: err}
|
||||||
}
|
}
|
||||||
|
|
||||||
files = append(files, sharedConfigFile{
|
files = append(files, sharedConfigFile{
|
||||||
Filename: filename, IniData: f,
|
Filename: filename, IniData: sections,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,6 +140,13 @@ func loadSharedConfigIniFiles(filenames []string) ([]sharedConfigFile, error) {
|
|||||||
func (cfg *sharedConfig) setAssumeRoleSource(origProfile string, files []sharedConfigFile) error {
|
func (cfg *sharedConfig) setAssumeRoleSource(origProfile string, files []sharedConfigFile) error {
|
||||||
var assumeRoleSrc sharedConfig
|
var assumeRoleSrc sharedConfig
|
||||||
|
|
||||||
|
if len(cfg.AssumeRole.CredentialSource) > 0 {
|
||||||
|
// setAssumeRoleSource is only called when source_profile is found.
|
||||||
|
// If both source_profile and credential_source are set, then
|
||||||
|
// ErrSharedConfigSourceCollision will be returned
|
||||||
|
return ErrSharedConfigSourceCollision
|
||||||
|
}
|
||||||
|
|
||||||
// Multiple level assume role chains are not support
|
// Multiple level assume role chains are not support
|
||||||
if cfg.AssumeRole.SourceProfile == origProfile {
|
if cfg.AssumeRole.SourceProfile == origProfile {
|
||||||
assumeRoleSrc = *cfg
|
assumeRoleSrc = *cfg
|
||||||
@ -171,45 +191,59 @@ func (cfg *sharedConfig) setFromIniFiles(profile string, files []sharedConfigFil
|
|||||||
// if a config file only includes aws_access_key_id but no aws_secret_access_key
|
// if a config file only includes aws_access_key_id but no aws_secret_access_key
|
||||||
// the aws_access_key_id will be ignored.
|
// the aws_access_key_id will be ignored.
|
||||||
func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile) error {
|
func (cfg *sharedConfig) setFromIniFile(profile string, file sharedConfigFile) error {
|
||||||
section, err := file.IniData.GetSection(profile)
|
section, ok := file.IniData.GetSection(profile)
|
||||||
if err != nil {
|
if !ok {
|
||||||
// Fallback to to alternate profile name: profile <name>
|
// Fallback to to alternate profile name: profile <name>
|
||||||
section, err = file.IniData.GetSection(fmt.Sprintf("profile %s", profile))
|
section, ok = file.IniData.GetSection(fmt.Sprintf("profile %s", profile))
|
||||||
if err != nil {
|
if !ok {
|
||||||
return SharedConfigProfileNotExistsError{Profile: profile, Err: err}
|
return SharedConfigProfileNotExistsError{Profile: profile, Err: nil}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Shared Credentials
|
// Shared Credentials
|
||||||
akid := section.Key(accessKeyIDKey).String()
|
akid := section.String(accessKeyIDKey)
|
||||||
secret := section.Key(secretAccessKey).String()
|
secret := section.String(secretAccessKey)
|
||||||
if len(akid) > 0 && len(secret) > 0 {
|
if len(akid) > 0 && len(secret) > 0 {
|
||||||
cfg.Creds = credentials.Value{
|
cfg.Creds = credentials.Value{
|
||||||
AccessKeyID: akid,
|
AccessKeyID: akid,
|
||||||
SecretAccessKey: secret,
|
SecretAccessKey: secret,
|
||||||
SessionToken: section.Key(sessionTokenKey).String(),
|
SessionToken: section.String(sessionTokenKey),
|
||||||
ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename),
|
ProviderName: fmt.Sprintf("SharedConfigCredentials: %s", file.Filename),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Assume Role
|
// Assume Role
|
||||||
roleArn := section.Key(roleArnKey).String()
|
roleArn := section.String(roleArnKey)
|
||||||
srcProfile := section.Key(sourceProfileKey).String()
|
srcProfile := section.String(sourceProfileKey)
|
||||||
if len(roleArn) > 0 && len(srcProfile) > 0 {
|
credentialSource := section.String(credentialSourceKey)
|
||||||
|
hasSource := len(srcProfile) > 0 || len(credentialSource) > 0
|
||||||
|
if len(roleArn) > 0 && hasSource {
|
||||||
cfg.AssumeRole = assumeRoleConfig{
|
cfg.AssumeRole = assumeRoleConfig{
|
||||||
RoleARN: roleArn,
|
RoleARN: roleArn,
|
||||||
SourceProfile: srcProfile,
|
SourceProfile: srcProfile,
|
||||||
ExternalID: section.Key(externalIDKey).String(),
|
CredentialSource: credentialSource,
|
||||||
MFASerial: section.Key(mfaSerialKey).String(),
|
ExternalID: section.String(externalIDKey),
|
||||||
RoleSessionName: section.Key(roleSessionNameKey).String(),
|
MFASerial: section.String(mfaSerialKey),
|
||||||
|
RoleSessionName: section.String(roleSessionNameKey),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// `credential_process`
|
||||||
|
if credProc := section.String(credentialProcessKey); len(credProc) > 0 {
|
||||||
|
cfg.CredentialProcess = credProc
|
||||||
|
}
|
||||||
|
|
||||||
// Region
|
// Region
|
||||||
if v := section.Key(regionKey).String(); len(v) > 0 {
|
if v := section.String(regionKey); len(v) > 0 {
|
||||||
cfg.Region = v
|
cfg.Region = v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Endpoint discovery
|
||||||
|
if section.Has(enableEndpointDiscoveryKey) {
|
||||||
|
v := section.Bool(enableEndpointDiscoveryKey)
|
||||||
|
cfg.EnableEndpointDiscovery = &v
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
70
vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
generated
vendored
70
vendor/github.com/aws/aws-sdk-go/aws/signer/v4/v4.go
generated
vendored
@ -98,25 +98,25 @@ var ignoredHeaders = rules{
|
|||||||
var requiredSignedHeaders = rules{
|
var requiredSignedHeaders = rules{
|
||||||
whitelist{
|
whitelist{
|
||||||
mapRule{
|
mapRule{
|
||||||
"Cache-Control": struct{}{},
|
"Cache-Control": struct{}{},
|
||||||
"Content-Disposition": struct{}{},
|
"Content-Disposition": struct{}{},
|
||||||
"Content-Encoding": struct{}{},
|
"Content-Encoding": struct{}{},
|
||||||
"Content-Language": struct{}{},
|
"Content-Language": struct{}{},
|
||||||
"Content-Md5": struct{}{},
|
"Content-Md5": struct{}{},
|
||||||
"Content-Type": struct{}{},
|
"Content-Type": struct{}{},
|
||||||
"Expires": struct{}{},
|
"Expires": struct{}{},
|
||||||
"If-Match": struct{}{},
|
"If-Match": struct{}{},
|
||||||
"If-Modified-Since": struct{}{},
|
"If-Modified-Since": struct{}{},
|
||||||
"If-None-Match": struct{}{},
|
"If-None-Match": struct{}{},
|
||||||
"If-Unmodified-Since": struct{}{},
|
"If-Unmodified-Since": struct{}{},
|
||||||
"Range": struct{}{},
|
"Range": struct{}{},
|
||||||
"X-Amz-Acl": struct{}{},
|
"X-Amz-Acl": struct{}{},
|
||||||
"X-Amz-Copy-Source": struct{}{},
|
"X-Amz-Copy-Source": struct{}{},
|
||||||
"X-Amz-Copy-Source-If-Match": struct{}{},
|
"X-Amz-Copy-Source-If-Match": struct{}{},
|
||||||
"X-Amz-Copy-Source-If-Modified-Since": struct{}{},
|
"X-Amz-Copy-Source-If-Modified-Since": struct{}{},
|
||||||
"X-Amz-Copy-Source-If-None-Match": struct{}{},
|
"X-Amz-Copy-Source-If-None-Match": struct{}{},
|
||||||
"X-Amz-Copy-Source-If-Unmodified-Since": struct{}{},
|
"X-Amz-Copy-Source-If-Unmodified-Since": struct{}{},
|
||||||
"X-Amz-Copy-Source-Range": struct{}{},
|
"X-Amz-Copy-Source-Range": struct{}{},
|
||||||
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{},
|
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Algorithm": struct{}{},
|
||||||
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{},
|
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key": struct{}{},
|
||||||
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
"X-Amz-Copy-Source-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
||||||
@ -134,6 +134,7 @@ var requiredSignedHeaders = rules{
|
|||||||
"X-Amz-Server-Side-Encryption-Customer-Key": struct{}{},
|
"X-Amz-Server-Side-Encryption-Customer-Key": struct{}{},
|
||||||
"X-Amz-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
"X-Amz-Server-Side-Encryption-Customer-Key-Md5": struct{}{},
|
||||||
"X-Amz-Storage-Class": struct{}{},
|
"X-Amz-Storage-Class": struct{}{},
|
||||||
|
"X-Amz-Tagging": struct{}{},
|
||||||
"X-Amz-Website-Redirect-Location": struct{}{},
|
"X-Amz-Website-Redirect-Location": struct{}{},
|
||||||
"X-Amz-Content-Sha256": struct{}{},
|
"X-Amz-Content-Sha256": struct{}{},
|
||||||
},
|
},
|
||||||
@ -421,7 +422,7 @@ var SignRequestHandler = request.NamedHandler{
|
|||||||
// If the credentials of the request's config are set to
|
// If the credentials of the request's config are set to
|
||||||
// credentials.AnonymousCredentials the request will not be signed.
|
// credentials.AnonymousCredentials the request will not be signed.
|
||||||
func SignSDKRequest(req *request.Request) {
|
func SignSDKRequest(req *request.Request) {
|
||||||
signSDKRequestWithCurrTime(req, time.Now)
|
SignSDKRequestWithCurrentTime(req, time.Now)
|
||||||
}
|
}
|
||||||
|
|
||||||
// BuildNamedHandler will build a generic handler for signing.
|
// BuildNamedHandler will build a generic handler for signing.
|
||||||
@ -429,12 +430,15 @@ func BuildNamedHandler(name string, opts ...func(*Signer)) request.NamedHandler
|
|||||||
return request.NamedHandler{
|
return request.NamedHandler{
|
||||||
Name: name,
|
Name: name,
|
||||||
Fn: func(req *request.Request) {
|
Fn: func(req *request.Request) {
|
||||||
signSDKRequestWithCurrTime(req, time.Now, opts...)
|
SignSDKRequestWithCurrentTime(req, time.Now, opts...)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) {
|
// SignSDKRequestWithCurrentTime will sign the SDK's request using the time
|
||||||
|
// function passed in. Behaves the same as SignSDKRequest with the exception
|
||||||
|
// the request is signed with the value returned by the current time function.
|
||||||
|
func SignSDKRequestWithCurrentTime(req *request.Request, curTimeFn func() time.Time, opts ...func(*Signer)) {
|
||||||
// If the request does not need to be signed ignore the signing of the
|
// If the request does not need to be signed ignore the signing of the
|
||||||
// request if the AnonymousCredentials object is used.
|
// request if the AnonymousCredentials object is used.
|
||||||
if req.Config.Credentials == credentials.AnonymousCredentials {
|
if req.Config.Credentials == credentials.AnonymousCredentials {
|
||||||
@ -470,13 +474,9 @@ func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time
|
|||||||
opt(v4)
|
opt(v4)
|
||||||
}
|
}
|
||||||
|
|
||||||
signingTime := req.Time
|
curTime := curTimeFn()
|
||||||
if !req.LastSignedAt.IsZero() {
|
|
||||||
signingTime = req.LastSignedAt
|
|
||||||
}
|
|
||||||
|
|
||||||
signedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(),
|
signedHeaders, err := v4.signWithBody(req.HTTPRequest, req.GetBody(),
|
||||||
name, region, req.ExpireTime, req.ExpireTime > 0, signingTime,
|
name, region, req.ExpireTime, req.ExpireTime > 0, curTime,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
req.Error = err
|
req.Error = err
|
||||||
@ -485,7 +485,7 @@ func signSDKRequestWithCurrTime(req *request.Request, curTimeFn func() time.Time
|
|||||||
}
|
}
|
||||||
|
|
||||||
req.SignedHeaderVals = signedHeaders
|
req.SignedHeaderVals = signedHeaders
|
||||||
req.LastSignedAt = curTimeFn()
|
req.LastSignedAt = curTime
|
||||||
}
|
}
|
||||||
|
|
||||||
const logSignInfoMsg = `DEBUG: Request Signature:
|
const logSignInfoMsg = `DEBUG: Request Signature:
|
||||||
@ -739,14 +739,22 @@ func makeSha256Reader(reader io.ReadSeeker) []byte {
|
|||||||
start, _ := reader.Seek(0, sdkio.SeekCurrent)
|
start, _ := reader.Seek(0, sdkio.SeekCurrent)
|
||||||
defer reader.Seek(start, sdkio.SeekStart)
|
defer reader.Seek(start, sdkio.SeekStart)
|
||||||
|
|
||||||
io.Copy(hash, reader)
|
// Use CopyN to avoid allocating the 32KB buffer in io.Copy for bodies
|
||||||
|
// smaller than 32KB. Fall back to io.Copy if we fail to determine the size.
|
||||||
|
size, err := aws.SeekerLen(reader)
|
||||||
|
if err != nil {
|
||||||
|
io.Copy(hash, reader)
|
||||||
|
} else {
|
||||||
|
io.CopyN(hash, reader, size)
|
||||||
|
}
|
||||||
|
|
||||||
return hash.Sum(nil)
|
return hash.Sum(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
const doubleSpace = " "
|
const doubleSpace = " "
|
||||||
|
|
||||||
// stripExcessSpaces will rewrite the passed in slice's string values to not
|
// stripExcessSpaces will rewrite the passed in slice's string values to not
|
||||||
// contain muliple side-by-side spaces.
|
// contain multiple side-by-side spaces.
|
||||||
func stripExcessSpaces(vals []string) {
|
func stripExcessSpaces(vals []string) {
|
||||||
var j, k, l, m, spaces int
|
var j, k, l, m, spaces int
|
||||||
for i, str := range vals {
|
for i, str := range vals {
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/aws/version.go
generated
vendored
@ -5,4 +5,4 @@ package aws
|
|||||||
const SDKName = "aws-sdk-go"
|
const SDKName = "aws-sdk-go"
|
||||||
|
|
||||||
// SDKVersion is the version of this SDK
|
// SDKVersion is the version of this SDK
|
||||||
const SDKVersion = "1.14.12"
|
const SDKVersion = "1.16.15"
|
||||||
|
120
vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go
generated
vendored
Normal file
120
vendor/github.com/aws/aws-sdk-go/internal/ini/ast.go
generated
vendored
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
// ASTKind represents different states in the parse table
|
||||||
|
// and the type of AST that is being constructed
|
||||||
|
type ASTKind int
|
||||||
|
|
||||||
|
// ASTKind* is used in the parse table to transition between
|
||||||
|
// the different states
|
||||||
|
const (
|
||||||
|
ASTKindNone = ASTKind(iota)
|
||||||
|
ASTKindStart
|
||||||
|
ASTKindExpr
|
||||||
|
ASTKindEqualExpr
|
||||||
|
ASTKindStatement
|
||||||
|
ASTKindSkipStatement
|
||||||
|
ASTKindExprStatement
|
||||||
|
ASTKindSectionStatement
|
||||||
|
ASTKindNestedSectionStatement
|
||||||
|
ASTKindCompletedNestedSectionStatement
|
||||||
|
ASTKindCommentStatement
|
||||||
|
ASTKindCompletedSectionStatement
|
||||||
|
)
|
||||||
|
|
||||||
|
func (k ASTKind) String() string {
|
||||||
|
switch k {
|
||||||
|
case ASTKindNone:
|
||||||
|
return "none"
|
||||||
|
case ASTKindStart:
|
||||||
|
return "start"
|
||||||
|
case ASTKindExpr:
|
||||||
|
return "expr"
|
||||||
|
case ASTKindStatement:
|
||||||
|
return "stmt"
|
||||||
|
case ASTKindSectionStatement:
|
||||||
|
return "section_stmt"
|
||||||
|
case ASTKindExprStatement:
|
||||||
|
return "expr_stmt"
|
||||||
|
case ASTKindCommentStatement:
|
||||||
|
return "comment"
|
||||||
|
case ASTKindNestedSectionStatement:
|
||||||
|
return "nested_section_stmt"
|
||||||
|
case ASTKindCompletedSectionStatement:
|
||||||
|
return "completed_stmt"
|
||||||
|
case ASTKindSkipStatement:
|
||||||
|
return "skip"
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AST interface allows us to determine what kind of node we
|
||||||
|
// are on and casting may not need to be necessary.
|
||||||
|
//
|
||||||
|
// The root is always the first node in Children
|
||||||
|
type AST struct {
|
||||||
|
Kind ASTKind
|
||||||
|
Root Token
|
||||||
|
RootToken bool
|
||||||
|
Children []AST
|
||||||
|
}
|
||||||
|
|
||||||
|
func newAST(kind ASTKind, root AST, children ...AST) AST {
|
||||||
|
return AST{
|
||||||
|
Kind: kind,
|
||||||
|
Children: append([]AST{root}, children...),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newASTWithRootToken(kind ASTKind, root Token, children ...AST) AST {
|
||||||
|
return AST{
|
||||||
|
Kind: kind,
|
||||||
|
Root: root,
|
||||||
|
RootToken: true,
|
||||||
|
Children: children,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// AppendChild will append to the list of children an AST has.
|
||||||
|
func (a *AST) AppendChild(child AST) {
|
||||||
|
a.Children = append(a.Children, child)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRoot will return the root AST which can be the first entry
|
||||||
|
// in the children list or a token.
|
||||||
|
func (a *AST) GetRoot() AST {
|
||||||
|
if a.RootToken {
|
||||||
|
return *a
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(a.Children) == 0 {
|
||||||
|
return AST{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.Children[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetChildren will return the current AST's list of children
|
||||||
|
func (a *AST) GetChildren() []AST {
|
||||||
|
if len(a.Children) == 0 {
|
||||||
|
return []AST{}
|
||||||
|
}
|
||||||
|
|
||||||
|
if a.RootToken {
|
||||||
|
return a.Children
|
||||||
|
}
|
||||||
|
|
||||||
|
return a.Children[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetChildren will set and override all children of the AST.
|
||||||
|
func (a *AST) SetChildren(children []AST) {
|
||||||
|
if a.RootToken {
|
||||||
|
a.Children = children
|
||||||
|
} else {
|
||||||
|
a.Children = append(a.Children[:1], children...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start is used to indicate the starting state of the parse table.
|
||||||
|
var Start = newAST(ASTKindStart, AST{})
|
11
vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go
generated
vendored
Normal file
11
vendor/github.com/aws/aws-sdk-go/internal/ini/comma_token.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
var commaRunes = []rune(",")
|
||||||
|
|
||||||
|
func isComma(b rune) bool {
|
||||||
|
return b == ','
|
||||||
|
}
|
||||||
|
|
||||||
|
func newCommaToken() Token {
|
||||||
|
return newToken(TokenComma, commaRunes, NoneType)
|
||||||
|
}
|
35
vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go
generated
vendored
Normal file
35
vendor/github.com/aws/aws-sdk-go/internal/ini/comment_token.go
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
// isComment will return whether or not the next byte(s) is a
|
||||||
|
// comment.
|
||||||
|
func isComment(b []rune) bool {
|
||||||
|
if len(b) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch b[0] {
|
||||||
|
case ';':
|
||||||
|
return true
|
||||||
|
case '#':
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// newCommentToken will create a comment token and
|
||||||
|
// return how many bytes were read.
|
||||||
|
func newCommentToken(b []rune) (Token, int, error) {
|
||||||
|
i := 0
|
||||||
|
for ; i < len(b); i++ {
|
||||||
|
if b[i] == '\n' {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(b)-i > 2 && b[i] == '\r' && b[i+1] == '\n' {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newToken(TokenComment, b[:i], NoneType), i, nil
|
||||||
|
}
|
29
vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go
generated
vendored
Normal file
29
vendor/github.com/aws/aws-sdk-go/internal/ini/doc.go
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
// Package ini is an LL(1) parser for configuration files.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// sections, err := ini.OpenFile("/path/to/file")
|
||||||
|
// if err != nil {
|
||||||
|
// panic(err)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// profile := "foo"
|
||||||
|
// section, ok := sections.GetSection(profile)
|
||||||
|
// if !ok {
|
||||||
|
// fmt.Printf("section %q could not be found", profile)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Below is the BNF that describes this parser
|
||||||
|
// Grammar:
|
||||||
|
// stmt -> value stmt'
|
||||||
|
// stmt' -> epsilon | op stmt
|
||||||
|
// value -> number | string | boolean | quoted_string
|
||||||
|
//
|
||||||
|
// section -> [ section'
|
||||||
|
// section' -> value section_close
|
||||||
|
// section_close -> ]
|
||||||
|
//
|
||||||
|
// SkipState will skip (NL WS)+
|
||||||
|
//
|
||||||
|
// comment -> # comment' | ; comment'
|
||||||
|
// comment' -> epsilon | value
|
||||||
|
package ini
|
4
vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go
generated
vendored
Normal file
4
vendor/github.com/aws/aws-sdk-go/internal/ini/empty_token.go
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
// emptyToken is used to satisfy the Token interface
|
||||||
|
var emptyToken = newToken(TokenNone, []rune{}, NoneType)
|
24
vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go
generated
vendored
Normal file
24
vendor/github.com/aws/aws-sdk-go/internal/ini/expression.go
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
// newExpression will return an expression AST.
|
||||||
|
// Expr represents an expression
|
||||||
|
//
|
||||||
|
// grammar:
|
||||||
|
// expr -> string | number
|
||||||
|
func newExpression(tok Token) AST {
|
||||||
|
return newASTWithRootToken(ASTKindExpr, tok)
|
||||||
|
}
|
||||||
|
|
||||||
|
func newEqualExpr(left AST, tok Token) AST {
|
||||||
|
return newASTWithRootToken(ASTKindEqualExpr, tok, left)
|
||||||
|
}
|
||||||
|
|
||||||
|
// EqualExprKey will return a LHS value in the equal expr
|
||||||
|
func EqualExprKey(ast AST) string {
|
||||||
|
children := ast.GetChildren()
|
||||||
|
if len(children) == 0 || ast.Kind != ASTKindEqualExpr {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(children[0].Root.Raw())
|
||||||
|
}
|
17
vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go
generated
vendored
Normal file
17
vendor/github.com/aws/aws-sdk-go/internal/ini/fuzz.go
generated
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// +build gofuzz
|
||||||
|
|
||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Fuzz(data []byte) int {
|
||||||
|
b := bytes.NewReader(data)
|
||||||
|
|
||||||
|
if _, err := Parse(b); err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
51
vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go
generated
vendored
Normal file
51
vendor/github.com/aws/aws-sdk-go/internal/ini/ini.go
generated
vendored
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OpenFile takes a path to a given file, and will open and parse
|
||||||
|
// that file.
|
||||||
|
func OpenFile(path string) (Sections, error) {
|
||||||
|
f, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return Sections{}, awserr.New(ErrCodeUnableToReadFile, "unable to open file", err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
return Parse(f)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse will parse the given file using the shared config
|
||||||
|
// visitor.
|
||||||
|
func Parse(f io.Reader) (Sections, error) {
|
||||||
|
tree, err := ParseAST(f)
|
||||||
|
if err != nil {
|
||||||
|
return Sections{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := NewDefaultVisitor()
|
||||||
|
if err = Walk(tree, v); err != nil {
|
||||||
|
return Sections{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return v.Sections, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseBytes will parse the given bytes and return the parsed sections.
|
||||||
|
func ParseBytes(b []byte) (Sections, error) {
|
||||||
|
tree, err := ParseASTBytes(b)
|
||||||
|
if err != nil {
|
||||||
|
return Sections{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
v := NewDefaultVisitor()
|
||||||
|
if err = Walk(tree, v); err != nil {
|
||||||
|
return Sections{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return v.Sections, nil
|
||||||
|
}
|
165
vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go
generated
vendored
Normal file
165
vendor/github.com/aws/aws-sdk-go/internal/ini/ini_lexer.go
generated
vendored
Normal file
@ -0,0 +1,165 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ErrCodeUnableToReadFile is used when a file is failed to be
|
||||||
|
// opened or read from.
|
||||||
|
ErrCodeUnableToReadFile = "FailedRead"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TokenType represents the various different tokens types
|
||||||
|
type TokenType int
|
||||||
|
|
||||||
|
func (t TokenType) String() string {
|
||||||
|
switch t {
|
||||||
|
case TokenNone:
|
||||||
|
return "none"
|
||||||
|
case TokenLit:
|
||||||
|
return "literal"
|
||||||
|
case TokenSep:
|
||||||
|
return "sep"
|
||||||
|
case TokenOp:
|
||||||
|
return "op"
|
||||||
|
case TokenWS:
|
||||||
|
return "ws"
|
||||||
|
case TokenNL:
|
||||||
|
return "newline"
|
||||||
|
case TokenComment:
|
||||||
|
return "comment"
|
||||||
|
case TokenComma:
|
||||||
|
return "comma"
|
||||||
|
default:
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TokenType enums
|
||||||
|
const (
|
||||||
|
TokenNone = TokenType(iota)
|
||||||
|
TokenLit
|
||||||
|
TokenSep
|
||||||
|
TokenComma
|
||||||
|
TokenOp
|
||||||
|
TokenWS
|
||||||
|
TokenNL
|
||||||
|
TokenComment
|
||||||
|
)
|
||||||
|
|
||||||
|
type iniLexer struct{}
|
||||||
|
|
||||||
|
// Tokenize will return a list of tokens during lexical analysis of the
|
||||||
|
// io.Reader.
|
||||||
|
func (l *iniLexer) Tokenize(r io.Reader) ([]Token, error) {
|
||||||
|
b, err := ioutil.ReadAll(r)
|
||||||
|
if err != nil {
|
||||||
|
return nil, awserr.New(ErrCodeUnableToReadFile, "unable to read file", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return l.tokenize(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *iniLexer) tokenize(b []byte) ([]Token, error) {
|
||||||
|
runes := bytes.Runes(b)
|
||||||
|
var err error
|
||||||
|
n := 0
|
||||||
|
tokenAmount := countTokens(runes)
|
||||||
|
tokens := make([]Token, tokenAmount)
|
||||||
|
count := 0
|
||||||
|
|
||||||
|
for len(runes) > 0 && count < tokenAmount {
|
||||||
|
switch {
|
||||||
|
case isWhitespace(runes[0]):
|
||||||
|
tokens[count], n, err = newWSToken(runes)
|
||||||
|
case isComma(runes[0]):
|
||||||
|
tokens[count], n = newCommaToken(), 1
|
||||||
|
case isComment(runes):
|
||||||
|
tokens[count], n, err = newCommentToken(runes)
|
||||||
|
case isNewline(runes):
|
||||||
|
tokens[count], n, err = newNewlineToken(runes)
|
||||||
|
case isSep(runes):
|
||||||
|
tokens[count], n, err = newSepToken(runes)
|
||||||
|
case isOp(runes):
|
||||||
|
tokens[count], n, err = newOpToken(runes)
|
||||||
|
default:
|
||||||
|
tokens[count], n, err = newLitToken(runes)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
count++
|
||||||
|
|
||||||
|
runes = runes[n:]
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokens[:count], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func countTokens(runes []rune) int {
|
||||||
|
count, n := 0, 0
|
||||||
|
var err error
|
||||||
|
|
||||||
|
for len(runes) > 0 {
|
||||||
|
switch {
|
||||||
|
case isWhitespace(runes[0]):
|
||||||
|
_, n, err = newWSToken(runes)
|
||||||
|
case isComma(runes[0]):
|
||||||
|
_, n = newCommaToken(), 1
|
||||||
|
case isComment(runes):
|
||||||
|
_, n, err = newCommentToken(runes)
|
||||||
|
case isNewline(runes):
|
||||||
|
_, n, err = newNewlineToken(runes)
|
||||||
|
case isSep(runes):
|
||||||
|
_, n, err = newSepToken(runes)
|
||||||
|
case isOp(runes):
|
||||||
|
_, n, err = newOpToken(runes)
|
||||||
|
default:
|
||||||
|
_, n, err = newLitToken(runes)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
count++
|
||||||
|
runes = runes[n:]
|
||||||
|
}
|
||||||
|
|
||||||
|
return count + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Token indicates a metadata about a given value.
|
||||||
|
type Token struct {
|
||||||
|
t TokenType
|
||||||
|
ValueType ValueType
|
||||||
|
base int
|
||||||
|
raw []rune
|
||||||
|
}
|
||||||
|
|
||||||
|
var emptyValue = Value{}
|
||||||
|
|
||||||
|
func newToken(t TokenType, raw []rune, v ValueType) Token {
|
||||||
|
return Token{
|
||||||
|
t: t,
|
||||||
|
raw: raw,
|
||||||
|
ValueType: v,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Raw return the raw runes that were consumed
|
||||||
|
func (tok Token) Raw() []rune {
|
||||||
|
return tok.raw
|
||||||
|
}
|
||||||
|
|
||||||
|
// Type returns the token type
|
||||||
|
func (tok Token) Type() TokenType {
|
||||||
|
return tok.t
|
||||||
|
}
|
347
vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go
generated
vendored
Normal file
347
vendor/github.com/aws/aws-sdk-go/internal/ini/ini_parser.go
generated
vendored
Normal file
@ -0,0 +1,347 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
)
|
||||||
|
|
||||||
|
// State enums for the parse table
|
||||||
|
const (
|
||||||
|
InvalidState = iota
|
||||||
|
// stmt -> value stmt'
|
||||||
|
StatementState
|
||||||
|
// stmt' -> MarkComplete | op stmt
|
||||||
|
StatementPrimeState
|
||||||
|
// value -> number | string | boolean | quoted_string
|
||||||
|
ValueState
|
||||||
|
// section -> [ section'
|
||||||
|
OpenScopeState
|
||||||
|
// section' -> value section_close
|
||||||
|
SectionState
|
||||||
|
// section_close -> ]
|
||||||
|
CloseScopeState
|
||||||
|
// SkipState will skip (NL WS)+
|
||||||
|
SkipState
|
||||||
|
// SkipTokenState will skip any token and push the previous
|
||||||
|
// state onto the stack.
|
||||||
|
SkipTokenState
|
||||||
|
// comment -> # comment' | ; comment'
|
||||||
|
// comment' -> MarkComplete | value
|
||||||
|
CommentState
|
||||||
|
// MarkComplete state will complete statements and move that
|
||||||
|
// to the completed AST list
|
||||||
|
MarkCompleteState
|
||||||
|
// TerminalState signifies that the tokens have been fully parsed
|
||||||
|
TerminalState
|
||||||
|
)
|
||||||
|
|
||||||
|
// parseTable is a state machine to dictate the grammar above.
|
||||||
|
var parseTable = map[ASTKind]map[TokenType]int{
|
||||||
|
ASTKindStart: map[TokenType]int{
|
||||||
|
TokenLit: StatementState,
|
||||||
|
TokenSep: OpenScopeState,
|
||||||
|
TokenWS: SkipTokenState,
|
||||||
|
TokenNL: SkipTokenState,
|
||||||
|
TokenComment: CommentState,
|
||||||
|
TokenNone: TerminalState,
|
||||||
|
},
|
||||||
|
ASTKindCommentStatement: map[TokenType]int{
|
||||||
|
TokenLit: StatementState,
|
||||||
|
TokenSep: OpenScopeState,
|
||||||
|
TokenWS: SkipTokenState,
|
||||||
|
TokenNL: SkipTokenState,
|
||||||
|
TokenComment: CommentState,
|
||||||
|
TokenNone: MarkCompleteState,
|
||||||
|
},
|
||||||
|
ASTKindExpr: map[TokenType]int{
|
||||||
|
TokenOp: StatementPrimeState,
|
||||||
|
TokenLit: ValueState,
|
||||||
|
TokenSep: OpenScopeState,
|
||||||
|
TokenWS: ValueState,
|
||||||
|
TokenNL: SkipState,
|
||||||
|
TokenComment: CommentState,
|
||||||
|
TokenNone: MarkCompleteState,
|
||||||
|
},
|
||||||
|
ASTKindEqualExpr: map[TokenType]int{
|
||||||
|
TokenLit: ValueState,
|
||||||
|
TokenWS: SkipTokenState,
|
||||||
|
TokenNL: SkipState,
|
||||||
|
},
|
||||||
|
ASTKindStatement: map[TokenType]int{
|
||||||
|
TokenLit: SectionState,
|
||||||
|
TokenSep: CloseScopeState,
|
||||||
|
TokenWS: SkipTokenState,
|
||||||
|
TokenNL: SkipTokenState,
|
||||||
|
TokenComment: CommentState,
|
||||||
|
TokenNone: MarkCompleteState,
|
||||||
|
},
|
||||||
|
ASTKindExprStatement: map[TokenType]int{
|
||||||
|
TokenLit: ValueState,
|
||||||
|
TokenSep: OpenScopeState,
|
||||||
|
TokenOp: ValueState,
|
||||||
|
TokenWS: ValueState,
|
||||||
|
TokenNL: MarkCompleteState,
|
||||||
|
TokenComment: CommentState,
|
||||||
|
TokenNone: TerminalState,
|
||||||
|
TokenComma: SkipState,
|
||||||
|
},
|
||||||
|
ASTKindSectionStatement: map[TokenType]int{
|
||||||
|
TokenLit: SectionState,
|
||||||
|
TokenOp: SectionState,
|
||||||
|
TokenSep: CloseScopeState,
|
||||||
|
TokenWS: SectionState,
|
||||||
|
TokenNL: SkipTokenState,
|
||||||
|
},
|
||||||
|
ASTKindCompletedSectionStatement: map[TokenType]int{
|
||||||
|
TokenWS: SkipTokenState,
|
||||||
|
TokenNL: SkipTokenState,
|
||||||
|
TokenLit: StatementState,
|
||||||
|
TokenSep: OpenScopeState,
|
||||||
|
TokenComment: CommentState,
|
||||||
|
TokenNone: MarkCompleteState,
|
||||||
|
},
|
||||||
|
ASTKindSkipStatement: map[TokenType]int{
|
||||||
|
TokenLit: StatementState,
|
||||||
|
TokenSep: OpenScopeState,
|
||||||
|
TokenWS: SkipTokenState,
|
||||||
|
TokenNL: SkipTokenState,
|
||||||
|
TokenComment: CommentState,
|
||||||
|
TokenNone: TerminalState,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseAST will parse input from an io.Reader using
|
||||||
|
// an LL(1) parser.
|
||||||
|
func ParseAST(r io.Reader) ([]AST, error) {
|
||||||
|
lexer := iniLexer{}
|
||||||
|
tokens, err := lexer.Tokenize(r)
|
||||||
|
if err != nil {
|
||||||
|
return []AST{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return parse(tokens)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseASTBytes will parse input from a byte slice using
|
||||||
|
// an LL(1) parser.
|
||||||
|
func ParseASTBytes(b []byte) ([]AST, error) {
|
||||||
|
lexer := iniLexer{}
|
||||||
|
tokens, err := lexer.tokenize(b)
|
||||||
|
if err != nil {
|
||||||
|
return []AST{}, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return parse(tokens)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parse(tokens []Token) ([]AST, error) {
|
||||||
|
start := Start
|
||||||
|
stack := newParseStack(3, len(tokens))
|
||||||
|
|
||||||
|
stack.Push(start)
|
||||||
|
s := newSkipper()
|
||||||
|
|
||||||
|
loop:
|
||||||
|
for stack.Len() > 0 {
|
||||||
|
k := stack.Pop()
|
||||||
|
|
||||||
|
var tok Token
|
||||||
|
if len(tokens) == 0 {
|
||||||
|
// this occurs when all the tokens have been processed
|
||||||
|
// but reduction of what's left on the stack needs to
|
||||||
|
// occur.
|
||||||
|
tok = emptyToken
|
||||||
|
} else {
|
||||||
|
tok = tokens[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
step := parseTable[k.Kind][tok.Type()]
|
||||||
|
if s.ShouldSkip(tok) {
|
||||||
|
// being in a skip state with no tokens will break out of
|
||||||
|
// the parse loop since there is nothing left to process.
|
||||||
|
if len(tokens) == 0 {
|
||||||
|
break loop
|
||||||
|
}
|
||||||
|
|
||||||
|
step = SkipTokenState
|
||||||
|
}
|
||||||
|
|
||||||
|
switch step {
|
||||||
|
case TerminalState:
|
||||||
|
// Finished parsing. Push what should be the last
|
||||||
|
// statement to the stack. If there is anything left
|
||||||
|
// on the stack, an error in parsing has occurred.
|
||||||
|
if k.Kind != ASTKindStart {
|
||||||
|
stack.MarkComplete(k)
|
||||||
|
}
|
||||||
|
break loop
|
||||||
|
case SkipTokenState:
|
||||||
|
// When skipping a token, the previous state was popped off the stack.
|
||||||
|
// To maintain the correct state, the previous state will be pushed
|
||||||
|
// onto the stack.
|
||||||
|
stack.Push(k)
|
||||||
|
case StatementState:
|
||||||
|
if k.Kind != ASTKindStart {
|
||||||
|
stack.MarkComplete(k)
|
||||||
|
}
|
||||||
|
expr := newExpression(tok)
|
||||||
|
stack.Push(expr)
|
||||||
|
case StatementPrimeState:
|
||||||
|
if tok.Type() != TokenOp {
|
||||||
|
stack.MarkComplete(k)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if k.Kind != ASTKindExpr {
|
||||||
|
return nil, NewParseError(
|
||||||
|
fmt.Sprintf("invalid expression: expected Expr type, but found %T type", k),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
k = trimSpaces(k)
|
||||||
|
expr := newEqualExpr(k, tok)
|
||||||
|
stack.Push(expr)
|
||||||
|
case ValueState:
|
||||||
|
// ValueState requires the previous state to either be an equal expression
|
||||||
|
// or an expression statement.
|
||||||
|
//
|
||||||
|
// This grammar occurs when the RHS is a number, word, or quoted string.
|
||||||
|
// equal_expr -> lit op equal_expr'
|
||||||
|
// equal_expr' -> number | string | quoted_string
|
||||||
|
// quoted_string -> " quoted_string'
|
||||||
|
// quoted_string' -> string quoted_string_end
|
||||||
|
// quoted_string_end -> "
|
||||||
|
//
|
||||||
|
// otherwise
|
||||||
|
// expr_stmt -> equal_expr (expr_stmt')*
|
||||||
|
// expr_stmt' -> ws S | op S | MarkComplete
|
||||||
|
// S -> equal_expr' expr_stmt'
|
||||||
|
switch k.Kind {
|
||||||
|
case ASTKindEqualExpr:
|
||||||
|
// assiging a value to some key
|
||||||
|
k.AppendChild(newExpression(tok))
|
||||||
|
stack.Push(newExprStatement(k))
|
||||||
|
case ASTKindExpr:
|
||||||
|
k.Root.raw = append(k.Root.raw, tok.Raw()...)
|
||||||
|
stack.Push(k)
|
||||||
|
case ASTKindExprStatement:
|
||||||
|
root := k.GetRoot()
|
||||||
|
children := root.GetChildren()
|
||||||
|
if len(children) == 0 {
|
||||||
|
return nil, NewParseError(
|
||||||
|
fmt.Sprintf("invalid expression: AST contains no children %s", k.Kind),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
rhs := children[len(children)-1]
|
||||||
|
|
||||||
|
if rhs.Root.ValueType != QuotedStringType {
|
||||||
|
rhs.Root.ValueType = StringType
|
||||||
|
rhs.Root.raw = append(rhs.Root.raw, tok.Raw()...)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
children[len(children)-1] = rhs
|
||||||
|
k.SetChildren(children)
|
||||||
|
|
||||||
|
stack.Push(k)
|
||||||
|
}
|
||||||
|
case OpenScopeState:
|
||||||
|
if !runeCompare(tok.Raw(), openBrace) {
|
||||||
|
return nil, NewParseError("expected '['")
|
||||||
|
}
|
||||||
|
|
||||||
|
stmt := newStatement()
|
||||||
|
stack.Push(stmt)
|
||||||
|
case CloseScopeState:
|
||||||
|
if !runeCompare(tok.Raw(), closeBrace) {
|
||||||
|
return nil, NewParseError("expected ']'")
|
||||||
|
}
|
||||||
|
|
||||||
|
k = trimSpaces(k)
|
||||||
|
stack.Push(newCompletedSectionStatement(k))
|
||||||
|
case SectionState:
|
||||||
|
var stmt AST
|
||||||
|
|
||||||
|
switch k.Kind {
|
||||||
|
case ASTKindStatement:
|
||||||
|
// If there are multiple literals inside of a scope declaration,
|
||||||
|
// then the current token's raw value will be appended to the Name.
|
||||||
|
//
|
||||||
|
// This handles cases like [ profile default ]
|
||||||
|
//
|
||||||
|
// k will represent a SectionStatement with the children representing
|
||||||
|
// the label of the section
|
||||||
|
stmt = newSectionStatement(tok)
|
||||||
|
case ASTKindSectionStatement:
|
||||||
|
k.Root.raw = append(k.Root.raw, tok.Raw()...)
|
||||||
|
stmt = k
|
||||||
|
default:
|
||||||
|
return nil, NewParseError(
|
||||||
|
fmt.Sprintf("invalid statement: expected statement: %v", k.Kind),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
stack.Push(stmt)
|
||||||
|
case MarkCompleteState:
|
||||||
|
if k.Kind != ASTKindStart {
|
||||||
|
stack.MarkComplete(k)
|
||||||
|
}
|
||||||
|
|
||||||
|
if stack.Len() == 0 {
|
||||||
|
stack.Push(start)
|
||||||
|
}
|
||||||
|
case SkipState:
|
||||||
|
stack.Push(newSkipStatement(k))
|
||||||
|
s.Skip()
|
||||||
|
case CommentState:
|
||||||
|
if k.Kind == ASTKindStart {
|
||||||
|
stack.Push(k)
|
||||||
|
} else {
|
||||||
|
stack.MarkComplete(k)
|
||||||
|
}
|
||||||
|
|
||||||
|
stmt := newCommentStatement(tok)
|
||||||
|
stack.Push(stmt)
|
||||||
|
default:
|
||||||
|
return nil, NewParseError(fmt.Sprintf("invalid state with ASTKind %v and TokenType %v", k, tok))
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(tokens) > 0 {
|
||||||
|
tokens = tokens[1:]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// this occurs when a statement has not been completed
|
||||||
|
if stack.top > 1 {
|
||||||
|
return nil, NewParseError(fmt.Sprintf("incomplete expression: %v", stack.container))
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns a sublist which excludes the start symbol
|
||||||
|
return stack.List(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// trimSpaces will trim spaces on the left and right hand side of
|
||||||
|
// the literal.
|
||||||
|
func trimSpaces(k AST) AST {
|
||||||
|
// trim left hand side of spaces
|
||||||
|
for i := 0; i < len(k.Root.raw); i++ {
|
||||||
|
if !isWhitespace(k.Root.raw[i]) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
k.Root.raw = k.Root.raw[1:]
|
||||||
|
i--
|
||||||
|
}
|
||||||
|
|
||||||
|
// trim right hand side of spaces
|
||||||
|
for i := len(k.Root.raw) - 1; i >= 0; i-- {
|
||||||
|
if !isWhitespace(k.Root.raw[i]) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
k.Root.raw = k.Root.raw[:len(k.Root.raw)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
return k
|
||||||
|
}
|
324
vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go
generated
vendored
Normal file
324
vendor/github.com/aws/aws-sdk-go/internal/ini/literal_tokens.go
generated
vendored
Normal file
@ -0,0 +1,324 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
runesTrue = []rune("true")
|
||||||
|
runesFalse = []rune("false")
|
||||||
|
)
|
||||||
|
|
||||||
|
var literalValues = [][]rune{
|
||||||
|
runesTrue,
|
||||||
|
runesFalse,
|
||||||
|
}
|
||||||
|
|
||||||
|
func isBoolValue(b []rune) bool {
|
||||||
|
for _, lv := range literalValues {
|
||||||
|
if isLitValue(lv, b) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func isLitValue(want, have []rune) bool {
|
||||||
|
if len(have) < len(want) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < len(want); i++ {
|
||||||
|
if want[i] != have[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// isNumberValue will return whether not the leading characters in
|
||||||
|
// a byte slice is a number. A number is delimited by whitespace or
|
||||||
|
// the newline token.
|
||||||
|
//
|
||||||
|
// A number is defined to be in a binary, octal, decimal (int | float), hex format,
|
||||||
|
// or in scientific notation.
|
||||||
|
func isNumberValue(b []rune) bool {
|
||||||
|
negativeIndex := 0
|
||||||
|
helper := numberHelper{}
|
||||||
|
needDigit := false
|
||||||
|
|
||||||
|
for i := 0; i < len(b); i++ {
|
||||||
|
negativeIndex++
|
||||||
|
|
||||||
|
switch b[i] {
|
||||||
|
case '-':
|
||||||
|
if helper.IsNegative() || negativeIndex != 1 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
helper.Determine(b[i])
|
||||||
|
needDigit = true
|
||||||
|
continue
|
||||||
|
case 'e', 'E':
|
||||||
|
if err := helper.Determine(b[i]); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
negativeIndex = 0
|
||||||
|
needDigit = true
|
||||||
|
continue
|
||||||
|
case 'b':
|
||||||
|
if helper.numberFormat == hex {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
fallthrough
|
||||||
|
case 'o', 'x':
|
||||||
|
needDigit = true
|
||||||
|
if i == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fallthrough
|
||||||
|
case '.':
|
||||||
|
if err := helper.Determine(b[i]); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
needDigit = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if i > 0 && (isNewline(b[i:]) || isWhitespace(b[i])) {
|
||||||
|
return !needDigit
|
||||||
|
}
|
||||||
|
|
||||||
|
if !helper.CorrectByte(b[i]) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
needDigit = false
|
||||||
|
}
|
||||||
|
|
||||||
|
return !needDigit
|
||||||
|
}
|
||||||
|
|
||||||
|
func isValid(b []rune) (bool, int, error) {
|
||||||
|
if len(b) == 0 {
|
||||||
|
// TODO: should probably return an error
|
||||||
|
return false, 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return isValidRune(b[0]), 1, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func isValidRune(r rune) bool {
|
||||||
|
return r != ':' && r != '=' && r != '[' && r != ']' && r != ' ' && r != '\n'
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValueType is an enum that will signify what type
|
||||||
|
// the Value is
|
||||||
|
type ValueType int
|
||||||
|
|
||||||
|
func (v ValueType) String() string {
|
||||||
|
switch v {
|
||||||
|
case NoneType:
|
||||||
|
return "NONE"
|
||||||
|
case DecimalType:
|
||||||
|
return "FLOAT"
|
||||||
|
case IntegerType:
|
||||||
|
return "INT"
|
||||||
|
case StringType:
|
||||||
|
return "STRING"
|
||||||
|
case BoolType:
|
||||||
|
return "BOOL"
|
||||||
|
}
|
||||||
|
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValueType enums
|
||||||
|
const (
|
||||||
|
NoneType = ValueType(iota)
|
||||||
|
DecimalType
|
||||||
|
IntegerType
|
||||||
|
StringType
|
||||||
|
QuotedStringType
|
||||||
|
BoolType
|
||||||
|
)
|
||||||
|
|
||||||
|
// Value is a union container
|
||||||
|
type Value struct {
|
||||||
|
Type ValueType
|
||||||
|
raw []rune
|
||||||
|
|
||||||
|
integer int64
|
||||||
|
decimal float64
|
||||||
|
boolean bool
|
||||||
|
str string
|
||||||
|
}
|
||||||
|
|
||||||
|
func newValue(t ValueType, base int, raw []rune) (Value, error) {
|
||||||
|
v := Value{
|
||||||
|
Type: t,
|
||||||
|
raw: raw,
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
|
||||||
|
switch t {
|
||||||
|
case DecimalType:
|
||||||
|
v.decimal, err = strconv.ParseFloat(string(raw), 64)
|
||||||
|
case IntegerType:
|
||||||
|
if base != 10 {
|
||||||
|
raw = raw[2:]
|
||||||
|
}
|
||||||
|
|
||||||
|
v.integer, err = strconv.ParseInt(string(raw), base, 64)
|
||||||
|
case StringType:
|
||||||
|
v.str = string(raw)
|
||||||
|
case QuotedStringType:
|
||||||
|
v.str = string(raw[1 : len(raw)-1])
|
||||||
|
case BoolType:
|
||||||
|
v.boolean = runeCompare(v.raw, runesTrue)
|
||||||
|
}
|
||||||
|
|
||||||
|
// issue 2253
|
||||||
|
//
|
||||||
|
// if the value trying to be parsed is too large, then we will use
|
||||||
|
// the 'StringType' and raw value instead.
|
||||||
|
if nerr, ok := err.(*strconv.NumError); ok && nerr.Err == strconv.ErrRange {
|
||||||
|
v.Type = StringType
|
||||||
|
v.str = string(raw)
|
||||||
|
err = nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return v, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Append will append values and change the type to a string
|
||||||
|
// type.
|
||||||
|
func (v *Value) Append(tok Token) {
|
||||||
|
r := tok.Raw()
|
||||||
|
if v.Type != QuotedStringType {
|
||||||
|
v.Type = StringType
|
||||||
|
r = tok.raw[1 : len(tok.raw)-1]
|
||||||
|
}
|
||||||
|
if tok.Type() != TokenLit {
|
||||||
|
v.raw = append(v.raw, tok.Raw()...)
|
||||||
|
} else {
|
||||||
|
v.raw = append(v.raw, r...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v Value) String() string {
|
||||||
|
switch v.Type {
|
||||||
|
case DecimalType:
|
||||||
|
return fmt.Sprintf("decimal: %f", v.decimal)
|
||||||
|
case IntegerType:
|
||||||
|
return fmt.Sprintf("integer: %d", v.integer)
|
||||||
|
case StringType:
|
||||||
|
return fmt.Sprintf("string: %s", string(v.raw))
|
||||||
|
case QuotedStringType:
|
||||||
|
return fmt.Sprintf("quoted string: %s", string(v.raw))
|
||||||
|
case BoolType:
|
||||||
|
return fmt.Sprintf("bool: %t", v.boolean)
|
||||||
|
default:
|
||||||
|
return "union not set"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newLitToken(b []rune) (Token, int, error) {
|
||||||
|
n := 0
|
||||||
|
var err error
|
||||||
|
|
||||||
|
token := Token{}
|
||||||
|
if b[0] == '"' {
|
||||||
|
n, err = getStringValue(b)
|
||||||
|
if err != nil {
|
||||||
|
return token, n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
token = newToken(TokenLit, b[:n], QuotedStringType)
|
||||||
|
} else if isNumberValue(b) {
|
||||||
|
var base int
|
||||||
|
base, n, err = getNumericalValue(b)
|
||||||
|
if err != nil {
|
||||||
|
return token, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
value := b[:n]
|
||||||
|
vType := IntegerType
|
||||||
|
if contains(value, '.') || hasExponent(value) {
|
||||||
|
vType = DecimalType
|
||||||
|
}
|
||||||
|
token = newToken(TokenLit, value, vType)
|
||||||
|
token.base = base
|
||||||
|
} else if isBoolValue(b) {
|
||||||
|
n, err = getBoolValue(b)
|
||||||
|
|
||||||
|
token = newToken(TokenLit, b[:n], BoolType)
|
||||||
|
} else {
|
||||||
|
n, err = getValue(b)
|
||||||
|
token = newToken(TokenLit, b[:n], StringType)
|
||||||
|
}
|
||||||
|
|
||||||
|
return token, n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// IntValue returns an integer value
|
||||||
|
func (v Value) IntValue() int64 {
|
||||||
|
return v.integer
|
||||||
|
}
|
||||||
|
|
||||||
|
// FloatValue returns a float value
|
||||||
|
func (v Value) FloatValue() float64 {
|
||||||
|
return v.decimal
|
||||||
|
}
|
||||||
|
|
||||||
|
// BoolValue returns a bool value
|
||||||
|
func (v Value) BoolValue() bool {
|
||||||
|
return v.boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
func isTrimmable(r rune) bool {
|
||||||
|
switch r {
|
||||||
|
case '\n', ' ':
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringValue returns the string value
|
||||||
|
func (v Value) StringValue() string {
|
||||||
|
switch v.Type {
|
||||||
|
case StringType:
|
||||||
|
return strings.TrimFunc(string(v.raw), isTrimmable)
|
||||||
|
case QuotedStringType:
|
||||||
|
// preserve all characters in the quotes
|
||||||
|
return string(removeEscapedCharacters(v.raw[1 : len(v.raw)-1]))
|
||||||
|
default:
|
||||||
|
return strings.TrimFunc(string(v.raw), isTrimmable)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func contains(runes []rune, c rune) bool {
|
||||||
|
for i := 0; i < len(runes); i++ {
|
||||||
|
if runes[i] == c {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func runeCompare(v1 []rune, v2 []rune) bool {
|
||||||
|
if len(v1) != len(v2) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < len(v1); i++ {
|
||||||
|
if v1[i] != v2[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
30
vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go
generated
vendored
Normal file
30
vendor/github.com/aws/aws-sdk-go/internal/ini/newline_token.go
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
func isNewline(b []rune) bool {
|
||||||
|
if len(b) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if b[0] == '\n' {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(b) < 2 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return b[0] == '\r' && b[1] == '\n'
|
||||||
|
}
|
||||||
|
|
||||||
|
func newNewlineToken(b []rune) (Token, int, error) {
|
||||||
|
i := 1
|
||||||
|
if b[0] == '\r' && isNewline(b[1:]) {
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isNewline([]rune(b[:i])) {
|
||||||
|
return emptyToken, 0, NewParseError("invalid new line token")
|
||||||
|
}
|
||||||
|
|
||||||
|
return newToken(TokenNL, b[:i], NoneType), i, nil
|
||||||
|
}
|
152
vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go
generated
vendored
Normal file
152
vendor/github.com/aws/aws-sdk-go/internal/ini/number_helper.go
generated
vendored
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
none = numberFormat(iota)
|
||||||
|
binary
|
||||||
|
octal
|
||||||
|
decimal
|
||||||
|
hex
|
||||||
|
exponent
|
||||||
|
)
|
||||||
|
|
||||||
|
type numberFormat int
|
||||||
|
|
||||||
|
// numberHelper is used to dictate what format a number is in
|
||||||
|
// and what to do for negative values. Since -1e-4 is a valid
|
||||||
|
// number, we cannot just simply check for duplicate negatives.
|
||||||
|
type numberHelper struct {
|
||||||
|
numberFormat numberFormat
|
||||||
|
|
||||||
|
negative bool
|
||||||
|
negativeExponent bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b numberHelper) Exists() bool {
|
||||||
|
return b.numberFormat != none
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b numberHelper) IsNegative() bool {
|
||||||
|
return b.negative || b.negativeExponent
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *numberHelper) Determine(c rune) error {
|
||||||
|
if b.Exists() {
|
||||||
|
return NewParseError(fmt.Sprintf("multiple number formats: 0%v", string(c)))
|
||||||
|
}
|
||||||
|
|
||||||
|
switch c {
|
||||||
|
case 'b':
|
||||||
|
b.numberFormat = binary
|
||||||
|
case 'o':
|
||||||
|
b.numberFormat = octal
|
||||||
|
case 'x':
|
||||||
|
b.numberFormat = hex
|
||||||
|
case 'e', 'E':
|
||||||
|
b.numberFormat = exponent
|
||||||
|
case '-':
|
||||||
|
if b.numberFormat != exponent {
|
||||||
|
b.negative = true
|
||||||
|
} else {
|
||||||
|
b.negativeExponent = true
|
||||||
|
}
|
||||||
|
case '.':
|
||||||
|
b.numberFormat = decimal
|
||||||
|
default:
|
||||||
|
return NewParseError(fmt.Sprintf("invalid number character: %v", string(c)))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b numberHelper) CorrectByte(c rune) bool {
|
||||||
|
switch {
|
||||||
|
case b.numberFormat == binary:
|
||||||
|
if !isBinaryByte(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case b.numberFormat == octal:
|
||||||
|
if !isOctalByte(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case b.numberFormat == hex:
|
||||||
|
if !isHexByte(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case b.numberFormat == decimal:
|
||||||
|
if !isDigit(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case b.numberFormat == exponent:
|
||||||
|
if !isDigit(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case b.negativeExponent:
|
||||||
|
if !isDigit(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case b.negative:
|
||||||
|
if !isDigit(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if !isDigit(c) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b numberHelper) Base() int {
|
||||||
|
switch b.numberFormat {
|
||||||
|
case binary:
|
||||||
|
return 2
|
||||||
|
case octal:
|
||||||
|
return 8
|
||||||
|
case hex:
|
||||||
|
return 16
|
||||||
|
default:
|
||||||
|
return 10
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b numberHelper) String() string {
|
||||||
|
buf := bytes.Buffer{}
|
||||||
|
i := 0
|
||||||
|
|
||||||
|
switch b.numberFormat {
|
||||||
|
case binary:
|
||||||
|
i++
|
||||||
|
buf.WriteString(strconv.Itoa(i) + ": binary format\n")
|
||||||
|
case octal:
|
||||||
|
i++
|
||||||
|
buf.WriteString(strconv.Itoa(i) + ": octal format\n")
|
||||||
|
case hex:
|
||||||
|
i++
|
||||||
|
buf.WriteString(strconv.Itoa(i) + ": hex format\n")
|
||||||
|
case exponent:
|
||||||
|
i++
|
||||||
|
buf.WriteString(strconv.Itoa(i) + ": exponent format\n")
|
||||||
|
default:
|
||||||
|
i++
|
||||||
|
buf.WriteString(strconv.Itoa(i) + ": integer format\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.negative {
|
||||||
|
i++
|
||||||
|
buf.WriteString(strconv.Itoa(i) + ": negative format\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.negativeExponent {
|
||||||
|
i++
|
||||||
|
buf.WriteString(strconv.Itoa(i) + ": negative exponent format\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.String()
|
||||||
|
}
|
39
vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go
generated
vendored
Normal file
39
vendor/github.com/aws/aws-sdk-go/internal/ini/op_tokens.go
generated
vendored
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
equalOp = []rune("=")
|
||||||
|
equalColonOp = []rune(":")
|
||||||
|
)
|
||||||
|
|
||||||
|
func isOp(b []rune) bool {
|
||||||
|
if len(b) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch b[0] {
|
||||||
|
case '=':
|
||||||
|
return true
|
||||||
|
case ':':
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func newOpToken(b []rune) (Token, int, error) {
|
||||||
|
tok := Token{}
|
||||||
|
|
||||||
|
switch b[0] {
|
||||||
|
case '=':
|
||||||
|
tok = newToken(TokenOp, equalOp, NoneType)
|
||||||
|
case ':':
|
||||||
|
tok = newToken(TokenOp, equalColonOp, NoneType)
|
||||||
|
default:
|
||||||
|
return tok, 0, NewParseError(fmt.Sprintf("unexpected op type, %v", b[0]))
|
||||||
|
}
|
||||||
|
return tok, 1, nil
|
||||||
|
}
|
43
vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go
generated
vendored
Normal file
43
vendor/github.com/aws/aws-sdk-go/internal/ini/parse_error.go
generated
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ErrCodeParseError is returned when a parsing error
|
||||||
|
// has occurred.
|
||||||
|
ErrCodeParseError = "INIParseError"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ParseError is an error which is returned during any part of
|
||||||
|
// the parsing process.
|
||||||
|
type ParseError struct {
|
||||||
|
msg string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewParseError will return a new ParseError where message
|
||||||
|
// is the description of the error.
|
||||||
|
func NewParseError(message string) *ParseError {
|
||||||
|
return &ParseError{
|
||||||
|
msg: message,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Code will return the ErrCodeParseError
|
||||||
|
func (err *ParseError) Code() string {
|
||||||
|
return ErrCodeParseError
|
||||||
|
}
|
||||||
|
|
||||||
|
// Message returns the error's message
|
||||||
|
func (err *ParseError) Message() string {
|
||||||
|
return err.msg
|
||||||
|
}
|
||||||
|
|
||||||
|
// OrigError return nothing since there will never be any
|
||||||
|
// original error.
|
||||||
|
func (err *ParseError) OrigError() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (err *ParseError) Error() string {
|
||||||
|
return fmt.Sprintf("%s: %s", err.Code(), err.Message())
|
||||||
|
}
|
60
vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go
generated
vendored
Normal file
60
vendor/github.com/aws/aws-sdk-go/internal/ini/parse_stack.go
generated
vendored
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ParseStack is a stack that contains a container, the stack portion,
|
||||||
|
// and the list which is the list of ASTs that have been successfully
|
||||||
|
// parsed.
|
||||||
|
type ParseStack struct {
|
||||||
|
top int
|
||||||
|
container []AST
|
||||||
|
list []AST
|
||||||
|
index int
|
||||||
|
}
|
||||||
|
|
||||||
|
func newParseStack(sizeContainer, sizeList int) ParseStack {
|
||||||
|
return ParseStack{
|
||||||
|
container: make([]AST, sizeContainer),
|
||||||
|
list: make([]AST, sizeList),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pop will return and truncate the last container element.
|
||||||
|
func (s *ParseStack) Pop() AST {
|
||||||
|
s.top--
|
||||||
|
return s.container[s.top]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Push will add the new AST to the container
|
||||||
|
func (s *ParseStack) Push(ast AST) {
|
||||||
|
s.container[s.top] = ast
|
||||||
|
s.top++
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarkComplete will append the AST to the list of completed statements
|
||||||
|
func (s *ParseStack) MarkComplete(ast AST) {
|
||||||
|
s.list[s.index] = ast
|
||||||
|
s.index++
|
||||||
|
}
|
||||||
|
|
||||||
|
// List will return the completed statements
|
||||||
|
func (s ParseStack) List() []AST {
|
||||||
|
return s.list[:s.index]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Len will return the length of the container
|
||||||
|
func (s *ParseStack) Len() int {
|
||||||
|
return s.top
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s ParseStack) String() string {
|
||||||
|
buf := bytes.Buffer{}
|
||||||
|
for i, node := range s.list {
|
||||||
|
buf.WriteString(fmt.Sprintf("%d: %v\n", i+1, node))
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.String()
|
||||||
|
}
|
41
vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go
generated
vendored
Normal file
41
vendor/github.com/aws/aws-sdk-go/internal/ini/sep_tokens.go
generated
vendored
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
emptyRunes = []rune{}
|
||||||
|
)
|
||||||
|
|
||||||
|
func isSep(b []rune) bool {
|
||||||
|
if len(b) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch b[0] {
|
||||||
|
case '[', ']':
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
openBrace = []rune("[")
|
||||||
|
closeBrace = []rune("]")
|
||||||
|
)
|
||||||
|
|
||||||
|
func newSepToken(b []rune) (Token, int, error) {
|
||||||
|
tok := Token{}
|
||||||
|
|
||||||
|
switch b[0] {
|
||||||
|
case '[':
|
||||||
|
tok = newToken(TokenSep, openBrace, NoneType)
|
||||||
|
case ']':
|
||||||
|
tok = newToken(TokenSep, closeBrace, NoneType)
|
||||||
|
default:
|
||||||
|
return tok, 0, NewParseError(fmt.Sprintf("unexpected sep type, %v", b[0]))
|
||||||
|
}
|
||||||
|
return tok, 1, nil
|
||||||
|
}
|
45
vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go
generated
vendored
Normal file
45
vendor/github.com/aws/aws-sdk-go/internal/ini/skipper.go
generated
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
// skipper is used to skip certain blocks of an ini file.
|
||||||
|
// Currently skipper is used to skip nested blocks of ini
|
||||||
|
// files. See example below
|
||||||
|
//
|
||||||
|
// [ foo ]
|
||||||
|
// nested = ; this section will be skipped
|
||||||
|
// a=b
|
||||||
|
// c=d
|
||||||
|
// bar=baz ; this will be included
|
||||||
|
type skipper struct {
|
||||||
|
shouldSkip bool
|
||||||
|
TokenSet bool
|
||||||
|
prevTok Token
|
||||||
|
}
|
||||||
|
|
||||||
|
func newSkipper() skipper {
|
||||||
|
return skipper{
|
||||||
|
prevTok: emptyToken,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *skipper) ShouldSkip(tok Token) bool {
|
||||||
|
if s.shouldSkip &&
|
||||||
|
s.prevTok.Type() == TokenNL &&
|
||||||
|
tok.Type() != TokenWS {
|
||||||
|
|
||||||
|
s.Continue()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
s.prevTok = tok
|
||||||
|
|
||||||
|
return s.shouldSkip
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *skipper) Skip() {
|
||||||
|
s.shouldSkip = true
|
||||||
|
s.prevTok = emptyToken
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *skipper) Continue() {
|
||||||
|
s.shouldSkip = false
|
||||||
|
s.prevTok = emptyToken
|
||||||
|
}
|
35
vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go
generated
vendored
Normal file
35
vendor/github.com/aws/aws-sdk-go/internal/ini/statement.go
generated
vendored
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
// Statement is an empty AST mostly used for transitioning states.
|
||||||
|
func newStatement() AST {
|
||||||
|
return newAST(ASTKindStatement, AST{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// SectionStatement represents a section AST
|
||||||
|
func newSectionStatement(tok Token) AST {
|
||||||
|
return newASTWithRootToken(ASTKindSectionStatement, tok)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExprStatement represents a completed expression AST
|
||||||
|
func newExprStatement(ast AST) AST {
|
||||||
|
return newAST(ASTKindExprStatement, ast)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CommentStatement represents a comment in the ini definition.
|
||||||
|
//
|
||||||
|
// grammar:
|
||||||
|
// comment -> #comment' | ;comment'
|
||||||
|
// comment' -> epsilon | value
|
||||||
|
func newCommentStatement(tok Token) AST {
|
||||||
|
return newAST(ASTKindCommentStatement, newExpression(tok))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CompletedSectionStatement represents a completed section
|
||||||
|
func newCompletedSectionStatement(ast AST) AST {
|
||||||
|
return newAST(ASTKindCompletedSectionStatement, ast)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SkipStatement is used to skip whole statements
|
||||||
|
func newSkipStatement(ast AST) AST {
|
||||||
|
return newAST(ASTKindSkipStatement, ast)
|
||||||
|
}
|
284
vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go
generated
vendored
Normal file
284
vendor/github.com/aws/aws-sdk-go/internal/ini/value_util.go
generated
vendored
Normal file
@ -0,0 +1,284 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// getStringValue will return a quoted string and the amount
|
||||||
|
// of bytes read
|
||||||
|
//
|
||||||
|
// an error will be returned if the string is not properly formatted
|
||||||
|
func getStringValue(b []rune) (int, error) {
|
||||||
|
if b[0] != '"' {
|
||||||
|
return 0, NewParseError("strings must start with '\"'")
|
||||||
|
}
|
||||||
|
|
||||||
|
endQuote := false
|
||||||
|
i := 1
|
||||||
|
|
||||||
|
for ; i < len(b) && !endQuote; i++ {
|
||||||
|
if escaped := isEscaped(b[:i], b[i]); b[i] == '"' && !escaped {
|
||||||
|
endQuote = true
|
||||||
|
break
|
||||||
|
} else if escaped {
|
||||||
|
/*c, err := getEscapedByte(b[i])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
b[i-1] = c
|
||||||
|
b = append(b[:i], b[i+1:]...)
|
||||||
|
i--*/
|
||||||
|
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if !endQuote {
|
||||||
|
return 0, NewParseError("missing '\"' in string value")
|
||||||
|
}
|
||||||
|
|
||||||
|
return i + 1, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// getBoolValue will return a boolean and the amount
|
||||||
|
// of bytes read
|
||||||
|
//
|
||||||
|
// an error will be returned if the boolean is not of a correct
|
||||||
|
// value
|
||||||
|
func getBoolValue(b []rune) (int, error) {
|
||||||
|
if len(b) < 4 {
|
||||||
|
return 0, NewParseError("invalid boolean value")
|
||||||
|
}
|
||||||
|
|
||||||
|
n := 0
|
||||||
|
for _, lv := range literalValues {
|
||||||
|
if len(lv) > len(b) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if isLitValue(lv, b) {
|
||||||
|
n = len(lv)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if n == 0 {
|
||||||
|
return 0, NewParseError("invalid boolean value")
|
||||||
|
}
|
||||||
|
|
||||||
|
return n, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// getNumericalValue will return a numerical string, the amount
|
||||||
|
// of bytes read, and the base of the number
|
||||||
|
//
|
||||||
|
// an error will be returned if the number is not of a correct
|
||||||
|
// value
|
||||||
|
func getNumericalValue(b []rune) (int, int, error) {
|
||||||
|
if !isDigit(b[0]) {
|
||||||
|
return 0, 0, NewParseError("invalid digit value")
|
||||||
|
}
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
helper := numberHelper{}
|
||||||
|
|
||||||
|
loop:
|
||||||
|
for negativeIndex := 0; i < len(b); i++ {
|
||||||
|
negativeIndex++
|
||||||
|
|
||||||
|
if !isDigit(b[i]) {
|
||||||
|
switch b[i] {
|
||||||
|
case '-':
|
||||||
|
if helper.IsNegative() || negativeIndex != 1 {
|
||||||
|
return 0, 0, NewParseError("parse error '-'")
|
||||||
|
}
|
||||||
|
|
||||||
|
n := getNegativeNumber(b[i:])
|
||||||
|
i += (n - 1)
|
||||||
|
helper.Determine(b[i])
|
||||||
|
continue
|
||||||
|
case '.':
|
||||||
|
if err := helper.Determine(b[i]); err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
|
case 'e', 'E':
|
||||||
|
if err := helper.Determine(b[i]); err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
negativeIndex = 0
|
||||||
|
case 'b':
|
||||||
|
if helper.numberFormat == hex {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
fallthrough
|
||||||
|
case 'o', 'x':
|
||||||
|
if i == 0 && b[i] != '0' {
|
||||||
|
return 0, 0, NewParseError("incorrect base format, expected leading '0'")
|
||||||
|
}
|
||||||
|
|
||||||
|
if i != 1 {
|
||||||
|
return 0, 0, NewParseError(fmt.Sprintf("incorrect base format found %s at %d index", string(b[i]), i))
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := helper.Determine(b[i]); err != nil {
|
||||||
|
return 0, 0, err
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
if isWhitespace(b[i]) {
|
||||||
|
break loop
|
||||||
|
}
|
||||||
|
|
||||||
|
if isNewline(b[i:]) {
|
||||||
|
break loop
|
||||||
|
}
|
||||||
|
|
||||||
|
if !(helper.numberFormat == hex && isHexByte(b[i])) {
|
||||||
|
if i+2 < len(b) && !isNewline(b[i:i+2]) {
|
||||||
|
return 0, 0, NewParseError("invalid numerical character")
|
||||||
|
} else if !isNewline([]rune{b[i]}) {
|
||||||
|
return 0, 0, NewParseError("invalid numerical character")
|
||||||
|
}
|
||||||
|
|
||||||
|
break loop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return helper.Base(), i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// isDigit will return whether or not something is an integer
|
||||||
|
func isDigit(b rune) bool {
|
||||||
|
return b >= '0' && b <= '9'
|
||||||
|
}
|
||||||
|
|
||||||
|
func hasExponent(v []rune) bool {
|
||||||
|
return contains(v, 'e') || contains(v, 'E')
|
||||||
|
}
|
||||||
|
|
||||||
|
func isBinaryByte(b rune) bool {
|
||||||
|
switch b {
|
||||||
|
case '0', '1':
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func isOctalByte(b rune) bool {
|
||||||
|
switch b {
|
||||||
|
case '0', '1', '2', '3', '4', '5', '6', '7':
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func isHexByte(b rune) bool {
|
||||||
|
if isDigit(b) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return (b >= 'A' && b <= 'F') ||
|
||||||
|
(b >= 'a' && b <= 'f')
|
||||||
|
}
|
||||||
|
|
||||||
|
func getValue(b []rune) (int, error) {
|
||||||
|
i := 0
|
||||||
|
|
||||||
|
for i < len(b) {
|
||||||
|
if isNewline(b[i:]) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if isOp(b[i:]) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
valid, n, err := isValid(b[i:])
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !valid {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
i += n
|
||||||
|
}
|
||||||
|
|
||||||
|
return i, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// getNegativeNumber will return a negative number from a
|
||||||
|
// byte slice. This will iterate through all characters until
|
||||||
|
// a non-digit has been found.
|
||||||
|
func getNegativeNumber(b []rune) int {
|
||||||
|
if b[0] != '-' {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
i := 1
|
||||||
|
for ; i < len(b); i++ {
|
||||||
|
if !isDigit(b[i]) {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
// isEscaped will return whether or not the character is an escaped
|
||||||
|
// character.
|
||||||
|
func isEscaped(value []rune, b rune) bool {
|
||||||
|
if len(value) == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch b {
|
||||||
|
case '\'': // single quote
|
||||||
|
case '"': // quote
|
||||||
|
case 'n': // newline
|
||||||
|
case 't': // tab
|
||||||
|
case '\\': // backslash
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return value[len(value)-1] == '\\'
|
||||||
|
}
|
||||||
|
|
||||||
|
func getEscapedByte(b rune) (rune, error) {
|
||||||
|
switch b {
|
||||||
|
case '\'': // single quote
|
||||||
|
return '\'', nil
|
||||||
|
case '"': // quote
|
||||||
|
return '"', nil
|
||||||
|
case 'n': // newline
|
||||||
|
return '\n', nil
|
||||||
|
case 't': // table
|
||||||
|
return '\t', nil
|
||||||
|
case '\\': // backslash
|
||||||
|
return '\\', nil
|
||||||
|
default:
|
||||||
|
return b, NewParseError(fmt.Sprintf("invalid escaped character %c", b))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func removeEscapedCharacters(b []rune) []rune {
|
||||||
|
for i := 0; i < len(b); i++ {
|
||||||
|
if isEscaped(b[:i], b[i]) {
|
||||||
|
c, err := getEscapedByte(b[i])
|
||||||
|
if err != nil {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
b[i-1] = c
|
||||||
|
b = append(b[:i], b[i+1:]...)
|
||||||
|
i--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return b
|
||||||
|
}
|
166
vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go
generated
vendored
Normal file
166
vendor/github.com/aws/aws-sdk-go/internal/ini/visitor.go
generated
vendored
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Visitor is an interface used by walkers that will
|
||||||
|
// traverse an array of ASTs.
|
||||||
|
type Visitor interface {
|
||||||
|
VisitExpr(AST) error
|
||||||
|
VisitStatement(AST) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// DefaultVisitor is used to visit statements and expressions
|
||||||
|
// and ensure that they are both of the correct format.
|
||||||
|
// In addition, upon visiting this will build sections and populate
|
||||||
|
// the Sections field which can be used to retrieve profile
|
||||||
|
// configuration.
|
||||||
|
type DefaultVisitor struct {
|
||||||
|
scope string
|
||||||
|
Sections Sections
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewDefaultVisitor return a DefaultVisitor
|
||||||
|
func NewDefaultVisitor() *DefaultVisitor {
|
||||||
|
return &DefaultVisitor{
|
||||||
|
Sections: Sections{
|
||||||
|
container: map[string]Section{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// VisitExpr visits expressions...
|
||||||
|
func (v *DefaultVisitor) VisitExpr(expr AST) error {
|
||||||
|
t := v.Sections.container[v.scope]
|
||||||
|
if t.values == nil {
|
||||||
|
t.values = values{}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch expr.Kind {
|
||||||
|
case ASTKindExprStatement:
|
||||||
|
opExpr := expr.GetRoot()
|
||||||
|
switch opExpr.Kind {
|
||||||
|
case ASTKindEqualExpr:
|
||||||
|
children := opExpr.GetChildren()
|
||||||
|
if len(children) <= 1 {
|
||||||
|
return NewParseError("unexpected token type")
|
||||||
|
}
|
||||||
|
|
||||||
|
rhs := children[1]
|
||||||
|
|
||||||
|
if rhs.Root.Type() != TokenLit {
|
||||||
|
return NewParseError("unexpected token type")
|
||||||
|
}
|
||||||
|
|
||||||
|
key := EqualExprKey(opExpr)
|
||||||
|
v, err := newValue(rhs.Root.ValueType, rhs.Root.base, rhs.Root.Raw())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
t.values[key] = v
|
||||||
|
default:
|
||||||
|
return NewParseError(fmt.Sprintf("unsupported expression %v", expr))
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return NewParseError(fmt.Sprintf("unsupported expression %v", expr))
|
||||||
|
}
|
||||||
|
|
||||||
|
v.Sections.container[v.scope] = t
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// VisitStatement visits statements...
|
||||||
|
func (v *DefaultVisitor) VisitStatement(stmt AST) error {
|
||||||
|
switch stmt.Kind {
|
||||||
|
case ASTKindCompletedSectionStatement:
|
||||||
|
child := stmt.GetRoot()
|
||||||
|
if child.Kind != ASTKindSectionStatement {
|
||||||
|
return NewParseError(fmt.Sprintf("unsupported child statement: %T", child))
|
||||||
|
}
|
||||||
|
|
||||||
|
name := string(child.Root.Raw())
|
||||||
|
v.Sections.container[name] = Section{}
|
||||||
|
v.scope = name
|
||||||
|
default:
|
||||||
|
return NewParseError(fmt.Sprintf("unsupported statement: %s", stmt.Kind))
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sections is a map of Section structures that represent
|
||||||
|
// a configuration.
|
||||||
|
type Sections struct {
|
||||||
|
container map[string]Section
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSection will return section p. If section p does not exist,
|
||||||
|
// false will be returned in the second parameter.
|
||||||
|
func (t Sections) GetSection(p string) (Section, bool) {
|
||||||
|
v, ok := t.container[p]
|
||||||
|
return v, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// values represents a map of union values.
|
||||||
|
type values map[string]Value
|
||||||
|
|
||||||
|
// List will return a list of all sections that were successfully
|
||||||
|
// parsed.
|
||||||
|
func (t Sections) List() []string {
|
||||||
|
keys := make([]string, len(t.container))
|
||||||
|
i := 0
|
||||||
|
for k := range t.container {
|
||||||
|
keys[i] = k
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(keys)
|
||||||
|
return keys
|
||||||
|
}
|
||||||
|
|
||||||
|
// Section contains a name and values. This represent
|
||||||
|
// a sectioned entry in a configuration file.
|
||||||
|
type Section struct {
|
||||||
|
Name string
|
||||||
|
values values
|
||||||
|
}
|
||||||
|
|
||||||
|
// Has will return whether or not an entry exists in a given section
|
||||||
|
func (t Section) Has(k string) bool {
|
||||||
|
_, ok := t.values[k]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValueType will returned what type the union is set to. If
|
||||||
|
// k was not found, the NoneType will be returned.
|
||||||
|
func (t Section) ValueType(k string) (ValueType, bool) {
|
||||||
|
v, ok := t.values[k]
|
||||||
|
return v.Type, ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// Bool returns a bool value at k
|
||||||
|
func (t Section) Bool(k string) bool {
|
||||||
|
return t.values[k].BoolValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Int returns an integer value at k
|
||||||
|
func (t Section) Int(k string) int64 {
|
||||||
|
return t.values[k].IntValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Float64 returns a float value at k
|
||||||
|
func (t Section) Float64(k string) float64 {
|
||||||
|
return t.values[k].FloatValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
// String returns the string value at k
|
||||||
|
func (t Section) String(k string) string {
|
||||||
|
_, ok := t.values[k]
|
||||||
|
if !ok {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return t.values[k].StringValue()
|
||||||
|
}
|
25
vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go
generated
vendored
Normal file
25
vendor/github.com/aws/aws-sdk-go/internal/ini/walker.go
generated
vendored
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
// Walk will traverse the AST using the v, the Visitor.
|
||||||
|
func Walk(tree []AST, v Visitor) error {
|
||||||
|
for _, node := range tree {
|
||||||
|
switch node.Kind {
|
||||||
|
case ASTKindExpr,
|
||||||
|
ASTKindExprStatement:
|
||||||
|
|
||||||
|
if err := v.VisitExpr(node); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
case ASTKindStatement,
|
||||||
|
ASTKindCompletedSectionStatement,
|
||||||
|
ASTKindNestedSectionStatement,
|
||||||
|
ASTKindCompletedNestedSectionStatement:
|
||||||
|
|
||||||
|
if err := v.VisitStatement(node); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
24
vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go
generated
vendored
Normal file
24
vendor/github.com/aws/aws-sdk-go/internal/ini/ws_token.go
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package ini
|
||||||
|
|
||||||
|
import (
|
||||||
|
"unicode"
|
||||||
|
)
|
||||||
|
|
||||||
|
// isWhitespace will return whether or not the character is
|
||||||
|
// a whitespace character.
|
||||||
|
//
|
||||||
|
// Whitespace is defined as a space or tab.
|
||||||
|
func isWhitespace(c rune) bool {
|
||||||
|
return unicode.IsSpace(c) && c != '\n' && c != '\r'
|
||||||
|
}
|
||||||
|
|
||||||
|
func newWSToken(b []rune) (Token, int, error) {
|
||||||
|
i := 0
|
||||||
|
for ; i < len(b); i++ {
|
||||||
|
if !isWhitespace(b[i]) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newToken(TokenWS, b[:i], NoneType), i, nil
|
||||||
|
}
|
57
vendor/github.com/aws/aws-sdk-go/internal/s3err/error.go
generated
vendored
Normal file
57
vendor/github.com/aws/aws-sdk-go/internal/s3err/error.go
generated
vendored
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package s3err
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RequestFailure provides additional S3 specific metadata for the request
|
||||||
|
// failure.
|
||||||
|
type RequestFailure struct {
|
||||||
|
awserr.RequestFailure
|
||||||
|
|
||||||
|
hostID string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRequestFailure returns a request failure error decordated with S3
|
||||||
|
// specific metadata.
|
||||||
|
func NewRequestFailure(err awserr.RequestFailure, hostID string) *RequestFailure {
|
||||||
|
return &RequestFailure{RequestFailure: err, hostID: hostID}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r RequestFailure) Error() string {
|
||||||
|
extra := fmt.Sprintf("status code: %d, request id: %s, host id: %s",
|
||||||
|
r.StatusCode(), r.RequestID(), r.hostID)
|
||||||
|
return awserr.SprintError(r.Code(), r.Message(), extra, r.OrigErr())
|
||||||
|
}
|
||||||
|
func (r RequestFailure) String() string {
|
||||||
|
return r.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
// HostID returns the HostID request response value.
|
||||||
|
func (r RequestFailure) HostID() string {
|
||||||
|
return r.hostID
|
||||||
|
}
|
||||||
|
|
||||||
|
// RequestFailureWrapperHandler returns a handler to rap an
|
||||||
|
// awserr.RequestFailure with the S3 request ID 2 from the response.
|
||||||
|
func RequestFailureWrapperHandler() request.NamedHandler {
|
||||||
|
return request.NamedHandler{
|
||||||
|
Name: "awssdk.s3.errorHandler",
|
||||||
|
Fn: func(req *request.Request) {
|
||||||
|
reqErr, ok := req.Error.(awserr.RequestFailure)
|
||||||
|
if !ok || reqErr == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
hostID := req.HTTPResponse.Header.Get("X-Amz-Id-2")
|
||||||
|
if req.Error == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
req.Error = NewRequestFailure(reqErr, hostID)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
23
vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go
generated
vendored
Normal file
23
vendor/github.com/aws/aws-sdk-go/internal/sdkuri/path.go
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package sdkuri
|
||||||
|
|
||||||
|
import (
|
||||||
|
"path"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PathJoin will join the elements of the path delimited by the "/"
|
||||||
|
// character. Similar to path.Join with the exception the trailing "/"
|
||||||
|
// character is preserved if present.
|
||||||
|
func PathJoin(elems ...string) string {
|
||||||
|
if len(elems) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
hasTrailing := strings.HasSuffix(elems[len(elems)-1], "/")
|
||||||
|
str := path.Join(elems...)
|
||||||
|
if hasTrailing && str != "/" {
|
||||||
|
str += "/"
|
||||||
|
}
|
||||||
|
|
||||||
|
return str
|
||||||
|
}
|
12
vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go
generated
vendored
Normal file
12
vendor/github.com/aws/aws-sdk-go/internal/shareddefaults/ecs_container.go
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
package shareddefaults
|
||||||
|
|
||||||
|
const (
|
||||||
|
// ECSCredsProviderEnvVar is an environmental variable key used to
|
||||||
|
// determine which path needs to be hit.
|
||||||
|
ECSCredsProviderEnvVar = "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ECSContainerCredentialsURI is the endpoint to retrieve container
|
||||||
|
// credentials. This can be overridden to test to ensure the credential process
|
||||||
|
// is behaving correctly.
|
||||||
|
var ECSContainerCredentialsURI = "http://169.254.170.2"
|
12
vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go
generated
vendored
12
vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/unmarshal.go
generated
vendored
@ -27,7 +27,11 @@ func Unmarshal(r *request.Request) {
|
|||||||
decoder := xml.NewDecoder(r.HTTPResponse.Body)
|
decoder := xml.NewDecoder(r.HTTPResponse.Body)
|
||||||
err := xmlutil.UnmarshalXML(r.Data, decoder, "")
|
err := xmlutil.UnmarshalXML(r.Data, decoder, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed decoding EC2 Query response", err)
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed decoding EC2 Query response", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,7 +56,11 @@ func UnmarshalError(r *request.Request) {
|
|||||||
resp := &xmlErrorResponse{}
|
resp := &xmlErrorResponse{}
|
||||||
err := xml.NewDecoder(r.HTTPResponse.Body).Decode(resp)
|
err := xml.NewDecoder(r.HTTPResponse.Body).Decode(resp)
|
||||||
if err != nil && err != io.EOF {
|
if err != nil && err != io.EOF {
|
||||||
r.Error = awserr.New("SerializationError", "failed decoding EC2 Query error response", err)
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed decoding EC2 Query error response", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
r.Error = awserr.NewRequestFailure(
|
r.Error = awserr.NewRequestFailure(
|
||||||
awserr.New(resp.Code, resp.Message, nil),
|
awserr.New(resp.Code, resp.Message, nil),
|
||||||
|
36
vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go
generated
vendored
36
vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/eventstreamapi/api.go
generated
vendored
@ -94,6 +94,9 @@ func (r *EventReader) ReadEvent() (event interface{}, err error) {
|
|||||||
switch typ {
|
switch typ {
|
||||||
case EventMessageType:
|
case EventMessageType:
|
||||||
return r.unmarshalEventMessage(msg)
|
return r.unmarshalEventMessage(msg)
|
||||||
|
case ExceptionMessageType:
|
||||||
|
err = r.unmarshalEventException(msg)
|
||||||
|
return nil, err
|
||||||
case ErrorMessageType:
|
case ErrorMessageType:
|
||||||
return nil, r.unmarshalErrorMessage(msg)
|
return nil, r.unmarshalErrorMessage(msg)
|
||||||
default:
|
default:
|
||||||
@ -122,6 +125,39 @@ func (r *EventReader) unmarshalEventMessage(
|
|||||||
return ev, nil
|
return ev, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *EventReader) unmarshalEventException(
|
||||||
|
msg eventstream.Message,
|
||||||
|
) (err error) {
|
||||||
|
eventType, err := GetHeaderString(msg, ExceptionTypeHeader)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
ev, err := r.unmarshalerForEventType(eventType)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = ev.UnmarshalEvent(r.payloadUnmarshaler, msg)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var ok bool
|
||||||
|
err, ok = ev.(error)
|
||||||
|
if !ok {
|
||||||
|
err = messageError{
|
||||||
|
code: "SerializationError",
|
||||||
|
msg: fmt.Sprintf(
|
||||||
|
"event stream exception %s mapped to non-error %T, %v",
|
||||||
|
eventType, ev, ev,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
func (r *EventReader) unmarshalErrorMessage(msg eventstream.Message) (err error) {
|
func (r *EventReader) unmarshalErrorMessage(msg eventstream.Message) (err error) {
|
||||||
var msgErr messageError
|
var msgErr messageError
|
||||||
|
|
||||||
|
2
vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go
generated
vendored
2
vendor/github.com/aws/aws-sdk-go/private/protocol/eventstream/header_value.go
generated
vendored
@ -464,7 +464,7 @@ func (v *TimestampValue) decode(r io.Reader) error {
|
|||||||
func timeFromEpochMilli(t int64) time.Time {
|
func timeFromEpochMilli(t int64) time.Time {
|
||||||
secs := t / 1e3
|
secs := t / 1e3
|
||||||
msec := t % 1e3
|
msec := t % 1e3
|
||||||
return time.Unix(secs, msec*int64(time.Millisecond))
|
return time.Unix(secs, msec*int64(time.Millisecond)).UTC()
|
||||||
}
|
}
|
||||||
|
|
||||||
// An UUIDValue provides eventstream encoding, and representation of a UUID
|
// An UUIDValue provides eventstream encoding, and representation of a UUID
|
||||||
|
68
vendor/github.com/aws/aws-sdk-go/private/protocol/host.go
generated
vendored
Normal file
68
vendor/github.com/aws/aws-sdk-go/private/protocol/host.go
generated
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package protocol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ValidateEndpointHostHandler is a request handler that will validate the
|
||||||
|
// request endpoint's hosts is a valid RFC 3986 host.
|
||||||
|
var ValidateEndpointHostHandler = request.NamedHandler{
|
||||||
|
Name: "awssdk.protocol.ValidateEndpointHostHandler",
|
||||||
|
Fn: func(r *request.Request) {
|
||||||
|
err := ValidateEndpointHost(r.Operation.Name, r.HTTPRequest.URL.Host)
|
||||||
|
if err != nil {
|
||||||
|
r.Error = err
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidateEndpointHost validates that the host string passed in is a valid RFC
|
||||||
|
// 3986 host. Returns error if the host is not valid.
|
||||||
|
func ValidateEndpointHost(opName, host string) error {
|
||||||
|
paramErrs := request.ErrInvalidParams{Context: opName}
|
||||||
|
labels := strings.Split(host, ".")
|
||||||
|
|
||||||
|
for i, label := range labels {
|
||||||
|
if i == len(labels)-1 && len(label) == 0 {
|
||||||
|
// Allow trailing dot for FQDN hosts.
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if !ValidHostLabel(label) {
|
||||||
|
paramErrs.Add(request.NewErrParamFormat(
|
||||||
|
"endpoint host label", "[a-zA-Z0-9-]{1,63}", label))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(host) > 255 {
|
||||||
|
paramErrs.Add(request.NewErrParamMaxLen(
|
||||||
|
"endpoint host", 255, host,
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
if paramErrs.Len() > 0 {
|
||||||
|
return paramErrs
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ValidHostLabel returns if the label is a valid RFC 3986 host label.
|
||||||
|
func ValidHostLabel(label string) bool {
|
||||||
|
if l := len(label); l == 0 || l > 63 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for _, r := range label {
|
||||||
|
switch {
|
||||||
|
case r >= '0' && r <= '9':
|
||||||
|
case r >= 'A' && r <= 'Z':
|
||||||
|
case r >= 'a' && r <= 'z':
|
||||||
|
case r == '-':
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
54
vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go
generated
vendored
Normal file
54
vendor/github.com/aws/aws-sdk-go/private/protocol/host_prefix.go
generated
vendored
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package protocol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
)
|
||||||
|
|
||||||
|
// HostPrefixHandlerName is the handler name for the host prefix request
|
||||||
|
// handler.
|
||||||
|
const HostPrefixHandlerName = "awssdk.endpoint.HostPrefixHandler"
|
||||||
|
|
||||||
|
// NewHostPrefixHandler constructs a build handler
|
||||||
|
func NewHostPrefixHandler(prefix string, labelsFn func() map[string]string) request.NamedHandler {
|
||||||
|
builder := HostPrefixBuilder{
|
||||||
|
Prefix: prefix,
|
||||||
|
LabelsFn: labelsFn,
|
||||||
|
}
|
||||||
|
|
||||||
|
return request.NamedHandler{
|
||||||
|
Name: HostPrefixHandlerName,
|
||||||
|
Fn: builder.Build,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// HostPrefixBuilder provides the request handler to expand and prepend
|
||||||
|
// the host prefix into the operation's request endpoint host.
|
||||||
|
type HostPrefixBuilder struct {
|
||||||
|
Prefix string
|
||||||
|
LabelsFn func() map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build updates the passed in Request with the HostPrefix template expanded.
|
||||||
|
func (h HostPrefixBuilder) Build(r *request.Request) {
|
||||||
|
if aws.BoolValue(r.Config.DisableEndpointHostPrefix) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var labels map[string]string
|
||||||
|
if h.LabelsFn != nil {
|
||||||
|
labels = h.LabelsFn()
|
||||||
|
}
|
||||||
|
|
||||||
|
prefix := h.Prefix
|
||||||
|
for name, value := range labels {
|
||||||
|
prefix = strings.Replace(prefix, "{"+name+"}", value, -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
r.HTTPRequest.URL.Host = prefix + r.HTTPRequest.URL.Host
|
||||||
|
if len(r.HTTPRequest.Host) > 0 {
|
||||||
|
r.HTTPRequest.Host = prefix + r.HTTPRequest.Host
|
||||||
|
}
|
||||||
|
}
|
296
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go
generated
vendored
Normal file
296
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/build.go
generated
vendored
Normal file
@ -0,0 +1,296 @@
|
|||||||
|
// Package jsonutil provides JSON serialization of AWS requests and responses.
|
||||||
|
package jsonutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"reflect"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
var timeType = reflect.ValueOf(time.Time{}).Type()
|
||||||
|
var byteSliceType = reflect.ValueOf([]byte{}).Type()
|
||||||
|
|
||||||
|
// BuildJSON builds a JSON string for a given object v.
|
||||||
|
func BuildJSON(v interface{}) ([]byte, error) {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
|
||||||
|
err := buildAny(reflect.ValueOf(v), &buf, "")
|
||||||
|
return buf.Bytes(), err
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildAny(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
origVal := value
|
||||||
|
value = reflect.Indirect(value)
|
||||||
|
if !value.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
vtype := value.Type()
|
||||||
|
|
||||||
|
t := tag.Get("type")
|
||||||
|
if t == "" {
|
||||||
|
switch vtype.Kind() {
|
||||||
|
case reflect.Struct:
|
||||||
|
// also it can't be a time object
|
||||||
|
if value.Type() != timeType {
|
||||||
|
t = "structure"
|
||||||
|
}
|
||||||
|
case reflect.Slice:
|
||||||
|
// also it can't be a byte slice
|
||||||
|
if _, ok := value.Interface().([]byte); !ok {
|
||||||
|
t = "list"
|
||||||
|
}
|
||||||
|
case reflect.Map:
|
||||||
|
// cannot be a JSONValue map
|
||||||
|
if _, ok := value.Interface().(aws.JSONValue); !ok {
|
||||||
|
t = "map"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t {
|
||||||
|
case "structure":
|
||||||
|
if field, ok := vtype.FieldByName("_"); ok {
|
||||||
|
tag = field.Tag
|
||||||
|
}
|
||||||
|
return buildStruct(value, buf, tag)
|
||||||
|
case "list":
|
||||||
|
return buildList(value, buf, tag)
|
||||||
|
case "map":
|
||||||
|
return buildMap(value, buf, tag)
|
||||||
|
default:
|
||||||
|
return buildScalar(origVal, buf, tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildStruct(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
if !value.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// unwrap payloads
|
||||||
|
if payload := tag.Get("payload"); payload != "" {
|
||||||
|
field, _ := value.Type().FieldByName(payload)
|
||||||
|
tag = field.Tag
|
||||||
|
value = elemOf(value.FieldByName(payload))
|
||||||
|
|
||||||
|
if !value.IsValid() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteByte('{')
|
||||||
|
|
||||||
|
t := value.Type()
|
||||||
|
first := true
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
member := value.Field(i)
|
||||||
|
|
||||||
|
// This allocates the most memory.
|
||||||
|
// Additionally, we cannot skip nil fields due to
|
||||||
|
// idempotency auto filling.
|
||||||
|
field := t.Field(i)
|
||||||
|
|
||||||
|
if field.PkgPath != "" {
|
||||||
|
continue // ignore unexported fields
|
||||||
|
}
|
||||||
|
if field.Tag.Get("json") == "-" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if field.Tag.Get("location") != "" {
|
||||||
|
continue // ignore non-body elements
|
||||||
|
}
|
||||||
|
if field.Tag.Get("ignore") != "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if protocol.CanSetIdempotencyToken(member, field) {
|
||||||
|
token := protocol.GetIdempotencyToken()
|
||||||
|
member = reflect.ValueOf(&token)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (member.Kind() == reflect.Ptr || member.Kind() == reflect.Slice || member.Kind() == reflect.Map) && member.IsNil() {
|
||||||
|
continue // ignore unset fields
|
||||||
|
}
|
||||||
|
|
||||||
|
if first {
|
||||||
|
first = false
|
||||||
|
} else {
|
||||||
|
buf.WriteByte(',')
|
||||||
|
}
|
||||||
|
|
||||||
|
// figure out what this field is called
|
||||||
|
name := field.Name
|
||||||
|
if locName := field.Tag.Get("locationName"); locName != "" {
|
||||||
|
name = locName
|
||||||
|
}
|
||||||
|
|
||||||
|
writeString(name, buf)
|
||||||
|
buf.WriteString(`:`)
|
||||||
|
|
||||||
|
err := buildAny(member, buf, field.Tag)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString("}")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildList(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
buf.WriteString("[")
|
||||||
|
|
||||||
|
for i := 0; i < value.Len(); i++ {
|
||||||
|
buildAny(value.Index(i), buf, "")
|
||||||
|
|
||||||
|
if i < value.Len()-1 {
|
||||||
|
buf.WriteString(",")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString("]")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type sortedValues []reflect.Value
|
||||||
|
|
||||||
|
func (sv sortedValues) Len() int { return len(sv) }
|
||||||
|
func (sv sortedValues) Swap(i, j int) { sv[i], sv[j] = sv[j], sv[i] }
|
||||||
|
func (sv sortedValues) Less(i, j int) bool { return sv[i].String() < sv[j].String() }
|
||||||
|
|
||||||
|
func buildMap(value reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
buf.WriteString("{")
|
||||||
|
|
||||||
|
sv := sortedValues(value.MapKeys())
|
||||||
|
sort.Sort(sv)
|
||||||
|
|
||||||
|
for i, k := range sv {
|
||||||
|
if i > 0 {
|
||||||
|
buf.WriteByte(',')
|
||||||
|
}
|
||||||
|
|
||||||
|
writeString(k.String(), buf)
|
||||||
|
buf.WriteString(`:`)
|
||||||
|
|
||||||
|
buildAny(value.MapIndex(k), buf, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString("}")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildScalar(v reflect.Value, buf *bytes.Buffer, tag reflect.StructTag) error {
|
||||||
|
// prevents allocation on the heap.
|
||||||
|
scratch := [64]byte{}
|
||||||
|
switch value := reflect.Indirect(v); value.Kind() {
|
||||||
|
case reflect.String:
|
||||||
|
writeString(value.String(), buf)
|
||||||
|
case reflect.Bool:
|
||||||
|
if value.Bool() {
|
||||||
|
buf.WriteString("true")
|
||||||
|
} else {
|
||||||
|
buf.WriteString("false")
|
||||||
|
}
|
||||||
|
case reflect.Int64:
|
||||||
|
buf.Write(strconv.AppendInt(scratch[:0], value.Int(), 10))
|
||||||
|
case reflect.Float64:
|
||||||
|
f := value.Float()
|
||||||
|
if math.IsInf(f, 0) || math.IsNaN(f) {
|
||||||
|
return &json.UnsupportedValueError{Value: v, Str: strconv.FormatFloat(f, 'f', -1, 64)}
|
||||||
|
}
|
||||||
|
buf.Write(strconv.AppendFloat(scratch[:0], f, 'f', -1, 64))
|
||||||
|
default:
|
||||||
|
switch converted := value.Interface().(type) {
|
||||||
|
case time.Time:
|
||||||
|
format := tag.Get("timestampFormat")
|
||||||
|
if len(format) == 0 {
|
||||||
|
format = protocol.UnixTimeFormatName
|
||||||
|
}
|
||||||
|
|
||||||
|
ts := protocol.FormatTime(format, converted)
|
||||||
|
if format != protocol.UnixTimeFormatName {
|
||||||
|
ts = `"` + ts + `"`
|
||||||
|
}
|
||||||
|
|
||||||
|
buf.WriteString(ts)
|
||||||
|
case []byte:
|
||||||
|
if !value.IsNil() {
|
||||||
|
buf.WriteByte('"')
|
||||||
|
if len(converted) < 1024 {
|
||||||
|
// for small buffers, using Encode directly is much faster.
|
||||||
|
dst := make([]byte, base64.StdEncoding.EncodedLen(len(converted)))
|
||||||
|
base64.StdEncoding.Encode(dst, converted)
|
||||||
|
buf.Write(dst)
|
||||||
|
} else {
|
||||||
|
// for large buffers, avoid unnecessary extra temporary
|
||||||
|
// buffer space.
|
||||||
|
enc := base64.NewEncoder(base64.StdEncoding, buf)
|
||||||
|
enc.Write(converted)
|
||||||
|
enc.Close()
|
||||||
|
}
|
||||||
|
buf.WriteByte('"')
|
||||||
|
}
|
||||||
|
case aws.JSONValue:
|
||||||
|
str, err := protocol.EncodeJSONValue(converted, protocol.QuotedEscape)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("unable to encode JSONValue, %v", err)
|
||||||
|
}
|
||||||
|
buf.WriteString(str)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported JSON value %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var hex = "0123456789abcdef"
|
||||||
|
|
||||||
|
func writeString(s string, buf *bytes.Buffer) {
|
||||||
|
buf.WriteByte('"')
|
||||||
|
for i := 0; i < len(s); i++ {
|
||||||
|
if s[i] == '"' {
|
||||||
|
buf.WriteString(`\"`)
|
||||||
|
} else if s[i] == '\\' {
|
||||||
|
buf.WriteString(`\\`)
|
||||||
|
} else if s[i] == '\b' {
|
||||||
|
buf.WriteString(`\b`)
|
||||||
|
} else if s[i] == '\f' {
|
||||||
|
buf.WriteString(`\f`)
|
||||||
|
} else if s[i] == '\r' {
|
||||||
|
buf.WriteString(`\r`)
|
||||||
|
} else if s[i] == '\t' {
|
||||||
|
buf.WriteString(`\t`)
|
||||||
|
} else if s[i] == '\n' {
|
||||||
|
buf.WriteString(`\n`)
|
||||||
|
} else if s[i] < 32 {
|
||||||
|
buf.WriteString("\\u00")
|
||||||
|
buf.WriteByte(hex[s[i]>>4])
|
||||||
|
buf.WriteByte(hex[s[i]&0xF])
|
||||||
|
} else {
|
||||||
|
buf.WriteByte(s[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf.WriteByte('"')
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the reflection element of a value, if it is a pointer.
|
||||||
|
func elemOf(value reflect.Value) reflect.Value {
|
||||||
|
for value.Kind() == reflect.Ptr {
|
||||||
|
value = value.Elem()
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
228
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go
generated
vendored
Normal file
228
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/unmarshal.go
generated
vendored
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
package jsonutil
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"reflect"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UnmarshalJSON reads a stream and unmarshals the results in object v.
|
||||||
|
func UnmarshalJSON(v interface{}, stream io.Reader) error {
|
||||||
|
var out interface{}
|
||||||
|
|
||||||
|
err := json.NewDecoder(stream).Decode(&out)
|
||||||
|
if err == io.EOF {
|
||||||
|
return nil
|
||||||
|
} else if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return unmarshalAny(reflect.ValueOf(v), out, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalAny(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
vtype := value.Type()
|
||||||
|
if vtype.Kind() == reflect.Ptr {
|
||||||
|
vtype = vtype.Elem() // check kind of actual element type
|
||||||
|
}
|
||||||
|
|
||||||
|
t := tag.Get("type")
|
||||||
|
if t == "" {
|
||||||
|
switch vtype.Kind() {
|
||||||
|
case reflect.Struct:
|
||||||
|
// also it can't be a time object
|
||||||
|
if _, ok := value.Interface().(*time.Time); !ok {
|
||||||
|
t = "structure"
|
||||||
|
}
|
||||||
|
case reflect.Slice:
|
||||||
|
// also it can't be a byte slice
|
||||||
|
if _, ok := value.Interface().([]byte); !ok {
|
||||||
|
t = "list"
|
||||||
|
}
|
||||||
|
case reflect.Map:
|
||||||
|
// cannot be a JSONValue map
|
||||||
|
if _, ok := value.Interface().(aws.JSONValue); !ok {
|
||||||
|
t = "map"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch t {
|
||||||
|
case "structure":
|
||||||
|
if field, ok := vtype.FieldByName("_"); ok {
|
||||||
|
tag = field.Tag
|
||||||
|
}
|
||||||
|
return unmarshalStruct(value, data, tag)
|
||||||
|
case "list":
|
||||||
|
return unmarshalList(value, data, tag)
|
||||||
|
case "map":
|
||||||
|
return unmarshalMap(value, data, tag)
|
||||||
|
default:
|
||||||
|
return unmarshalScalar(value, data, tag)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalStruct(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
mapData, ok := data.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("JSON value is not a structure (%#v)", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
t := value.Type()
|
||||||
|
if value.Kind() == reflect.Ptr {
|
||||||
|
if value.IsNil() { // create the structure if it's nil
|
||||||
|
s := reflect.New(value.Type().Elem())
|
||||||
|
value.Set(s)
|
||||||
|
value = s
|
||||||
|
}
|
||||||
|
|
||||||
|
value = value.Elem()
|
||||||
|
t = t.Elem()
|
||||||
|
}
|
||||||
|
|
||||||
|
// unwrap any payloads
|
||||||
|
if payload := tag.Get("payload"); payload != "" {
|
||||||
|
field, _ := t.FieldByName(payload)
|
||||||
|
return unmarshalAny(value.FieldByName(payload), data, field.Tag)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := 0; i < t.NumField(); i++ {
|
||||||
|
field := t.Field(i)
|
||||||
|
if field.PkgPath != "" {
|
||||||
|
continue // ignore unexported fields
|
||||||
|
}
|
||||||
|
|
||||||
|
// figure out what this field is called
|
||||||
|
name := field.Name
|
||||||
|
if locName := field.Tag.Get("locationName"); locName != "" {
|
||||||
|
name = locName
|
||||||
|
}
|
||||||
|
|
||||||
|
member := value.FieldByIndex(field.Index)
|
||||||
|
err := unmarshalAny(member, mapData[name], field.Tag)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalList(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
listData, ok := data.([]interface{})
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("JSON value is not a list (%#v)", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value.IsNil() {
|
||||||
|
l := len(listData)
|
||||||
|
value.Set(reflect.MakeSlice(value.Type(), l, l))
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, c := range listData {
|
||||||
|
err := unmarshalAny(value.Index(i), c, "")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalMap(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
if data == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
mapData, ok := data.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("JSON value is not a map (%#v)", data)
|
||||||
|
}
|
||||||
|
|
||||||
|
if value.IsNil() {
|
||||||
|
value.Set(reflect.MakeMap(value.Type()))
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range mapData {
|
||||||
|
kvalue := reflect.ValueOf(k)
|
||||||
|
vvalue := reflect.New(value.Type().Elem()).Elem()
|
||||||
|
|
||||||
|
unmarshalAny(vvalue, v, "")
|
||||||
|
value.SetMapIndex(kvalue, vvalue)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func unmarshalScalar(value reflect.Value, data interface{}, tag reflect.StructTag) error {
|
||||||
|
|
||||||
|
switch d := data.(type) {
|
||||||
|
case nil:
|
||||||
|
return nil // nothing to do here
|
||||||
|
case string:
|
||||||
|
switch value.Interface().(type) {
|
||||||
|
case *string:
|
||||||
|
value.Set(reflect.ValueOf(&d))
|
||||||
|
case []byte:
|
||||||
|
b, err := base64.StdEncoding.DecodeString(d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
value.Set(reflect.ValueOf(b))
|
||||||
|
case *time.Time:
|
||||||
|
format := tag.Get("timestampFormat")
|
||||||
|
if len(format) == 0 {
|
||||||
|
format = protocol.ISO8601TimeFormatName
|
||||||
|
}
|
||||||
|
|
||||||
|
t, err := protocol.ParseTime(format, d)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
value.Set(reflect.ValueOf(&t))
|
||||||
|
case aws.JSONValue:
|
||||||
|
// No need to use escaping as the value is a non-quoted string.
|
||||||
|
v, err := protocol.DecodeJSONValue(d, protocol.NoEscape)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
value.Set(reflect.ValueOf(v))
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
case float64:
|
||||||
|
switch value.Interface().(type) {
|
||||||
|
case *int64:
|
||||||
|
di := int64(d)
|
||||||
|
value.Set(reflect.ValueOf(&di))
|
||||||
|
case *float64:
|
||||||
|
value.Set(reflect.ValueOf(&d))
|
||||||
|
case *time.Time:
|
||||||
|
// Time unmarshaled from a float64 can only be epoch seconds
|
||||||
|
t := time.Unix(int64(d), 0).UTC()
|
||||||
|
value.Set(reflect.ValueOf(&t))
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
case bool:
|
||||||
|
switch value.Interface().(type) {
|
||||||
|
case *bool:
|
||||||
|
value.Set(reflect.ValueOf(&d))
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported value: %v (%s)", value.Interface(), value.Type())
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unsupported JSON value (%v)", data)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
115
vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go
generated
vendored
Normal file
115
vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/jsonrpc.go
generated
vendored
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
// Package jsonrpc provides JSON RPC utilities for serialization of AWS
|
||||||
|
// requests and responses.
|
||||||
|
package jsonrpc
|
||||||
|
|
||||||
|
//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/input/json.json build_test.go
|
||||||
|
//go:generate go run -tags codegen ../../../models/protocol_tests/generate.go ../../../models/protocol_tests/output/json.json unmarshal_test.go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"io"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws/awserr"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/json/jsonutil"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/rest"
|
||||||
|
)
|
||||||
|
|
||||||
|
var emptyJSON = []byte("{}")
|
||||||
|
|
||||||
|
// BuildHandler is a named request handler for building jsonrpc protocol requests
|
||||||
|
var BuildHandler = request.NamedHandler{Name: "awssdk.jsonrpc.Build", Fn: Build}
|
||||||
|
|
||||||
|
// UnmarshalHandler is a named request handler for unmarshaling jsonrpc protocol requests
|
||||||
|
var UnmarshalHandler = request.NamedHandler{Name: "awssdk.jsonrpc.Unmarshal", Fn: Unmarshal}
|
||||||
|
|
||||||
|
// UnmarshalMetaHandler is a named request handler for unmarshaling jsonrpc protocol request metadata
|
||||||
|
var UnmarshalMetaHandler = request.NamedHandler{Name: "awssdk.jsonrpc.UnmarshalMeta", Fn: UnmarshalMeta}
|
||||||
|
|
||||||
|
// UnmarshalErrorHandler is a named request handler for unmarshaling jsonrpc protocol request errors
|
||||||
|
var UnmarshalErrorHandler = request.NamedHandler{Name: "awssdk.jsonrpc.UnmarshalError", Fn: UnmarshalError}
|
||||||
|
|
||||||
|
// Build builds a JSON payload for a JSON RPC request.
|
||||||
|
func Build(req *request.Request) {
|
||||||
|
var buf []byte
|
||||||
|
var err error
|
||||||
|
if req.ParamsFilled() {
|
||||||
|
buf, err = jsonutil.BuildJSON(req.Params)
|
||||||
|
if err != nil {
|
||||||
|
req.Error = awserr.New("SerializationError", "failed encoding JSON RPC request", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
buf = emptyJSON
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.ClientInfo.TargetPrefix != "" || string(buf) != "{}" {
|
||||||
|
req.SetBufferBody(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.ClientInfo.TargetPrefix != "" {
|
||||||
|
target := req.ClientInfo.TargetPrefix + "." + req.Operation.Name
|
||||||
|
req.HTTPRequest.Header.Add("X-Amz-Target", target)
|
||||||
|
}
|
||||||
|
if req.ClientInfo.JSONVersion != "" {
|
||||||
|
jsonVersion := req.ClientInfo.JSONVersion
|
||||||
|
req.HTTPRequest.Header.Add("Content-Type", "application/x-amz-json-"+jsonVersion)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unmarshal unmarshals a response for a JSON RPC service.
|
||||||
|
func Unmarshal(req *request.Request) {
|
||||||
|
defer req.HTTPResponse.Body.Close()
|
||||||
|
if req.DataFilled() {
|
||||||
|
err := jsonutil.UnmarshalJSON(req.Data, req.HTTPResponse.Body)
|
||||||
|
if err != nil {
|
||||||
|
req.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed decoding JSON RPC response", err),
|
||||||
|
req.HTTPResponse.StatusCode,
|
||||||
|
req.RequestID,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalMeta unmarshals headers from a response for a JSON RPC service.
|
||||||
|
func UnmarshalMeta(req *request.Request) {
|
||||||
|
rest.UnmarshalMeta(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalError unmarshals an error response for a JSON RPC service.
|
||||||
|
func UnmarshalError(req *request.Request) {
|
||||||
|
defer req.HTTPResponse.Body.Close()
|
||||||
|
|
||||||
|
var jsonErr jsonErrorResponse
|
||||||
|
err := json.NewDecoder(req.HTTPResponse.Body).Decode(&jsonErr)
|
||||||
|
if err == io.EOF {
|
||||||
|
req.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", req.HTTPResponse.Status, nil),
|
||||||
|
req.HTTPResponse.StatusCode,
|
||||||
|
req.RequestID,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
} else if err != nil {
|
||||||
|
req.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed decoding JSON RPC error response", err),
|
||||||
|
req.HTTPResponse.StatusCode,
|
||||||
|
req.RequestID,
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
codes := strings.SplitN(jsonErr.Code, "#", 2)
|
||||||
|
req.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New(codes[len(codes)-1], jsonErr.Message, nil),
|
||||||
|
req.HTTPResponse.StatusCode,
|
||||||
|
req.RequestID,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
type jsonErrorResponse struct {
|
||||||
|
Code string `json:"__type"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}
|
7
vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
generated
vendored
7
vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/queryutil.go
generated
vendored
@ -233,7 +233,12 @@ func (q *queryParser) parseScalar(v url.Values, r reflect.Value, name string, ta
|
|||||||
v.Set(name, strconv.FormatFloat(float64(value), 'f', -1, 32))
|
v.Set(name, strconv.FormatFloat(float64(value), 'f', -1, 32))
|
||||||
case time.Time:
|
case time.Time:
|
||||||
const ISO8601UTC = "2006-01-02T15:04:05Z"
|
const ISO8601UTC = "2006-01-02T15:04:05Z"
|
||||||
v.Set(name, value.UTC().Format(ISO8601UTC))
|
format := tag.Get("timestampFormat")
|
||||||
|
if len(format) == 0 {
|
||||||
|
format = protocol.ISO8601TimeFormatName
|
||||||
|
}
|
||||||
|
|
||||||
|
v.Set(name, protocol.FormatTime(format, value))
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("unsupported value for param %s: %v (%s)", name, r.Interface(), r.Type().Name())
|
return fmt.Errorf("unsupported value for param %s: %v (%s)", name, r.Interface(), r.Type().Name())
|
||||||
}
|
}
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal.go
generated
vendored
@ -23,7 +23,11 @@ func Unmarshal(r *request.Request) {
|
|||||||
decoder := xml.NewDecoder(r.HTTPResponse.Body)
|
decoder := xml.NewDecoder(r.HTTPResponse.Body)
|
||||||
err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result")
|
err := xmlutil.UnmarshalXML(r.Data, decoder, r.Operation.Name+"Result")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed decoding Query response", err)
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed decoding Query response", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
14
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go
generated
vendored
14
vendor/github.com/aws/aws-sdk-go/private/protocol/query/unmarshal_error.go
generated
vendored
@ -28,7 +28,11 @@ func UnmarshalError(r *request.Request) {
|
|||||||
|
|
||||||
bodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
bodyBytes, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed to read from query HTTP response body", err)
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed to read from query HTTP response body", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,6 +65,10 @@ func UnmarshalError(r *request.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Failed to retrieve any error message from the response body
|
// Failed to retrieve any error message from the response body
|
||||||
r.Error = awserr.New("SerializationError",
|
r.Error = awserr.NewRequestFailure(
|
||||||
"failed to decode query XML error response", decodeErr)
|
awserr.New("SerializationError",
|
||||||
|
"failed to decode query XML error response", decodeErr),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
14
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
generated
vendored
14
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/build.go
generated
vendored
@ -20,11 +20,6 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/private/protocol"
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
// RFC1123GMT is a RFC1123 (RFC822) formated timestame. This format is not
|
|
||||||
// using the standard library's time.RFC1123 due to the desire to always use
|
|
||||||
// GMT as the timezone.
|
|
||||||
const RFC1123GMT = "Mon, 2 Jan 2006 15:04:05 GMT"
|
|
||||||
|
|
||||||
// Whether the byte value can be sent without escaping in AWS URLs
|
// Whether the byte value can be sent without escaping in AWS URLs
|
||||||
var noEscape [256]bool
|
var noEscape [256]bool
|
||||||
|
|
||||||
@ -272,7 +267,14 @@ func convertType(v reflect.Value, tag reflect.StructTag) (str string, err error)
|
|||||||
case float64:
|
case float64:
|
||||||
str = strconv.FormatFloat(value, 'f', -1, 64)
|
str = strconv.FormatFloat(value, 'f', -1, 64)
|
||||||
case time.Time:
|
case time.Time:
|
||||||
str = value.UTC().Format(RFC1123GMT)
|
format := tag.Get("timestampFormat")
|
||||||
|
if len(format) == 0 {
|
||||||
|
format = protocol.RFC822TimeFormatName
|
||||||
|
if tag.Get("location") == "querystring" {
|
||||||
|
format = protocol.ISO8601TimeFormatName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
str = protocol.FormatTime(format, value)
|
||||||
case aws.JSONValue:
|
case aws.JSONValue:
|
||||||
if len(value) == 0 {
|
if len(value) == 0 {
|
||||||
return "", errValueNotSet
|
return "", errValueNotSet
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/unmarshal.go
generated
vendored
@ -198,7 +198,11 @@ func unmarshalHeader(v reflect.Value, header string, tag reflect.StructTag) erro
|
|||||||
}
|
}
|
||||||
v.Set(reflect.ValueOf(&f))
|
v.Set(reflect.ValueOf(&f))
|
||||||
case *time.Time:
|
case *time.Time:
|
||||||
t, err := time.Parse(time.RFC1123, header)
|
format := tag.Get("timestampFormat")
|
||||||
|
if len(format) == 0 {
|
||||||
|
format = protocol.RFC822TimeFormatName
|
||||||
|
}
|
||||||
|
t, err := protocol.ParseTime(format, header)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
12
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go
generated
vendored
12
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/restxml.go
generated
vendored
@ -36,7 +36,11 @@ func Build(r *request.Request) {
|
|||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf))
|
err := xmlutil.BuildXML(r.Params, xml.NewEncoder(&buf))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed to encode rest XML request", err)
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed to encode rest XML request", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
r.SetBufferBody(buf.Bytes())
|
r.SetBufferBody(buf.Bytes())
|
||||||
@ -50,7 +54,11 @@ func Unmarshal(r *request.Request) {
|
|||||||
decoder := xml.NewDecoder(r.HTTPResponse.Body)
|
decoder := xml.NewDecoder(r.HTTPResponse.Body)
|
||||||
err := xmlutil.UnmarshalXML(r.Data, decoder, "")
|
err := xmlutil.UnmarshalXML(r.Data, decoder, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "failed to decode REST XML response", err)
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "failed to decode REST XML response", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
72
vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go
generated
vendored
Normal file
72
vendor/github.com/aws/aws-sdk-go/private/protocol/timestamp.go
generated
vendored
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package protocol
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Names of time formats supported by the SDK
|
||||||
|
const (
|
||||||
|
RFC822TimeFormatName = "rfc822"
|
||||||
|
ISO8601TimeFormatName = "iso8601"
|
||||||
|
UnixTimeFormatName = "unixTimestamp"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Time formats supported by the SDK
|
||||||
|
const (
|
||||||
|
// RFC 7231#section-7.1.1.1 timetamp format. e.g Tue, 29 Apr 2014 18:30:38 GMT
|
||||||
|
RFC822TimeFormat = "Mon, 2 Jan 2006 15:04:05 GMT"
|
||||||
|
|
||||||
|
// RFC3339 a subset of the ISO8601 timestamp format. e.g 2014-04-29T18:30:38Z
|
||||||
|
ISO8601TimeFormat = "2006-01-02T15:04:05Z"
|
||||||
|
)
|
||||||
|
|
||||||
|
// IsKnownTimestampFormat returns if the timestamp format name
|
||||||
|
// is know to the SDK's protocols.
|
||||||
|
func IsKnownTimestampFormat(name string) bool {
|
||||||
|
switch name {
|
||||||
|
case RFC822TimeFormatName:
|
||||||
|
fallthrough
|
||||||
|
case ISO8601TimeFormatName:
|
||||||
|
fallthrough
|
||||||
|
case UnixTimeFormatName:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// FormatTime returns a string value of the time.
|
||||||
|
func FormatTime(name string, t time.Time) string {
|
||||||
|
t = t.UTC()
|
||||||
|
|
||||||
|
switch name {
|
||||||
|
case RFC822TimeFormatName:
|
||||||
|
return t.Format(RFC822TimeFormat)
|
||||||
|
case ISO8601TimeFormatName:
|
||||||
|
return t.Format(ISO8601TimeFormat)
|
||||||
|
case UnixTimeFormatName:
|
||||||
|
return strconv.FormatInt(t.Unix(), 10)
|
||||||
|
default:
|
||||||
|
panic("unknown timestamp format name, " + name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ParseTime attempts to parse the time given the format. Returns
|
||||||
|
// the time if it was able to be parsed, and fails otherwise.
|
||||||
|
func ParseTime(formatName, value string) (time.Time, error) {
|
||||||
|
switch formatName {
|
||||||
|
case RFC822TimeFormatName:
|
||||||
|
return time.Parse(RFC822TimeFormat, value)
|
||||||
|
case ISO8601TimeFormatName:
|
||||||
|
return time.Parse(ISO8601TimeFormat, value)
|
||||||
|
case UnixTimeFormatName:
|
||||||
|
v, err := strconv.ParseFloat(value, 64)
|
||||||
|
if err != nil {
|
||||||
|
return time.Time{}, err
|
||||||
|
}
|
||||||
|
return time.Unix(int64(v), 0), nil
|
||||||
|
default:
|
||||||
|
panic("unknown timestamp format name, " + formatName)
|
||||||
|
}
|
||||||
|
}
|
32
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go
generated
vendored
32
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/build.go
generated
vendored
@ -13,9 +13,13 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/private/protocol"
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
// BuildXML will serialize params into an xml.Encoder.
|
// BuildXML will serialize params into an xml.Encoder. Error will be returned
|
||||||
// Error will be returned if the serialization of any of the params or nested values fails.
|
// if the serialization of any of the params or nested values fails.
|
||||||
func BuildXML(params interface{}, e *xml.Encoder) error {
|
func BuildXML(params interface{}, e *xml.Encoder) error {
|
||||||
|
return buildXML(params, e, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildXML(params interface{}, e *xml.Encoder, sorted bool) error {
|
||||||
b := xmlBuilder{encoder: e, namespaces: map[string]string{}}
|
b := xmlBuilder{encoder: e, namespaces: map[string]string{}}
|
||||||
root := NewXMLElement(xml.Name{})
|
root := NewXMLElement(xml.Name{})
|
||||||
if err := b.buildValue(reflect.ValueOf(params), root, ""); err != nil {
|
if err := b.buildValue(reflect.ValueOf(params), root, ""); err != nil {
|
||||||
@ -23,7 +27,7 @@ func BuildXML(params interface{}, e *xml.Encoder) error {
|
|||||||
}
|
}
|
||||||
for _, c := range root.Children {
|
for _, c := range root.Children {
|
||||||
for _, v := range c {
|
for _, v := range c {
|
||||||
return StructToXML(e, v, false)
|
return StructToXML(e, v, sorted)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -83,15 +87,13 @@ func (b *xmlBuilder) buildValue(value reflect.Value, current *XMLNode, tag refle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// buildStruct adds a struct and its fields to the current XMLNode. All fields any any nested
|
// buildStruct adds a struct and its fields to the current XMLNode. All fields and any nested
|
||||||
// types are converted to XMLNodes also.
|
// types are converted to XMLNodes also.
|
||||||
func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {
|
func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag reflect.StructTag) error {
|
||||||
if !value.IsValid() {
|
if !value.IsValid() {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldAdded := false
|
|
||||||
|
|
||||||
// unwrap payloads
|
// unwrap payloads
|
||||||
if payload := tag.Get("payload"); payload != "" {
|
if payload := tag.Get("payload"); payload != "" {
|
||||||
field, _ := value.Type().FieldByName(payload)
|
field, _ := value.Type().FieldByName(payload)
|
||||||
@ -119,6 +121,8 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl
|
|||||||
child.Attr = append(child.Attr, ns)
|
child.Attr = append(child.Attr, ns)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var payloadFields, nonPayloadFields int
|
||||||
|
|
||||||
t := value.Type()
|
t := value.Type()
|
||||||
for i := 0; i < value.NumField(); i++ {
|
for i := 0; i < value.NumField(); i++ {
|
||||||
member := elemOf(value.Field(i))
|
member := elemOf(value.Field(i))
|
||||||
@ -133,8 +137,10 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl
|
|||||||
|
|
||||||
mTag := field.Tag
|
mTag := field.Tag
|
||||||
if mTag.Get("location") != "" { // skip non-body members
|
if mTag.Get("location") != "" { // skip non-body members
|
||||||
|
nonPayloadFields++
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
payloadFields++
|
||||||
|
|
||||||
if protocol.CanSetIdempotencyToken(value.Field(i), field) {
|
if protocol.CanSetIdempotencyToken(value.Field(i), field) {
|
||||||
token := protocol.GetIdempotencyToken()
|
token := protocol.GetIdempotencyToken()
|
||||||
@ -149,11 +155,11 @@ func (b *xmlBuilder) buildStruct(value reflect.Value, current *XMLNode, tag refl
|
|||||||
if err := b.buildValue(member, child, mTag); err != nil {
|
if err := b.buildValue(member, child, mTag); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldAdded = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if fieldAdded { // only append this child if we have one ore more valid members
|
// Only case where the child shape is not added is if the shape only contains
|
||||||
|
// non-payload fields, e.g headers/query.
|
||||||
|
if !(payloadFields == 0 && nonPayloadFields > 0) {
|
||||||
current.AddChild(child)
|
current.AddChild(child)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,8 +284,12 @@ func (b *xmlBuilder) buildScalar(value reflect.Value, current *XMLNode, tag refl
|
|||||||
case float32:
|
case float32:
|
||||||
str = strconv.FormatFloat(float64(converted), 'f', -1, 32)
|
str = strconv.FormatFloat(float64(converted), 'f', -1, 32)
|
||||||
case time.Time:
|
case time.Time:
|
||||||
const ISO8601UTC = "2006-01-02T15:04:05Z"
|
format := tag.Get("timestampFormat")
|
||||||
str = converted.UTC().Format(ISO8601UTC)
|
if len(format) == 0 {
|
||||||
|
format = protocol.ISO8601TimeFormatName
|
||||||
|
}
|
||||||
|
|
||||||
|
str = protocol.FormatTime(format, converted)
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("unsupported value for param %s: %v (%s)",
|
return fmt.Errorf("unsupported value for param %s: %v (%s)",
|
||||||
tag.Get("locationName"), value.Interface(), value.Type().Name())
|
tag.Get("locationName"), value.Interface(), value.Type().Name())
|
||||||
|
10
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
generated
vendored
10
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/unmarshal.go
generated
vendored
@ -9,6 +9,8 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol"
|
||||||
)
|
)
|
||||||
|
|
||||||
// UnmarshalXML deserializes an xml.Decoder into the container v. V
|
// UnmarshalXML deserializes an xml.Decoder into the container v. V
|
||||||
@ -253,8 +255,12 @@ func parseScalar(r reflect.Value, node *XMLNode, tag reflect.StructTag) error {
|
|||||||
}
|
}
|
||||||
r.Set(reflect.ValueOf(&v))
|
r.Set(reflect.ValueOf(&v))
|
||||||
case *time.Time:
|
case *time.Time:
|
||||||
const ISO8601UTC = "2006-01-02T15:04:05Z"
|
format := tag.Get("timestampFormat")
|
||||||
t, err := time.Parse(ISO8601UTC, node.Text)
|
if len(format) == 0 {
|
||||||
|
format = protocol.ISO8601TimeFormatName
|
||||||
|
}
|
||||||
|
|
||||||
|
t, err := protocol.ParseTime(format, node.Text)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
1
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go
generated
vendored
1
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/xml_to_struct.go
generated
vendored
@ -29,6 +29,7 @@ func NewXMLElement(name xml.Name) *XMLNode {
|
|||||||
|
|
||||||
// AddChild adds child to the XMLNode.
|
// AddChild adds child to the XMLNode.
|
||||||
func (n *XMLNode) AddChild(child *XMLNode) {
|
func (n *XMLNode) AddChild(child *XMLNode) {
|
||||||
|
child.parent = n
|
||||||
if _, ok := n.Children[child.Name.Local]; !ok {
|
if _, ok := n.Children[child.Name.Local]; !ok {
|
||||||
n.Children[child.Name.Local] = []*XMLNode{}
|
n.Children[child.Name.Local] = []*XMLNode{}
|
||||||
}
|
}
|
||||||
|
586
vendor/github.com/aws/aws-sdk-go/service/cloudwatch/api.go
generated
vendored
586
vendor/github.com/aws/aws-sdk-go/service/cloudwatch/api.go
generated
vendored
File diff suppressed because it is too large
Load Diff
18316
vendor/github.com/aws/aws-sdk-go/service/ec2/api.go
generated
vendored
18316
vendor/github.com/aws/aws-sdk-go/service/ec2/api.go
generated
vendored
File diff suppressed because it is too large
Load Diff
19
vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go
generated
vendored
19
vendor/github.com/aws/aws-sdk-go/service/ec2/doc.go
generated
vendored
@ -3,9 +3,22 @@
|
|||||||
// Package ec2 provides the client and types for making API
|
// Package ec2 provides the client and types for making API
|
||||||
// requests to Amazon Elastic Compute Cloud.
|
// requests to Amazon Elastic Compute Cloud.
|
||||||
//
|
//
|
||||||
// Amazon Elastic Compute Cloud (Amazon EC2) provides resizable computing capacity
|
// Amazon Elastic Compute Cloud (Amazon EC2) provides secure and resizable computing
|
||||||
// in the AWS Cloud. Using Amazon EC2 eliminates the need to invest in hardware
|
// capacity in the AWS cloud. Using Amazon EC2 eliminates the need to invest
|
||||||
// up front, so you can develop and deploy applications faster.
|
// in hardware up front, so you can develop and deploy applications faster.
|
||||||
|
//
|
||||||
|
// To learn more about Amazon EC2, Amazon EBS, and Amazon VPC, see the following
|
||||||
|
// resources:
|
||||||
|
//
|
||||||
|
// * Amazon EC2 product page (http://aws.amazon.com/ec2)
|
||||||
|
//
|
||||||
|
// * Amazon EC2 documentation (http://aws.amazon.com/documentation/ec2)
|
||||||
|
//
|
||||||
|
// * Amazon EBS product page (http://aws.amazon.com/ebs)
|
||||||
|
//
|
||||||
|
// * Amazon VPC product page (http://aws.amazon.com/vpc)
|
||||||
|
//
|
||||||
|
// * Amazon VPC documentation (http://aws.amazon.com/documentation/vpc)
|
||||||
//
|
//
|
||||||
// See https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15 for more information on this service.
|
// See https://docs.aws.amazon.com/goto/WebAPI/ec2-2016-11-15 for more information on this service.
|
||||||
//
|
//
|
||||||
|
229
vendor/github.com/aws/aws-sdk-go/service/ec2/ec2iface/interface.go
generated
vendored
229
vendor/github.com/aws/aws-sdk-go/service/ec2/ec2iface/interface.go
generated
vendored
@ -64,6 +64,10 @@ type EC2API interface {
|
|||||||
AcceptReservedInstancesExchangeQuoteWithContext(aws.Context, *ec2.AcceptReservedInstancesExchangeQuoteInput, ...request.Option) (*ec2.AcceptReservedInstancesExchangeQuoteOutput, error)
|
AcceptReservedInstancesExchangeQuoteWithContext(aws.Context, *ec2.AcceptReservedInstancesExchangeQuoteInput, ...request.Option) (*ec2.AcceptReservedInstancesExchangeQuoteOutput, error)
|
||||||
AcceptReservedInstancesExchangeQuoteRequest(*ec2.AcceptReservedInstancesExchangeQuoteInput) (*request.Request, *ec2.AcceptReservedInstancesExchangeQuoteOutput)
|
AcceptReservedInstancesExchangeQuoteRequest(*ec2.AcceptReservedInstancesExchangeQuoteInput) (*request.Request, *ec2.AcceptReservedInstancesExchangeQuoteOutput)
|
||||||
|
|
||||||
|
AcceptTransitGatewayVpcAttachment(*ec2.AcceptTransitGatewayVpcAttachmentInput) (*ec2.AcceptTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
AcceptTransitGatewayVpcAttachmentWithContext(aws.Context, *ec2.AcceptTransitGatewayVpcAttachmentInput, ...request.Option) (*ec2.AcceptTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
AcceptTransitGatewayVpcAttachmentRequest(*ec2.AcceptTransitGatewayVpcAttachmentInput) (*request.Request, *ec2.AcceptTransitGatewayVpcAttachmentOutput)
|
||||||
|
|
||||||
AcceptVpcEndpointConnections(*ec2.AcceptVpcEndpointConnectionsInput) (*ec2.AcceptVpcEndpointConnectionsOutput, error)
|
AcceptVpcEndpointConnections(*ec2.AcceptVpcEndpointConnectionsInput) (*ec2.AcceptVpcEndpointConnectionsOutput, error)
|
||||||
AcceptVpcEndpointConnectionsWithContext(aws.Context, *ec2.AcceptVpcEndpointConnectionsInput, ...request.Option) (*ec2.AcceptVpcEndpointConnectionsOutput, error)
|
AcceptVpcEndpointConnectionsWithContext(aws.Context, *ec2.AcceptVpcEndpointConnectionsInput, ...request.Option) (*ec2.AcceptVpcEndpointConnectionsOutput, error)
|
||||||
AcceptVpcEndpointConnectionsRequest(*ec2.AcceptVpcEndpointConnectionsInput) (*request.Request, *ec2.AcceptVpcEndpointConnectionsOutput)
|
AcceptVpcEndpointConnectionsRequest(*ec2.AcceptVpcEndpointConnectionsInput) (*request.Request, *ec2.AcceptVpcEndpointConnectionsOutput)
|
||||||
@ -72,6 +76,10 @@ type EC2API interface {
|
|||||||
AcceptVpcPeeringConnectionWithContext(aws.Context, *ec2.AcceptVpcPeeringConnectionInput, ...request.Option) (*ec2.AcceptVpcPeeringConnectionOutput, error)
|
AcceptVpcPeeringConnectionWithContext(aws.Context, *ec2.AcceptVpcPeeringConnectionInput, ...request.Option) (*ec2.AcceptVpcPeeringConnectionOutput, error)
|
||||||
AcceptVpcPeeringConnectionRequest(*ec2.AcceptVpcPeeringConnectionInput) (*request.Request, *ec2.AcceptVpcPeeringConnectionOutput)
|
AcceptVpcPeeringConnectionRequest(*ec2.AcceptVpcPeeringConnectionInput) (*request.Request, *ec2.AcceptVpcPeeringConnectionOutput)
|
||||||
|
|
||||||
|
AdvertiseByoipCidr(*ec2.AdvertiseByoipCidrInput) (*ec2.AdvertiseByoipCidrOutput, error)
|
||||||
|
AdvertiseByoipCidrWithContext(aws.Context, *ec2.AdvertiseByoipCidrInput, ...request.Option) (*ec2.AdvertiseByoipCidrOutput, error)
|
||||||
|
AdvertiseByoipCidrRequest(*ec2.AdvertiseByoipCidrInput) (*request.Request, *ec2.AdvertiseByoipCidrOutput)
|
||||||
|
|
||||||
AllocateAddress(*ec2.AllocateAddressInput) (*ec2.AllocateAddressOutput, error)
|
AllocateAddress(*ec2.AllocateAddressInput) (*ec2.AllocateAddressOutput, error)
|
||||||
AllocateAddressWithContext(aws.Context, *ec2.AllocateAddressInput, ...request.Option) (*ec2.AllocateAddressOutput, error)
|
AllocateAddressWithContext(aws.Context, *ec2.AllocateAddressInput, ...request.Option) (*ec2.AllocateAddressOutput, error)
|
||||||
AllocateAddressRequest(*ec2.AllocateAddressInput) (*request.Request, *ec2.AllocateAddressOutput)
|
AllocateAddressRequest(*ec2.AllocateAddressInput) (*request.Request, *ec2.AllocateAddressOutput)
|
||||||
@ -80,6 +88,10 @@ type EC2API interface {
|
|||||||
AllocateHostsWithContext(aws.Context, *ec2.AllocateHostsInput, ...request.Option) (*ec2.AllocateHostsOutput, error)
|
AllocateHostsWithContext(aws.Context, *ec2.AllocateHostsInput, ...request.Option) (*ec2.AllocateHostsOutput, error)
|
||||||
AllocateHostsRequest(*ec2.AllocateHostsInput) (*request.Request, *ec2.AllocateHostsOutput)
|
AllocateHostsRequest(*ec2.AllocateHostsInput) (*request.Request, *ec2.AllocateHostsOutput)
|
||||||
|
|
||||||
|
ApplySecurityGroupsToClientVpnTargetNetwork(*ec2.ApplySecurityGroupsToClientVpnTargetNetworkInput) (*ec2.ApplySecurityGroupsToClientVpnTargetNetworkOutput, error)
|
||||||
|
ApplySecurityGroupsToClientVpnTargetNetworkWithContext(aws.Context, *ec2.ApplySecurityGroupsToClientVpnTargetNetworkInput, ...request.Option) (*ec2.ApplySecurityGroupsToClientVpnTargetNetworkOutput, error)
|
||||||
|
ApplySecurityGroupsToClientVpnTargetNetworkRequest(*ec2.ApplySecurityGroupsToClientVpnTargetNetworkInput) (*request.Request, *ec2.ApplySecurityGroupsToClientVpnTargetNetworkOutput)
|
||||||
|
|
||||||
AssignIpv6Addresses(*ec2.AssignIpv6AddressesInput) (*ec2.AssignIpv6AddressesOutput, error)
|
AssignIpv6Addresses(*ec2.AssignIpv6AddressesInput) (*ec2.AssignIpv6AddressesOutput, error)
|
||||||
AssignIpv6AddressesWithContext(aws.Context, *ec2.AssignIpv6AddressesInput, ...request.Option) (*ec2.AssignIpv6AddressesOutput, error)
|
AssignIpv6AddressesWithContext(aws.Context, *ec2.AssignIpv6AddressesInput, ...request.Option) (*ec2.AssignIpv6AddressesOutput, error)
|
||||||
AssignIpv6AddressesRequest(*ec2.AssignIpv6AddressesInput) (*request.Request, *ec2.AssignIpv6AddressesOutput)
|
AssignIpv6AddressesRequest(*ec2.AssignIpv6AddressesInput) (*request.Request, *ec2.AssignIpv6AddressesOutput)
|
||||||
@ -92,6 +104,10 @@ type EC2API interface {
|
|||||||
AssociateAddressWithContext(aws.Context, *ec2.AssociateAddressInput, ...request.Option) (*ec2.AssociateAddressOutput, error)
|
AssociateAddressWithContext(aws.Context, *ec2.AssociateAddressInput, ...request.Option) (*ec2.AssociateAddressOutput, error)
|
||||||
AssociateAddressRequest(*ec2.AssociateAddressInput) (*request.Request, *ec2.AssociateAddressOutput)
|
AssociateAddressRequest(*ec2.AssociateAddressInput) (*request.Request, *ec2.AssociateAddressOutput)
|
||||||
|
|
||||||
|
AssociateClientVpnTargetNetwork(*ec2.AssociateClientVpnTargetNetworkInput) (*ec2.AssociateClientVpnTargetNetworkOutput, error)
|
||||||
|
AssociateClientVpnTargetNetworkWithContext(aws.Context, *ec2.AssociateClientVpnTargetNetworkInput, ...request.Option) (*ec2.AssociateClientVpnTargetNetworkOutput, error)
|
||||||
|
AssociateClientVpnTargetNetworkRequest(*ec2.AssociateClientVpnTargetNetworkInput) (*request.Request, *ec2.AssociateClientVpnTargetNetworkOutput)
|
||||||
|
|
||||||
AssociateDhcpOptions(*ec2.AssociateDhcpOptionsInput) (*ec2.AssociateDhcpOptionsOutput, error)
|
AssociateDhcpOptions(*ec2.AssociateDhcpOptionsInput) (*ec2.AssociateDhcpOptionsOutput, error)
|
||||||
AssociateDhcpOptionsWithContext(aws.Context, *ec2.AssociateDhcpOptionsInput, ...request.Option) (*ec2.AssociateDhcpOptionsOutput, error)
|
AssociateDhcpOptionsWithContext(aws.Context, *ec2.AssociateDhcpOptionsInput, ...request.Option) (*ec2.AssociateDhcpOptionsOutput, error)
|
||||||
AssociateDhcpOptionsRequest(*ec2.AssociateDhcpOptionsInput) (*request.Request, *ec2.AssociateDhcpOptionsOutput)
|
AssociateDhcpOptionsRequest(*ec2.AssociateDhcpOptionsInput) (*request.Request, *ec2.AssociateDhcpOptionsOutput)
|
||||||
@ -108,6 +124,10 @@ type EC2API interface {
|
|||||||
AssociateSubnetCidrBlockWithContext(aws.Context, *ec2.AssociateSubnetCidrBlockInput, ...request.Option) (*ec2.AssociateSubnetCidrBlockOutput, error)
|
AssociateSubnetCidrBlockWithContext(aws.Context, *ec2.AssociateSubnetCidrBlockInput, ...request.Option) (*ec2.AssociateSubnetCidrBlockOutput, error)
|
||||||
AssociateSubnetCidrBlockRequest(*ec2.AssociateSubnetCidrBlockInput) (*request.Request, *ec2.AssociateSubnetCidrBlockOutput)
|
AssociateSubnetCidrBlockRequest(*ec2.AssociateSubnetCidrBlockInput) (*request.Request, *ec2.AssociateSubnetCidrBlockOutput)
|
||||||
|
|
||||||
|
AssociateTransitGatewayRouteTable(*ec2.AssociateTransitGatewayRouteTableInput) (*ec2.AssociateTransitGatewayRouteTableOutput, error)
|
||||||
|
AssociateTransitGatewayRouteTableWithContext(aws.Context, *ec2.AssociateTransitGatewayRouteTableInput, ...request.Option) (*ec2.AssociateTransitGatewayRouteTableOutput, error)
|
||||||
|
AssociateTransitGatewayRouteTableRequest(*ec2.AssociateTransitGatewayRouteTableInput) (*request.Request, *ec2.AssociateTransitGatewayRouteTableOutput)
|
||||||
|
|
||||||
AssociateVpcCidrBlock(*ec2.AssociateVpcCidrBlockInput) (*ec2.AssociateVpcCidrBlockOutput, error)
|
AssociateVpcCidrBlock(*ec2.AssociateVpcCidrBlockInput) (*ec2.AssociateVpcCidrBlockOutput, error)
|
||||||
AssociateVpcCidrBlockWithContext(aws.Context, *ec2.AssociateVpcCidrBlockInput, ...request.Option) (*ec2.AssociateVpcCidrBlockOutput, error)
|
AssociateVpcCidrBlockWithContext(aws.Context, *ec2.AssociateVpcCidrBlockInput, ...request.Option) (*ec2.AssociateVpcCidrBlockOutput, error)
|
||||||
AssociateVpcCidrBlockRequest(*ec2.AssociateVpcCidrBlockInput) (*request.Request, *ec2.AssociateVpcCidrBlockOutput)
|
AssociateVpcCidrBlockRequest(*ec2.AssociateVpcCidrBlockInput) (*request.Request, *ec2.AssociateVpcCidrBlockOutput)
|
||||||
@ -132,6 +152,10 @@ type EC2API interface {
|
|||||||
AttachVpnGatewayWithContext(aws.Context, *ec2.AttachVpnGatewayInput, ...request.Option) (*ec2.AttachVpnGatewayOutput, error)
|
AttachVpnGatewayWithContext(aws.Context, *ec2.AttachVpnGatewayInput, ...request.Option) (*ec2.AttachVpnGatewayOutput, error)
|
||||||
AttachVpnGatewayRequest(*ec2.AttachVpnGatewayInput) (*request.Request, *ec2.AttachVpnGatewayOutput)
|
AttachVpnGatewayRequest(*ec2.AttachVpnGatewayInput) (*request.Request, *ec2.AttachVpnGatewayOutput)
|
||||||
|
|
||||||
|
AuthorizeClientVpnIngress(*ec2.AuthorizeClientVpnIngressInput) (*ec2.AuthorizeClientVpnIngressOutput, error)
|
||||||
|
AuthorizeClientVpnIngressWithContext(aws.Context, *ec2.AuthorizeClientVpnIngressInput, ...request.Option) (*ec2.AuthorizeClientVpnIngressOutput, error)
|
||||||
|
AuthorizeClientVpnIngressRequest(*ec2.AuthorizeClientVpnIngressInput) (*request.Request, *ec2.AuthorizeClientVpnIngressOutput)
|
||||||
|
|
||||||
AuthorizeSecurityGroupEgress(*ec2.AuthorizeSecurityGroupEgressInput) (*ec2.AuthorizeSecurityGroupEgressOutput, error)
|
AuthorizeSecurityGroupEgress(*ec2.AuthorizeSecurityGroupEgressInput) (*ec2.AuthorizeSecurityGroupEgressOutput, error)
|
||||||
AuthorizeSecurityGroupEgressWithContext(aws.Context, *ec2.AuthorizeSecurityGroupEgressInput, ...request.Option) (*ec2.AuthorizeSecurityGroupEgressOutput, error)
|
AuthorizeSecurityGroupEgressWithContext(aws.Context, *ec2.AuthorizeSecurityGroupEgressInput, ...request.Option) (*ec2.AuthorizeSecurityGroupEgressOutput, error)
|
||||||
AuthorizeSecurityGroupEgressRequest(*ec2.AuthorizeSecurityGroupEgressInput) (*request.Request, *ec2.AuthorizeSecurityGroupEgressOutput)
|
AuthorizeSecurityGroupEgressRequest(*ec2.AuthorizeSecurityGroupEgressInput) (*request.Request, *ec2.AuthorizeSecurityGroupEgressOutput)
|
||||||
@ -148,6 +172,10 @@ type EC2API interface {
|
|||||||
CancelBundleTaskWithContext(aws.Context, *ec2.CancelBundleTaskInput, ...request.Option) (*ec2.CancelBundleTaskOutput, error)
|
CancelBundleTaskWithContext(aws.Context, *ec2.CancelBundleTaskInput, ...request.Option) (*ec2.CancelBundleTaskOutput, error)
|
||||||
CancelBundleTaskRequest(*ec2.CancelBundleTaskInput) (*request.Request, *ec2.CancelBundleTaskOutput)
|
CancelBundleTaskRequest(*ec2.CancelBundleTaskInput) (*request.Request, *ec2.CancelBundleTaskOutput)
|
||||||
|
|
||||||
|
CancelCapacityReservation(*ec2.CancelCapacityReservationInput) (*ec2.CancelCapacityReservationOutput, error)
|
||||||
|
CancelCapacityReservationWithContext(aws.Context, *ec2.CancelCapacityReservationInput, ...request.Option) (*ec2.CancelCapacityReservationOutput, error)
|
||||||
|
CancelCapacityReservationRequest(*ec2.CancelCapacityReservationInput) (*request.Request, *ec2.CancelCapacityReservationOutput)
|
||||||
|
|
||||||
CancelConversionTask(*ec2.CancelConversionTaskInput) (*ec2.CancelConversionTaskOutput, error)
|
CancelConversionTask(*ec2.CancelConversionTaskInput) (*ec2.CancelConversionTaskOutput, error)
|
||||||
CancelConversionTaskWithContext(aws.Context, *ec2.CancelConversionTaskInput, ...request.Option) (*ec2.CancelConversionTaskOutput, error)
|
CancelConversionTaskWithContext(aws.Context, *ec2.CancelConversionTaskInput, ...request.Option) (*ec2.CancelConversionTaskOutput, error)
|
||||||
CancelConversionTaskRequest(*ec2.CancelConversionTaskInput) (*request.Request, *ec2.CancelConversionTaskOutput)
|
CancelConversionTaskRequest(*ec2.CancelConversionTaskInput) (*request.Request, *ec2.CancelConversionTaskOutput)
|
||||||
@ -188,6 +216,18 @@ type EC2API interface {
|
|||||||
CopySnapshotWithContext(aws.Context, *ec2.CopySnapshotInput, ...request.Option) (*ec2.CopySnapshotOutput, error)
|
CopySnapshotWithContext(aws.Context, *ec2.CopySnapshotInput, ...request.Option) (*ec2.CopySnapshotOutput, error)
|
||||||
CopySnapshotRequest(*ec2.CopySnapshotInput) (*request.Request, *ec2.CopySnapshotOutput)
|
CopySnapshotRequest(*ec2.CopySnapshotInput) (*request.Request, *ec2.CopySnapshotOutput)
|
||||||
|
|
||||||
|
CreateCapacityReservation(*ec2.CreateCapacityReservationInput) (*ec2.CreateCapacityReservationOutput, error)
|
||||||
|
CreateCapacityReservationWithContext(aws.Context, *ec2.CreateCapacityReservationInput, ...request.Option) (*ec2.CreateCapacityReservationOutput, error)
|
||||||
|
CreateCapacityReservationRequest(*ec2.CreateCapacityReservationInput) (*request.Request, *ec2.CreateCapacityReservationOutput)
|
||||||
|
|
||||||
|
CreateClientVpnEndpoint(*ec2.CreateClientVpnEndpointInput) (*ec2.CreateClientVpnEndpointOutput, error)
|
||||||
|
CreateClientVpnEndpointWithContext(aws.Context, *ec2.CreateClientVpnEndpointInput, ...request.Option) (*ec2.CreateClientVpnEndpointOutput, error)
|
||||||
|
CreateClientVpnEndpointRequest(*ec2.CreateClientVpnEndpointInput) (*request.Request, *ec2.CreateClientVpnEndpointOutput)
|
||||||
|
|
||||||
|
CreateClientVpnRoute(*ec2.CreateClientVpnRouteInput) (*ec2.CreateClientVpnRouteOutput, error)
|
||||||
|
CreateClientVpnRouteWithContext(aws.Context, *ec2.CreateClientVpnRouteInput, ...request.Option) (*ec2.CreateClientVpnRouteOutput, error)
|
||||||
|
CreateClientVpnRouteRequest(*ec2.CreateClientVpnRouteInput) (*request.Request, *ec2.CreateClientVpnRouteOutput)
|
||||||
|
|
||||||
CreateCustomerGateway(*ec2.CreateCustomerGatewayInput) (*ec2.CreateCustomerGatewayOutput, error)
|
CreateCustomerGateway(*ec2.CreateCustomerGatewayInput) (*ec2.CreateCustomerGatewayOutput, error)
|
||||||
CreateCustomerGatewayWithContext(aws.Context, *ec2.CreateCustomerGatewayInput, ...request.Option) (*ec2.CreateCustomerGatewayOutput, error)
|
CreateCustomerGatewayWithContext(aws.Context, *ec2.CreateCustomerGatewayInput, ...request.Option) (*ec2.CreateCustomerGatewayOutput, error)
|
||||||
CreateCustomerGatewayRequest(*ec2.CreateCustomerGatewayInput) (*request.Request, *ec2.CreateCustomerGatewayOutput)
|
CreateCustomerGatewayRequest(*ec2.CreateCustomerGatewayInput) (*request.Request, *ec2.CreateCustomerGatewayOutput)
|
||||||
@ -300,6 +340,22 @@ type EC2API interface {
|
|||||||
CreateTagsWithContext(aws.Context, *ec2.CreateTagsInput, ...request.Option) (*ec2.CreateTagsOutput, error)
|
CreateTagsWithContext(aws.Context, *ec2.CreateTagsInput, ...request.Option) (*ec2.CreateTagsOutput, error)
|
||||||
CreateTagsRequest(*ec2.CreateTagsInput) (*request.Request, *ec2.CreateTagsOutput)
|
CreateTagsRequest(*ec2.CreateTagsInput) (*request.Request, *ec2.CreateTagsOutput)
|
||||||
|
|
||||||
|
CreateTransitGateway(*ec2.CreateTransitGatewayInput) (*ec2.CreateTransitGatewayOutput, error)
|
||||||
|
CreateTransitGatewayWithContext(aws.Context, *ec2.CreateTransitGatewayInput, ...request.Option) (*ec2.CreateTransitGatewayOutput, error)
|
||||||
|
CreateTransitGatewayRequest(*ec2.CreateTransitGatewayInput) (*request.Request, *ec2.CreateTransitGatewayOutput)
|
||||||
|
|
||||||
|
CreateTransitGatewayRoute(*ec2.CreateTransitGatewayRouteInput) (*ec2.CreateTransitGatewayRouteOutput, error)
|
||||||
|
CreateTransitGatewayRouteWithContext(aws.Context, *ec2.CreateTransitGatewayRouteInput, ...request.Option) (*ec2.CreateTransitGatewayRouteOutput, error)
|
||||||
|
CreateTransitGatewayRouteRequest(*ec2.CreateTransitGatewayRouteInput) (*request.Request, *ec2.CreateTransitGatewayRouteOutput)
|
||||||
|
|
||||||
|
CreateTransitGatewayRouteTable(*ec2.CreateTransitGatewayRouteTableInput) (*ec2.CreateTransitGatewayRouteTableOutput, error)
|
||||||
|
CreateTransitGatewayRouteTableWithContext(aws.Context, *ec2.CreateTransitGatewayRouteTableInput, ...request.Option) (*ec2.CreateTransitGatewayRouteTableOutput, error)
|
||||||
|
CreateTransitGatewayRouteTableRequest(*ec2.CreateTransitGatewayRouteTableInput) (*request.Request, *ec2.CreateTransitGatewayRouteTableOutput)
|
||||||
|
|
||||||
|
CreateTransitGatewayVpcAttachment(*ec2.CreateTransitGatewayVpcAttachmentInput) (*ec2.CreateTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
CreateTransitGatewayVpcAttachmentWithContext(aws.Context, *ec2.CreateTransitGatewayVpcAttachmentInput, ...request.Option) (*ec2.CreateTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
CreateTransitGatewayVpcAttachmentRequest(*ec2.CreateTransitGatewayVpcAttachmentInput) (*request.Request, *ec2.CreateTransitGatewayVpcAttachmentOutput)
|
||||||
|
|
||||||
CreateVolume(*ec2.CreateVolumeInput) (*ec2.Volume, error)
|
CreateVolume(*ec2.CreateVolumeInput) (*ec2.Volume, error)
|
||||||
CreateVolumeWithContext(aws.Context, *ec2.CreateVolumeInput, ...request.Option) (*ec2.Volume, error)
|
CreateVolumeWithContext(aws.Context, *ec2.CreateVolumeInput, ...request.Option) (*ec2.Volume, error)
|
||||||
CreateVolumeRequest(*ec2.CreateVolumeInput) (*request.Request, *ec2.Volume)
|
CreateVolumeRequest(*ec2.CreateVolumeInput) (*request.Request, *ec2.Volume)
|
||||||
@ -336,6 +392,14 @@ type EC2API interface {
|
|||||||
CreateVpnGatewayWithContext(aws.Context, *ec2.CreateVpnGatewayInput, ...request.Option) (*ec2.CreateVpnGatewayOutput, error)
|
CreateVpnGatewayWithContext(aws.Context, *ec2.CreateVpnGatewayInput, ...request.Option) (*ec2.CreateVpnGatewayOutput, error)
|
||||||
CreateVpnGatewayRequest(*ec2.CreateVpnGatewayInput) (*request.Request, *ec2.CreateVpnGatewayOutput)
|
CreateVpnGatewayRequest(*ec2.CreateVpnGatewayInput) (*request.Request, *ec2.CreateVpnGatewayOutput)
|
||||||
|
|
||||||
|
DeleteClientVpnEndpoint(*ec2.DeleteClientVpnEndpointInput) (*ec2.DeleteClientVpnEndpointOutput, error)
|
||||||
|
DeleteClientVpnEndpointWithContext(aws.Context, *ec2.DeleteClientVpnEndpointInput, ...request.Option) (*ec2.DeleteClientVpnEndpointOutput, error)
|
||||||
|
DeleteClientVpnEndpointRequest(*ec2.DeleteClientVpnEndpointInput) (*request.Request, *ec2.DeleteClientVpnEndpointOutput)
|
||||||
|
|
||||||
|
DeleteClientVpnRoute(*ec2.DeleteClientVpnRouteInput) (*ec2.DeleteClientVpnRouteOutput, error)
|
||||||
|
DeleteClientVpnRouteWithContext(aws.Context, *ec2.DeleteClientVpnRouteInput, ...request.Option) (*ec2.DeleteClientVpnRouteOutput, error)
|
||||||
|
DeleteClientVpnRouteRequest(*ec2.DeleteClientVpnRouteInput) (*request.Request, *ec2.DeleteClientVpnRouteOutput)
|
||||||
|
|
||||||
DeleteCustomerGateway(*ec2.DeleteCustomerGatewayInput) (*ec2.DeleteCustomerGatewayOutput, error)
|
DeleteCustomerGateway(*ec2.DeleteCustomerGatewayInput) (*ec2.DeleteCustomerGatewayOutput, error)
|
||||||
DeleteCustomerGatewayWithContext(aws.Context, *ec2.DeleteCustomerGatewayInput, ...request.Option) (*ec2.DeleteCustomerGatewayOutput, error)
|
DeleteCustomerGatewayWithContext(aws.Context, *ec2.DeleteCustomerGatewayInput, ...request.Option) (*ec2.DeleteCustomerGatewayOutput, error)
|
||||||
DeleteCustomerGatewayRequest(*ec2.DeleteCustomerGatewayInput) (*request.Request, *ec2.DeleteCustomerGatewayOutput)
|
DeleteCustomerGatewayRequest(*ec2.DeleteCustomerGatewayInput) (*request.Request, *ec2.DeleteCustomerGatewayOutput)
|
||||||
@ -428,6 +492,22 @@ type EC2API interface {
|
|||||||
DeleteTagsWithContext(aws.Context, *ec2.DeleteTagsInput, ...request.Option) (*ec2.DeleteTagsOutput, error)
|
DeleteTagsWithContext(aws.Context, *ec2.DeleteTagsInput, ...request.Option) (*ec2.DeleteTagsOutput, error)
|
||||||
DeleteTagsRequest(*ec2.DeleteTagsInput) (*request.Request, *ec2.DeleteTagsOutput)
|
DeleteTagsRequest(*ec2.DeleteTagsInput) (*request.Request, *ec2.DeleteTagsOutput)
|
||||||
|
|
||||||
|
DeleteTransitGateway(*ec2.DeleteTransitGatewayInput) (*ec2.DeleteTransitGatewayOutput, error)
|
||||||
|
DeleteTransitGatewayWithContext(aws.Context, *ec2.DeleteTransitGatewayInput, ...request.Option) (*ec2.DeleteTransitGatewayOutput, error)
|
||||||
|
DeleteTransitGatewayRequest(*ec2.DeleteTransitGatewayInput) (*request.Request, *ec2.DeleteTransitGatewayOutput)
|
||||||
|
|
||||||
|
DeleteTransitGatewayRoute(*ec2.DeleteTransitGatewayRouteInput) (*ec2.DeleteTransitGatewayRouteOutput, error)
|
||||||
|
DeleteTransitGatewayRouteWithContext(aws.Context, *ec2.DeleteTransitGatewayRouteInput, ...request.Option) (*ec2.DeleteTransitGatewayRouteOutput, error)
|
||||||
|
DeleteTransitGatewayRouteRequest(*ec2.DeleteTransitGatewayRouteInput) (*request.Request, *ec2.DeleteTransitGatewayRouteOutput)
|
||||||
|
|
||||||
|
DeleteTransitGatewayRouteTable(*ec2.DeleteTransitGatewayRouteTableInput) (*ec2.DeleteTransitGatewayRouteTableOutput, error)
|
||||||
|
DeleteTransitGatewayRouteTableWithContext(aws.Context, *ec2.DeleteTransitGatewayRouteTableInput, ...request.Option) (*ec2.DeleteTransitGatewayRouteTableOutput, error)
|
||||||
|
DeleteTransitGatewayRouteTableRequest(*ec2.DeleteTransitGatewayRouteTableInput) (*request.Request, *ec2.DeleteTransitGatewayRouteTableOutput)
|
||||||
|
|
||||||
|
DeleteTransitGatewayVpcAttachment(*ec2.DeleteTransitGatewayVpcAttachmentInput) (*ec2.DeleteTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
DeleteTransitGatewayVpcAttachmentWithContext(aws.Context, *ec2.DeleteTransitGatewayVpcAttachmentInput, ...request.Option) (*ec2.DeleteTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
DeleteTransitGatewayVpcAttachmentRequest(*ec2.DeleteTransitGatewayVpcAttachmentInput) (*request.Request, *ec2.DeleteTransitGatewayVpcAttachmentOutput)
|
||||||
|
|
||||||
DeleteVolume(*ec2.DeleteVolumeInput) (*ec2.DeleteVolumeOutput, error)
|
DeleteVolume(*ec2.DeleteVolumeInput) (*ec2.DeleteVolumeOutput, error)
|
||||||
DeleteVolumeWithContext(aws.Context, *ec2.DeleteVolumeInput, ...request.Option) (*ec2.DeleteVolumeOutput, error)
|
DeleteVolumeWithContext(aws.Context, *ec2.DeleteVolumeInput, ...request.Option) (*ec2.DeleteVolumeOutput, error)
|
||||||
DeleteVolumeRequest(*ec2.DeleteVolumeInput) (*request.Request, *ec2.DeleteVolumeOutput)
|
DeleteVolumeRequest(*ec2.DeleteVolumeInput) (*request.Request, *ec2.DeleteVolumeOutput)
|
||||||
@ -464,6 +544,10 @@ type EC2API interface {
|
|||||||
DeleteVpnGatewayWithContext(aws.Context, *ec2.DeleteVpnGatewayInput, ...request.Option) (*ec2.DeleteVpnGatewayOutput, error)
|
DeleteVpnGatewayWithContext(aws.Context, *ec2.DeleteVpnGatewayInput, ...request.Option) (*ec2.DeleteVpnGatewayOutput, error)
|
||||||
DeleteVpnGatewayRequest(*ec2.DeleteVpnGatewayInput) (*request.Request, *ec2.DeleteVpnGatewayOutput)
|
DeleteVpnGatewayRequest(*ec2.DeleteVpnGatewayInput) (*request.Request, *ec2.DeleteVpnGatewayOutput)
|
||||||
|
|
||||||
|
DeprovisionByoipCidr(*ec2.DeprovisionByoipCidrInput) (*ec2.DeprovisionByoipCidrOutput, error)
|
||||||
|
DeprovisionByoipCidrWithContext(aws.Context, *ec2.DeprovisionByoipCidrInput, ...request.Option) (*ec2.DeprovisionByoipCidrOutput, error)
|
||||||
|
DeprovisionByoipCidrRequest(*ec2.DeprovisionByoipCidrInput) (*request.Request, *ec2.DeprovisionByoipCidrOutput)
|
||||||
|
|
||||||
DeregisterImage(*ec2.DeregisterImageInput) (*ec2.DeregisterImageOutput, error)
|
DeregisterImage(*ec2.DeregisterImageInput) (*ec2.DeregisterImageOutput, error)
|
||||||
DeregisterImageWithContext(aws.Context, *ec2.DeregisterImageInput, ...request.Option) (*ec2.DeregisterImageOutput, error)
|
DeregisterImageWithContext(aws.Context, *ec2.DeregisterImageInput, ...request.Option) (*ec2.DeregisterImageOutput, error)
|
||||||
DeregisterImageRequest(*ec2.DeregisterImageInput) (*request.Request, *ec2.DeregisterImageOutput)
|
DeregisterImageRequest(*ec2.DeregisterImageInput) (*request.Request, *ec2.DeregisterImageOutput)
|
||||||
@ -488,10 +572,38 @@ type EC2API interface {
|
|||||||
DescribeBundleTasksWithContext(aws.Context, *ec2.DescribeBundleTasksInput, ...request.Option) (*ec2.DescribeBundleTasksOutput, error)
|
DescribeBundleTasksWithContext(aws.Context, *ec2.DescribeBundleTasksInput, ...request.Option) (*ec2.DescribeBundleTasksOutput, error)
|
||||||
DescribeBundleTasksRequest(*ec2.DescribeBundleTasksInput) (*request.Request, *ec2.DescribeBundleTasksOutput)
|
DescribeBundleTasksRequest(*ec2.DescribeBundleTasksInput) (*request.Request, *ec2.DescribeBundleTasksOutput)
|
||||||
|
|
||||||
|
DescribeByoipCidrs(*ec2.DescribeByoipCidrsInput) (*ec2.DescribeByoipCidrsOutput, error)
|
||||||
|
DescribeByoipCidrsWithContext(aws.Context, *ec2.DescribeByoipCidrsInput, ...request.Option) (*ec2.DescribeByoipCidrsOutput, error)
|
||||||
|
DescribeByoipCidrsRequest(*ec2.DescribeByoipCidrsInput) (*request.Request, *ec2.DescribeByoipCidrsOutput)
|
||||||
|
|
||||||
|
DescribeCapacityReservations(*ec2.DescribeCapacityReservationsInput) (*ec2.DescribeCapacityReservationsOutput, error)
|
||||||
|
DescribeCapacityReservationsWithContext(aws.Context, *ec2.DescribeCapacityReservationsInput, ...request.Option) (*ec2.DescribeCapacityReservationsOutput, error)
|
||||||
|
DescribeCapacityReservationsRequest(*ec2.DescribeCapacityReservationsInput) (*request.Request, *ec2.DescribeCapacityReservationsOutput)
|
||||||
|
|
||||||
DescribeClassicLinkInstances(*ec2.DescribeClassicLinkInstancesInput) (*ec2.DescribeClassicLinkInstancesOutput, error)
|
DescribeClassicLinkInstances(*ec2.DescribeClassicLinkInstancesInput) (*ec2.DescribeClassicLinkInstancesOutput, error)
|
||||||
DescribeClassicLinkInstancesWithContext(aws.Context, *ec2.DescribeClassicLinkInstancesInput, ...request.Option) (*ec2.DescribeClassicLinkInstancesOutput, error)
|
DescribeClassicLinkInstancesWithContext(aws.Context, *ec2.DescribeClassicLinkInstancesInput, ...request.Option) (*ec2.DescribeClassicLinkInstancesOutput, error)
|
||||||
DescribeClassicLinkInstancesRequest(*ec2.DescribeClassicLinkInstancesInput) (*request.Request, *ec2.DescribeClassicLinkInstancesOutput)
|
DescribeClassicLinkInstancesRequest(*ec2.DescribeClassicLinkInstancesInput) (*request.Request, *ec2.DescribeClassicLinkInstancesOutput)
|
||||||
|
|
||||||
|
DescribeClientVpnAuthorizationRules(*ec2.DescribeClientVpnAuthorizationRulesInput) (*ec2.DescribeClientVpnAuthorizationRulesOutput, error)
|
||||||
|
DescribeClientVpnAuthorizationRulesWithContext(aws.Context, *ec2.DescribeClientVpnAuthorizationRulesInput, ...request.Option) (*ec2.DescribeClientVpnAuthorizationRulesOutput, error)
|
||||||
|
DescribeClientVpnAuthorizationRulesRequest(*ec2.DescribeClientVpnAuthorizationRulesInput) (*request.Request, *ec2.DescribeClientVpnAuthorizationRulesOutput)
|
||||||
|
|
||||||
|
DescribeClientVpnConnections(*ec2.DescribeClientVpnConnectionsInput) (*ec2.DescribeClientVpnConnectionsOutput, error)
|
||||||
|
DescribeClientVpnConnectionsWithContext(aws.Context, *ec2.DescribeClientVpnConnectionsInput, ...request.Option) (*ec2.DescribeClientVpnConnectionsOutput, error)
|
||||||
|
DescribeClientVpnConnectionsRequest(*ec2.DescribeClientVpnConnectionsInput) (*request.Request, *ec2.DescribeClientVpnConnectionsOutput)
|
||||||
|
|
||||||
|
DescribeClientVpnEndpoints(*ec2.DescribeClientVpnEndpointsInput) (*ec2.DescribeClientVpnEndpointsOutput, error)
|
||||||
|
DescribeClientVpnEndpointsWithContext(aws.Context, *ec2.DescribeClientVpnEndpointsInput, ...request.Option) (*ec2.DescribeClientVpnEndpointsOutput, error)
|
||||||
|
DescribeClientVpnEndpointsRequest(*ec2.DescribeClientVpnEndpointsInput) (*request.Request, *ec2.DescribeClientVpnEndpointsOutput)
|
||||||
|
|
||||||
|
DescribeClientVpnRoutes(*ec2.DescribeClientVpnRoutesInput) (*ec2.DescribeClientVpnRoutesOutput, error)
|
||||||
|
DescribeClientVpnRoutesWithContext(aws.Context, *ec2.DescribeClientVpnRoutesInput, ...request.Option) (*ec2.DescribeClientVpnRoutesOutput, error)
|
||||||
|
DescribeClientVpnRoutesRequest(*ec2.DescribeClientVpnRoutesInput) (*request.Request, *ec2.DescribeClientVpnRoutesOutput)
|
||||||
|
|
||||||
|
DescribeClientVpnTargetNetworks(*ec2.DescribeClientVpnTargetNetworksInput) (*ec2.DescribeClientVpnTargetNetworksOutput, error)
|
||||||
|
DescribeClientVpnTargetNetworksWithContext(aws.Context, *ec2.DescribeClientVpnTargetNetworksInput, ...request.Option) (*ec2.DescribeClientVpnTargetNetworksOutput, error)
|
||||||
|
DescribeClientVpnTargetNetworksRequest(*ec2.DescribeClientVpnTargetNetworksInput) (*request.Request, *ec2.DescribeClientVpnTargetNetworksOutput)
|
||||||
|
|
||||||
DescribeConversionTasks(*ec2.DescribeConversionTasksInput) (*ec2.DescribeConversionTasksOutput, error)
|
DescribeConversionTasks(*ec2.DescribeConversionTasksInput) (*ec2.DescribeConversionTasksOutput, error)
|
||||||
DescribeConversionTasksWithContext(aws.Context, *ec2.DescribeConversionTasksInput, ...request.Option) (*ec2.DescribeConversionTasksOutput, error)
|
DescribeConversionTasksWithContext(aws.Context, *ec2.DescribeConversionTasksInput, ...request.Option) (*ec2.DescribeConversionTasksOutput, error)
|
||||||
DescribeConversionTasksRequest(*ec2.DescribeConversionTasksInput) (*request.Request, *ec2.DescribeConversionTasksOutput)
|
DescribeConversionTasksRequest(*ec2.DescribeConversionTasksInput) (*request.Request, *ec2.DescribeConversionTasksOutput)
|
||||||
@ -645,6 +757,9 @@ type EC2API interface {
|
|||||||
DescribeNetworkInterfacesWithContext(aws.Context, *ec2.DescribeNetworkInterfacesInput, ...request.Option) (*ec2.DescribeNetworkInterfacesOutput, error)
|
DescribeNetworkInterfacesWithContext(aws.Context, *ec2.DescribeNetworkInterfacesInput, ...request.Option) (*ec2.DescribeNetworkInterfacesOutput, error)
|
||||||
DescribeNetworkInterfacesRequest(*ec2.DescribeNetworkInterfacesInput) (*request.Request, *ec2.DescribeNetworkInterfacesOutput)
|
DescribeNetworkInterfacesRequest(*ec2.DescribeNetworkInterfacesInput) (*request.Request, *ec2.DescribeNetworkInterfacesOutput)
|
||||||
|
|
||||||
|
DescribeNetworkInterfacesPages(*ec2.DescribeNetworkInterfacesInput, func(*ec2.DescribeNetworkInterfacesOutput, bool) bool) error
|
||||||
|
DescribeNetworkInterfacesPagesWithContext(aws.Context, *ec2.DescribeNetworkInterfacesInput, func(*ec2.DescribeNetworkInterfacesOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
DescribePlacementGroups(*ec2.DescribePlacementGroupsInput) (*ec2.DescribePlacementGroupsOutput, error)
|
DescribePlacementGroups(*ec2.DescribePlacementGroupsInput) (*ec2.DescribePlacementGroupsOutput, error)
|
||||||
DescribePlacementGroupsWithContext(aws.Context, *ec2.DescribePlacementGroupsInput, ...request.Option) (*ec2.DescribePlacementGroupsOutput, error)
|
DescribePlacementGroupsWithContext(aws.Context, *ec2.DescribePlacementGroupsInput, ...request.Option) (*ec2.DescribePlacementGroupsOutput, error)
|
||||||
DescribePlacementGroupsRequest(*ec2.DescribePlacementGroupsInput) (*request.Request, *ec2.DescribePlacementGroupsOutput)
|
DescribePlacementGroupsRequest(*ec2.DescribePlacementGroupsInput) (*request.Request, *ec2.DescribePlacementGroupsOutput)
|
||||||
@ -657,6 +772,10 @@ type EC2API interface {
|
|||||||
DescribePrincipalIdFormatWithContext(aws.Context, *ec2.DescribePrincipalIdFormatInput, ...request.Option) (*ec2.DescribePrincipalIdFormatOutput, error)
|
DescribePrincipalIdFormatWithContext(aws.Context, *ec2.DescribePrincipalIdFormatInput, ...request.Option) (*ec2.DescribePrincipalIdFormatOutput, error)
|
||||||
DescribePrincipalIdFormatRequest(*ec2.DescribePrincipalIdFormatInput) (*request.Request, *ec2.DescribePrincipalIdFormatOutput)
|
DescribePrincipalIdFormatRequest(*ec2.DescribePrincipalIdFormatInput) (*request.Request, *ec2.DescribePrincipalIdFormatOutput)
|
||||||
|
|
||||||
|
DescribePublicIpv4Pools(*ec2.DescribePublicIpv4PoolsInput) (*ec2.DescribePublicIpv4PoolsOutput, error)
|
||||||
|
DescribePublicIpv4PoolsWithContext(aws.Context, *ec2.DescribePublicIpv4PoolsInput, ...request.Option) (*ec2.DescribePublicIpv4PoolsOutput, error)
|
||||||
|
DescribePublicIpv4PoolsRequest(*ec2.DescribePublicIpv4PoolsInput) (*request.Request, *ec2.DescribePublicIpv4PoolsOutput)
|
||||||
|
|
||||||
DescribeRegions(*ec2.DescribeRegionsInput) (*ec2.DescribeRegionsOutput, error)
|
DescribeRegions(*ec2.DescribeRegionsInput) (*ec2.DescribeRegionsOutput, error)
|
||||||
DescribeRegionsWithContext(aws.Context, *ec2.DescribeRegionsInput, ...request.Option) (*ec2.DescribeRegionsOutput, error)
|
DescribeRegionsWithContext(aws.Context, *ec2.DescribeRegionsInput, ...request.Option) (*ec2.DescribeRegionsOutput, error)
|
||||||
DescribeRegionsRequest(*ec2.DescribeRegionsInput) (*request.Request, *ec2.DescribeRegionsOutput)
|
DescribeRegionsRequest(*ec2.DescribeRegionsInput) (*request.Request, *ec2.DescribeRegionsOutput)
|
||||||
@ -687,6 +806,9 @@ type EC2API interface {
|
|||||||
DescribeRouteTablesWithContext(aws.Context, *ec2.DescribeRouteTablesInput, ...request.Option) (*ec2.DescribeRouteTablesOutput, error)
|
DescribeRouteTablesWithContext(aws.Context, *ec2.DescribeRouteTablesInput, ...request.Option) (*ec2.DescribeRouteTablesOutput, error)
|
||||||
DescribeRouteTablesRequest(*ec2.DescribeRouteTablesInput) (*request.Request, *ec2.DescribeRouteTablesOutput)
|
DescribeRouteTablesRequest(*ec2.DescribeRouteTablesInput) (*request.Request, *ec2.DescribeRouteTablesOutput)
|
||||||
|
|
||||||
|
DescribeRouteTablesPages(*ec2.DescribeRouteTablesInput, func(*ec2.DescribeRouteTablesOutput, bool) bool) error
|
||||||
|
DescribeRouteTablesPagesWithContext(aws.Context, *ec2.DescribeRouteTablesInput, func(*ec2.DescribeRouteTablesOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
DescribeScheduledInstanceAvailability(*ec2.DescribeScheduledInstanceAvailabilityInput) (*ec2.DescribeScheduledInstanceAvailabilityOutput, error)
|
DescribeScheduledInstanceAvailability(*ec2.DescribeScheduledInstanceAvailabilityInput) (*ec2.DescribeScheduledInstanceAvailabilityOutput, error)
|
||||||
DescribeScheduledInstanceAvailabilityWithContext(aws.Context, *ec2.DescribeScheduledInstanceAvailabilityInput, ...request.Option) (*ec2.DescribeScheduledInstanceAvailabilityOutput, error)
|
DescribeScheduledInstanceAvailabilityWithContext(aws.Context, *ec2.DescribeScheduledInstanceAvailabilityInput, ...request.Option) (*ec2.DescribeScheduledInstanceAvailabilityOutput, error)
|
||||||
DescribeScheduledInstanceAvailabilityRequest(*ec2.DescribeScheduledInstanceAvailabilityInput) (*request.Request, *ec2.DescribeScheduledInstanceAvailabilityOutput)
|
DescribeScheduledInstanceAvailabilityRequest(*ec2.DescribeScheduledInstanceAvailabilityInput) (*request.Request, *ec2.DescribeScheduledInstanceAvailabilityOutput)
|
||||||
@ -703,6 +825,9 @@ type EC2API interface {
|
|||||||
DescribeSecurityGroupsWithContext(aws.Context, *ec2.DescribeSecurityGroupsInput, ...request.Option) (*ec2.DescribeSecurityGroupsOutput, error)
|
DescribeSecurityGroupsWithContext(aws.Context, *ec2.DescribeSecurityGroupsInput, ...request.Option) (*ec2.DescribeSecurityGroupsOutput, error)
|
||||||
DescribeSecurityGroupsRequest(*ec2.DescribeSecurityGroupsInput) (*request.Request, *ec2.DescribeSecurityGroupsOutput)
|
DescribeSecurityGroupsRequest(*ec2.DescribeSecurityGroupsInput) (*request.Request, *ec2.DescribeSecurityGroupsOutput)
|
||||||
|
|
||||||
|
DescribeSecurityGroupsPages(*ec2.DescribeSecurityGroupsInput, func(*ec2.DescribeSecurityGroupsOutput, bool) bool) error
|
||||||
|
DescribeSecurityGroupsPagesWithContext(aws.Context, *ec2.DescribeSecurityGroupsInput, func(*ec2.DescribeSecurityGroupsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
DescribeSnapshotAttribute(*ec2.DescribeSnapshotAttributeInput) (*ec2.DescribeSnapshotAttributeOutput, error)
|
DescribeSnapshotAttribute(*ec2.DescribeSnapshotAttributeInput) (*ec2.DescribeSnapshotAttributeOutput, error)
|
||||||
DescribeSnapshotAttributeWithContext(aws.Context, *ec2.DescribeSnapshotAttributeInput, ...request.Option) (*ec2.DescribeSnapshotAttributeOutput, error)
|
DescribeSnapshotAttributeWithContext(aws.Context, *ec2.DescribeSnapshotAttributeInput, ...request.Option) (*ec2.DescribeSnapshotAttributeOutput, error)
|
||||||
DescribeSnapshotAttributeRequest(*ec2.DescribeSnapshotAttributeInput) (*request.Request, *ec2.DescribeSnapshotAttributeOutput)
|
DescribeSnapshotAttributeRequest(*ec2.DescribeSnapshotAttributeInput) (*request.Request, *ec2.DescribeSnapshotAttributeOutput)
|
||||||
@ -759,6 +884,22 @@ type EC2API interface {
|
|||||||
DescribeTagsPages(*ec2.DescribeTagsInput, func(*ec2.DescribeTagsOutput, bool) bool) error
|
DescribeTagsPages(*ec2.DescribeTagsInput, func(*ec2.DescribeTagsOutput, bool) bool) error
|
||||||
DescribeTagsPagesWithContext(aws.Context, *ec2.DescribeTagsInput, func(*ec2.DescribeTagsOutput, bool) bool, ...request.Option) error
|
DescribeTagsPagesWithContext(aws.Context, *ec2.DescribeTagsInput, func(*ec2.DescribeTagsOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
DescribeTransitGatewayAttachments(*ec2.DescribeTransitGatewayAttachmentsInput) (*ec2.DescribeTransitGatewayAttachmentsOutput, error)
|
||||||
|
DescribeTransitGatewayAttachmentsWithContext(aws.Context, *ec2.DescribeTransitGatewayAttachmentsInput, ...request.Option) (*ec2.DescribeTransitGatewayAttachmentsOutput, error)
|
||||||
|
DescribeTransitGatewayAttachmentsRequest(*ec2.DescribeTransitGatewayAttachmentsInput) (*request.Request, *ec2.DescribeTransitGatewayAttachmentsOutput)
|
||||||
|
|
||||||
|
DescribeTransitGatewayRouteTables(*ec2.DescribeTransitGatewayRouteTablesInput) (*ec2.DescribeTransitGatewayRouteTablesOutput, error)
|
||||||
|
DescribeTransitGatewayRouteTablesWithContext(aws.Context, *ec2.DescribeTransitGatewayRouteTablesInput, ...request.Option) (*ec2.DescribeTransitGatewayRouteTablesOutput, error)
|
||||||
|
DescribeTransitGatewayRouteTablesRequest(*ec2.DescribeTransitGatewayRouteTablesInput) (*request.Request, *ec2.DescribeTransitGatewayRouteTablesOutput)
|
||||||
|
|
||||||
|
DescribeTransitGatewayVpcAttachments(*ec2.DescribeTransitGatewayVpcAttachmentsInput) (*ec2.DescribeTransitGatewayVpcAttachmentsOutput, error)
|
||||||
|
DescribeTransitGatewayVpcAttachmentsWithContext(aws.Context, *ec2.DescribeTransitGatewayVpcAttachmentsInput, ...request.Option) (*ec2.DescribeTransitGatewayVpcAttachmentsOutput, error)
|
||||||
|
DescribeTransitGatewayVpcAttachmentsRequest(*ec2.DescribeTransitGatewayVpcAttachmentsInput) (*request.Request, *ec2.DescribeTransitGatewayVpcAttachmentsOutput)
|
||||||
|
|
||||||
|
DescribeTransitGateways(*ec2.DescribeTransitGatewaysInput) (*ec2.DescribeTransitGatewaysOutput, error)
|
||||||
|
DescribeTransitGatewaysWithContext(aws.Context, *ec2.DescribeTransitGatewaysInput, ...request.Option) (*ec2.DescribeTransitGatewaysOutput, error)
|
||||||
|
DescribeTransitGatewaysRequest(*ec2.DescribeTransitGatewaysInput) (*request.Request, *ec2.DescribeTransitGatewaysOutput)
|
||||||
|
|
||||||
DescribeVolumeAttribute(*ec2.DescribeVolumeAttributeInput) (*ec2.DescribeVolumeAttributeOutput, error)
|
DescribeVolumeAttribute(*ec2.DescribeVolumeAttributeInput) (*ec2.DescribeVolumeAttributeOutput, error)
|
||||||
DescribeVolumeAttributeWithContext(aws.Context, *ec2.DescribeVolumeAttributeInput, ...request.Option) (*ec2.DescribeVolumeAttributeOutput, error)
|
DescribeVolumeAttributeWithContext(aws.Context, *ec2.DescribeVolumeAttributeInput, ...request.Option) (*ec2.DescribeVolumeAttributeOutput, error)
|
||||||
DescribeVolumeAttributeRequest(*ec2.DescribeVolumeAttributeInput) (*request.Request, *ec2.DescribeVolumeAttributeOutput)
|
DescribeVolumeAttributeRequest(*ec2.DescribeVolumeAttributeInput) (*request.Request, *ec2.DescribeVolumeAttributeOutput)
|
||||||
@ -853,6 +994,10 @@ type EC2API interface {
|
|||||||
DetachVpnGatewayWithContext(aws.Context, *ec2.DetachVpnGatewayInput, ...request.Option) (*ec2.DetachVpnGatewayOutput, error)
|
DetachVpnGatewayWithContext(aws.Context, *ec2.DetachVpnGatewayInput, ...request.Option) (*ec2.DetachVpnGatewayOutput, error)
|
||||||
DetachVpnGatewayRequest(*ec2.DetachVpnGatewayInput) (*request.Request, *ec2.DetachVpnGatewayOutput)
|
DetachVpnGatewayRequest(*ec2.DetachVpnGatewayInput) (*request.Request, *ec2.DetachVpnGatewayOutput)
|
||||||
|
|
||||||
|
DisableTransitGatewayRouteTablePropagation(*ec2.DisableTransitGatewayRouteTablePropagationInput) (*ec2.DisableTransitGatewayRouteTablePropagationOutput, error)
|
||||||
|
DisableTransitGatewayRouteTablePropagationWithContext(aws.Context, *ec2.DisableTransitGatewayRouteTablePropagationInput, ...request.Option) (*ec2.DisableTransitGatewayRouteTablePropagationOutput, error)
|
||||||
|
DisableTransitGatewayRouteTablePropagationRequest(*ec2.DisableTransitGatewayRouteTablePropagationInput) (*request.Request, *ec2.DisableTransitGatewayRouteTablePropagationOutput)
|
||||||
|
|
||||||
DisableVgwRoutePropagation(*ec2.DisableVgwRoutePropagationInput) (*ec2.DisableVgwRoutePropagationOutput, error)
|
DisableVgwRoutePropagation(*ec2.DisableVgwRoutePropagationInput) (*ec2.DisableVgwRoutePropagationOutput, error)
|
||||||
DisableVgwRoutePropagationWithContext(aws.Context, *ec2.DisableVgwRoutePropagationInput, ...request.Option) (*ec2.DisableVgwRoutePropagationOutput, error)
|
DisableVgwRoutePropagationWithContext(aws.Context, *ec2.DisableVgwRoutePropagationInput, ...request.Option) (*ec2.DisableVgwRoutePropagationOutput, error)
|
||||||
DisableVgwRoutePropagationRequest(*ec2.DisableVgwRoutePropagationInput) (*request.Request, *ec2.DisableVgwRoutePropagationOutput)
|
DisableVgwRoutePropagationRequest(*ec2.DisableVgwRoutePropagationInput) (*request.Request, *ec2.DisableVgwRoutePropagationOutput)
|
||||||
@ -869,6 +1014,10 @@ type EC2API interface {
|
|||||||
DisassociateAddressWithContext(aws.Context, *ec2.DisassociateAddressInput, ...request.Option) (*ec2.DisassociateAddressOutput, error)
|
DisassociateAddressWithContext(aws.Context, *ec2.DisassociateAddressInput, ...request.Option) (*ec2.DisassociateAddressOutput, error)
|
||||||
DisassociateAddressRequest(*ec2.DisassociateAddressInput) (*request.Request, *ec2.DisassociateAddressOutput)
|
DisassociateAddressRequest(*ec2.DisassociateAddressInput) (*request.Request, *ec2.DisassociateAddressOutput)
|
||||||
|
|
||||||
|
DisassociateClientVpnTargetNetwork(*ec2.DisassociateClientVpnTargetNetworkInput) (*ec2.DisassociateClientVpnTargetNetworkOutput, error)
|
||||||
|
DisassociateClientVpnTargetNetworkWithContext(aws.Context, *ec2.DisassociateClientVpnTargetNetworkInput, ...request.Option) (*ec2.DisassociateClientVpnTargetNetworkOutput, error)
|
||||||
|
DisassociateClientVpnTargetNetworkRequest(*ec2.DisassociateClientVpnTargetNetworkInput) (*request.Request, *ec2.DisassociateClientVpnTargetNetworkOutput)
|
||||||
|
|
||||||
DisassociateIamInstanceProfile(*ec2.DisassociateIamInstanceProfileInput) (*ec2.DisassociateIamInstanceProfileOutput, error)
|
DisassociateIamInstanceProfile(*ec2.DisassociateIamInstanceProfileInput) (*ec2.DisassociateIamInstanceProfileOutput, error)
|
||||||
DisassociateIamInstanceProfileWithContext(aws.Context, *ec2.DisassociateIamInstanceProfileInput, ...request.Option) (*ec2.DisassociateIamInstanceProfileOutput, error)
|
DisassociateIamInstanceProfileWithContext(aws.Context, *ec2.DisassociateIamInstanceProfileInput, ...request.Option) (*ec2.DisassociateIamInstanceProfileOutput, error)
|
||||||
DisassociateIamInstanceProfileRequest(*ec2.DisassociateIamInstanceProfileInput) (*request.Request, *ec2.DisassociateIamInstanceProfileOutput)
|
DisassociateIamInstanceProfileRequest(*ec2.DisassociateIamInstanceProfileInput) (*request.Request, *ec2.DisassociateIamInstanceProfileOutput)
|
||||||
@ -881,10 +1030,18 @@ type EC2API interface {
|
|||||||
DisassociateSubnetCidrBlockWithContext(aws.Context, *ec2.DisassociateSubnetCidrBlockInput, ...request.Option) (*ec2.DisassociateSubnetCidrBlockOutput, error)
|
DisassociateSubnetCidrBlockWithContext(aws.Context, *ec2.DisassociateSubnetCidrBlockInput, ...request.Option) (*ec2.DisassociateSubnetCidrBlockOutput, error)
|
||||||
DisassociateSubnetCidrBlockRequest(*ec2.DisassociateSubnetCidrBlockInput) (*request.Request, *ec2.DisassociateSubnetCidrBlockOutput)
|
DisassociateSubnetCidrBlockRequest(*ec2.DisassociateSubnetCidrBlockInput) (*request.Request, *ec2.DisassociateSubnetCidrBlockOutput)
|
||||||
|
|
||||||
|
DisassociateTransitGatewayRouteTable(*ec2.DisassociateTransitGatewayRouteTableInput) (*ec2.DisassociateTransitGatewayRouteTableOutput, error)
|
||||||
|
DisassociateTransitGatewayRouteTableWithContext(aws.Context, *ec2.DisassociateTransitGatewayRouteTableInput, ...request.Option) (*ec2.DisassociateTransitGatewayRouteTableOutput, error)
|
||||||
|
DisassociateTransitGatewayRouteTableRequest(*ec2.DisassociateTransitGatewayRouteTableInput) (*request.Request, *ec2.DisassociateTransitGatewayRouteTableOutput)
|
||||||
|
|
||||||
DisassociateVpcCidrBlock(*ec2.DisassociateVpcCidrBlockInput) (*ec2.DisassociateVpcCidrBlockOutput, error)
|
DisassociateVpcCidrBlock(*ec2.DisassociateVpcCidrBlockInput) (*ec2.DisassociateVpcCidrBlockOutput, error)
|
||||||
DisassociateVpcCidrBlockWithContext(aws.Context, *ec2.DisassociateVpcCidrBlockInput, ...request.Option) (*ec2.DisassociateVpcCidrBlockOutput, error)
|
DisassociateVpcCidrBlockWithContext(aws.Context, *ec2.DisassociateVpcCidrBlockInput, ...request.Option) (*ec2.DisassociateVpcCidrBlockOutput, error)
|
||||||
DisassociateVpcCidrBlockRequest(*ec2.DisassociateVpcCidrBlockInput) (*request.Request, *ec2.DisassociateVpcCidrBlockOutput)
|
DisassociateVpcCidrBlockRequest(*ec2.DisassociateVpcCidrBlockInput) (*request.Request, *ec2.DisassociateVpcCidrBlockOutput)
|
||||||
|
|
||||||
|
EnableTransitGatewayRouteTablePropagation(*ec2.EnableTransitGatewayRouteTablePropagationInput) (*ec2.EnableTransitGatewayRouteTablePropagationOutput, error)
|
||||||
|
EnableTransitGatewayRouteTablePropagationWithContext(aws.Context, *ec2.EnableTransitGatewayRouteTablePropagationInput, ...request.Option) (*ec2.EnableTransitGatewayRouteTablePropagationOutput, error)
|
||||||
|
EnableTransitGatewayRouteTablePropagationRequest(*ec2.EnableTransitGatewayRouteTablePropagationInput) (*request.Request, *ec2.EnableTransitGatewayRouteTablePropagationOutput)
|
||||||
|
|
||||||
EnableVgwRoutePropagation(*ec2.EnableVgwRoutePropagationInput) (*ec2.EnableVgwRoutePropagationOutput, error)
|
EnableVgwRoutePropagation(*ec2.EnableVgwRoutePropagationInput) (*ec2.EnableVgwRoutePropagationOutput, error)
|
||||||
EnableVgwRoutePropagationWithContext(aws.Context, *ec2.EnableVgwRoutePropagationInput, ...request.Option) (*ec2.EnableVgwRoutePropagationOutput, error)
|
EnableVgwRoutePropagationWithContext(aws.Context, *ec2.EnableVgwRoutePropagationInput, ...request.Option) (*ec2.EnableVgwRoutePropagationOutput, error)
|
||||||
EnableVgwRoutePropagationRequest(*ec2.EnableVgwRoutePropagationInput) (*request.Request, *ec2.EnableVgwRoutePropagationOutput)
|
EnableVgwRoutePropagationRequest(*ec2.EnableVgwRoutePropagationInput) (*request.Request, *ec2.EnableVgwRoutePropagationOutput)
|
||||||
@ -901,6 +1058,18 @@ type EC2API interface {
|
|||||||
EnableVpcClassicLinkDnsSupportWithContext(aws.Context, *ec2.EnableVpcClassicLinkDnsSupportInput, ...request.Option) (*ec2.EnableVpcClassicLinkDnsSupportOutput, error)
|
EnableVpcClassicLinkDnsSupportWithContext(aws.Context, *ec2.EnableVpcClassicLinkDnsSupportInput, ...request.Option) (*ec2.EnableVpcClassicLinkDnsSupportOutput, error)
|
||||||
EnableVpcClassicLinkDnsSupportRequest(*ec2.EnableVpcClassicLinkDnsSupportInput) (*request.Request, *ec2.EnableVpcClassicLinkDnsSupportOutput)
|
EnableVpcClassicLinkDnsSupportRequest(*ec2.EnableVpcClassicLinkDnsSupportInput) (*request.Request, *ec2.EnableVpcClassicLinkDnsSupportOutput)
|
||||||
|
|
||||||
|
ExportClientVpnClientCertificateRevocationList(*ec2.ExportClientVpnClientCertificateRevocationListInput) (*ec2.ExportClientVpnClientCertificateRevocationListOutput, error)
|
||||||
|
ExportClientVpnClientCertificateRevocationListWithContext(aws.Context, *ec2.ExportClientVpnClientCertificateRevocationListInput, ...request.Option) (*ec2.ExportClientVpnClientCertificateRevocationListOutput, error)
|
||||||
|
ExportClientVpnClientCertificateRevocationListRequest(*ec2.ExportClientVpnClientCertificateRevocationListInput) (*request.Request, *ec2.ExportClientVpnClientCertificateRevocationListOutput)
|
||||||
|
|
||||||
|
ExportClientVpnClientConfiguration(*ec2.ExportClientVpnClientConfigurationInput) (*ec2.ExportClientVpnClientConfigurationOutput, error)
|
||||||
|
ExportClientVpnClientConfigurationWithContext(aws.Context, *ec2.ExportClientVpnClientConfigurationInput, ...request.Option) (*ec2.ExportClientVpnClientConfigurationOutput, error)
|
||||||
|
ExportClientVpnClientConfigurationRequest(*ec2.ExportClientVpnClientConfigurationInput) (*request.Request, *ec2.ExportClientVpnClientConfigurationOutput)
|
||||||
|
|
||||||
|
ExportTransitGatewayRoutes(*ec2.ExportTransitGatewayRoutesInput) (*ec2.ExportTransitGatewayRoutesOutput, error)
|
||||||
|
ExportTransitGatewayRoutesWithContext(aws.Context, *ec2.ExportTransitGatewayRoutesInput, ...request.Option) (*ec2.ExportTransitGatewayRoutesOutput, error)
|
||||||
|
ExportTransitGatewayRoutesRequest(*ec2.ExportTransitGatewayRoutesInput) (*request.Request, *ec2.ExportTransitGatewayRoutesOutput)
|
||||||
|
|
||||||
GetConsoleOutput(*ec2.GetConsoleOutputInput) (*ec2.GetConsoleOutputOutput, error)
|
GetConsoleOutput(*ec2.GetConsoleOutputInput) (*ec2.GetConsoleOutputOutput, error)
|
||||||
GetConsoleOutputWithContext(aws.Context, *ec2.GetConsoleOutputInput, ...request.Option) (*ec2.GetConsoleOutputOutput, error)
|
GetConsoleOutputWithContext(aws.Context, *ec2.GetConsoleOutputInput, ...request.Option) (*ec2.GetConsoleOutputOutput, error)
|
||||||
GetConsoleOutputRequest(*ec2.GetConsoleOutputInput) (*request.Request, *ec2.GetConsoleOutputOutput)
|
GetConsoleOutputRequest(*ec2.GetConsoleOutputInput) (*request.Request, *ec2.GetConsoleOutputOutput)
|
||||||
@ -925,6 +1094,22 @@ type EC2API interface {
|
|||||||
GetReservedInstancesExchangeQuoteWithContext(aws.Context, *ec2.GetReservedInstancesExchangeQuoteInput, ...request.Option) (*ec2.GetReservedInstancesExchangeQuoteOutput, error)
|
GetReservedInstancesExchangeQuoteWithContext(aws.Context, *ec2.GetReservedInstancesExchangeQuoteInput, ...request.Option) (*ec2.GetReservedInstancesExchangeQuoteOutput, error)
|
||||||
GetReservedInstancesExchangeQuoteRequest(*ec2.GetReservedInstancesExchangeQuoteInput) (*request.Request, *ec2.GetReservedInstancesExchangeQuoteOutput)
|
GetReservedInstancesExchangeQuoteRequest(*ec2.GetReservedInstancesExchangeQuoteInput) (*request.Request, *ec2.GetReservedInstancesExchangeQuoteOutput)
|
||||||
|
|
||||||
|
GetTransitGatewayAttachmentPropagations(*ec2.GetTransitGatewayAttachmentPropagationsInput) (*ec2.GetTransitGatewayAttachmentPropagationsOutput, error)
|
||||||
|
GetTransitGatewayAttachmentPropagationsWithContext(aws.Context, *ec2.GetTransitGatewayAttachmentPropagationsInput, ...request.Option) (*ec2.GetTransitGatewayAttachmentPropagationsOutput, error)
|
||||||
|
GetTransitGatewayAttachmentPropagationsRequest(*ec2.GetTransitGatewayAttachmentPropagationsInput) (*request.Request, *ec2.GetTransitGatewayAttachmentPropagationsOutput)
|
||||||
|
|
||||||
|
GetTransitGatewayRouteTableAssociations(*ec2.GetTransitGatewayRouteTableAssociationsInput) (*ec2.GetTransitGatewayRouteTableAssociationsOutput, error)
|
||||||
|
GetTransitGatewayRouteTableAssociationsWithContext(aws.Context, *ec2.GetTransitGatewayRouteTableAssociationsInput, ...request.Option) (*ec2.GetTransitGatewayRouteTableAssociationsOutput, error)
|
||||||
|
GetTransitGatewayRouteTableAssociationsRequest(*ec2.GetTransitGatewayRouteTableAssociationsInput) (*request.Request, *ec2.GetTransitGatewayRouteTableAssociationsOutput)
|
||||||
|
|
||||||
|
GetTransitGatewayRouteTablePropagations(*ec2.GetTransitGatewayRouteTablePropagationsInput) (*ec2.GetTransitGatewayRouteTablePropagationsOutput, error)
|
||||||
|
GetTransitGatewayRouteTablePropagationsWithContext(aws.Context, *ec2.GetTransitGatewayRouteTablePropagationsInput, ...request.Option) (*ec2.GetTransitGatewayRouteTablePropagationsOutput, error)
|
||||||
|
GetTransitGatewayRouteTablePropagationsRequest(*ec2.GetTransitGatewayRouteTablePropagationsInput) (*request.Request, *ec2.GetTransitGatewayRouteTablePropagationsOutput)
|
||||||
|
|
||||||
|
ImportClientVpnClientCertificateRevocationList(*ec2.ImportClientVpnClientCertificateRevocationListInput) (*ec2.ImportClientVpnClientCertificateRevocationListOutput, error)
|
||||||
|
ImportClientVpnClientCertificateRevocationListWithContext(aws.Context, *ec2.ImportClientVpnClientCertificateRevocationListInput, ...request.Option) (*ec2.ImportClientVpnClientCertificateRevocationListOutput, error)
|
||||||
|
ImportClientVpnClientCertificateRevocationListRequest(*ec2.ImportClientVpnClientCertificateRevocationListInput) (*request.Request, *ec2.ImportClientVpnClientCertificateRevocationListOutput)
|
||||||
|
|
||||||
ImportImage(*ec2.ImportImageInput) (*ec2.ImportImageOutput, error)
|
ImportImage(*ec2.ImportImageInput) (*ec2.ImportImageOutput, error)
|
||||||
ImportImageWithContext(aws.Context, *ec2.ImportImageInput, ...request.Option) (*ec2.ImportImageOutput, error)
|
ImportImageWithContext(aws.Context, *ec2.ImportImageInput, ...request.Option) (*ec2.ImportImageOutput, error)
|
||||||
ImportImageRequest(*ec2.ImportImageInput) (*request.Request, *ec2.ImportImageOutput)
|
ImportImageRequest(*ec2.ImportImageInput) (*request.Request, *ec2.ImportImageOutput)
|
||||||
@ -945,6 +1130,14 @@ type EC2API interface {
|
|||||||
ImportVolumeWithContext(aws.Context, *ec2.ImportVolumeInput, ...request.Option) (*ec2.ImportVolumeOutput, error)
|
ImportVolumeWithContext(aws.Context, *ec2.ImportVolumeInput, ...request.Option) (*ec2.ImportVolumeOutput, error)
|
||||||
ImportVolumeRequest(*ec2.ImportVolumeInput) (*request.Request, *ec2.ImportVolumeOutput)
|
ImportVolumeRequest(*ec2.ImportVolumeInput) (*request.Request, *ec2.ImportVolumeOutput)
|
||||||
|
|
||||||
|
ModifyCapacityReservation(*ec2.ModifyCapacityReservationInput) (*ec2.ModifyCapacityReservationOutput, error)
|
||||||
|
ModifyCapacityReservationWithContext(aws.Context, *ec2.ModifyCapacityReservationInput, ...request.Option) (*ec2.ModifyCapacityReservationOutput, error)
|
||||||
|
ModifyCapacityReservationRequest(*ec2.ModifyCapacityReservationInput) (*request.Request, *ec2.ModifyCapacityReservationOutput)
|
||||||
|
|
||||||
|
ModifyClientVpnEndpoint(*ec2.ModifyClientVpnEndpointInput) (*ec2.ModifyClientVpnEndpointOutput, error)
|
||||||
|
ModifyClientVpnEndpointWithContext(aws.Context, *ec2.ModifyClientVpnEndpointInput, ...request.Option) (*ec2.ModifyClientVpnEndpointOutput, error)
|
||||||
|
ModifyClientVpnEndpointRequest(*ec2.ModifyClientVpnEndpointInput) (*request.Request, *ec2.ModifyClientVpnEndpointOutput)
|
||||||
|
|
||||||
ModifyFleet(*ec2.ModifyFleetInput) (*ec2.ModifyFleetOutput, error)
|
ModifyFleet(*ec2.ModifyFleetInput) (*ec2.ModifyFleetOutput, error)
|
||||||
ModifyFleetWithContext(aws.Context, *ec2.ModifyFleetInput, ...request.Option) (*ec2.ModifyFleetOutput, error)
|
ModifyFleetWithContext(aws.Context, *ec2.ModifyFleetInput, ...request.Option) (*ec2.ModifyFleetOutput, error)
|
||||||
ModifyFleetRequest(*ec2.ModifyFleetInput) (*request.Request, *ec2.ModifyFleetOutput)
|
ModifyFleetRequest(*ec2.ModifyFleetInput) (*request.Request, *ec2.ModifyFleetOutput)
|
||||||
@ -973,6 +1166,10 @@ type EC2API interface {
|
|||||||
ModifyInstanceAttributeWithContext(aws.Context, *ec2.ModifyInstanceAttributeInput, ...request.Option) (*ec2.ModifyInstanceAttributeOutput, error)
|
ModifyInstanceAttributeWithContext(aws.Context, *ec2.ModifyInstanceAttributeInput, ...request.Option) (*ec2.ModifyInstanceAttributeOutput, error)
|
||||||
ModifyInstanceAttributeRequest(*ec2.ModifyInstanceAttributeInput) (*request.Request, *ec2.ModifyInstanceAttributeOutput)
|
ModifyInstanceAttributeRequest(*ec2.ModifyInstanceAttributeInput) (*request.Request, *ec2.ModifyInstanceAttributeOutput)
|
||||||
|
|
||||||
|
ModifyInstanceCapacityReservationAttributes(*ec2.ModifyInstanceCapacityReservationAttributesInput) (*ec2.ModifyInstanceCapacityReservationAttributesOutput, error)
|
||||||
|
ModifyInstanceCapacityReservationAttributesWithContext(aws.Context, *ec2.ModifyInstanceCapacityReservationAttributesInput, ...request.Option) (*ec2.ModifyInstanceCapacityReservationAttributesOutput, error)
|
||||||
|
ModifyInstanceCapacityReservationAttributesRequest(*ec2.ModifyInstanceCapacityReservationAttributesInput) (*request.Request, *ec2.ModifyInstanceCapacityReservationAttributesOutput)
|
||||||
|
|
||||||
ModifyInstanceCreditSpecification(*ec2.ModifyInstanceCreditSpecificationInput) (*ec2.ModifyInstanceCreditSpecificationOutput, error)
|
ModifyInstanceCreditSpecification(*ec2.ModifyInstanceCreditSpecificationInput) (*ec2.ModifyInstanceCreditSpecificationOutput, error)
|
||||||
ModifyInstanceCreditSpecificationWithContext(aws.Context, *ec2.ModifyInstanceCreditSpecificationInput, ...request.Option) (*ec2.ModifyInstanceCreditSpecificationOutput, error)
|
ModifyInstanceCreditSpecificationWithContext(aws.Context, *ec2.ModifyInstanceCreditSpecificationInput, ...request.Option) (*ec2.ModifyInstanceCreditSpecificationOutput, error)
|
||||||
ModifyInstanceCreditSpecificationRequest(*ec2.ModifyInstanceCreditSpecificationInput) (*request.Request, *ec2.ModifyInstanceCreditSpecificationOutput)
|
ModifyInstanceCreditSpecificationRequest(*ec2.ModifyInstanceCreditSpecificationInput) (*request.Request, *ec2.ModifyInstanceCreditSpecificationOutput)
|
||||||
@ -1005,6 +1202,10 @@ type EC2API interface {
|
|||||||
ModifySubnetAttributeWithContext(aws.Context, *ec2.ModifySubnetAttributeInput, ...request.Option) (*ec2.ModifySubnetAttributeOutput, error)
|
ModifySubnetAttributeWithContext(aws.Context, *ec2.ModifySubnetAttributeInput, ...request.Option) (*ec2.ModifySubnetAttributeOutput, error)
|
||||||
ModifySubnetAttributeRequest(*ec2.ModifySubnetAttributeInput) (*request.Request, *ec2.ModifySubnetAttributeOutput)
|
ModifySubnetAttributeRequest(*ec2.ModifySubnetAttributeInput) (*request.Request, *ec2.ModifySubnetAttributeOutput)
|
||||||
|
|
||||||
|
ModifyTransitGatewayVpcAttachment(*ec2.ModifyTransitGatewayVpcAttachmentInput) (*ec2.ModifyTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
ModifyTransitGatewayVpcAttachmentWithContext(aws.Context, *ec2.ModifyTransitGatewayVpcAttachmentInput, ...request.Option) (*ec2.ModifyTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
ModifyTransitGatewayVpcAttachmentRequest(*ec2.ModifyTransitGatewayVpcAttachmentInput) (*request.Request, *ec2.ModifyTransitGatewayVpcAttachmentOutput)
|
||||||
|
|
||||||
ModifyVolume(*ec2.ModifyVolumeInput) (*ec2.ModifyVolumeOutput, error)
|
ModifyVolume(*ec2.ModifyVolumeInput) (*ec2.ModifyVolumeOutput, error)
|
||||||
ModifyVolumeWithContext(aws.Context, *ec2.ModifyVolumeInput, ...request.Option) (*ec2.ModifyVolumeOutput, error)
|
ModifyVolumeWithContext(aws.Context, *ec2.ModifyVolumeInput, ...request.Option) (*ec2.ModifyVolumeOutput, error)
|
||||||
ModifyVolumeRequest(*ec2.ModifyVolumeInput) (*request.Request, *ec2.ModifyVolumeOutput)
|
ModifyVolumeRequest(*ec2.ModifyVolumeInput) (*request.Request, *ec2.ModifyVolumeOutput)
|
||||||
@ -1049,6 +1250,10 @@ type EC2API interface {
|
|||||||
MoveAddressToVpcWithContext(aws.Context, *ec2.MoveAddressToVpcInput, ...request.Option) (*ec2.MoveAddressToVpcOutput, error)
|
MoveAddressToVpcWithContext(aws.Context, *ec2.MoveAddressToVpcInput, ...request.Option) (*ec2.MoveAddressToVpcOutput, error)
|
||||||
MoveAddressToVpcRequest(*ec2.MoveAddressToVpcInput) (*request.Request, *ec2.MoveAddressToVpcOutput)
|
MoveAddressToVpcRequest(*ec2.MoveAddressToVpcInput) (*request.Request, *ec2.MoveAddressToVpcOutput)
|
||||||
|
|
||||||
|
ProvisionByoipCidr(*ec2.ProvisionByoipCidrInput) (*ec2.ProvisionByoipCidrOutput, error)
|
||||||
|
ProvisionByoipCidrWithContext(aws.Context, *ec2.ProvisionByoipCidrInput, ...request.Option) (*ec2.ProvisionByoipCidrOutput, error)
|
||||||
|
ProvisionByoipCidrRequest(*ec2.ProvisionByoipCidrInput) (*request.Request, *ec2.ProvisionByoipCidrOutput)
|
||||||
|
|
||||||
PurchaseHostReservation(*ec2.PurchaseHostReservationInput) (*ec2.PurchaseHostReservationOutput, error)
|
PurchaseHostReservation(*ec2.PurchaseHostReservationInput) (*ec2.PurchaseHostReservationOutput, error)
|
||||||
PurchaseHostReservationWithContext(aws.Context, *ec2.PurchaseHostReservationInput, ...request.Option) (*ec2.PurchaseHostReservationOutput, error)
|
PurchaseHostReservationWithContext(aws.Context, *ec2.PurchaseHostReservationInput, ...request.Option) (*ec2.PurchaseHostReservationOutput, error)
|
||||||
PurchaseHostReservationRequest(*ec2.PurchaseHostReservationInput) (*request.Request, *ec2.PurchaseHostReservationOutput)
|
PurchaseHostReservationRequest(*ec2.PurchaseHostReservationInput) (*request.Request, *ec2.PurchaseHostReservationOutput)
|
||||||
@ -1069,6 +1274,10 @@ type EC2API interface {
|
|||||||
RegisterImageWithContext(aws.Context, *ec2.RegisterImageInput, ...request.Option) (*ec2.RegisterImageOutput, error)
|
RegisterImageWithContext(aws.Context, *ec2.RegisterImageInput, ...request.Option) (*ec2.RegisterImageOutput, error)
|
||||||
RegisterImageRequest(*ec2.RegisterImageInput) (*request.Request, *ec2.RegisterImageOutput)
|
RegisterImageRequest(*ec2.RegisterImageInput) (*request.Request, *ec2.RegisterImageOutput)
|
||||||
|
|
||||||
|
RejectTransitGatewayVpcAttachment(*ec2.RejectTransitGatewayVpcAttachmentInput) (*ec2.RejectTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
RejectTransitGatewayVpcAttachmentWithContext(aws.Context, *ec2.RejectTransitGatewayVpcAttachmentInput, ...request.Option) (*ec2.RejectTransitGatewayVpcAttachmentOutput, error)
|
||||||
|
RejectTransitGatewayVpcAttachmentRequest(*ec2.RejectTransitGatewayVpcAttachmentInput) (*request.Request, *ec2.RejectTransitGatewayVpcAttachmentOutput)
|
||||||
|
|
||||||
RejectVpcEndpointConnections(*ec2.RejectVpcEndpointConnectionsInput) (*ec2.RejectVpcEndpointConnectionsOutput, error)
|
RejectVpcEndpointConnections(*ec2.RejectVpcEndpointConnectionsInput) (*ec2.RejectVpcEndpointConnectionsOutput, error)
|
||||||
RejectVpcEndpointConnectionsWithContext(aws.Context, *ec2.RejectVpcEndpointConnectionsInput, ...request.Option) (*ec2.RejectVpcEndpointConnectionsOutput, error)
|
RejectVpcEndpointConnectionsWithContext(aws.Context, *ec2.RejectVpcEndpointConnectionsInput, ...request.Option) (*ec2.RejectVpcEndpointConnectionsOutput, error)
|
||||||
RejectVpcEndpointConnectionsRequest(*ec2.RejectVpcEndpointConnectionsInput) (*request.Request, *ec2.RejectVpcEndpointConnectionsOutput)
|
RejectVpcEndpointConnectionsRequest(*ec2.RejectVpcEndpointConnectionsInput) (*request.Request, *ec2.RejectVpcEndpointConnectionsOutput)
|
||||||
@ -1105,6 +1314,10 @@ type EC2API interface {
|
|||||||
ReplaceRouteTableAssociationWithContext(aws.Context, *ec2.ReplaceRouteTableAssociationInput, ...request.Option) (*ec2.ReplaceRouteTableAssociationOutput, error)
|
ReplaceRouteTableAssociationWithContext(aws.Context, *ec2.ReplaceRouteTableAssociationInput, ...request.Option) (*ec2.ReplaceRouteTableAssociationOutput, error)
|
||||||
ReplaceRouteTableAssociationRequest(*ec2.ReplaceRouteTableAssociationInput) (*request.Request, *ec2.ReplaceRouteTableAssociationOutput)
|
ReplaceRouteTableAssociationRequest(*ec2.ReplaceRouteTableAssociationInput) (*request.Request, *ec2.ReplaceRouteTableAssociationOutput)
|
||||||
|
|
||||||
|
ReplaceTransitGatewayRoute(*ec2.ReplaceTransitGatewayRouteInput) (*ec2.ReplaceTransitGatewayRouteOutput, error)
|
||||||
|
ReplaceTransitGatewayRouteWithContext(aws.Context, *ec2.ReplaceTransitGatewayRouteInput, ...request.Option) (*ec2.ReplaceTransitGatewayRouteOutput, error)
|
||||||
|
ReplaceTransitGatewayRouteRequest(*ec2.ReplaceTransitGatewayRouteInput) (*request.Request, *ec2.ReplaceTransitGatewayRouteOutput)
|
||||||
|
|
||||||
ReportInstanceStatus(*ec2.ReportInstanceStatusInput) (*ec2.ReportInstanceStatusOutput, error)
|
ReportInstanceStatus(*ec2.ReportInstanceStatusInput) (*ec2.ReportInstanceStatusOutput, error)
|
||||||
ReportInstanceStatusWithContext(aws.Context, *ec2.ReportInstanceStatusInput, ...request.Option) (*ec2.ReportInstanceStatusOutput, error)
|
ReportInstanceStatusWithContext(aws.Context, *ec2.ReportInstanceStatusInput, ...request.Option) (*ec2.ReportInstanceStatusOutput, error)
|
||||||
ReportInstanceStatusRequest(*ec2.ReportInstanceStatusInput) (*request.Request, *ec2.ReportInstanceStatusOutput)
|
ReportInstanceStatusRequest(*ec2.ReportInstanceStatusInput) (*request.Request, *ec2.ReportInstanceStatusOutput)
|
||||||
@ -1141,6 +1354,10 @@ type EC2API interface {
|
|||||||
RestoreAddressToClassicWithContext(aws.Context, *ec2.RestoreAddressToClassicInput, ...request.Option) (*ec2.RestoreAddressToClassicOutput, error)
|
RestoreAddressToClassicWithContext(aws.Context, *ec2.RestoreAddressToClassicInput, ...request.Option) (*ec2.RestoreAddressToClassicOutput, error)
|
||||||
RestoreAddressToClassicRequest(*ec2.RestoreAddressToClassicInput) (*request.Request, *ec2.RestoreAddressToClassicOutput)
|
RestoreAddressToClassicRequest(*ec2.RestoreAddressToClassicInput) (*request.Request, *ec2.RestoreAddressToClassicOutput)
|
||||||
|
|
||||||
|
RevokeClientVpnIngress(*ec2.RevokeClientVpnIngressInput) (*ec2.RevokeClientVpnIngressOutput, error)
|
||||||
|
RevokeClientVpnIngressWithContext(aws.Context, *ec2.RevokeClientVpnIngressInput, ...request.Option) (*ec2.RevokeClientVpnIngressOutput, error)
|
||||||
|
RevokeClientVpnIngressRequest(*ec2.RevokeClientVpnIngressInput) (*request.Request, *ec2.RevokeClientVpnIngressOutput)
|
||||||
|
|
||||||
RevokeSecurityGroupEgress(*ec2.RevokeSecurityGroupEgressInput) (*ec2.RevokeSecurityGroupEgressOutput, error)
|
RevokeSecurityGroupEgress(*ec2.RevokeSecurityGroupEgressInput) (*ec2.RevokeSecurityGroupEgressOutput, error)
|
||||||
RevokeSecurityGroupEgressWithContext(aws.Context, *ec2.RevokeSecurityGroupEgressInput, ...request.Option) (*ec2.RevokeSecurityGroupEgressOutput, error)
|
RevokeSecurityGroupEgressWithContext(aws.Context, *ec2.RevokeSecurityGroupEgressInput, ...request.Option) (*ec2.RevokeSecurityGroupEgressOutput, error)
|
||||||
RevokeSecurityGroupEgressRequest(*ec2.RevokeSecurityGroupEgressInput) (*request.Request, *ec2.RevokeSecurityGroupEgressOutput)
|
RevokeSecurityGroupEgressRequest(*ec2.RevokeSecurityGroupEgressInput) (*request.Request, *ec2.RevokeSecurityGroupEgressOutput)
|
||||||
@ -1157,6 +1374,10 @@ type EC2API interface {
|
|||||||
RunScheduledInstancesWithContext(aws.Context, *ec2.RunScheduledInstancesInput, ...request.Option) (*ec2.RunScheduledInstancesOutput, error)
|
RunScheduledInstancesWithContext(aws.Context, *ec2.RunScheduledInstancesInput, ...request.Option) (*ec2.RunScheduledInstancesOutput, error)
|
||||||
RunScheduledInstancesRequest(*ec2.RunScheduledInstancesInput) (*request.Request, *ec2.RunScheduledInstancesOutput)
|
RunScheduledInstancesRequest(*ec2.RunScheduledInstancesInput) (*request.Request, *ec2.RunScheduledInstancesOutput)
|
||||||
|
|
||||||
|
SearchTransitGatewayRoutes(*ec2.SearchTransitGatewayRoutesInput) (*ec2.SearchTransitGatewayRoutesOutput, error)
|
||||||
|
SearchTransitGatewayRoutesWithContext(aws.Context, *ec2.SearchTransitGatewayRoutesInput, ...request.Option) (*ec2.SearchTransitGatewayRoutesOutput, error)
|
||||||
|
SearchTransitGatewayRoutesRequest(*ec2.SearchTransitGatewayRoutesInput) (*request.Request, *ec2.SearchTransitGatewayRoutesOutput)
|
||||||
|
|
||||||
StartInstances(*ec2.StartInstancesInput) (*ec2.StartInstancesOutput, error)
|
StartInstances(*ec2.StartInstancesInput) (*ec2.StartInstancesOutput, error)
|
||||||
StartInstancesWithContext(aws.Context, *ec2.StartInstancesInput, ...request.Option) (*ec2.StartInstancesOutput, error)
|
StartInstancesWithContext(aws.Context, *ec2.StartInstancesInput, ...request.Option) (*ec2.StartInstancesOutput, error)
|
||||||
StartInstancesRequest(*ec2.StartInstancesInput) (*request.Request, *ec2.StartInstancesOutput)
|
StartInstancesRequest(*ec2.StartInstancesInput) (*request.Request, *ec2.StartInstancesOutput)
|
||||||
@ -1165,6 +1386,10 @@ type EC2API interface {
|
|||||||
StopInstancesWithContext(aws.Context, *ec2.StopInstancesInput, ...request.Option) (*ec2.StopInstancesOutput, error)
|
StopInstancesWithContext(aws.Context, *ec2.StopInstancesInput, ...request.Option) (*ec2.StopInstancesOutput, error)
|
||||||
StopInstancesRequest(*ec2.StopInstancesInput) (*request.Request, *ec2.StopInstancesOutput)
|
StopInstancesRequest(*ec2.StopInstancesInput) (*request.Request, *ec2.StopInstancesOutput)
|
||||||
|
|
||||||
|
TerminateClientVpnConnections(*ec2.TerminateClientVpnConnectionsInput) (*ec2.TerminateClientVpnConnectionsOutput, error)
|
||||||
|
TerminateClientVpnConnectionsWithContext(aws.Context, *ec2.TerminateClientVpnConnectionsInput, ...request.Option) (*ec2.TerminateClientVpnConnectionsOutput, error)
|
||||||
|
TerminateClientVpnConnectionsRequest(*ec2.TerminateClientVpnConnectionsInput) (*request.Request, *ec2.TerminateClientVpnConnectionsOutput)
|
||||||
|
|
||||||
TerminateInstances(*ec2.TerminateInstancesInput) (*ec2.TerminateInstancesOutput, error)
|
TerminateInstances(*ec2.TerminateInstancesInput) (*ec2.TerminateInstancesOutput, error)
|
||||||
TerminateInstancesWithContext(aws.Context, *ec2.TerminateInstancesInput, ...request.Option) (*ec2.TerminateInstancesOutput, error)
|
TerminateInstancesWithContext(aws.Context, *ec2.TerminateInstancesInput, ...request.Option) (*ec2.TerminateInstancesOutput, error)
|
||||||
TerminateInstancesRequest(*ec2.TerminateInstancesInput) (*request.Request, *ec2.TerminateInstancesOutput)
|
TerminateInstancesRequest(*ec2.TerminateInstancesInput) (*request.Request, *ec2.TerminateInstancesOutput)
|
||||||
@ -1189,6 +1414,10 @@ type EC2API interface {
|
|||||||
UpdateSecurityGroupRuleDescriptionsIngressWithContext(aws.Context, *ec2.UpdateSecurityGroupRuleDescriptionsIngressInput, ...request.Option) (*ec2.UpdateSecurityGroupRuleDescriptionsIngressOutput, error)
|
UpdateSecurityGroupRuleDescriptionsIngressWithContext(aws.Context, *ec2.UpdateSecurityGroupRuleDescriptionsIngressInput, ...request.Option) (*ec2.UpdateSecurityGroupRuleDescriptionsIngressOutput, error)
|
||||||
UpdateSecurityGroupRuleDescriptionsIngressRequest(*ec2.UpdateSecurityGroupRuleDescriptionsIngressInput) (*request.Request, *ec2.UpdateSecurityGroupRuleDescriptionsIngressOutput)
|
UpdateSecurityGroupRuleDescriptionsIngressRequest(*ec2.UpdateSecurityGroupRuleDescriptionsIngressInput) (*request.Request, *ec2.UpdateSecurityGroupRuleDescriptionsIngressOutput)
|
||||||
|
|
||||||
|
WithdrawByoipCidr(*ec2.WithdrawByoipCidrInput) (*ec2.WithdrawByoipCidrOutput, error)
|
||||||
|
WithdrawByoipCidrWithContext(aws.Context, *ec2.WithdrawByoipCidrInput, ...request.Option) (*ec2.WithdrawByoipCidrOutput, error)
|
||||||
|
WithdrawByoipCidrRequest(*ec2.WithdrawByoipCidrInput) (*request.Request, *ec2.WithdrawByoipCidrOutput)
|
||||||
|
|
||||||
WaitUntilBundleTaskComplete(*ec2.DescribeBundleTasksInput) error
|
WaitUntilBundleTaskComplete(*ec2.DescribeBundleTasksInput) error
|
||||||
WaitUntilBundleTaskCompleteWithContext(aws.Context, *ec2.DescribeBundleTasksInput, ...request.WaiterOption) error
|
WaitUntilBundleTaskCompleteWithContext(aws.Context, *ec2.DescribeBundleTasksInput, ...request.WaiterOption) error
|
||||||
|
|
||||||
|
1311
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/api.go
generated
vendored
Normal file
1311
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/api.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
64
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/doc.go
generated
vendored
Normal file
64
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/doc.go
generated
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||||
|
|
||||||
|
// Package resourcegroupstaggingapi provides the client and types for making API
|
||||||
|
// requests to AWS Resource Groups Tagging API.
|
||||||
|
//
|
||||||
|
// This guide describes the API operations for the resource groups tagging.
|
||||||
|
//
|
||||||
|
// A tag is a label that you assign to an AWS resource. A tag consists of a
|
||||||
|
// key and a value, both of which you define. For example, if you have two Amazon
|
||||||
|
// EC2 instances, you might assign both a tag key of "Stack." But the value
|
||||||
|
// of "Stack" might be "Testing" for one and "Production" for the other.
|
||||||
|
//
|
||||||
|
// Tagging can help you organize your resources and enables you to simplify
|
||||||
|
// resource management, access management and cost allocation. For more information
|
||||||
|
// about tagging, see Working with Tag Editor (http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/tag-editor.html)
|
||||||
|
// and Working with Resource Groups (http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/resource-groups.html).
|
||||||
|
// For more information about permissions you need to use the resource groups
|
||||||
|
// tagging APIs, see Obtaining Permissions for Resource Groups (http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-resource-groups.html)
|
||||||
|
// and Obtaining Permissions for Tagging (http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-tagging.html).
|
||||||
|
//
|
||||||
|
// You can use the resource groups tagging APIs to complete the following tasks:
|
||||||
|
//
|
||||||
|
// * Tag and untag supported resources located in the specified region for
|
||||||
|
// the AWS account
|
||||||
|
//
|
||||||
|
// * Use tag-based filters to search for resources located in the specified
|
||||||
|
// region for the AWS account
|
||||||
|
//
|
||||||
|
// * List all existing tag keys in the specified region for the AWS account
|
||||||
|
//
|
||||||
|
// * List all existing values for the specified key in the specified region
|
||||||
|
// for the AWS account
|
||||||
|
//
|
||||||
|
// Not all resources can have tags. For a lists of resources that you can tag,
|
||||||
|
// see Supported Resources (http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/supported-resources.html)
|
||||||
|
// in the AWS Resource Groups and Tag Editor User Guide.
|
||||||
|
//
|
||||||
|
// To make full use of the resource groups tagging APIs, you might need additional
|
||||||
|
// IAM permissions, including permission to access the resources of individual
|
||||||
|
// services as well as permission to view and apply tags to those resources.
|
||||||
|
// For more information, see Obtaining Permissions for Tagging (http://docs.aws.amazon.com/awsconsolehelpdocs/latest/gsg/obtaining-permissions-for-tagging.html)
|
||||||
|
// in the AWS Resource Groups and Tag Editor User Guide.
|
||||||
|
//
|
||||||
|
// See https://docs.aws.amazon.com/goto/WebAPI/resourcegroupstaggingapi-2017-01-26 for more information on this service.
|
||||||
|
//
|
||||||
|
// See resourcegroupstaggingapi package documentation for more information.
|
||||||
|
// https://docs.aws.amazon.com/sdk-for-go/api/service/resourcegroupstaggingapi/
|
||||||
|
//
|
||||||
|
// Using the Client
|
||||||
|
//
|
||||||
|
// To contact AWS Resource Groups Tagging API with the SDK use the New function to create
|
||||||
|
// a new service client. With that client you can make API requests to the service.
|
||||||
|
// These clients are safe to use concurrently.
|
||||||
|
//
|
||||||
|
// See the SDK's documentation for more information on how to use the SDK.
|
||||||
|
// https://docs.aws.amazon.com/sdk-for-go/api/
|
||||||
|
//
|
||||||
|
// See aws.Config documentation for more information on configuring SDK clients.
|
||||||
|
// https://docs.aws.amazon.com/sdk-for-go/api/aws/#Config
|
||||||
|
//
|
||||||
|
// See the AWS Resource Groups Tagging API client ResourceGroupsTaggingAPI for more
|
||||||
|
// information on creating client for this service.
|
||||||
|
// https://docs.aws.amazon.com/sdk-for-go/api/service/resourcegroupstaggingapi/#New
|
||||||
|
package resourcegroupstaggingapi
|
33
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/errors.go
generated
vendored
Normal file
33
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/errors.go
generated
vendored
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||||
|
|
||||||
|
package resourcegroupstaggingapi
|
||||||
|
|
||||||
|
const (
|
||||||
|
|
||||||
|
// ErrCodeInternalServiceException for service response error code
|
||||||
|
// "InternalServiceException".
|
||||||
|
//
|
||||||
|
// The request processing failed because of an unknown error, exception, or
|
||||||
|
// failure. You can retry the request.
|
||||||
|
ErrCodeInternalServiceException = "InternalServiceException"
|
||||||
|
|
||||||
|
// ErrCodeInvalidParameterException for service response error code
|
||||||
|
// "InvalidParameterException".
|
||||||
|
//
|
||||||
|
// A parameter is missing or a malformed string or invalid or out-of-range value
|
||||||
|
// was supplied for the request parameter.
|
||||||
|
ErrCodeInvalidParameterException = "InvalidParameterException"
|
||||||
|
|
||||||
|
// ErrCodePaginationTokenExpiredException for service response error code
|
||||||
|
// "PaginationTokenExpiredException".
|
||||||
|
//
|
||||||
|
// A PaginationToken is valid for a maximum of 15 minutes. Your request was
|
||||||
|
// denied because the specified PaginationToken has expired.
|
||||||
|
ErrCodePaginationTokenExpiredException = "PaginationTokenExpiredException"
|
||||||
|
|
||||||
|
// ErrCodeThrottledException for service response error code
|
||||||
|
// "ThrottledException".
|
||||||
|
//
|
||||||
|
// The request was denied to limit the frequency of submitted requests.
|
||||||
|
ErrCodeThrottledException = "ThrottledException"
|
||||||
|
)
|
93
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/resourcegroupstaggingapiiface/interface.go
generated
vendored
Normal file
93
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/resourcegroupstaggingapiiface/interface.go
generated
vendored
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||||
|
|
||||||
|
// Package resourcegroupstaggingapiiface provides an interface to enable mocking the AWS Resource Groups Tagging API service client
|
||||||
|
// for testing your code.
|
||||||
|
//
|
||||||
|
// It is important to note that this interface will have breaking changes
|
||||||
|
// when the service model is updated and adds new API operations, paginators,
|
||||||
|
// and waiters.
|
||||||
|
package resourcegroupstaggingapiiface
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ResourceGroupsTaggingAPIAPI provides an interface to enable mocking the
|
||||||
|
// resourcegroupstaggingapi.ResourceGroupsTaggingAPI service client's API operation,
|
||||||
|
// paginators, and waiters. This make unit testing your code that calls out
|
||||||
|
// to the SDK's service client's calls easier.
|
||||||
|
//
|
||||||
|
// The best way to use this interface is so the SDK's service client's calls
|
||||||
|
// can be stubbed out for unit testing your code with the SDK without needing
|
||||||
|
// to inject custom request handlers into the SDK's request pipeline.
|
||||||
|
//
|
||||||
|
// // myFunc uses an SDK service client to make a request to
|
||||||
|
// // AWS Resource Groups Tagging API.
|
||||||
|
// func myFunc(svc resourcegroupstaggingapiiface.ResourceGroupsTaggingAPIAPI) bool {
|
||||||
|
// // Make svc.GetResources request
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// func main() {
|
||||||
|
// sess := session.New()
|
||||||
|
// svc := resourcegroupstaggingapi.New(sess)
|
||||||
|
//
|
||||||
|
// myFunc(svc)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// In your _test.go file:
|
||||||
|
//
|
||||||
|
// // Define a mock struct to be used in your unit tests of myFunc.
|
||||||
|
// type mockResourceGroupsTaggingAPIClient struct {
|
||||||
|
// resourcegroupstaggingapiiface.ResourceGroupsTaggingAPIAPI
|
||||||
|
// }
|
||||||
|
// func (m *mockResourceGroupsTaggingAPIClient) GetResources(input *resourcegroupstaggingapi.GetResourcesInput) (*resourcegroupstaggingapi.GetResourcesOutput, error) {
|
||||||
|
// // mock response/functionality
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// func TestMyFunc(t *testing.T) {
|
||||||
|
// // Setup Test
|
||||||
|
// mockSvc := &mockResourceGroupsTaggingAPIClient{}
|
||||||
|
//
|
||||||
|
// myfunc(mockSvc)
|
||||||
|
//
|
||||||
|
// // Verify myFunc's functionality
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// It is important to note that this interface will have breaking changes
|
||||||
|
// when the service model is updated and adds new API operations, paginators,
|
||||||
|
// and waiters. Its suggested to use the pattern above for testing, or using
|
||||||
|
// tooling to generate mocks to satisfy the interfaces.
|
||||||
|
type ResourceGroupsTaggingAPIAPI interface {
|
||||||
|
GetResources(*resourcegroupstaggingapi.GetResourcesInput) (*resourcegroupstaggingapi.GetResourcesOutput, error)
|
||||||
|
GetResourcesWithContext(aws.Context, *resourcegroupstaggingapi.GetResourcesInput, ...request.Option) (*resourcegroupstaggingapi.GetResourcesOutput, error)
|
||||||
|
GetResourcesRequest(*resourcegroupstaggingapi.GetResourcesInput) (*request.Request, *resourcegroupstaggingapi.GetResourcesOutput)
|
||||||
|
|
||||||
|
GetResourcesPages(*resourcegroupstaggingapi.GetResourcesInput, func(*resourcegroupstaggingapi.GetResourcesOutput, bool) bool) error
|
||||||
|
GetResourcesPagesWithContext(aws.Context, *resourcegroupstaggingapi.GetResourcesInput, func(*resourcegroupstaggingapi.GetResourcesOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
GetTagKeys(*resourcegroupstaggingapi.GetTagKeysInput) (*resourcegroupstaggingapi.GetTagKeysOutput, error)
|
||||||
|
GetTagKeysWithContext(aws.Context, *resourcegroupstaggingapi.GetTagKeysInput, ...request.Option) (*resourcegroupstaggingapi.GetTagKeysOutput, error)
|
||||||
|
GetTagKeysRequest(*resourcegroupstaggingapi.GetTagKeysInput) (*request.Request, *resourcegroupstaggingapi.GetTagKeysOutput)
|
||||||
|
|
||||||
|
GetTagKeysPages(*resourcegroupstaggingapi.GetTagKeysInput, func(*resourcegroupstaggingapi.GetTagKeysOutput, bool) bool) error
|
||||||
|
GetTagKeysPagesWithContext(aws.Context, *resourcegroupstaggingapi.GetTagKeysInput, func(*resourcegroupstaggingapi.GetTagKeysOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
GetTagValues(*resourcegroupstaggingapi.GetTagValuesInput) (*resourcegroupstaggingapi.GetTagValuesOutput, error)
|
||||||
|
GetTagValuesWithContext(aws.Context, *resourcegroupstaggingapi.GetTagValuesInput, ...request.Option) (*resourcegroupstaggingapi.GetTagValuesOutput, error)
|
||||||
|
GetTagValuesRequest(*resourcegroupstaggingapi.GetTagValuesInput) (*request.Request, *resourcegroupstaggingapi.GetTagValuesOutput)
|
||||||
|
|
||||||
|
GetTagValuesPages(*resourcegroupstaggingapi.GetTagValuesInput, func(*resourcegroupstaggingapi.GetTagValuesOutput, bool) bool) error
|
||||||
|
GetTagValuesPagesWithContext(aws.Context, *resourcegroupstaggingapi.GetTagValuesInput, func(*resourcegroupstaggingapi.GetTagValuesOutput, bool) bool, ...request.Option) error
|
||||||
|
|
||||||
|
TagResources(*resourcegroupstaggingapi.TagResourcesInput) (*resourcegroupstaggingapi.TagResourcesOutput, error)
|
||||||
|
TagResourcesWithContext(aws.Context, *resourcegroupstaggingapi.TagResourcesInput, ...request.Option) (*resourcegroupstaggingapi.TagResourcesOutput, error)
|
||||||
|
TagResourcesRequest(*resourcegroupstaggingapi.TagResourcesInput) (*request.Request, *resourcegroupstaggingapi.TagResourcesOutput)
|
||||||
|
|
||||||
|
UntagResources(*resourcegroupstaggingapi.UntagResourcesInput) (*resourcegroupstaggingapi.UntagResourcesOutput, error)
|
||||||
|
UntagResourcesWithContext(aws.Context, *resourcegroupstaggingapi.UntagResourcesInput, ...request.Option) (*resourcegroupstaggingapi.UntagResourcesOutput, error)
|
||||||
|
UntagResourcesRequest(*resourcegroupstaggingapi.UntagResourcesInput) (*request.Request, *resourcegroupstaggingapi.UntagResourcesOutput)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ ResourceGroupsTaggingAPIAPI = (*resourcegroupstaggingapi.ResourceGroupsTaggingAPI)(nil)
|
97
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/service.go
generated
vendored
Normal file
97
vendor/github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi/service.go
generated
vendored
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
// Code generated by private/model/cli/gen-api/main.go. DO NOT EDIT.
|
||||||
|
|
||||||
|
package resourcegroupstaggingapi
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/client/metadata"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/aws/signer/v4"
|
||||||
|
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ResourceGroupsTaggingAPI provides the API operation methods for making requests to
|
||||||
|
// AWS Resource Groups Tagging API. See this package's package overview docs
|
||||||
|
// for details on the service.
|
||||||
|
//
|
||||||
|
// ResourceGroupsTaggingAPI methods are safe to use concurrently. It is not safe to
|
||||||
|
// modify mutate any of the struct's properties though.
|
||||||
|
type ResourceGroupsTaggingAPI struct {
|
||||||
|
*client.Client
|
||||||
|
}
|
||||||
|
|
||||||
|
// Used for custom client initialization logic
|
||||||
|
var initClient func(*client.Client)
|
||||||
|
|
||||||
|
// Used for custom request initialization logic
|
||||||
|
var initRequest func(*request.Request)
|
||||||
|
|
||||||
|
// Service information constants
|
||||||
|
const (
|
||||||
|
ServiceName = "tagging" // Name of service.
|
||||||
|
EndpointsID = ServiceName // ID to lookup a service endpoint with.
|
||||||
|
ServiceID = "Resource Groups Tagging API" // ServiceID is a unique identifer of a specific service.
|
||||||
|
)
|
||||||
|
|
||||||
|
// New creates a new instance of the ResourceGroupsTaggingAPI client with a session.
|
||||||
|
// If additional configuration is needed for the client instance use the optional
|
||||||
|
// aws.Config parameter to add your extra config.
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
// // Create a ResourceGroupsTaggingAPI client from just a session.
|
||||||
|
// svc := resourcegroupstaggingapi.New(mySession)
|
||||||
|
//
|
||||||
|
// // Create a ResourceGroupsTaggingAPI client with additional configuration
|
||||||
|
// svc := resourcegroupstaggingapi.New(mySession, aws.NewConfig().WithRegion("us-west-2"))
|
||||||
|
func New(p client.ConfigProvider, cfgs ...*aws.Config) *ResourceGroupsTaggingAPI {
|
||||||
|
c := p.ClientConfig(EndpointsID, cfgs...)
|
||||||
|
return newClient(*c.Config, c.Handlers, c.Endpoint, c.SigningRegion, c.SigningName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// newClient creates, initializes and returns a new service client instance.
|
||||||
|
func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegion, signingName string) *ResourceGroupsTaggingAPI {
|
||||||
|
svc := &ResourceGroupsTaggingAPI{
|
||||||
|
Client: client.New(
|
||||||
|
cfg,
|
||||||
|
metadata.ClientInfo{
|
||||||
|
ServiceName: ServiceName,
|
||||||
|
ServiceID: ServiceID,
|
||||||
|
SigningName: signingName,
|
||||||
|
SigningRegion: signingRegion,
|
||||||
|
Endpoint: endpoint,
|
||||||
|
APIVersion: "2017-01-26",
|
||||||
|
JSONVersion: "1.1",
|
||||||
|
TargetPrefix: "ResourceGroupsTaggingAPI_20170126",
|
||||||
|
},
|
||||||
|
handlers,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handlers
|
||||||
|
svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
|
||||||
|
svc.Handlers.Build.PushBackNamed(jsonrpc.BuildHandler)
|
||||||
|
svc.Handlers.Unmarshal.PushBackNamed(jsonrpc.UnmarshalHandler)
|
||||||
|
svc.Handlers.UnmarshalMeta.PushBackNamed(jsonrpc.UnmarshalMetaHandler)
|
||||||
|
svc.Handlers.UnmarshalError.PushBackNamed(jsonrpc.UnmarshalErrorHandler)
|
||||||
|
|
||||||
|
// Run custom client initialization if present
|
||||||
|
if initClient != nil {
|
||||||
|
initClient(svc.Client)
|
||||||
|
}
|
||||||
|
|
||||||
|
return svc
|
||||||
|
}
|
||||||
|
|
||||||
|
// newRequest creates a new request for a ResourceGroupsTaggingAPI operation and runs any
|
||||||
|
// custom request initialization.
|
||||||
|
func (c *ResourceGroupsTaggingAPI) newRequest(op *request.Operation, params, data interface{}) *request.Request {
|
||||||
|
req := c.NewRequest(op, params, data)
|
||||||
|
|
||||||
|
// Run custom request initialization if present
|
||||||
|
if initRequest != nil {
|
||||||
|
initRequest(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
return req
|
||||||
|
}
|
3340
vendor/github.com/aws/aws-sdk-go/service/s3/api.go
generated
vendored
3340
vendor/github.com/aws/aws-sdk-go/service/s3/api.go
generated
vendored
File diff suppressed because it is too large
Load Diff
4
vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/service/s3/customizations.go
generated
vendored
@ -3,6 +3,7 @@ package s3
|
|||||||
import (
|
import (
|
||||||
"github.com/aws/aws-sdk-go/aws/client"
|
"github.com/aws/aws-sdk-go/aws/client"
|
||||||
"github.com/aws/aws-sdk-go/aws/request"
|
"github.com/aws/aws-sdk-go/aws/request"
|
||||||
|
"github.com/aws/aws-sdk-go/internal/s3err"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -21,6 +22,7 @@ func defaultInitClientFn(c *client.Client) {
|
|||||||
// S3 uses custom error unmarshaling logic
|
// S3 uses custom error unmarshaling logic
|
||||||
c.Handlers.UnmarshalError.Clear()
|
c.Handlers.UnmarshalError.Clear()
|
||||||
c.Handlers.UnmarshalError.PushBack(unmarshalError)
|
c.Handlers.UnmarshalError.PushBack(unmarshalError)
|
||||||
|
c.Handlers.UnmarshalError.PushBackNamed(s3err.RequestFailureWrapperHandler())
|
||||||
}
|
}
|
||||||
|
|
||||||
func defaultInitRequestFn(r *request.Request) {
|
func defaultInitRequestFn(r *request.Request) {
|
||||||
@ -31,6 +33,7 @@ func defaultInitRequestFn(r *request.Request) {
|
|||||||
switch r.Operation.Name {
|
switch r.Operation.Name {
|
||||||
case opPutBucketCors, opPutBucketLifecycle, opPutBucketPolicy,
|
case opPutBucketCors, opPutBucketLifecycle, opPutBucketPolicy,
|
||||||
opPutBucketTagging, opDeleteObjects, opPutBucketLifecycleConfiguration,
|
opPutBucketTagging, opDeleteObjects, opPutBucketLifecycleConfiguration,
|
||||||
|
opPutObjectLegalHold, opPutObjectRetention, opPutObjectLockConfiguration,
|
||||||
opPutBucketReplication:
|
opPutBucketReplication:
|
||||||
// These S3 operations require Content-MD5 to be set
|
// These S3 operations require Content-MD5 to be set
|
||||||
r.Handlers.Build.PushBack(contentMD5)
|
r.Handlers.Build.PushBack(contentMD5)
|
||||||
@ -42,6 +45,7 @@ func defaultInitRequestFn(r *request.Request) {
|
|||||||
r.Handlers.Validate.PushFront(populateLocationConstraint)
|
r.Handlers.Validate.PushFront(populateLocationConstraint)
|
||||||
case opCopyObject, opUploadPartCopy, opCompleteMultipartUpload:
|
case opCopyObject, opUploadPartCopy, opCompleteMultipartUpload:
|
||||||
r.Handlers.Unmarshal.PushFront(copyMultipartStatusOKUnmarhsalError)
|
r.Handlers.Unmarshal.PushFront(copyMultipartStatusOKUnmarhsalError)
|
||||||
|
r.Handlers.Unmarshal.PushBackNamed(s3err.RequestFailureWrapperHandler())
|
||||||
case opPutObject, opUploadPart:
|
case opPutObject, opUploadPart:
|
||||||
r.Handlers.Build.PushBack(computeBodyHashes)
|
r.Handlers.Build.PushBack(computeBodyHashes)
|
||||||
// Disabled until #1837 root issue is resolved.
|
// Disabled until #1837 root issue is resolved.
|
||||||
|
4
vendor/github.com/aws/aws-sdk-go/service/s3/service.go
generated
vendored
4
vendor/github.com/aws/aws-sdk-go/service/s3/service.go
generated
vendored
@ -67,7 +67,9 @@ func newClient(cfg aws.Config, handlers request.Handlers, endpoint, signingRegio
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Handlers
|
// Handlers
|
||||||
svc.Handlers.Sign.PushBackNamed(v4.SignRequestHandler)
|
svc.Handlers.Sign.PushBackNamed(v4.BuildNamedHandler(v4.SignRequestHandler.Name, func(s *v4.Signer) {
|
||||||
|
s.DisableURIPathEscaping = true
|
||||||
|
}))
|
||||||
svc.Handlers.Build.PushBackNamed(restxml.BuildHandler)
|
svc.Handlers.Build.PushBackNamed(restxml.BuildHandler)
|
||||||
svc.Handlers.Unmarshal.PushBackNamed(restxml.UnmarshalHandler)
|
svc.Handlers.Unmarshal.PushBackNamed(restxml.UnmarshalHandler)
|
||||||
svc.Handlers.UnmarshalMeta.PushBackNamed(restxml.UnmarshalMetaHandler)
|
svc.Handlers.UnmarshalMeta.PushBackNamed(restxml.UnmarshalMetaHandler)
|
||||||
|
6
vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go
generated
vendored
6
vendor/github.com/aws/aws-sdk-go/service/s3/statusok_error.go
generated
vendored
@ -13,7 +13,11 @@ import (
|
|||||||
func copyMultipartStatusOKUnmarhsalError(r *request.Request) {
|
func copyMultipartStatusOKUnmarhsalError(r *request.Request) {
|
||||||
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
b, err := ioutil.ReadAll(r.HTTPResponse.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
r.Error = awserr.New("SerializationError", "unable to read response body", err)
|
r.Error = awserr.NewRequestFailure(
|
||||||
|
awserr.New("SerializationError", "unable to read response body", err),
|
||||||
|
r.HTTPResponse.StatusCode,
|
||||||
|
r.RequestID,
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
body := bytes.NewReader(b)
|
body := bytes.NewReader(b)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user