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
}