in lambda/main.go [38:110]
func handler(ctx context.Context, event cfn.Event) (physicalResourceID string, data map[string]interface{}, err error) {
physicalResourceID = event.PhysicalResourceID
data = make(map[string]interface{})
log.Printf("Event: %s", Dumps(event))
if event.RequestType == cfn.RequestDelete {
return physicalResourceID, data, nil
}
if event.RequestType == cfn.RequestCreate || event.RequestType == cfn.RequestUpdate {
srcImage, err := getStrProps(event.ResourceProperties, SRC_IMAGE)
if err != nil {
return physicalResourceID, data, err
}
destImage, err := getStrProps(event.ResourceProperties, DEST_IMAGE)
if err != nil {
return physicalResourceID, data, err
}
srcCreds, err := getStrPropsDefault(event.ResourceProperties, SRC_CREDS, "")
if err != nil {
return physicalResourceID, data, err
}
destCreds, err := getStrPropsDefault(event.ResourceProperties, DEST_CREDS, "")
if err != nil {
return physicalResourceID, data, err
}
log.Printf("SrcImage: %v DestImage: %v", srcImage, destImage)
srcRef, err := alltransports.ParseImageName(srcImage)
if err != nil {
return physicalResourceID, data, err
}
destRef, err := alltransports.ParseImageName(destImage)
if err != nil {
return physicalResourceID, data, err
}
srcOpts := NewImageOpts(srcImage)
srcOpts.SetCreds(srcCreds)
srcCtx, err := srcOpts.NewSystemContext()
if err != nil {
return physicalResourceID, data, err
}
destOpts := NewImageOpts(destImage)
destOpts.SetCreds(destCreds)
destCtx, err := destOpts.NewSystemContext()
if err != nil {
return physicalResourceID, data, err
}
ctx, cancel := newTimeoutContext()
defer cancel()
policyContext, err := newPolicyContext()
if err != nil {
return physicalResourceID, data, err
}
defer policyContext.Destroy()
_, err = copy.Image(ctx, policyContext, destRef, srcRef, ©.Options{
ReportWriter: os.Stdout,
DestinationCtx: destCtx,
SourceCtx: srcCtx,
})
if err != nil {
// log.Printf("Copy image failed: %v", err.Error())
// return physicalResourceID, data, nil
return physicalResourceID, data, fmt.Errorf("copy image failed: %s", err.Error())
}
}
return physicalResourceID, data, nil
}