本文整理汇总了Golang中github.com/square/p2/pkg/kp.NewConsulStore函数的典型用法代码示例。如果您正苦于以下问题:Golang NewConsulStore函数的具体用法?Golang NewConsulStore怎么用?Golang NewConsulStore使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NewConsulStore函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: VerifyConsulUp
func VerifyConsulUp(timeout string) error {
timeoutDur, err := time.ParseDuration(timeout)
if err != nil {
return err
}
if timeoutDur == 0 {
return nil
}
store := kp.NewConsulStore(kp.Options{
Token: *consulToken, // not actually necessary because this endpoint is unauthenticated
})
consulIsUp := make(chan struct{})
go func() {
for {
time.Sleep(200 * time.Millisecond)
err := store.Ping()
if err == nil {
consulIsUp <- struct{}{}
return
}
}
}()
select {
case <-time.After(timeoutDur):
return util.Errorf("Consul did not start or was not available after %v", timeoutDur)
case <-consulIsUp:
return nil
}
}
开发者ID:robertabbott,项目名称:p2,代码行数:30,代码来源:bootstrap.go
示例2: MonitorPodHealth
// MonitorPodHealth is meant to be a long running go routine.
// MonitorPodHealth reads from a consul store to determine which
// services should be running on the host. MonitorPodHealth
// runs a CheckHealth routine to monitor the health of each
// service and kills routines for services that should no
// longer be running.
func MonitorPodHealth(config *preparer.PreparerConfig, logger *logging.Logger, shutdownCh chan struct{}) {
var store kp.Store
consul := config.ConsulAddress
node := config.NodeName
pods := []PodWatch{}
authtoken, err := preparer.LoadConsulToken(config.ConsulTokenPath)
if err != nil {
logger.WithField("inner_err", err).Warningln("Could not load consul token")
}
store = kp.NewConsulStore(kp.Options{
Address: consul,
HTTPS: false,
Token: authtoken,
Client: net.NewHeaderClient(nil, http.DefaultTransport),
})
pods = updateHealthMonitors(store, pods, node, logger)
for {
select {
case <-time.After(POLL_KV_FOR_PODS):
// check if pods have been added or removed
// starts monitor routine for new pods
// kills monitor routine for removed pods
pods = updateHealthMonitors(store, pods, node, logger)
case <-shutdownCh:
return
}
}
}
开发者ID:robertabbott,项目名称:p2,代码行数:36,代码来源:health.go
示例3: VerifyReality
func VerifyReality(waitTime time.Duration, consulID, agentID string) error {
quit := make(chan struct{})
defer close(quit)
store := kp.NewConsulStore(kp.Options{
Token: *consulToken,
})
hostname, _ := os.Hostname()
waitChan := time.After(waitTime)
for {
select {
case <-waitChan:
return util.Errorf("Consul and/or Preparer weren't in the reality store within %s", waitTime)
case <-time.After(100 * time.Millisecond):
hasConsul := false
hasPreparer := false
results, _, err := store.ListPods(kp.RealityPath(hostname))
if err != nil {
log.Printf("Error looking for pods: %s\n", err)
continue
}
for _, res := range results {
if res.Manifest.ID() == consulID {
hasConsul = true
} else if res.Manifest.ID() == agentID {
hasPreparer = true
}
}
if hasConsul && hasPreparer {
return nil
}
}
}
}
开发者ID:robertabbott,项目名称:p2,代码行数:33,代码来源:bootstrap.go
示例4: main
func main() {
quitCh := make(chan struct{})
_, consulOpts, labeler := flags.ParseWithConsulOptions()
client := kp.NewConsulClient(consulOpts)
logger := logging.NewLogger(logrus.Fields{})
dsStore := dsstore.NewConsul(client, 3, &logger)
kpStore := kp.NewConsulStore(client)
healthChecker := checker.NewConsulHealthChecker(client)
sessions := make(chan string)
go consulutil.SessionManager(api.SessionEntry{
Name: SessionName(),
LockDelay: 5 * time.Second,
Behavior: api.SessionBehaviorDelete,
TTL: "15s",
}, client, sessions, quitCh, logger)
dsf := ds_farm.NewFarm(kpStore, dsStore, labeler, labels.NewConsulApplicator(client, 0), sessions, logger, nil, &healthChecker, 1*time.Second, *useCachePodMatches)
go func() {
// clear lock immediately on ctrl-C
signals := make(chan os.Signal, 1)
signal.Notify(signals, os.Interrupt)
<-signals
close(quitCh)
}()
dsf.Start(quitCh)
}
开发者ID:petertseng,项目名称:p2,代码行数:30,代码来源:main.go
示例5: main
func main() {
kingpin.Version(version.VERSION)
_, opts := flags.ParseWithConsulOptions()
client := kp.NewConsulClient(opts)
store := kp.NewConsulStore(client)
if *nodeName == "" {
hostname, err := os.Hostname()
if err != nil {
log.Fatalf("Could not get the hostname to do scheduling: %s", err)
}
*nodeName = hostname
}
if len(*manifests) == 0 {
kingpin.Usage()
log.Fatalln("No manifests given")
}
for _, manifestPath := range *manifests {
manifest, err := pods.ManifestFromPath(manifestPath)
if err != nil {
log.Fatalf("Could not read manifest at %s: %s\n", manifestPath, err)
}
path := kp.IntentPath(*nodeName, manifest.ID())
if *hookGlobal {
path = kp.HookPath(manifest.ID())
}
duration, err := store.SetPod(path, manifest)
if err != nil {
log.Fatalf("Could not write manifest %s to intent store: %s\n", manifest.ID(), err)
}
log.Printf("Scheduling %s took %s\n", manifest.ID(), duration)
}
}
开发者ID:tomzhang,项目名称:p2,代码行数:35,代码来源:main.go
示例6: NewConsulHealthChecker
func NewConsulHealthChecker(client consulutil.ConsulClient) ConsulHealthChecker {
return consulHealthChecker{
client: client,
kv: client.KV(),
consulStore: kp.NewConsulStore(client),
}
}
开发者ID:drcapulet,项目名称:p2,代码行数:7,代码来源:checker.go
示例7: verifyHealthChecks
func verifyHealthChecks(config *preparer.PreparerConfig, services []string) error {
opts := kp.Options{
Address: config.ConsulAddress,
HTTPS: false,
}
store := kp.NewConsulStore(opts)
time.Sleep(5 * time.Second)
// check consul for health information for each app
name, err := os.Hostname()
if err != nil {
return err
}
for _, sv := range services {
res, err := store.GetHealth(sv, name)
if err != nil {
return err
} else if (res == kp.WatchResult{}) {
err = fmt.Errorf("No results for %s", sv)
return err
} else {
fmt.Println(res)
}
}
// if it reaches here it means health checks
// are being written to the KV store properly
return nil
}
开发者ID:robertabbott,项目名称:p2,代码行数:29,代码来源:check.go
示例8: configureStorage
func (rm *P2RM) configureStorage(client consulutil.ConsulClient, labeler labels.ApplicatorWithoutWatches) {
rm.Client = client
rm.Store = kp.NewConsulStore(client)
rm.RCStore = rcstore.NewConsul(client, labeler, 5)
rm.Labeler = labeler
rm.PodStore = podstore.NewConsul(client.KV())
}
开发者ID:petertseng,项目名称:p2,代码行数:7,代码来源:rm.go
示例9: GetStore
// GetStore constructs a key-value store from the given configuration.
func (c *PreparerConfig) GetStore() (kp.Store, error) {
opts, err := c.getOpts()
if err != nil {
return nil, err
}
client := kp.NewConsulClient(opts)
return kp.NewConsulStore(client), nil
}
开发者ID:drcapulet,项目名称:p2,代码行数:9,代码来源:setup.go
示例10: MonitorPodHealth
// MonitorPodHealth is meant to be a long running go routine.
// MonitorPodHealth reads from a consul store to determine which
// services should be running on the host. MonitorPodHealth
// runs a CheckHealth routine to monitor the health of each
// service and kills routines for services that should no
// longer be running.
func MonitorPodHealth(config *preparer.PreparerConfig, logger *logging.Logger, shutdownCh chan struct{}) {
client, err := config.GetConsulClient()
if err != nil {
// A bad config should have already produced a nice, user-friendly error message.
logger.WithError(err).Fatalln("error creating health monitor KV client")
}
store := kp.NewConsulStore(client)
healthManager := store.NewHealthManager(config.NodeName, *logger)
node := config.NodeName
pods := []PodWatch{}
watchQuitCh := make(chan struct{})
watchErrCh := make(chan error)
watchPodCh := make(chan []kp.ManifestResult)
go store.WatchPods(
kp.REALITY_TREE,
node,
watchQuitCh,
watchErrCh,
watchPodCh,
)
// if GetClient fails it means the certfile/keyfile/cafile were
// invalid or did not exist. It makes sense to throw a fatal error
secureClient, err := config.GetClient(time.Duration(*HEALTHCHECK_TIMEOUT) * time.Second)
if err != nil {
logger.WithError(err).Fatalln("failed to get http client for this preparer")
}
insecureClient, err := config.GetInsecureClient(time.Duration(*HEALTHCHECK_TIMEOUT) * time.Second)
if err != nil {
logger.WithError(err).Fatalln("failed to get http client for this preparer")
}
for {
select {
case results := <-watchPodCh:
// check if pods have been added or removed
// starts monitor routine for new pods
// kills monitor routine for removed pods
pods = updatePods(healthManager, secureClient, insecureClient, pods, results, node, logger)
case err := <-watchErrCh:
logger.WithError(err).Errorln("there was an error reading reality manifests for health monitor")
case <-shutdownCh:
for _, pod := range pods {
pod.shutdownCh <- true
}
close(watchQuitCh)
healthManager.Close()
return
}
}
}
开发者ID:petertseng,项目名称:p2,代码行数:60,代码来源:health.go
示例11: NewP2RM
// NewP2RM is a constructor for the P2RM type. It will generate the necessary
// storage types based on its api.Client argument
func NewP2RM(client consulutil.ConsulClient, podName string, nodeName types.NodeName) *P2RM {
rm := &P2RM{}
rm.Client = client
rm.Store = kp.NewConsulStore(client)
rm.RCStore = rcstore.NewConsul(client, 5)
rm.Labeler = labels.NewConsulApplicator(client, 3)
rm.LabelID = path.Join(nodeName.String(), podName)
rm.PodName = podName
rm.NodeName = nodeName
return rm
}
开发者ID:rudle,项目名称:p2,代码行数:14,代码来源:main.go
示例12: NewConsul
func NewConsul(c consulutil.ConsulClient, labeler rollLabeler, logger *logging.Logger) Store {
if logger == nil {
logger = &logging.DefaultLogger
}
return consulStore{
kv: c.KV(),
rcstore: rcstore.NewConsul(c, labeler, 3),
logger: *logger,
labeler: labeler,
store: kp.NewConsulStore(c),
}
}
开发者ID:petertseng,项目名称:p2,代码行数:12,代码来源:consul_store.go
示例13: GetStore
// GetStore constructs a key-value store from the given configuration.
func (c *PreparerConfig) GetStore() (kp.Store, error) {
c.mux.Lock()
defer c.mux.Unlock()
if c.store != nil {
return c.store, nil
}
opts, err := c.getOpts()
if err != nil {
return nil, err
}
store := kp.NewConsulStore(kp.NewConsulClient(opts))
c.store = store
return store, nil
}
开发者ID:rudle,项目名称:p2,代码行数:15,代码来源:setup.go
示例14: main
func main() {
kingpin.Version(version.VERSION)
_, opts := flags.ParseWithConsulOptions()
client := kp.NewConsulClient(opts)
store := kp.NewConsulStore(client)
if *nodeName == "" {
hostname, err := os.Hostname()
if err != nil {
log.Fatalf("Could not get the hostname to do scheduling: %s", err)
}
*nodeName = hostname
}
if *podClusters {
watchPodClusters(client)
} else {
podPrefix := kp.INTENT_TREE
if *watchReality {
podPrefix = kp.REALITY_TREE
} else if *hooks {
podPrefix = kp.HOOK_TREE
}
log.Printf("Watching manifests at %s/%s/\n", podPrefix, *nodeName)
quit := make(chan struct{})
errChan := make(chan error)
podCh := make(chan []kp.ManifestResult)
go store.WatchPods(podPrefix, types.NodeName(*nodeName), quit, errChan, podCh)
for {
select {
case results := <-podCh:
if len(results) == 0 {
fmt.Println(fmt.Sprintf("No manifests exist for %s under %s (they may have been deleted)", *nodeName, podPrefix))
} else {
for _, result := range results {
if err := result.Manifest.Write(os.Stdout); err != nil {
log.Fatalf("write error: %v", err)
}
}
}
case err := <-errChan:
log.Fatalf("Error occurred while listening to pods: %s", err)
}
}
}
}
开发者ID:rudle,项目名称:p2,代码行数:46,代码来源:main.go
示例15: main
func main() {
kingpin.Version(version.VERSION)
kingpin.Parse()
store := kp.NewConsulStore(kp.Options{
Address: *consulAddress,
Token: *consulToken,
Client: net.NewHeaderClient(*headers, http.DefaultTransport),
HTTPS: *https,
})
if *nodeName == "" {
hostname, err := os.Hostname()
if err != nil {
log.Fatalf("Could not get the hostname to do scheduling: %s", err)
}
*nodeName = hostname
}
path := kp.IntentPath(*nodeName)
if *watchReality {
path = kp.RealityPath(*nodeName)
} else if *hookTypeName != "" {
hookType, err := hooks.AsHookType(*hookTypeName)
if err != nil {
log.Fatalln(err)
}
path = kp.HookPath(hookType, *nodeName)
}
log.Printf("Watching manifests at %s\n", path)
quit := make(chan struct{})
errChan := make(chan error)
podCh := make(chan kp.ManifestResult)
go store.WatchPods(path, quit, errChan, podCh)
for {
select {
case result := <-podCh:
fmt.Println("")
result.Manifest.Write(os.Stdout)
case err := <-errChan:
log.Fatalf("Error occurred while listening to pods: %s", err)
}
}
}
开发者ID:robertabbott,项目名称:p2,代码行数:45,代码来源:main.go
示例16: verifyHealthChecks
func verifyHealthChecks(config *preparer.PreparerConfig, services []string) error {
client, err := config.GetConsulClient()
if err != nil {
return err
}
store := kp.NewConsulStore(client)
time.Sleep(30 * time.Second)
// check consul for health information for each app
name, err := os.Hostname()
if err != nil {
return err
}
node := types.NodeName(name)
for _, sv := range services {
res, err := store.GetHealth(sv, node)
if err != nil {
return err
} else if (res == kp.WatchResult{}) {
return fmt.Errorf("No results for %s: \n\n %s", sv, targetLogs())
} else if res.Status != string(health.Passing) {
return fmt.Errorf("%s did not pass health check: \n\n %s", sv, targetLogs())
} else {
fmt.Println(res)
}
}
for _, sv := range services {
res, err := store.GetServiceHealth(sv)
getres, _ := store.GetHealth(sv, node)
if err != nil {
return err
}
val := res[kp.HealthPath(sv, node)]
if getres.Id != val.Id || getres.Service != val.Service || getres.Status != val.Status {
return fmt.Errorf("GetServiceHealth failed %+v: \n\n%s", res, targetLogs())
}
}
// if it reaches here it means health checks
// are being written to the KV store properly
return nil
}
开发者ID:petertseng,项目名称:p2,代码行数:44,代码来源:check.go
示例17: scheduleForThisHost
func scheduleForThisHost(manifest manifest.Manifest, alsoReality bool) error {
store := kp.NewConsulStore(kp.NewConsulClient(kp.Options{
Token: *consulToken,
}))
hostname, err := os.Hostname()
if err != nil {
return err
}
_, err = store.SetPod(kp.INTENT_TREE, types.NodeName(hostname), manifest)
if err != nil {
return err
}
if alsoReality {
_, err = store.SetPod(kp.REALITY_TREE, types.NodeName(hostname), manifest)
return err
}
return nil
}
开发者ID:petertseng,项目名称:p2,代码行数:19,代码来源:bootstrap.go
示例18: ScheduleForThisHost
func ScheduleForThisHost(manifest pods.Manifest, alsoReality bool) error {
store := kp.NewConsulStore(kp.NewConsulClient(kp.Options{
Token: *consulToken,
}))
hostname, err := os.Hostname()
if err != nil {
return err
}
_, err = store.SetPod(kp.IntentPath(hostname, manifest.ID()), manifest)
if err != nil {
return err
}
if alsoReality {
_, err = store.SetPod(kp.RealityPath(hostname, manifest.ID()), manifest)
return err
}
return nil
}
开发者ID:tomzhang,项目名称:p2,代码行数:19,代码来源:bootstrap.go
示例19: makeStore
func makeStore(t *testing.T) (kp.Store, *testutil.TestServer) {
if testing.Short() {
t.Skip("skipping test dependendent on consul because of short mode")
}
// testutil.NewTestServerConfig will skip the test if "consul" isn't in the system path.
// We'd rather the test fail.
defer func() {
if t.Skipped() {
t.Fatalf("test skipped by testutil package")
}
}()
// Create server
server := testutil.NewTestServerConfig(t, func(c *testutil.TestServerConfig) {
// consul output in test output is noisy
c.Stdout = ioutil.Discard
c.Stderr = ioutil.Discard
// If ports are left to their defaults, this test conflicts
// with the test consul servers in pkg/kp
var offset uint64
idx := int(atomic.AddUint64(&offset, 1))
c.Ports = &testutil.TestPortConfig{
DNS: 26000 + idx,
HTTP: 27000 + idx,
RPC: 28000 + idx,
SerfLan: 29000 + idx,
SerfWan: 30000 + idx,
Server: 31000 + idx,
}
})
client := kp.NewConsulClient(kp.Options{
Address: server.HTTPAddr,
})
store := kp.NewConsulStore(client)
return store, server
}
开发者ID:tomzhang,项目名称:p2,代码行数:39,代码来源:common_test_setup.go
示例20: main
func main() {
// CLI takes a hostname, a token and recursively deletes all pods
// in the reality tree. This is useful if any pods on a host have
// been manually altered in some way and need to be restored to
// a known state.
kingpin.Version(version.VERSION)
_, opts := flags.ParseWithConsulOptions()
client := kp.NewConsulClient(opts)
store := kp.NewConsulStore(client)
pods, _, err := store.ListPods(kp.REALITY_TREE, types.NodeName(*nodeName))
if err != nil {
log.Fatalf("Could not list pods for node %v: %v", *nodeName, err)
}
for _, pod := range pods {
log.Printf("Deleting %v from reality\n", pod.Manifest.ID())
_, err := store.DeletePod(kp.REALITY_TREE, types.NodeName(*nodeName), pod.Manifest.ID())
if err != nil {
log.Fatalf("Could not remove %v from pod reality tree: %v", err)
}
}
}
开发者ID:drcapulet,项目名称:p2,代码行数:23,代码来源:main.go
注:本文中的github.com/square/p2/pkg/kp.NewConsulStore函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论