Automatically apply configuration based on deployments.
This project uses consul-template to generate configuration and invoke the Kubernetes update.
AutoKube talks to consul, ideally this will be a local agent.
AutoKube talks to the Kubernetes API server via kubectl using basic username/password authentication.
- CONSUL_HTTP_ADDR (optional)
- CONSUL_HTTP_TOKEN
- NAMESPACE
Autokube is designed to run within Kubernetes, for this to work the following service account needs to be set up with the given roles.
apiVersion: v1
kind: ServiceAccount
metadata:
name: autokube
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
labels:
k8s-app: autokube
name: autokube
rules:
- apiGroups: [ "*" ]
resources: [ "virtualservices", "destinationrules" ]
verbs: [ "get", "list", "watch", "create", "update", "patch", "delete" ]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: autokube
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: autokube
subjects:
- kind: ServiceAccount
name: autokube
namespace: platform
---
Testing done by injecting test data into a consul server running locally and then generating the templates from that, asserting against expected output files.
Test data is injected into the consul server at start up from test/data/consul.json
. This is a json representation of
the consul structure where the "value" is base64 encoded. This is the
consul export format and is imported using the
consul import command.
Test data is loaded before all tests, therefore is available for all tests.
Note that the consul service may not be terminated between runs and therefore may contain out of date test data, particularly if data is removed from consul.json.
Tests are run against a namespace, as this is how the tool is expected to be run.
A namespace is used to look up global configuration.
To add a new namespace create an directory in "test/expected_outputs" with the name of the new namespace and copy this line, replacing "saturn-green" with the the new namespace:
runTestsFor "saturn-green" && RESULT=1
You will need to add appropriate test data to the test data file.
Tests are run against a namespace, the consul template output is asserted against the files in test/expected_outputs
.
$ make test
If a test fails, a diff between the expected output file and the file generated by consul template is shown.