func()

in substrate/pkg/controller/substrate/infrastructure/internetgateway.go [34:61]


func (i *InternetGateway) Create(ctx context.Context, substrate *v1alpha1.Substrate) (reconcile.Result, error) {
	if substrate.Status.VPCID == nil || substrate.Status.PublicRouteTableID == nil {
		return reconcile.Result{Requeue: true}, nil
	}
	internetGateway, err := i.ensure(ctx, substrate)
	if err != nil {
		return reconcile.Result{}, err
	}
	if _, err := i.EC2.AttachInternetGatewayWithContext(ctx, &ec2.AttachInternetGatewayInput{InternetGatewayId: internetGateway.InternetGatewayId, VpcId: substrate.Status.VPCID}); err != nil {
		if err.(awserr.Error).Code() == "Resource.AlreadyAssociated" {
			logging.FromContext(ctx).Infof("Found internet gateway attachment %s to %s", aws.StringValue(internetGateway.InternetGatewayId), aws.StringValue(substrate.Status.VPCID))
		} else {
			return reconcile.Result{}, fmt.Errorf("attaching internet gateway, %w", err)
		}
	} else {
		logging.FromContext(ctx).Infof("Created internet gateway attachment %s to %s", aws.StringValue(internetGateway.InternetGatewayId), aws.StringValue(substrate.Status.VPCID))
	}
	if _, err := i.EC2.CreateRouteWithContext(ctx, &ec2.CreateRouteInput{
		RouteTableId:         substrate.Status.PublicRouteTableID,
		DestinationCidrBlock: aws.String("0.0.0.0/0"),
		GatewayId:            internetGateway.InternetGatewayId,
	}); err != nil {
		return reconcile.Result{}, fmt.Errorf("creating route for internet gateway, %w", err)
	} else {
		logging.FromContext(ctx).Infof("Ensured route for internet gateway %s", aws.StringValue(internetGateway.InternetGatewayId))
	}
	return reconcile.Result{}, nil
}