Skip to content

Commit 4cf0f15

Browse files
authored
Feb weekly 1 (#51)
* AZURE_SUBSCRIPTION_ID must be present closes #47 * gpu in runner is not needed closes #49 * Decode AWS closes #13
1 parent cc01088 commit 4cf0f15

File tree

342 files changed

+60
-221881
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

342 files changed

+60
-221881
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ require (
99
github.com/Azure/go-autorest/autorest/azure/auth v0.5.3
1010
github.com/Azure/go-autorest/autorest/to v0.4.0
1111
github.com/aws/aws-sdk-go v1.34.13
12-
github.com/hashicorp/terraform v0.14.2
12+
github.com/hashicorp/terraform v0.14.2 // indirect
1313
github.com/hashicorp/terraform-plugin-sdk/v2 v2.4.0
1414
github.com/teris-io/shortid v0.0.0-20171029131806-771a37caa5cf
1515
github.com/zclconf/go-cty v1.7.0 // indirect

iterative/aws/provider.go

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ package aws
33
import (
44
"context"
55
"errors"
6+
"fmt"
7+
"regexp"
68
"sort"
79
"strconv"
810
"time"
911

1012
"github.com/aws/aws-sdk-go/aws"
1113
"github.com/aws/aws-sdk-go/aws/session"
1214
"github.com/aws/aws-sdk-go/service/ec2"
15+
"github.com/aws/aws-sdk-go/service/sts"
1316
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1417
)
1518

@@ -31,8 +34,9 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
3134
}
3235

3336
svc, err := awsClient(region)
37+
3438
if err != nil {
35-
return err
39+
return decodeAWSError(region, err)
3640
}
3741

3842
// Image
@@ -49,7 +53,7 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
4953
},
5054
})
5155
if err != nil {
52-
return err
56+
return decodeAWSError(region, err)
5357
}
5458
if len(imagesRes.Images) == 0 {
5559
return errors.New(ami + " ami not found in region")
@@ -118,7 +122,7 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
118122
},
119123
})
120124
if err != nil {
121-
return err
125+
return decodeAWSError(region, err)
122126
}
123127
if len(sgDesc.SecurityGroups) == 0 {
124128
return errors.New("no Security Groups found")
@@ -136,7 +140,7 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
136140
},
137141
})
138142
if err != nil {
139-
return err
143+
return decodeAWSError(region, err)
140144
}
141145
if len(subDesc.Subnets) == 0 {
142146
return errors.New("no subnets found")
@@ -176,21 +180,21 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
176180

177181
spotInstanceRequest, err := svc.RequestSpotInstancesWithContext(ctx, requestSpotInstancesInput)
178182
if err != nil {
179-
return err
183+
return decodeAWSError(region, err)
180184
}
181185

182186
spotInstanceRequestID := *spotInstanceRequest.SpotInstanceRequests[0].SpotInstanceRequestId
183187
err = svc.WaitUntilSpotInstanceRequestFulfilled(&ec2.DescribeSpotInstanceRequestsInput{
184188
SpotInstanceRequestIds: []*string{aws.String(spotInstanceRequestID)},
185189
})
186190
if err != nil {
187-
return err
191+
return decodeAWSError(region, err)
188192
}
189193
resolvedSpotInstance, err := svc.DescribeSpotInstanceRequests(&ec2.DescribeSpotInstanceRequestsInput{
190194
SpotInstanceRequestIds: []*string{aws.String(spotInstanceRequestID)},
191195
})
192196
if err != nil {
193-
return err
197+
return decodeAWSError(region, err)
194198
}
195199

196200
instanceID = *resolvedSpotInstance.SpotInstanceRequests[0].InstanceId
@@ -207,7 +211,7 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
207211
BlockDeviceMappings: blockDeviceMappings,
208212
})
209213
if err != nil {
210-
return err
214+
return decodeAWSError(region, err)
211215
}
212216

213217
instanceID = *runResult.Instances[0].InstanceId
@@ -228,7 +232,7 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
228232
},
229233
})
230234
if err != nil {
231-
return err
235+
return decodeAWSError(region, err)
232236
}
233237

234238
statusInput := ec2.DescribeInstancesInput{
@@ -245,7 +249,7 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
245249

246250
descResult, err := svc.DescribeInstancesWithContext(ctx, &statusInput)
247251
if err != nil {
248-
return err
252+
return decodeAWSError(region, err)
249253
}
250254

251255
instanceDesc := descResult.Reservations[0].Instances[0]
@@ -262,7 +266,7 @@ func ResourceMachineDelete(ctx context.Context, d *schema.ResourceData, m interf
262266

263267
svc, err := awsClient(region)
264268
if err != nil {
265-
return err
269+
return decodeAWSError(region, err)
266270
}
267271

268272
svc.DeleteKeyPair(&ec2.DeleteKeyPairInput{
@@ -285,7 +289,7 @@ func ResourceMachineDelete(ctx context.Context, d *schema.ResourceData, m interf
285289
},
286290
})
287291
if err != nil {
288-
return err
292+
return decodeAWSError(region, err)
289293
}
290294
}
291295

@@ -333,3 +337,26 @@ func getInstanceType(instanceType string, instanceGPU string) string {
333337

334338
return instanceType
335339
}
340+
341+
var encodedFailureMessagePattern = regexp.MustCompile(`(?i)(.*) Encoded authorization failure message: ([\w-]+) ?( .*)?`)
342+
343+
func decodeAWSError(region string, err error) error {
344+
sess, erro := session.NewSession(&aws.Config{
345+
Region: aws.String(region),
346+
})
347+
if erro != nil {
348+
return err
349+
}
350+
351+
groups := encodedFailureMessagePattern.FindStringSubmatch(err.Error())
352+
svc := sts.New(sess)
353+
result, erro := svc.DecodeAuthorizationMessage(&sts.DecodeAuthorizationMessageInput{
354+
EncodedMessage: aws.String(groups[2]),
355+
})
356+
if erro != nil {
357+
return err
358+
}
359+
360+
msg := aws.StringValue(result.DecodedMessage)
361+
return fmt.Errorf("%s Authorization failure message: '%s'%s", groups[1], msg, groups[3])
362+
}

iterative/azure/provider.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package azure
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"os"
78
"strings"
@@ -19,7 +20,10 @@ import (
1920

2021
//ResourceMachineCreate creates AWS instance
2122
func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interface{}) error {
22-
subscriptionID := os.Getenv("AZURE_SUBSCRIPTION_ID")
23+
subscriptionID, err := subscriptionID()
24+
if err != nil {
25+
return err
26+
}
2327

2428
username := "ubuntu"
2529
customData := d.Get("startup_script").(string)
@@ -268,7 +272,10 @@ func ResourceMachineCreate(ctx context.Context, d *schema.ResourceData, m interf
268272

269273
//ResourceMachineDelete deletes Azure instance
270274
func ResourceMachineDelete(ctx context.Context, d *schema.ResourceData, m interface{}) error {
271-
subscriptionID := os.Getenv("AZURE_SUBSCRIPTION_ID")
275+
subscriptionID, err := subscriptionID()
276+
if err != nil {
277+
return err
278+
}
272279
groupsClient, err := getGroupsClient(subscriptionID)
273280
if err != nil {
274281
return err
@@ -279,6 +286,7 @@ func ResourceMachineDelete(ctx context.Context, d *schema.ResourceData, m interf
279286

280287
func getGroupsClient(subscriptionID string) (resources.GroupsClient, error) {
281288
authorizer, err := auth.NewAuthorizerFromEnvironment()
289+
282290
client := resources.NewGroupsClient(subscriptionID)
283291
client.Authorizer = authorizer
284292
client.AddToUserAgent("iterative-provider")
@@ -372,3 +380,12 @@ func getInstanceType(instanceType string, instanceGPU string) string {
372380

373381
return instanceType
374382
}
383+
384+
func subscriptionID() (string, error) {
385+
subscriptionID := os.Getenv("AZURE_SUBSCRIPTION_ID")
386+
if subscriptionID != "" {
387+
return subscriptionID, nil
388+
}
389+
390+
return "", errors.New("AZURE_SUBSCRIPTION_ID is not present")
391+
}

iterative/resource_runner.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ export AZURE_CLIENT_SECRET={{.AZURE_CLIENT_SECRET}}
285285
export AZURE_SUBSCRIPTION_ID={{.AZURE_SUBSCRIPTION_ID}}
286286
export AZURE_TENANT_ID={{.AZURE_TENANT_ID}}
287287
288-
cml-runner{{if .name}} --name {{.name}}{{end}}{{if .labels}} --labels {{.labels}}{{end}}{{if .idle_timeout}} --idle-timeout {{.idle_timeout}}{{end}}{{if .driver}} --driver {{.driver}}{{end}}{{if .repo}} --repo {{.repo}}{{end}}{{if .token}} --token {{.token}}{{end}}{{if .tf_resource}} --tf_resource={{.tf_resource}}{{end}} {{if .instance_gpu}} --cloud-gpu {{.instance_gpu}}{{end}}
288+
cml-runner{{if .name}} --name {{.name}}{{end}}{{if .labels}} --labels {{.labels}}{{end}}{{if .idle_timeout}} --idle-timeout {{.idle_timeout}}{{end}}{{if .driver}} --driver {{.driver}}{{end}}{{if .repo}} --repo {{.repo}}{{end}}{{if .token}} --token {{.token}}{{end}}{{if .tf_resource}} --tf_resource={{.tf_resource}}{{end}}
289289
EOF'
290290
sudo chmod +x /usr/bin/cml.sh
291291

vendor/github.com/apparentlymart/go-cidr/LICENSE

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)