github.com/zhizhiboom/nomad@v0.8.5-0.20180907175415-f28fd3a1a056/command/namespace.go (about)

     1  package command
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/hashicorp/nomad/api/contexts"
     7  	"github.com/mitchellh/cli"
     8  	"github.com/posener/complete"
     9  )
    10  
    11  type NamespaceCommand struct {
    12  	Meta
    13  }
    14  
    15  func (f *NamespaceCommand) Help() string {
    16  	helpText := `
    17  Usage: nomad namespace <subcommand> [options] [args]
    18  
    19    This command groups subcommands for interacting with namespaces. Namespaces
    20    allow jobs and their associated objects to be segmented from each other and
    21    other users of the cluster. For a full guide on namespaces see:
    22    https://www.nomadproject.io/guides/namespaces.html
    23  
    24    Create or update a namespace:
    25  
    26        $ nomad namespace apply <name> -description "My new namespace"
    27  
    28    List namespaces:
    29  
    30        $ nomad namespace list
    31  
    32    View the status of a namespace:
    33  
    34        $ nomad namespace status <name>
    35  
    36    Please see the individual subcommand help for detailed usage information.
    37  `
    38  
    39  	return strings.TrimSpace(helpText)
    40  }
    41  
    42  func (f *NamespaceCommand) Synopsis() string {
    43  	return "Interact with namespaces"
    44  }
    45  
    46  func (f *NamespaceCommand) Name() string { return "namespace" }
    47  
    48  func (f *NamespaceCommand) Run(args []string) int {
    49  	return cli.RunResultHelp
    50  }
    51  
    52  // NamespacePredictor returns a namespace predictor that can optionally filter
    53  // specific namespaces
    54  func NamespacePredictor(factory ApiClientFactory, filter map[string]struct{}) complete.Predictor {
    55  	return complete.PredictFunc(func(a complete.Args) []string {
    56  		client, err := factory()
    57  		if err != nil {
    58  			return nil
    59  		}
    60  
    61  		resp, _, err := client.Search().PrefixSearch(a.Last, contexts.Namespaces, nil)
    62  		if err != nil {
    63  			return []string{}
    64  		}
    65  
    66  		// Filter the returned namespaces. We assign the unfiltered slice to the
    67  		// filtered slice but with no elements. This causes the slices to share
    68  		// the underlying array and makes the filtering allocation free.
    69  		unfiltered := resp.Matches[contexts.Namespaces]
    70  		filtered := unfiltered[:0]
    71  		for _, ns := range unfiltered {
    72  			if _, ok := filter[ns]; !ok {
    73  				filtered = append(filtered, ns)
    74  			}
    75  		}
    76  
    77  		return filtered
    78  	})
    79  }