func (c *Cluster) Info() (*ClusterInfo, error) { resources := make([]cloudformation.StackResourceSummary, 0) req := cloudformation.ListStackResourcesInput{ StackName: c.clusterName, } for { resp, err := c.svc.ListStackResources(&req) if err != nil { return nil, err } for _, s := range resp.StackResourceSummaries { resources = append(resources, *s) } req.NextToken = resp.NextToken if aws.StringValue(req.NextToken) == "" { break } } var info ClusterInfo for _, r := range resources { switch aws.StringValue(r.LogicalResourceId) { case "EIPController": if r.PhysicalResourceId != nil { info.ControllerIP = *r.PhysicalResourceId } else { return nil, fmt.Errorf("unable to get public IP of controller instance") } } } return &info, nil }
func getStackResources(svc *cloudformation.CloudFormation, stackID string) ([]cloudformation.StackResourceSummary, error) { resources := make([]cloudformation.StackResourceSummary, 0) req := cloudformation.ListStackResourcesInput{ StackName: aws.String(stackID), } for { resp, err := svc.ListStackResources(&req) if err != nil { return nil, err } for _, s := range resp.StackResourceSummaries { resources = append(resources, *s) } req.NextToken = resp.NextToken if aws.StringValue(req.NextToken) == "" { break } } return resources, nil }