Commit Graph

739 Commits

Author SHA1 Message Date
sirkrypt0
ff582805b4 Move Nomad job creation to Nomad package
Previously, low level Nomad job creation was done in the environment manager.
It used many functions of the nomad package so we felt like this logic
better belongs to the nomad package.
2021-06-15 11:38:02 +02:00
Maximilian Paß
87f823756b Implement merge request comments 2021-06-15 11:37:47 +02:00
Maximilian Paß
25d78df557 Restore existing jobs and fix rebase (7c99eff3) issues 2021-06-15 11:37:35 +02:00
sirkrypt0
0020590c96 Update all runners when updating environment
Previously only the default job would be updated to the newest specs.
Now all Nomad jobs that belong to the given environment are updated
accordingly.
2021-06-15 11:35:59 +02:00
sirkrypt0
c7d59810e5 Use Nomad jobs as runners instead of allocations
As we can't control which allocations are destroyed when downscaling a job, we decided
to use Nomad jobs as our runners. Thus for each runner we prewarm for an environment,
a corresponding job is created in Nomad. We create a default job that serves as a template
for the runners. Using this, already existing execution environments can easily be restored,
once Poseidon is restarted.
2021-06-15 11:35:54 +02:00
sirkrypt0
8de489929e Remove stderr fifo after interactive execution with stderr finished
Previously the stderr fifo would not be removed, leaving unwanted
artifacts from the execution behind. We now remove the stderr fifo
after the command finished.
2021-06-14 15:04:09 +02:00
sirkrypt0
d3300e839e Add unit tests for separate stdout and stderr on execution 2021-06-11 08:47:25 +00:00
sirkrypt0
f122dd9376 Split stdout and stderr on interactive execution
When running a command interactively, we previously would get stdout
and stderr both served on stdout by Nomad. To circumvent this issue,
we now start a separate execution inside the allocation to split
both streams.
2021-06-11 08:47:25 +00:00
sirkrypt0
19cd4b840e Update Nomad to 1.1.1 and other project dependencies 2021-06-10 18:53:48 +02:00
Jan-Eric Hellenberg
61bc7d0143 Add unit tests for provide runner route 2021-06-10 06:11:31 +00:00
sirkrypt0
7bbd7b7bae Fix task group name
Previously when creating a job, Poseidon would still use the old
task group name format instead of default-group as expected.
2021-06-09 18:22:28 +02:00
Maximilian Paß
32fe47d669 Implement linting issues and merge request comments 2021-06-09 08:35:20 +00:00
Maximilian Paß
4b5f0a3eb6 Add tests for runner manager updating runners 2021-06-09 08:35:20 +00:00
Maximilian Paß
d0a2a1d96c Add tests for receiving allocation updates from Nomad 2021-06-09 08:35:20 +00:00
sirkrypt0
3f572261c2 Add updating cached allocations 2021-06-09 08:35:20 +00:00
sirkrypt0
66821dbfc8 Add query options to Nomad API queries to make sure we query the correct namespace 2021-06-09 08:35:20 +00:00
Jan-Eric Hellenberg
ce2b82d43d Copy files with relative path to active workspace directory of container 2021-06-09 10:24:29 +02:00
sirkrypt0
b32e9c2a67 Remove off by one with needed runners
Earlier we used a channel to store the runners. To make the environment
refresh block, we scheduled an additional runner as the buffered channel
was then filled up. As we don't use the channel anymore, we don't need
the additional runner anymore. Furthermore this leads to weird race
conditions in tests when comparing the runner count to the desired one.
2021-06-03 13:21:49 +00:00
sirkrypt0
3d7b7e1761 Set default minimum count in scaling policy to 0
Previously the minimum was not set, thus defaulting to the value of count.
This did not allow creating execution environments with a prewarmingPoolSize
of 0 as the task group count must not be less than the minimum coun in the
scaling policy.
2021-06-03 13:21:49 +00:00
sirkrypt0
630a006258 Use more uints
Previously we accepted int values although only uint values made sense.
We adjusted this to accept uints where appropriate.
2021-06-03 13:21:49 +00:00
sirkrypt0
1c4daa99a9 Add e2e tests for exec env createOrUpdate
This also adds a Nomad client to the e2e_tests that can be used to
query Nomad and validate that certain actions happened in Nomad
correctly.
2021-06-03 13:21:49 +00:00
sirkrypt0
1be744f2d4 Explicitly set task groups network when networkAccess is false
Previously, updating an environment from with to without network
access would leave the network resource in the task group as they
were before.
2021-06-03 13:21:49 +00:00
sirkrypt0
b990df7b9d Add route to create or update execution environments 2021-06-03 13:21:49 +00:00
sirkrypt0
3d395f0a38 Set network_mode to bridge to overwrite old setting
Previously, the network_mode was only set when creating a job with
network_access = false. This results in Nomad leaving this setting
as is when updating the job to use network. Thus a job would have
had the mapped ports in the Nomad UI, but the Docker network_mode
would still be 'none'.
2021-06-03 13:21:49 +00:00
Maximilian Paß
5f35ba30a2 Remove data race in the runner length function 2021-06-03 11:38:40 +02:00
Jan-Eric Hellenberg
02b3f52a11 Add ability to copy files to and delete files from runner 2021-06-02 14:54:54 +02:00
Konrad Hanff
242d0175a2 Add tests and end-to-end tests for websocket execution
For unit tests, this mocks the runners Execute method with a
customizable function that operates on the request, streams and exit
channel to simulate a real execution.

End-to-end tests are moved to the tests/e2e_tests folder. The tests
folder allows us to have shared helper functions for all tests in a
separate package (tests) that is not included in the non-test build.

This also adds one second of delay before each end-to-end test case by
using the TestSetup method of suite. By slowing down test execution,
this gives Nomad time to create new allocations when a test requested a
runner. Another solution could be to increase the scale of the job to
have enough allocations for all end-to-end tests.

Co-authored-by: Maximilian Paß <maximilian.pass@student.hpi.uni-potsdam.de>
2021-05-31 12:32:51 +02:00
Konrad Hanff
3afcdeaba8 Execute commands in runner via WebSocket
This enables executing commands in runners and forwarding input and
output between the runner and the websocket to the client.

Co-authored-by: Maximilian Paß <maximilian.pass@student.hpi.uni-potsdam.de>
2021-05-31 12:32:51 +02:00
sirkrypt0
892f902377 Add deps dependency to e2e-test make target
Without the deps dependency the e2e-test target would sometimes
fail in the CI due to missing entries in the go.sum file.
2021-05-28 09:13:59 +02:00
sirkrypt0
6084b00e23 Exit MonitorEvaluation once stream is closed
As we pass the context to the Nomad API event stream, they close
the event stream once the passed context is cancelled. We use this
to exit our receive loop on the event stream once the stream is closed,
instead of having to check the context manually.
2021-05-28 06:52:38 +00:00
sirkrypt0
a891d72c4f Update go.sum 2021-05-28 06:52:38 +00:00
sirkrypt0
f228a3e599 Add Nomad job registration with monitoring afterwards
Once a Nomad job is registered, we listen to the Nomad event stream
and return once we find the evaluation to complete.
2021-05-28 06:52:38 +00:00
sirkrypt0
4c3cc0cc4c Move Nomad job creation logic to environment manager 2021-05-28 06:52:38 +00:00
Jan-Eric Hellenberg
619cd40fb6 Refactor EntityStore interface to multiple interfaces of specific type 2021-05-27 09:56:07 +00:00
sirkrypt0
52636b04cf Allow lint step to fail
This way we can use the linter in all branches already and gradually
adjust our code to the new linter.
2021-05-27 08:18:00 +00:00
sirkrypt0
ea7eff0062 Remove deprecated golint 2021-05-27 08:18:00 +00:00
sirkrypt0
bb1f5edea8 Add golangci-lint configuration
We enable more linters to enforce better code.
2021-05-27 08:18:00 +00:00
Konrad Hanff
e9906107c5 Do not use cached test results
When running the `test` and `e2e-test` target with make, this prevents
`go test` from using cached test results. Rerunning the tests every time
allows for easy detection of flaky tests.
2021-05-27 08:22:41 +02:00
sirkrypt0
ca2c989778 Make git directory static in Makefile
We used a git command to find the location of the users git directory.
This resulted in warnings in the CI where git was not installed.
For now we make the git directory static to .git to avoid this as
the directory is mostly located there.
2021-05-26 15:05:29 +00:00
sirkrypt0
fb1c117a2e Update dependencies to avoid vulns 2021-05-26 15:05:29 +00:00
sirkrypt0
1b49d396f3 Separatly test dependencies and Docker image.
This way, we don't enter all the steps in the CI if the dependencies
appear to be vulnerable.
2021-05-26 15:05:29 +00:00
sirkrypt0
8d7aa2ea3c Add trivy vulnerability scanner and custom docker-make image
Trivy is used in the CI after building our Docker image. It scans
the Docker image and our dependencies for known vulnerabilities.
The docker-make image is a simple docker:latest containing make.
2021-05-26 15:05:29 +00:00
Jan-Eric Hellenberg
a48804bd19 Add websocket schema for tunneling connections to the runner 2021-05-26 08:18:22 +02:00
Jan-Eric Hellenberg
fd89139a33 Specify missing response codes in API definition 2021-05-20 11:52:49 +02:00
Jan-Eric Hellenberg
5bb3c6745e Add tests for job store, Len and Sample method of pool 2021-05-19 14:52:03 +02:00
Jan-Eric Hellenberg
17c9839fac Refactor runners and websocket tests 2021-05-19 14:52:03 +02:00
Jan-Eric Hellenberg
fe2ec4df35 Incorporate review comments 2021-05-19 14:52:03 +02:00
Jan-Eric Hellenberg
0590f31200 Refactor setup of runner manager test suite 2021-05-19 14:52:03 +02:00
Jan-Eric Hellenberg
5d5f175f52 Implement http.Hijack interface in HTTPLoggingMiddleware 2021-05-19 14:52:03 +02:00
Jan-Eric Hellenberg
83ea552cf7 Refactor interfaces to use a runner manager and an environment manager.
See https://gitlab.hpi.de/codeocean/codemoon/poseidon/-/issues/44.
2021-05-19 14:52:03 +02:00