func()

in pkg/controller/ingress/ingress_controller.go [620:669]


func (r *ReconcileIngress) create(instance *extensionsv1beta1.Ingress) (*extensionsv1beta1.Ingress, error) {
	r.log.Info("creating reverse proxy")
	svc, err := r.updateReverseProxy(instance)
	if err != nil {
		r.log.Error("error creating proxy resources", zap.Error(err))
		return nil, err
	}

	// Fetch worker node networking info (grabs all nodes for now)
	network, err := r.fetchNetworkingInfo(instance)
	if err != nil {
		r.log.Error("unable to fetch networking info", zap.Error(err))
		return nil, err
	}

	cfnTemplate := cfn.BuildApiGatewayTemplateFromIngressRule(&cfn.TemplateConfig{
		Rule:             instance.Spec.Rules[0],
		Network:          network,
		NodePort:         int(svc.Spec.Ports[0].NodePort),
		Arns:             getArns(instance),
		StageName:        getStageName(instance),
		CustomDomainName: getCustomDomainName(instance),
		CertificateArn:   getCertificateArn(instance),
	})

	b, err := cfnTemplate.YAML()
	if err != nil {
		return nil, err
	}

	r.log.Info("creating cloudformation stack")
	if _, err := r.cfnSvc.CreateStack(&cloudformation.CreateStackInput{
		TemplateBody: aws.String(string(b)),
		StackName:    aws.String(instance.GetObjectMeta().GetName()),
		Capabilities: aws.StringSlice([]string{"CAPABILITY_IAM"}),
		Tags: []*cloudformation.Tag{
			{
				Key:   aws.String("managedBy"),
				Value: aws.String("amazon-apigateway-ingress-controller"),
			},
		},
	}); err != nil {
		return nil, err
	}

	r.log.Info("cloudformation stack creating, setting finalizers", zap.String("StackName", instance.ObjectMeta.Name))
	instance.SetFinalizers(finalizers.AddFinalizer(instance, FinalizerCFNStack))

	return instance, nil
}