// NewBackendPool returns a new backend pool. // - cloud: implements BackendServices and syncs backends with a cloud provider // - healthChecker: is capable of producing health checks for backends. // - nodePool: implements NodePool, used to create/delete new instance groups. // - namer: procudes names for backends. // - ignorePorts: is a set of ports to avoid syncing/GCing. // - resyncWithCloud: if true, periodically syncs with cloud resources. func NewBackendPool( cloud BackendServices, healthChecker healthchecks.HealthChecker, nodePool instances.NodePool, namer *utils.Namer, ignorePorts []int64, resyncWithCloud bool) *Backends { ignored := []string{} for _, p := range ignorePorts { ignored = append(ignored, portKey(p)) } backendPool := &Backends{ cloud: cloud, nodePool: nodePool, healthChecker: healthChecker, namer: namer, ignoredPorts: sets.NewString(ignored...), } if !resyncWithCloud { backendPool.snapshotter = storage.NewInMemoryPool() return backendPool } backendPool.snapshotter = storage.NewCloudListingPool( func(i interface{}) (string, error) { bs := i.(*compute.BackendService) if !namer.NameBelongsToCluster(bs.Name) { return "", fmt.Errorf("Unrecognized name %v", bs.Name) } port, err := namer.BePort(bs.Name) if err != nil { return "", err } return port, nil }, backendPool, 30*time.Second, ) return backendPool }
// NewNodePool creates a new node pool. // - cloud: implements InstanceGroups, used to sync Kubernetes nodes with // members of the cloud InstanceGroup. func NewNodePool(cloud InstanceGroups) NodePool { return &Instances{cloud, storage.NewInMemoryPool(), nil} }