There are 3 main directories:
-
argo-workflows Specification of the end to end testing
-
containers Custom container images needed within the workflows
-
- setup-instance Entrypoint and scripts dedicated for environments (locally, AWS dev, AWS gitlab)
- run-instance Scripts executed in the argo-machine (locally, AWS instance)
You need pupernetes:
$ curl -LO https://github.com/DataDog/pupernetes/releases/download/v${VERSION}/pupernetes
$ chmod +x ./pupernetes
$ cd ${GOPATH}/src/github.com/DataDog/datadog-agent
$ aws-vault exec ${DEV} -- inv -e e2e-tests -t dev --image datadog/agent-dev:master
$ echo $?
$ sudo ./pupernetes daemon run /opt/sandbox --job-type systemd
$ cd ${GOPATH}/src/github.com/DataDog/datadog-agent
$ inv -e e2e-tests -t local --image datadog/agent-dev:master
$ echo $?
The argo documentation is available here, there are a lot of examples here too.
To assert something in an argo workflow, you need to create a mongodb query:
name: find-kubernetes-state-deployments
activeDeadlineSeconds: 200
script:
image: mongo:3.6.3
command: [mongo, "fake-datadog.default.svc.cluster.local/datadog"]
source: |
while (1) {
var nb = db.series.find({
metric: "kubernetes_state.deployment.replicas_available",
tags: {$all: ["namespace:default", "deployment:fake-datadog"] },
"points.0.1": { $eq: 1} });
print("find: " + nb)
if (nb != 0) {
break;
}
prevNb = nb;
sleep(2000);
}
This is an infinite loop with a timeout set by activeDeadlineSeconds: 200
.
The source is EOF to the command, equivalent to:
mongo "fake-datadog.default.svc.cluster.local/datadog" << EOF
while (1)
[...]
EOF
Try to maximise the usage of MongoDB query system without rewriting too much logic in JavaScript.
See some examples here
To discover more MongoDB capabilities:
If you need to add a non existing public container in the workflow, create it in the container directory.
But, keep in mind this become an additional piece of software to maintain.
This section helps you to upgrade any part of the end to end testing.
The current end to end testing pipeline relies on
Read the command lines docs of pupernetes
In the Ignition systemd.units list, find the pupernetes.service
one.
In its content, the systemd unit has a [service]
directive where there is a single ExecStart=
field: you need to add / edit the --hyperkube-version
flag in the command line.
The value of this flag must be a valid release such as 1.10.1
: --hyperkube-version=1.10.1
Concrete example, I want to bump the hyperkube version from 1.9.3 to 1.10.1:
{
"systemd": {
"units": [
{
"enabled": true,
"name": "pupernetes.service",
"contents": "[Unit]\nDescription=Run pupernetes\nRequires=setup-pupernetes.service docker.service\nAfter=setup-pupernetes.service docker.service\n\n[Service]\nEnvironment=SUDO_USER=core\nExecStart=/opt/bin/pupernetes daemon run /opt/sandbox --hyperkube-version 1.9.3 --kubectl-link /opt/bin/kubectl -v 5 --timeout 48h\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n"
}
]
}
}
Become:
{
"systemd": {
"units": [
{
"enabled": true,
"name": "pupernetes.service",
"contents": "[Unit]\nDescription=Run pupernetes\nRequires=setup-pupernetes.service docker.service\nAfter=setup-pupernetes.service docker.service\n\n[Service]\nEnvironment=SUDO_USER=core\nExecStart=/opt/bin/pupernetes daemon run /opt/sandbox --hyperkube-version 1.10.1 --kubectl-link /opt/bin/kubectl -v 5 --timeout 48h\nRestart=on-failure\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\n"
}
]
}
}
Have a look at pupernetes.
Generate the ignition.json
with the .py
and the .yaml
:
${GOPATH}/src/github.com/DataDog/pupernetes/environments/container-linux/ignition.py < ${GOPATH}/src/github.com/DataDog/pupernetes/environments/container-linux/ignition.yaml | jq .
Upgrade the relevant sections in the ignition script.
The ignition script must insert the core user with their ssh public key:
{
"passwd": {
"users": [
{
"sshAuthorizedKeys": [
"${SSH_RSA}"
],
"name": "core"
}
]
}
}
If needed, use the ignition-linter to validate any changes.
- change the binary version in the argo setup script
- the content of the sha512sum
Select any HVM AMIs from:
- kinvolk Flatcar
- CoreOS Container linux