open-consul/api
Matt Keeler ea6cbf01a5 Centralized Config CLI (#5731)
* Add HTTP endpoints for config entry management

* Finish implementing decoding in the HTTP Config entry apply endpoint

* Add CAS operation to the config entry apply endpoint

Also use this for the bootstrapping and move the config entry decoding function into the structs package.

* First pass at the API client for the config entries

* Fixup some of the ConfigEntry APIs

Return a singular response object instead of a list for the ConfigEntry.Get RPC. This gets plumbed through the HTTP API as well.

Dont return QueryMeta in the JSON response for the config entry listing HTTP API. Instead just return a list of config entries.

* Minor API client fixes

* Attempt at some ConfigEntry api client tests

These don’t currently work due to weak typing in JSON

* Get some of the api client tests passing

* Implement reflectwalk magic to correct JSON encoding a ProxyConfigEntry

Also added a test for the HTTP endpoint that exposes the problem. However, since the test doesn’t actually do the JSON encode/decode its still failing.

* Move MapWalk magic into a binary marshaller instead of JSON.

* Add a MapWalk test

* Get rid of unused func

* Get rid of unused imports

* Fixup some tests now that the decoding from msgpack coerces things into json compat types

* Stub out most of the central config cli

Fully implement the config read command.

* Basic config delete command implementation

* Implement config write command

* Implement config list subcommand

Not entirely sure about the output here. Its basically the read output indented with a line specifying the kind/name of each type which is also duplicated in the indented output.

* Update command usage

* Update some help usage formatting

* Add the connect enable helper cli command

* Update list command output

* Rename the config entry API client methods.

* Use renamed apis

* Implement config write tests

Stub the others with the noTabs tests.

* Change list output format

Now just simply output 1 line per named config

* Add config read tests

* Add invalid args write test.

* Add config delete tests

* Add config list tests

* Add connect enable tests

* Update some CLI commands to use CAS ops

This also modifies the HTTP API for a write op to return a boolean indicating whether the value was written or not.

* Fix up the HTTP API CAS tests as I realized they weren’t testing what they should.

* Update config entry rpc tests to properly test CAS

* Fix up a few more tests

* Fix some tests that using ConfigEntries.Apply

* Update config_write_test.go

* Get rid of unused import
2019-04-30 16:27:16 -07:00
..
watch Enabling "service" watch handler to accept a slice of tags 2019-04-29 15:28:01 -04:00
acl.go ACL Token ID Initialization (#5307) 2019-04-30 11:45:36 -04:00
acl_test.go Merge pull request #5376 from hashicorp/fix-tests 2019-04-04 17:09:32 -04:00
agent.go Implement data filtering of some endpoints (#5579) 2019-04-16 12:00:15 -04:00
agent_test.go Implement data filtering of some endpoints (#5579) 2019-04-16 12:00:15 -04:00
api.go acl: adding support for kubernetes auth provider login (#5600) 2019-04-26 14:49:25 -05:00
api_test.go acl: adding support for kubernetes auth provider login (#5600) 2019-04-26 14:49:25 -05:00
catalog.go Add support for multiple checks in Consul Client (#4849) 2018-10-29 09:39:25 -07:00
catalog_test.go Implement data filtering of some endpoints (#5579) 2019-04-16 12:00:15 -04:00
config_entry.go Centralized Config CLI (#5731) 2019-04-30 16:27:16 -07:00
config_entry_test.go Centralized Config CLI (#5731) 2019-04-30 16:27:16 -07:00
connect.go api: fix up some comments and rename IssuedCert to LeafCert 2018-06-14 09:41:56 -07:00
connect_ca.go connect: tame thundering herd of CSRs on CA rotation (#5228) 2019-01-22 17:19:36 +00:00
connect_ca_test.go Merge pull request #5376 from hashicorp/fix-tests 2019-04-04 17:09:32 -04:00
connect_intention.go agent: 400 error on invalid UUID format, api handles errors properly 2018-06-27 07:40:06 +02:00
connect_intention_test.go agent: 400 error on invalid UUID format, api handles errors properly 2018-06-27 07:40:06 +02:00
coordinate.go Merge branch 'coordinate-node-endpoint' of github.com:hashicorp/consul into esm-changes 2017-10-26 19:20:24 -07:00
coordinate_test.go Merge pull request #5376 from hashicorp/fix-tests 2019-04-04 17:09:32 -04:00
debug.go New command: consul debug (#4754) 2018-10-19 08:41:03 -07:00
debug_test.go Move internal/ to sdk/ (#5568) 2019-03-27 08:54:56 -04:00
event.go Revert "fixed: body not closed for non HTTP 200 responses" 2015-01-19 11:51:51 +09:00
event_test.go Move internal/ to sdk/ (#5568) 2019-03-27 08:54:56 -04:00
go.mod Update SDK version (#5572) 2019-03-27 08:58:50 -04:00
go.sum Update internal dep (#5564) 2019-03-26 17:30:23 -04:00
health.go Fall back to using old fields when marshaling 2019-01-28 08:47:26 -08:00
health_test.go Implement data filtering of some endpoints (#5579) 2019-04-16 12:00:15 -04:00
kv.go api: add support for new txn operations 2018-12-12 10:54:09 -08:00
kv_test.go add serf check to TestAPI_ClientPutGetDelete, TestAPI_ClientWatchGet 2019-02-22 17:34:45 -05:00
lock.go Fix lock and semaphore timeouts 2018-07-06 10:55:25 +01:00
lock_test.go Move internal/ to sdk/ (#5568) 2019-03-27 08:54:56 -04:00
operator.go Moves operator sub-functions into their own files. 2017-03-30 12:35:50 -07:00
operator_area.go Remove operator_area note from godoc overview (#4603) 2018-08-28 16:02:24 -04:00
operator_autopilot.go Simplify string(buf.Bytes()) to buf.String() (#3590) 2017-10-18 13:26:09 -07:00
operator_autopilot_test.go Move internal/ to sdk/ (#5568) 2019-03-27 08:54:56 -04:00
operator_keyring.go agent: display messages from serf in cli (#5236) 2019-01-22 21:08:50 +01:00
operator_keyring_test.go Move internal/ to sdk/ (#5568) 2019-03-27 08:54:56 -04:00
operator_raft.go Move Raft protocol version for list peers end point to server side, fix unit tests. This fixes #3449 2017-09-26 09:35:39 -05:00
operator_raft_test.go api: refactor: unify naming of API tests 2017-07-07 09:22:34 +02:00
operator_segment.go Change segment list endpoint in docs/client api 2017-09-01 12:40:07 -07:00
prepared_query.go Improve Connect with Prepared Queries (#5291) 2019-02-04 09:36:51 -05:00
prepared_query_test.go Move internal/ to sdk/ (#5568) 2019-03-27 08:54:56 -04:00
raw.go api: Refactoring into shared write logic 2015-02-18 15:15:02 -08:00
README.md Copy-and-paste Go client example (#4448) 2018-07-30 12:48:19 +01:00
semaphore.go Fix lock and semaphore timeouts 2018-07-06 10:55:25 +01:00
semaphore_test.go add serf check to TestAPI_SemaphoreConflict 2019-02-22 17:34:45 -05:00
session.go Expands and rework context support in the API client. (#3273) 2017-07-14 17:30:08 -07:00
session_test.go Improve resilience of api pkg tests (#4676) 2018-09-18 17:47:01 +01:00
snapshot.go Adds support for snapshots and restores. (#2396) 2016-10-25 19:20:24 -07:00
snapshot_test.go add serf check to TestAPI_Snapshot 2019-02-22 17:34:45 -05:00
status.go Revert "fixed: body not closed for non HTTP 200 responses" 2015-01-19 11:51:51 +09:00
status_test.go [Travis][UnstableTests] Fixed unstable tests in travis (#5013) 2018-12-12 12:09:42 -08:00
txn.go txn: update existing txn api docs with new operations 2019-01-15 16:54:07 -08:00
txn_test.go Re-add ReadableDuration types to health check definition 2019-01-25 14:47:35 -08:00

Consul API client

This package provides the api package which attempts to provide programmatic access to the full Consul API.

Currently, all of the Consul APIs included in version 0.6.0 are supported.

Documentation

The full documentation is available on Godoc

Usage

Below is an example of using the Consul client:

package main

import "github.com/hashicorp/consul/api"
import "fmt"

func main() {
	// Get a new client
	client, err := api.NewClient(api.DefaultConfig())
	if err != nil {
		panic(err)
	}

	// Get a handle to the KV API
	kv := client.KV()

	// PUT a new KV pair
	p := &api.KVPair{Key: "REDIS_MAXCLIENTS", Value: []byte("1000")}
	_, err = kv.Put(p, nil)
	if err != nil {
		panic(err)
	}

	// Lookup the pair
	pair, _, err := kv.Get("REDIS_MAXCLIENTS", nil)
	if err != nil {
		panic(err)
	}
	fmt.Printf("KV: %v %s\n", pair.Key, pair.Value)
}

To run this example, start a Consul server:

consul agent -dev

Copy the code above into a file such as main.go.

Install and run. You'll see a key (REDIS_MAXCLIENTS) and value (1000) printed.

$ go get
$ go run main.go
KV: REDIS_MAXCLIENTS 1000

After running the code, you can also view the values in the Consul UI on your local machine at http://localhost:8500/ui/dc1/kv