A Consul and Vault F# API.
The aim is to support both Consul and Vault from the same library, because it's a common deployment scenario. You should be able to use the Consul bits without using the Vault bits.
Fakta is Swedish for 'facts', a fitting name for a library interacting with a CP-oriented fact store.
Sponsored by qvitoo – A.I. bookkeeping.
How much has been implemented? This API surface is the same as that of the official Go client.
Those not implemented will throw a correspond TBD-exception.
The current implementation's use-case (for me) is leader-election and semi- to long-term storage of access keys that need be requested exactly-once or they get invalidated.
Together with Registrator and this library, F# code can participate in micro- service architectures easily.
First, run:
./tools/consul.sh agent -dev -bind 127.0.0.1 -config-file=tools/server.json
In another terminal:
./tools/vault.sh server -dev
Finally:
bundle exec rake
Which will call xbuild/msbuild and compile the project, run unit tests and then finally run the integration tests.
- The HTTP API
- go-client – the library is partially modelled after this
- clone
- create
- destroy
- info
- list
- update
- checkRegister
- checkDeregister
- checks
- enableNodeMaintenance
- disableNodeMaintenance
- enableServiceMaintenance
- disableServiceMaintenance
- join
- members
- self
- serviceRegister
- serviceDeregister
- nodeName
- services
- passTTL
- warnTTL
- failTTL
- forceLeave
- datacenters
- node
- nodes
- deregister
- register
- service
- services
- fire
- list
- idToIndex
- checks
- node
- state
- service
- acquire
- CAS
- delete
- deleteCAS
- deleteTree
- getRaw
- get
- keys
- list
- put
- release
- create
- createNoChecks
- destroy
- info
- list
- node
- renew
- renewPeriodic
- leader
- peers
Service
All development is done on master
branch which should always be release-able;
write unit tests for your changes and it shall be fine.
- enable ACL support by creating json config file "server.json" looking like this:
{
"bootstrap": false,
"server": true,
"datacenter": "ams1",
"encrypt": "yJqVBxe12ZfE3z+4QSk8qA==",
"log_level": "INFO",
"acl_datacenter": "ams1",
"acl_default_policy": "allow",
"acl_master_token": "secret",
"acl_token": "secret"
}
- run consul agent with:
consul agent -dev -bind 127.0.0.1 -config-file=tools/server.json
- Open http://localhost:consul_port/ui/#/ams1/acls (typically http://127.0.0.1:8500/ui/#/ams1/acls ) and create token called the same like the master token in config file
- create config file (do not use this in production)
backend "file" {
path = "vault"
}
listener "tcp" {
tls_disable = 1
}
disable_cache = true
disable_mlock = true
- run vault server with
vault server -config=tools/vault.conf
- you have to restart your local vault server and delete vault directory contents everytime you want to re-run tests.
You compile with Rake/albacore, the best build system for .Net/mono:
bundle
bundle exec rake
The unit tests are run by just running the Tests-executable, or by using rake:
bundle exec rake tests:unit
You'll need to start consul first; in one console:
bundle exec foreman start
...and then running the tests:
bundle exec rake tests:integration
Between vault tests, you have to remove ./vaultData
, or you'll get failing
tests. This is due to the nature of some Vault operations not being re-doable.