本文整理汇总了Golang中github.com/hashicorp/consul-template/dependency.Set.Add方法的典型用法代码示例。如果您正苦于以下问题:Golang Set.Add方法的具体用法?Golang Set.Add怎么用?Golang Set.Add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/hashicorp/consul-template/dependency.Set
的用法示例。
在下文中一共展示了Set.Add方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: treeFunc
// treeFunc returns or accumulates keyPrefix dependencies.
func treeFunc(b *Brain, used, missing *dep.Set) func(string) ([]*dep.KeyPair, error) {
return func(s string) ([]*dep.KeyPair, error) {
result := []*dep.KeyPair{}
if len(s) == 0 {
return result, nil
}
d, err := dep.NewKVListQuery(s)
if err != nil {
return result, err
}
used.Add(d)
// Only return non-empty top-level keys
if value, ok := b.Recall(d); ok {
for _, pair := range value.([]*dep.KeyPair) {
parts := strings.Split(pair.Key, "/")
if parts[len(parts)-1] != "" {
result = append(result, pair)
}
}
return result, nil
}
missing.Add(d)
return result, nil
}
}
示例2: envFunc
// envFunc returns a function which checks the value of an environment variable.
// Invokers can specify their own environment, which takes precedences over any
// real environment variables
func envFunc(b *Brain, used, missing *dep.Set, overrides []string) func(string) (string, error) {
return func(s string) (string, error) {
var result string
d, err := dep.NewEnvQuery(s)
if err != nil {
return result, err
}
used.Add(d)
// Overrides lookup - we have to do this after adding the dependency,
// otherwise dedupe sharing won't work.
for _, e := range overrides {
split := strings.SplitN(e, "=", 2)
k, v := split[0], split[1]
if k == s {
return v, nil
}
}
if value, ok := b.Recall(d); ok {
return value.(string), nil
}
missing.Add(d)
return result, nil
}
}
示例3: keyWithDefaultFunc
// keyWithDefaultFunc returns or accumulates key dependencies that have a
// default value.
func keyWithDefaultFunc(b *Brain, used, missing *dep.Set) func(string, string) (string, error) {
return func(s, def string) (string, error) {
if len(s) == 0 {
return def, nil
}
d, err := dep.NewKVGetQuery(s)
if err != nil {
return "", err
}
used.Add(d)
if value, ok := b.Recall(d); ok {
if value == nil || value.(string) == "" {
return def, nil
}
return value.(string), nil
}
missing.Add(d)
return def, nil
}
}
示例4: secretsFunc
// secretsFunc returns or accumulates a list of secret dependencies from Vault.
func secretsFunc(b *Brain, used, missing *dep.Set) func(string) ([]string, error) {
return func(s string) ([]string, error) {
result := []string{}
if len(s) == 0 {
return result, nil
}
d, err := dep.NewVaultListQuery(s)
if err != nil {
return result, nil
}
used.Add(d)
if value, ok := b.Recall(d); ok {
result = value.([]string)
return result, nil
}
missing.Add(d)
return result, nil
}
}
示例5: keyFunc
// keyFunc returns or accumulates key dependencies.
func keyFunc(b *Brain, used, missing *dep.Set) func(string) (string, error) {
return func(s string) (string, error) {
if len(s) == 0 {
return "", nil
}
d, err := dep.NewKVGetQuery(s)
if err != nil {
return "", err
}
d.EnableBlocking()
used.Add(d)
if value, ok := b.Recall(d); ok {
if value == nil {
return "", nil
}
return value.(string), nil
}
missing.Add(d)
return "", nil
}
}
示例6: fileFunc
// fileFunc returns or accumulates file dependencies.
func fileFunc(b *Brain, used, missing *dep.Set) func(string) (string, error) {
return func(s string) (string, error) {
if len(s) == 0 {
return "", nil
}
d, err := dep.NewFileQuery(s)
if err != nil {
return "", err
}
used.Add(d)
if value, ok := b.Recall(d); ok {
if value == nil {
return "", nil
}
return value.(string), nil
}
missing.Add(d)
return "", nil
}
}
示例7: nodeFunc
// nodeFunc returns or accumulates catalog node dependency.
func nodeFunc(b *Brain, used, missing *dep.Set) func(...string) (*dep.CatalogNode, error) {
return func(s ...string) (*dep.CatalogNode, error) {
d, err := dep.NewCatalogNodeQuery(strings.Join(s, ""))
if err != nil {
return nil, err
}
used.Add(d)
if value, ok := b.Recall(d); ok {
return value.(*dep.CatalogNode), nil
}
missing.Add(d)
return nil, nil
}
}
示例8: servicesFunc
// servicesFunc returns or accumulates catalog services dependencies.
func servicesFunc(b *Brain, used, missing *dep.Set) func(...string) ([]*dep.CatalogSnippet, error) {
return func(s ...string) ([]*dep.CatalogSnippet, error) {
result := []*dep.CatalogSnippet{}
d, err := dep.NewCatalogServicesQuery(strings.Join(s, ""))
if err != nil {
return nil, err
}
used.Add(d)
if value, ok := b.Recall(d); ok {
return value.([]*dep.CatalogSnippet), nil
}
missing.Add(d)
return result, nil
}
}
示例9: datacentersFunc
// datacentersFunc returns or accumulates datacenter dependencies.
func datacentersFunc(b *Brain, used, missing *dep.Set) func() ([]string, error) {
return func() ([]string, error) {
result := []string{}
d, err := dep.NewCatalogDatacentersQuery()
if err != nil {
return result, err
}
used.Add(d)
if value, ok := b.Recall(d); ok {
return value.([]string), nil
}
missing.Add(d)
return result, nil
}
}
示例10: keyExistsFunc
// keyExistsFunc returns true if a key exists, false otherwise.
func keyExistsFunc(b *Brain, used, missing *dep.Set) func(string) (bool, error) {
return func(s string) (bool, error) {
if len(s) == 0 {
return false, nil
}
d, err := dep.NewKVGetQuery(s)
if err != nil {
return false, err
}
used.Add(d)
if value, ok := b.Recall(d); ok {
return value != nil, nil
}
missing.Add(d)
return false, nil
}
}
示例11: serviceFunc
// serviceFunc returns or accumulates health service dependencies.
func serviceFunc(b *Brain, used, missing *dep.Set) func(...string) ([]*dep.HealthService, error) {
return func(s ...string) ([]*dep.HealthService, error) {
result := []*dep.HealthService{}
if len(s) == 0 || s[0] == "" {
return result, nil
}
d, err := dep.NewHealthServiceQuery(strings.Join(s, ""))
if err != nil {
return nil, err
}
used.Add(d)
if value, ok := b.Recall(d); ok {
return value.([]*dep.HealthService), nil
}
missing.Add(d)
return result, nil
}
}
示例12: Run
// Run iterates over each template in this Runner and conditionally executes
// the template rendering and command execution.
//
// The template is rendered atomicly. If and only if the template render
// completes successfully, the optional commands will be executed, if given.
// Please note that all templates are rendered **and then** any commands are
// executed.
func (r *Runner) Run() error {
log.Printf("[INFO] (runner) initiating run")
var wouldRenderAny, renderedAny bool
var commands []*config.TemplateConfig
depsMap := make(map[string]dep.Dependency)
for _, tmpl := range r.templates {
log.Printf("[DEBUG] (runner) checking template %s", tmpl.ID())
// Create the event
event := &RenderEvent{
Template: tmpl,
TemplateConfigs: r.templateConfigsFor(tmpl),
}
// Check if we are currently the leader instance
isLeader := true
if r.dedup != nil {
isLeader = r.dedup.IsLeader(tmpl)
}
// If we are in once mode and this template was already rendered, move
// onto the next one. We do not want to re-render the template if we are
// in once mode, and we certainly do not want to re-run any commands.
if r.once {
r.renderEventsLock.RLock()
_, rendered := r.renderEvents[tmpl.ID()]
r.renderEventsLock.RUnlock()
if rendered {
log.Printf("[DEBUG] (runner) once mode and already rendered")
continue
}
}
// Attempt to render the template, returning any missing dependencies and
// the rendered contents. If there are any missing dependencies, the
// contents cannot be rendered or trusted!
result, err := tmpl.Execute(&template.ExecuteInput{
Brain: r.brain,
Env: r.childEnv(),
})
if err != nil {
return errors.Wrap(err, tmpl.Source())
}
// Grab the list of used and missing dependencies.
missing, used := result.Missing, result.Used
// Add the dependency to the list of dependencies for this runner.
for _, d := range used.List() {
// If we've taken over leadership for a template, we may have data
// that is cached, but not have the watcher. We must treat this as
// missing so that we create the watcher and re-run the template.
if isLeader && !r.watcher.Watching(d) {
missing.Add(d)
}
if _, ok := depsMap[d.String()]; !ok {
depsMap[d.String()] = d
}
}
// Diff any missing dependencies the template reported with dependencies
// the watcher is watching.
unwatched := new(dep.Set)
for _, d := range missing.List() {
if !r.watcher.Watching(d) {
unwatched.Add(d)
}
}
// If there are unwatched dependencies, start the watcher and move onto the
// next one.
if l := unwatched.Len(); l > 0 {
log.Printf("[DEBUG] (runner) was not watching %d dependencies", l)
for _, d := range unwatched.List() {
// If we are deduplicating, we must still handle non-sharable
// dependencies, since those will be ignored.
if isLeader || !d.CanShare() {
r.watcher.Add(d)
}
}
continue
}
// If the template is missing data for some dependencies then we are not
// ready to render and need to move on to the next one.
if l := missing.Len(); l > 0 {
log.Printf("[DEBUG] (runner) missing data for %d dependencies", l)
continue
}
// Trigger an update of the de-duplicaiton manager
//.........这里部分代码省略.........