Code Monkey home page Code Monkey logo

consul-cli's Introduction

image

Overview

Join the chat at https://gitter.im/CiscoCloud/mantl Build Status Stories in Progress

Mantl is a modern, batteries included platform for rapidly deploying globally distributed services

Table of Contents

Features

Core Components

  • Consul for service discovery
  • Vault for managing secrets
  • Mesos cluster manager for efficient resource isolation and sharing across distributed services
  • Marathon for cluster management of long running containerized services
  • Kubernetes for managing, organizing, and scheduling containers
  • Terraform deployment to multiple cloud providers
  • Docker container runtime
  • Traefik for proxying external traffic
  • mesos-consul populating Consul service discovery with Mesos tasks
  • Mantl API easily install supported Mesos frameworks on Mantl
  • Mantl UI a beautiful administrative interface to Mantl

Addons

  • ELK Stack for log collection and analysis
  • GlusterFS for container volume storage
  • Docker Swarm for clustering Docker daemons between networked hosts
  • etcd, distributed key-value store for Calico
  • Calico, a new kind of virtual network
  • collectd for metrics collection
  • Chronos a distributed task scheduler
  • Kong for managing APIs

See the addons/ directory for the most up-to-date information.

Goals

  • Security
  • High availability
  • Rapid immutable deployment (with Terraform + Packer)

Architecture

The base platform contains control nodes that manage the cluster and any number of agent nodes. Containers automatically register themselves into DNS so that other services can locate them.

mantl-diagram

Control Nodes

The control nodes manage a single datacenter. Each control node runs Consul for service discovery, Mesos and Kubernetes leaders for resource scheduling and Mesos frameworks like Marathon.

The Consul Ansible role will automatically bootstrap and join multiple Consul nodes. The Mesos role will provision highly-availabile Mesos and ZooKeeper environments when more than one node is provisioned.

Agent Nodes

Agent nodes launch containers and other Mesos- or Kubernetes-based workloads.

Edge Nodes

Edge nodes are responsible for proxying external traffic into services running in the cluster.

Getting Started

All development is done on the master branch. Tested, stable versions are identified via git tags. To get started, you can clone or fork this repo:

git clone https://github.com/mantl/mantl.git

To use a stable version, use git tag to list the stable versions:

git tag
0.1.0
0.2.0
...
1.2.0


git checkout 1.2.0

A Vagrantfile is provided that provisions everything on a few VMs. To run, first ensure that your system has at least 2GB of RAM free, then just:

vagrant up

Note:

  • There is no support for Windows at this time, however support is planned.
  • Use the latest version of Vagrant for best results. Version 1.8 is required.
  • There is no support for the VMware Fusion Vagrant provider; hence your provider is set to Virtualbox in your Vagrantfile.

Software Requirements

The only requirements for running Mantl are working installations of Terraform and Ansible (or Vagrant, if you're deploying to VMs). See the "Development" sections for requirements for developing Mantl.

Deploying on multiple servers

Please refer to the Getting Started Guide, which covers cloud deployments.

Documentation

All documentation is located at http://docs.mantl.io.

To build the documentation locally, run:

sudo pip install -r requirements.txt
cd docs
make html

Roadmap

Mesos Frameworks

  • Marathon
  • Kafka
  • Riak
  • Cassandra
  • Elasticsearch
  • HDFS
  • Spark
  • Storm
  • Chronos
  • MemSQL

Note: The most up-to-date list of Mesos frameworks that are known to work with Mantl is always in the mantl-universe repo.

Security

  • Manage Linux user accounts
  • Authentication and authorization for Consul
  • Authentication and authorization for Mesos
  • Authentication and authorization for Marathon
  • Application load balancer (based on Traefik)
  • Application dynamic firewalls (using consul template)

Operations

  • Logging (with the ELK stack)
  • Metrics (with the collectd addon)
  • In-service upgrade with rollback
  • Autoscaling of worker nodes
  • Self maintaining system (log rotation, etc)
  • Self healing system (automatic failed instance replacement, etc)

Supported Platforms

Community Supported Platforms

Please see milestones for more details on the roadmap.

Development

If you're interested in contributing to the project, install Terraform and the Python modules listed in requirements.txt and follow the Getting Started instructions. To build the docs, enter the docs directory and run make html. The docs will be output to _build/html.

Good issues to start with are marked with the low hanging fruit tag.

To keep your fork up to date.

1. Clone your fork:

git clone [email protected]:YOUR-USERNAME/mantl.git

2. Add remote from original repository in your forked repository:

cd into/cloned/fork-repo
git remote add upstream git://github.com/mantl/mantl.git
git fetch upstream

3. Updating your fork from original repo to keep up with their changes:

git pull upstream master

Getting Support

If you encounter any issues, please open a Github Issue against the project. We review issues daily.

We also have a gitter chat room. Drop by and ask any questions you might have. We'd be happy to walk you through your first deployment.

Cisco Intercloud Services provides support for OpenStack based deployments of Mantl.

License

Copyright © 2015 Cisco Systems, Inc.

Licensed under the Apache License, Version 2.0 (the "License").

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

consul-cli's People

Contributors

agy avatar akissa avatar chrisaubuchon avatar ddunkin avatar hotlinkcorp avatar jmalloc avatar msabramo avatar roffer avatar sboily avatar sbryant avatar shamil avatar stephane-klein avatar theaxiom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

consul-cli's Issues

consul-cli kv delete failed

hi guys,

when DELETE kv with consul-cli kv delete test --ssl-verify=false --consul="10.225.3.73:8500" --token=fbf09035-fbb9-c552-00ed-536db3f44d43, got an error Error: Unexpected response code: 302.

Error: Unexpected response code: 302 (<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.6.2</center>
</body>
</html>
)
Usage:
  consul-cli kv delete <path> [flags]

Flags:
      --datacenter="": Consul data center
      --modifyindex="": Perform a Check-and-Set delete
      --recurse[=false]: Perform a recursive delete

Global Flags:
      --auth=: The HTTP basic authentication username (and optional password) separated by a colon
      --consul="127.0.0.1:8500": Consul address:port
      --ssl[=false]: Use HTTPS when talking to Consul
      --ssl-ca-cert="": Path to a CA certificate file to validate the Consul server
      --ssl-cert="": Path to an SSL client certificate for authentication
      --ssl-verify[=true]: Verify certificates when connecting via SSL
      --token="": The Consul ACL token

Unexpected response code: 302 (<html>
<head><title>302 Found</title></head>
<body bgcolor="white">
<center><h1>302 Found</h1></center>
<hr><center>nginx/1.6.2</center>
</body>
</html>
)

But can DELETE kv by curl command:

# curl -X DELETE -sku xxx:xxx https://10.225.3.73/consul/v1/kv/test?token=114f10fb-ed82-4b80-aa16-417dcd52d054
true

No response for kv-read on valid path with a valid ACL token, but not relevant to the path being read

By default, acl denied at Consul startup.

I have a path a/b/c protected by acl-1. Another path d/e/f protected by acl-2. I attempted the following that silently comes out without any response.

consul-cli kv read a/b/c --token acl-2-token

acl-2-token is a valid token but not for path a/b/c. The response was nil. It will be easier to write error on the CLI output if the HTTP call even in this case if any.

Access to server using SSL isn't working.

The logic to check if the SSL private key is present looks to be inverted.

vanye ~/S/g/s/g/m/consul-cli ] ./consul-cli --consul 10.5.24.1:8500 --ssl --ssl-ca-cert ~/SRC/work/master/tls/biosphere/ssl/ca.pem --ssl-cert ~/SRC/work/master/tls/biosphere/ssl/client.crt --ssl-key ~/SRC/work/master/tls/biosphere/ssl/client.key  --ssl-verify kv read /nats/endpoint
--ssl-key must be provided in order to use certificates for authentication
		if c.sslCert != "" {
			if c.sslKey != "" {
				return nil, errors.New("--ssl-key must be provided in order to use certificates for authentication")
			}
			clientCert, err := tls.LoadX509KeyPair(c.sslCert, c.sslKey)
			if err != nil {
				return nil, err
			}

			tlsConfig.Certificates = []tls.Certificate{clientCert}
			tlsConfig.BuildNameToCertificate()
		}

However flipping the if c.sslKey logic still doesn't work.

vanye ~/S/g/s/g/m/consul-cli ] ./consul-cli --consul 10.5.24.1:8500 --ssl --ssl-ca-cert ~/SRC/work/master/tls/biosphere/ssl/ca.pem --ssl-cert ~/SRC/work/master/tls/biosphere/ssl/client.crt --ssl-key ~/SRC/work/master/tls/biosphere/ssl/client.key  --ssl-verify kv read /nats/endpoint
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1336e80]

goroutine 1 [running]:
github.com/mantl/consul-cli/action.(*consul).newClient(0x16836c0, 0x8020104, 0x3, 0xc42006bcb0)
	/Users/richard/SRC/go/src/github.com/mantl/consul-cli/action/consul.go:198 +0x4b0
github.com/mantl/consul-cli/action.(*consul).newKv(0x16836c0, 0x15, 0x15, 0x15)
	/Users/richard/SRC/go/src/github.com/mantl/consul-cli/action/consul.go:89 +0x2f
github.com/mantl/consul-cli/action.(*kvRead).Run(0xc4200552e0, 0xc4200ba370, 0x1, 0xb, 0x0, 0x0)
	/Users/richard/SRC/go/src/github.com/mantl/consul-cli/action/kv_read.go:34 +0x71
github.com/mantl/consul-cli/commands.newKvReadCommand.func1(0xc420131180, 0xc4200ba370, 0x1, 0xb, 0x0, 0x0)
	/Users/richard/SRC/go/src/github.com/mantl/consul-cli/commands/kv.go:107 +0x4d
github.com/spf13/cobra.(*Command).execute(0xc420131180, 0xc4200c63c0, 0xb, 0x14, 0xc420131180, 0xc4200c63c0)
	/Users/richard/SRC/go/src/github.com/spf13/cobra/command.go:756 +0x468
github.com/spf13/cobra.(*Command).ExecuteC(0xc4200ac780, 0xc420114280, 0xc4200acc80, 0xc4200aca00)
	/Users/richard/SRC/go/src/github.com/spf13/cobra/command.go:846 +0x30a
github.com/spf13/cobra.(*Command).Execute(0xc4200ac780, 0xa, 0x143fcf8)
	/Users/richard/SRC/go/src/github.com/spf13/cobra/command.go:794 +0x2b
main.main()
	/Users/richard/SRC/go/src/github.com/mantl/consul-cli/main.go:19 +0x79

Segmentation fault on macOS High Sierra

On macOS High Sierra, the latest release available segfaults.

After investigation, this is due to the fact that the go version the latest binary was built with, 1.6.x I presume, does not work on macOS High Sierra.

Our current workaround is to update go via brew (brew reinstall go) then rebuild the consul-cli from source go get github.com/mantl/consul-cli && go install github.com/mantl/consul-cli.

Would it be possible to create a new release with binaries being built using the latest go version ?

Thanks

Terminate all JSON output with a newline

I think it would be nice if the output always ended with a newline. It's weird when it doesn't because my next prompt starts on the same line as the last line of output and that just doesn't look great. Also it's nice to have the output end with a newline because then you can redirect to a file and have that file adhere to POSIX standards - e.g.:

If there is no philosophical reason against ending with a newline, then I'd consider sending a PR to change it.

Allow ACL import from JSON

ACL rules are pretty complex to write by hand - though maybe I'm just doing it wrong. So far I have not found a tool that makes it easy to create ACL rules. It would be useful if consul admins could simply write rules in prettified JSON, save them to a file and import it using a syntax similar the that being used to import key/value entries:

key/value:
consul-cli kv create --json kv.json
acl:
consul-cli acl create --json acl-rules.json

This way, admins could pull a list of all ACLs, save them to a JSON file and import them again using the same tooling:

consul-cli acl list >> acl-rules.json

No more --version?

On consul-cli version 1 I was able to use consul-cli --version to see the version number. I just upgraded to 2 on windows and there does not seem to be a --version option any more. I tried -v --version -version and just version. Is this no longer a valid option?

"kv bulkload" should support the same JSON format as is output by "kv read"

Dumping KV contents using kv read results in outputs like the following (when using the json/prettyjson format):

[
  {
    "Key": "foo",
    "CreateIndex": 8988,
    "ModifyIndex": 8988,
    "LockIndex": 0,
    "Flags": 0,
    "Value": "bar",
    "Session": ""
  }
]

However, the KV bulkload input format expects this:

{
  "foo": "bar"
}

Ideally there should be a way to either a) dump in the format expected or; b) accept the format that is dumped.

Unable to use go template expression

This is most likely my lack of understanding - so an example maybe in the README would be most appreciated. I am trying to use a template expression with the health api part and keep getting

Error: template: :1:2: executing "" at <.Node>: can't evaluate field Node in type []*api.HealthCheck

after trying

./consul-cli health checks --template='{{.Node}}' myservice

What is wrong here?

Be listed on Hashicorp Community Tools

Hello !

First, nice work !
I was looking for such complete tool and it is very useful, thanks !

Have you thought to send an e-mail to Hashicorp to be listed on their "Community Tools" page ?

By the way, it could interesting to rename the tool consul-http-cli since there is already a "cli" in consul binary.

CONSUL_HTTP_ADDR not recognized

Hi!

The documentation stated the following:

--consul
Address of the Consul agent in the form hostname:port. The default is 127.0.0.1:8500. Can also be set with the environment variable CONSUL_HTTP_ADDR

I have exported the environment variable CONSUL_HTTP_ADDR but consul-cli is still using the default 127.0.0.1:8500:

export CONSUL_HTTP_ADDR=consul.service.consul:8500
consul-cli status-leader
Get http://127.0.0.1:8500/v1/status/leader: dial tcp 127.0.0.1:8500: connection refused

I have use consul-cli status-leader --consul=${CONSUL_HTTP_ADDR} to get things working. Is this what the documentation is saying?

Regards
Ingo

Docker Hub

Is it possible that this can be put up on the Docker Hub? It is a pain to have to always build the image from the git repo.

Allow token to be passed in an env-file

Hi @ChrisAubuchon
first and foremost , terrific work , this makes it more fun to interact with the consul ACL.

however, i'm still concerned that the content of the token may still persist in the shell history with the --token option.

It is possible to add a --token-file option , so the token could be submitted more securely as in a docker run command using the --env-file option: docker run --env-file /etc/token

Thanks.

Release?

Are you going to cut a new release with the --ssl-key functionality?

Specify ACL token on create

When you create Consul ACL via the API you can provide an ID. If ID field is provided, it uses this value as the uuid.

Example:

curl -X PUT -H "X-Consul-Token: d5144785-65ab-4d91-8521-a660d7b07fcc" -d '{ "Name": "marco", "Type": "management", "ID": "5a27872c-0396-4327-919b-ea8343f330a7" }' https://n1.node.consul.mydomain.com:8501/v1/acl/create

Any plans to introduce an option in consul-cli acl create to provide the id/uuid?

Thanks
Marco

Service checks does not accept TCP check & other features?

Some of Consul API features are not available. For example, both these fail:

Trying to register a webserver with a check for :443 port (self signed certificate)

consul-cli service register --address=1.2.3.4 --port=443 --tag=https --check=http:30s:1.2.3.4:443 --check=TLSSkipVerify:true https-webserver

Doing a TCP test 443 port:

consul-cli service register --address=1.2.3.4 --port=443 --tag=https --check=tcp:30s:1.2.3.4:443 -https-webserver 

Output Tags wherever ServiceID is shown

We have many services of the same name where the tags uniquely identify the service (service instance per tenant, machine data collectors). These are run via docker+mesos. The ServiceID is just a jumble of uuid, and since the service name is always the same there is now way to distinguish a particular service.

For example, I have to failing services here but would need to perform another query to get the tags so I can know the full context:

barry@s-mesos-slave-1]~❯ consul-cli  health-state critical
[
  {
    "Node": "s-mesos-slave-1",
    "CheckID": "service:10.0.136.176:mesos-20150914-061000-847970314-5050-23466-S3371.307580d3-4b2b-4a49-ad41-a9baa0441a6a:5000",
    "Name": "Service 'mono-server-api-5000' check",
    "Status": "critical",
    "Notes": "",
    "Output": "Get http://10.0.136.176:31078/health: dial tcp 10.0.136.176:31078: connection refused",
    "ServiceID": "10.0.136.176:mesos-20150914-061000-847970314-5050-23466-S3371.307580d3-4b2b-4a49-ad41-a9baa0441a6a:5000",
    "ServiceName": "mono-server-api-5000"
  },
  {
    "Node": "s-mesos-slave-3",
    "CheckID": "service:10.0.139.192:mesos-20150914-061000-847970314-5050-23466-S3370.c1e70e81-ea39-4d15-97f6-48a3a35a141c:5000",
    "Name": "Service 'mono-server-api-5000' check",
    "Status": "critical",
    "Notes": "",
    "Output": "Get http://10.0.139.192:31789/health: dial tcp 10.0.139.192:31789: connection refused",
    "ServiceID": "10.0.139.192:mesos-20150914-061000-847970314-5050-23466-S3370.c1e70e81-ea39-4d15-97f6-48a3a35a141c:5000",
    "ServiceName": "mono-server-api-5000"
  }
]

Different SHA when building in Vagrant compared to release

After spinning up the 64bit vagrant box and building consul-cli, I got a different SHA from the linux_amd64 release.

Here are the commands that I ran after SSHing into the 64bit vagrant box:

$ sudo bash --login
$ cd /opt/gopath/src/github.com/CiscoCloud/consul-cli
$ make
...
$ sha1sum bin/consul-cli
698c102a4873916571faf52317106287dbf46c5b  bin/consul-cli

I also tried make package with just -osarch="linux/amd64", but the SHA was still different.

Update the cli to support the new ACL features

Since v0.8 Consul supports a whole new set of ACLs. Consul-cli does not allow you to set up anything but service and key ACLs.

Eg:
--rule="node::write" --rule="agent::write" --rule="session::write"

consul-cli should use $CONSUL_HTTP_ADDR for the --consul flag when set

It would be ideal to be able to set cli params via environment variables. When you run consul-cli, it would check for an arg passed in as a cli param. If none was passed in, it would look for an environment variable, if none is set, it would use the default value defined in the docs.

At the very least this should observe environment variables like CONSUL_HTTP_ADDR that are already being used by consul itself.

Support for /v1/txn

Consul 0.7 introduced the /v1/txn endpoint which allows multiple operations to the key/value store to occur within a transaction.

It would be useful to completely replace a kv subtree atomically. Currently this requires a delete and then a bulkload, which is not ideal. Any plans to incorporate consul transactions into consul-cli to support this workflow?

Lock doesn't seem to work right...

$ SESSION=consul-cli kv-lock test;echo $SESSION;consul-cli kv-unlock --session=$SESSION test
3b6af3b6-04f7-087b-568f-cc7072246aa7
Unexpected response code: 500 (rpc error: missing session)

Any idea? Using consul 0.6.0

Support for Catalog and Service requests?

It would be nice to support the catalog resource so that one could use consul-cli in scripting to get service hostnames and ports. As well as to discover services.

allow the use of CONSUL_TOKEN environment variable

I'd love it if I could use an environment variable to store the token instead of --token or stashing it in a file. This would make it easier to prevent the token from being seen in the output of scripts.

acl list returns two times

ACL list returns two times same result.

consul-cli acl list --token='MASTER TOKEN'

[
{
"CreateIndex": 4,
"ModifyIndex": 4,
"ID": "MASTER TOKEN",
"Name": "Master Token",
"Type": "management",
"Rules": ""
},
{
"CreateIndex": 3,
"ModifyIndex": 3,
"ID": "anonymous",
"Name": "Anonymous Token",
"Type": "client",
"Rules": ""
}
][
{
"CreateIndex": 4,
"ModifyIndex": 4,
"ID": "MASTER TOKEN",
"Name": "Master Token",
"Type": "management",
"Rules": ""
},
{
"CreateIndex": 3,
"ModifyIndex": 3,
"ID": "anonymous",
"Name": "Anonymous Token",
"Type": "client",
"Rules": ""
}
]

Is this a bug?

kv bulkload doesn't accept JSONs generated by kv read

Hi guys,

I need some assistance...

I'm trying to backup/restore my consul KV store via consul-cli and facing the following problem.

First, I "backup" the current KV store with consul-cli kv read:

(as JSON)
consul-cli kv read "" --consul=XXX.YYY.com:8500 --recurse=true --format=json > export.json

RESULT
[{"Key":"project/","CreateIndex":1730,"ModifyIndex":1730,"LockIndex":0,"Flags":0,"Value":"","Session":""},{"Key":"project/environment/some.other.property","CreateIndex":1736,"ModifyIndex":1736,"LockIndex":0,"Flags":0,"Value":"some.other.value","Session":""},{"Key":"project/environment/some.property","CreateIndex":1733,"ModifyIndex":1733,"LockIndex":0,"Flags":0,"Value":"some.value","Session":""}]

(as "pretty" JSON)
consul-cli kv read "" --consul=XXX.YYY.com:8500 --recurse=true --format=prettyjson > prettyexport.json

RESULT

[
  {
    "Key": "project/",
    "CreateIndex": 1730,
    "ModifyIndex": 1730,
    "LockIndex": 0,
    "Flags": 0,
    "Value": "",
    "Session": ""
  },
  {
    "Key": "project/environment/some.other.property",
    "CreateIndex": 1736,
    "ModifyIndex": 1736,
    "LockIndex": 0,
    "Flags": 0,
    "Value": "some.other.value",
    "Session": ""
  },
  {
    "Key": "project/environment/some.property",
    "CreateIndex": 1733,
    "ModifyIndex": 1733,
    "LockIndex": 0,
    "Flags": 0,
    "Value": "some.value",
    "Session": ""
  }
]

Then, I try to restore those same backups with consul-cli kv bulkload:

(as JSON)

consul-cli kv bulkload --consul=XXX.YYY.com:8500 --json=export.json
Error: json: cannot unmarshal array into Go value of type map[string]interface {}

(as "pretty" JSON)

consul-cli kv bulkload --consul=XXX.YYY:8500 --json=prettyexport.json
Error: json: cannot unmarshal array into Go value of type map[string]interface {}

I would have expected to be able to use the result of the read as input for the bulkload but it doesn't seem to be the case. What am I doing wrong?

Thank you in advance,
SoTMaR

Unable to install

Appears to be some issue w/ spf13 when installing on my system

  • OSX 10.11.4

  • go version go1.6 darwin/amd64

    go get -d -v ./...
    echo errors github.com/stretchr/testify/assert testing  | xargs -n1 go get -d
    go build -o bin/consul-cli
    # github.com/spf13/cobra
    ../../spf13/cobra/bash_completions.go:373: flag.Annotations undefined (type *pflag.Flag has no field or method Annotations)
    ../../spf13/cobra/bash_completions.go:387: flag.Annotations undefined (type *pflag.Flag has no field or method Annotations)
    ../../spf13/cobra/bash_completions.go:443: flag.Annotations undefined (type *pflag.Flag has no field or method Annotations)
    ../../spf13/cobra/bash_completions.go:571: flags.SetAnnotation undefined (type *pflag.FlagSet has no field or method SetAnnotation)
    ../../spf13/cobra/bash_completions.go:595: flags.SetAnnotation undefined (type *pflag.FlagSet has no field or method SetAnnotation)
    ../../spf13/cobra/bash_completions.go:601: flags.SetAnnotation undefined (type *pflag.FlagSet has no field or method SetAnnotation)
    ../../spf13/cobra/command.go:117: undefined: pflag.NormalizedName
    ../../spf13/cobra/command.go:182: undefined: pflag.NormalizedName
    ../../spf13/cobra/command.go:183: c.Flags().SetNormalizeFunc undefined (type *pflag.FlagSet has no field or method SetNormalizeFunc)
    ../../spf13/cobra/command.go:1012: undefined: pflag.NormalizedName
    ../../spf13/cobra/command.go:183: too many errors
    make: *** [build] Error 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.