func()

in pkg/controller/ingress/ingress_controller.go [169:213]


func (r *ReconcileIngress) fetchNetworkingInfo(instance *extensionsv1beta1.Ingress) (*network.Network, error) {
	// TODO: We probably want to add some way of specifying which worker nodes we want to use. (security group ingress rules etc...)
	r.log.Info("fetching worker nodes")
	nodes := corev1.NodeList{
		Items: []corev1.Node{},
	}

	if err := r.Client.List(context.TODO(), &client.ListOptions{
		LabelSelector: getNodeSelector(instance),
	}, &nodes); err != nil {
		return nil, err
	}

	if len(nodes.Items) == 0 {
		return nil, fmt.Errorf("no worker nodes found")
	}

	nodeInstanceIds := []string{}
	for _, node := range nodes.Items {
		nodeInstanceIds = append(nodeInstanceIds, node.Spec.ProviderID[strings.LastIndex(node.Spec.ProviderID, "/")+1:])
	}

	r.log.Info("getting vpcID, securityGroups, subnetIds, asgNames for worker nodes")
	vpcIDs, subnetIds, securityGroups, asgNames, err := network.GetNetworkInfoForEC2Instances(r.ec2Svc, r.autoscalingSvc, nodeInstanceIds)
	if err != nil {
		return nil, err
	}

	r.log.Info("describing VPCs", zap.String("VPCs", strings.Join(vpcIDs, ",")))
	describeVPCResponse, err := r.ec2Svc.DescribeVpcs(&ec2.DescribeVpcsInput{
		VpcIds: aws.StringSlice(vpcIDs),
	})

	if err != nil || len(describeVPCResponse.Vpcs) == 0 {
		return nil, fmt.Errorf("unable to find vpc %s", strings.Join(vpcIDs, ", "))
	}

	return &network.Network{
		InstanceIDs:      nodeInstanceIds,
		SecurityGroupIDs: securityGroups,
		SubnetIDs:        subnetIds,
		ASGNames:         asgNames,
		Vpc:              describeVPCResponse.Vpcs[0],
	}, nil
}