Giter Club home page Giter Club logo

kurtosis-tech / kurtosis Goto Github PK

View Code? Open in Web Editor NEW
272.0 13.0 34.0 158.48 MB

A platform for packaging and launching ephemeral backend stacks with a focus on approachability for the average developer.

Home Page: https://docs.kurtosistech.com/

License: Other

Go 68.68% Shell 1.98% JavaScript 12.50% TypeScript 12.87% Dockerfile 0.04% Starlark 0.17% Rust 2.90% HTML 0.04% CSS 0.04% Nix 0.78% PHP 0.01%
devops docker docker-compose environment networks distributed-systems cicd containerization kubernetes backend

kurtosis's Introduction

Follow us on X, formerly Twitter Number of GitHub stars


What is Kurtosis?

Have you ever tried to build on top of a colleague's work, or contribute to an open source project, just to get stuck on the first steps of spinning up a stack to play with? Kurtosis handles the complexity of spinning up ephemeral dev or test stacks so you can focus on developing, not configuring.

Kurtosis is formed of:

  • A packaging system for distributing backend stack definitions, which can run on docker or on kubernetes
  • A runtime with a per-stack file management system for reproducibly initializing the state of your stack
  • A set of tools to enable devs to interact with their stacks, like they do on docker or k8s

Why use Kurtosis?

Kurtosis is best for:

  • Reusing the logic in your stack definitions for all of: local dev, scheduled testing in CI, and ad-hoc larger-scale testing on k8s clusters
  • Giving other devs a way to spin up your application, and commonly used variations of it, with one-liners, via Kurtosis' packaging and parameterization systems
  • Handling complex setup logic in your backend stack, like passing arbitrary data between services as they start up, and enforcing arbitrary wait conditions

How is Kurtosis different than Docker Compose or Helm?

Kurtosis operates at a level higher than Docker Compose or Helm, and produces stacks running on either of the underlying engines (the Docker engine, or Kubernetes). Because of this additional layer of abstraction, we are able to introduce several features to improve the experience of spinning up ephemeral stacks:

  • A per-stack file management system that enables portable state initialization for dev or test stacks
  • Stack-level parameterizability; users have a powerful and flexible way (beyond messing with env vars) to affect modifications in their stacks
  • First-class plug-and-play composability; it's expected for users to import stack definitions into larger stacks, and this experience is optimized
  • The ability to get all of the above, but running over either the docker engine or k8s, at your election

How do I get going?

To see Kurtosis in action, first install it using the instructions here or visit Kurtosis Cloud to provision a remote host.

Then, run the Redis voting app Kurtosis package:

kurtosis run github.com/kurtosis-tech/awesome-kurtosis/redis-voting-app

Finally, open the http link printed in the last line in your browser.

If you have an issue or feature request, we'd love to hear about it through one of the following:

Going further

To try more Kurtosis packages just like this one, check out the awesome-kurtosis repo!

To learn about how to write Kurtosis packages, check out our quickstart.

To read about how Kurtosis works, see our documentation.

To see where we're going with the product, check out the roadmap here.

Got more questions? Drop them in our Github Discussions where we, or other community members, can help answer.

Contributing to Kurtosis

Expand to see contribution info

See our CONTRIBUTING file.

Repository Structure

This repository is structured as a monorepo, containing the following projects:

  • container-engine-lib: Library used to abstract away container engine being used by the enclave.
  • core: Container launched inside an enclave to coordinate its state
  • engine: Container launched to coordinate enclaves
  • api: Defines the API of the Kurtosis platform (engine and core)
  • cli: Produces CLI binary, allowing interaction with the Kurtosis system
  • docs: Documentation that is published to docs.kurtosis.com
  • internal_testsuites: End to end tests

Dev Dependencies (Nix)

Install the Nix package manager.

sh <(curl -L https://nixos.org/nix/install)

And enable some Nix flags (alternatively you can add --extra-experimental-features 'nix-command flakes' every time calling the nix command):

mkdir -p ~/.config/nix
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf

And to bring the environment up, just open a new shell terminal, go to the root folder of the repo and run:

nix  develop

This will download all dev deps and setup the environment accordingly.

You can also use the direnv to automatically load the environment when entering the main folder or using a plugin in your preferred IDE:

Direnv can also be easily installed with Nix (or HomeBrew if you prefer):

nix-env -f '<nixpkgs>' -iA direnv

Now you just to add the direnv hook to your shell:

echo 'eval "$(direnv hook bash)"' >> ~/.bashrc
# or for ZSH
echo 'eval "$(direnv hook zsh)"' >> ~/.zshrc

Now next time you open a new shell terminal and go to repo's folder you environment will update and load automatically.

Dev Dependencies (Manual install)

The commands below assume that the env variable BREW_PREFIX contains the brew prefix.

BREW_PREFIX="$(brew --prefix)"

Bash (5 or above)

On MacOS:

# Install modern version of bash, the one that ships on MacOS is too old
brew install bash
# Allow bash as shell
echo "${BREW_PREFIX}/bin/bash" | sudo tee -a /etc/shells
# Optional: make bash your default shell
chsh -s "${BREW_PREFIX}/bin/bash"

Git

On MacOS:

# Install modern version of git, the one that ships on MacOS can be too old
brew install git

Docker

On MacOS:

brew install docker

Go (1.20 or above)

On MacOS:

brew install [email protected]
# Add the Go binary dir to your PATH
PATH="${BREW_PREFIX}/opt/[email protected]/bin:$PATH"
# Add the GOPATH bin dir to your PATH
PATH="${HOME}/go/bin:$PATH"

On Ubuntu:

wget https://go.dev/dl/go1.20.8.linux-amd64.tar.gz
tar -C /usr/local -zxf go1.20.8.linux-amd64.tar.gz
# Add the following to your bashrc or equivalent.
export PATH=$PATH:/usr/local/go/bin

Goreleaser

On MacOS:

brew install goreleaser/tap/goreleaser

On Ubuntu:

echo 'deb [trusted=yes] https://repo.goreleaser.com/apt/ /' | sudo tee /etc/apt/sources.list.d/goreleaser.list
sudo apt update
sudo apt install goreleaser

Node (20.* or above) and Yarn

On MacOS, using NVM:

brew install nvm
mkdir ~/.nvm
nvm install 20.11.0
npm install -g yarn

On Ubuntu, using NVM:

curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.bashrc
nvm install 20.11.0
npm install -g yarn

Rust

On MacOS, Ubuntu:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Go and Typescript protobuf compiler binaries

On MacOS:

brew install protoc-gen-go
brew install protoc-gen-go-grpc
go install connectrpc.com/connect/cmd/protoc-gen-connect-go@latest
yarn global add ts-protoc-gen
yarn global add grpc-tools

On Ubuntu:

go install google.golang.org/grpc/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
go install connectrpc.com/connect/cmd/protoc-gen-connect-go@latest
yarn global add ts-protoc-gen
yarn global add grpc-tools

OpenAPI generators for Go and Typescript

On MacOS:

go install github.com/deepmap/oapi-codegen/cmd/[email protected]
yarn global add [email protected]

On Ubuntu:

go install github.com/deepmap/oapi-codegen/cmd/[email protected]
yarn global add [email protected]

Build Instructions

To build the entire project, run:

./scripts/build.sh

To only build a specific project, run the script on ./PROJECT/PATH/script/build.sh, for example:

./container-engine-lib/scripts/build.sh
./core/scripts/build.sh
./api/scripts/build.sh
./engine/scripts/build.sh
./cli/scripts/build.sh

If there are any changes to the Protobuf files in the api subdirectory, the Protobuf bindings must be regenerated:

./api/scripts/regenerate-protobuf-bindings.sh

Build scripts also run unit tests as part of the build process.

Unit Test Instructions

For all Go modules, run go test ./... on the module folder. For example:

cd cli/cli/
go test ./...

E2E Test Instructions

Each project's build script also runs the unit tests inside the project. Running ./script/build.sh will guarantee that all unit tests in the monorepo pass.

To run the end-to-end tests:

  1. Make sure Docker is running
$ docker --version
Docker version X.Y.Z
  1. Make sure Kurtosis Engine is running
$ kurtosis engine status
A Kurtosis engine is running with the following info:
Version:   0.X.Y
  1. Run test.sh script
$ ./internal_testsuites/scripts/test.sh

If you are developing the Typescript test, make sure that you have first built api/typescript. Any changes made to the Typescript package within api/typescript aren't hot loaded as of 2022-09-29.

Dev Run Instructions

Once the project has built, run ./cli/cli/scripts/launch-cli.sh as if it was the kurtosis command:

./cli/cli/scripts/launch-cli.sh enclave add

If you want tab completion on the recently built CLI, you can alias it to kurtosis:

alias kurtosis="$(pwd)/cli/cli/scripts/launch-cli.sh"
kurtosis enclave add

Run Debug Instructions (for Golang code so far)

For running CLI with Golang remote debug:

  1. Build the CLI dev binary and run the command you want to debug (kurtosis version in this example), this will start the debug server and will wait for a client connection
cli/cli/scripts/build.sh
source ./scripts/set_kt_alias.sh
ktdebug version
  1. Open the command's file you want to debug
  2. Add the breakpoint in the line where you want to stop the cursor
4. Then choose the "CLI-remote-debug" run configuration in the "run panel" 5. Press the "debug" button 6. Use the debug panel to inspect the variables value and continue with the debug flow

For running CLI with Delve debug client:

  1. Build the CLI dev binary and run the command you want to debug (kurtosis version in this example), but first pass "dlv-terminal" as the first argument (this will start the Delve client in the terminal)
cli/cli/scripts/build.sh
source ./scripts/set_kt_alias.sh
ktdebug dlv-terminal version
  1. You can add a new breakpoint using the terminal client and the break command
(dlv) break version.run:1
  1. You can move the cursor to the breakpoint created in the previous step with the continue command
(dlv) continue
4. You can see [more Delve commands here][delve-docs]

For running Kurtosis engine with Golang remote debug:

  1. Run the main build script with the first argument debug_mode as true. This will generate a new Kurtosis engine container image which will contain the debug suffix in the name.
scripts/build.sh true 
  1. Add the breakpoint in the line where you want to stop the cursor
  2. Run the engine in debug mode with the ktdev engine start --debug-mode or the ktdev engine restart --debug-mode commands
source ./scripts/set_kt_alias.sh
ktdev engine start --debug-mode 
  1. Then choose the "Engine-remote-debug" run configuration in the "run panel"
  2. Press the "debug" button
  3. Make a call to the engine's server (you can use the Kurtosis CLI or Postman) in order to reach out the breakpoint in the code
  4. Use the debug panel to inspect the variables value and continue with the debug flow
  5. You can debug the CLI and the Kurtosis engine's server at the same time by running it with ktdebug instead of ktdev mentioned in a previous step, remember to run both remote debug configurations in the Goland IDE.
source ./scripts/set_kt_alias.sh
ktdebug engine start

Additional steps if you are debugging Kurtosis engine in K8s:

  1. Upload the engine's image for debug to the K8s cluster
# for example:
k3d image load kurtosistech/engine:5ec6eb-dirty-debug
  1. Run the port-forward script before pressing the debug button in Golang (in another terminal instance) to bind the host's port to the container's debug server port
scripts/port-forward-engine-debug.sh
  1. Do not forget to run the Kurtosis gateway after calling the engine's server (in another terminal instance also)
ktdev gateway

For running Kurtosis APIC with Golang remote debug:

  1. Run the main build script with the first argument debug_mode as true. This will generate a new Kurtosis APIC container image which will contain the debug suffix in the name.
scripts/build.sh true 
  1. Add the breakpoint in the line where you want to stop the cursor.
  2. Run the Kurtosis engine in debug more or not depending on if you want to also debug the engine.
source ./scripts/set_kt_alias.sh
ktdev engine start --debug-mode

OR

ktdev engine start # you will have to build the engine in the regular way `engine/scripts/build.sh` if you choose this version
  1. Add a new enclave in debug mode with the enclave add command and passing the debug-mode flag. This will create a new APIC container with the debug server port bounded and waiting for a connection. IMPORTANT: You can only run one enclave in debug mode so far, if you want to run another one it will fail due the debug port is already in use,
ktdev enclave add --debug-mode 
  1. Then choose the "APIC-remote-debug" run configuration in the "run panel"
  2. Press the "debug" button
  3. Find the APIC's GRPC server port in the host machine (you can check it in Docker Desktop or using the Docker CLI, it's the one bounded with the container's 7443 port)
  4. Make a call to the APIC's server (you can use the Kurtosis CLI or Postman) in order to reach out the breakpoint in the code
  5. Use the debug panel to inspect the variables value and continue with the debug flow
  6. You can debug the CLI, the Kurtosis engine's server and the Kurtosis APIC's server at the same time by running it with ktdebug instead of ktdev mentioned in a previous step, remember to run the three remote debug configurations in the Goland IDE.
source ./scripts/set_kt_alias.sh
ktdev engine start --debug-mode
ktdebug enclave add

Additional steps if you are debugging Kurtosis engine in K8s:

  1. Upload the APIC's image for debug to the K8s cluster
# for example:
k3d image load kurtosistech/core:5ec6eb-dirty-debug
  1. Run the port-forward script before pressing the debug button in Golang (in another terminal instance) to bind the host's port to the container's debug server port
scripts/port-forward-apic-debug.sh enclave-name
  1. Do not forget to run the Kurtosis gateway after calling the APIC's server (in another terminal instance also)
ktdev gateway

kurtosis's People

Contributors

adschwartz avatar barnabasbusa avatar chunha-park avatar dartoxian avatar dependabot[bot] avatar eliziario avatar galenmarchetti avatar h4ck3rk3y avatar joscha avatar kamilchodola avatar kurtosisbot avatar laurentluce avatar leeederek avatar leoporoli avatar leovct avatar lostbean avatar mieubrisse avatar omahs avatar omar711 avatar peeeekay avatar tedim52 avatar thabokani avatar thylocine33 avatar victorcolombo avatar vuittont60 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kurtosis's Issues

[FR]: Remove UUIDs from tab-complete

Background and motivation

Even when I have one enclave, it's annoying that tab-complete requires me to pick from a list of options. I don't actually believe nearly anyone is going to use tab-complete on UUIDs, and it's much nicer to have TAB with a single enclave/service/file automatically complete the name.

Current behavior

Press TAB, then type the first few letters of the enclave name, then press TAB again

Desired behavior

UUIDs are removed from the tab-completion results, and TAB will autocomplete if there's only one entry

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[efficiency]: table_printer doesnt correctly align for colored input - fix it

Background and motivation

We have started supporting colored outputs for enclave ls and inspect with bold table headers.

Current behavior

In the following #195 we made the column headers bold and allowed for colors to be passed in

  1. If someone isn't passing colored input in rows, there is no problem
  2. If someone is passing the colored columns at the end, there is no problem
  3. If a colored column is in the middle then alignment breaks a little

Desired behavior

We don't need the hacks that #195 introduces and the table_printer API just works independently of text being colored or not

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[Docs]: README on Kurtosis Repo has WARN-level logs in output

Where did you see an issue in our documentation?

No response

Description of the issue

Output README on main repo was run by someone on an outdated version of Kurtosis, so it has WARN level logs.

WARN[2023-02-10T13:32:32-03:00] You can manually upgrade the CLI tool following these instructions: https://docs.kurtosis.com/install#upgrading```

[FR]: `PostHttpRequest` body should be optional, and default to emptystring

Background and motivation

Writing quickstart; don't see why this needs to be mandatory

Current behavior

Requires the user to specify a body

Desired behavior

User specifies a body only if they need to

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[FR]: Simplify `--enclave-identifier` flag in `kurtosis run` to `--enclave`

Background and motivation

--enclave-identifier is very long; --enclave is much cleaner now that we have identifiers.

NOTE: There's a typo in the current helptext in that it's missing a space; this should get fixed too:

...script or package will be ran.An enclave with this...

Current behavior

The flag is called --enclave-identifier

Desired behavior

The flag should be called --enclave

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[bug]: Kurtosis

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.4 (but kurtosis version says api/golang/v0.68.4)

(Optional) What is your metrics user ID?

No response

What is the severity of this bug?

Critical, I am blocked and Kurtosis is unusable to us because of this bug.

Description & steps to reproduce

kurtosis engine restart fails upon latest version of Kurtosis

Relevant log output

11:21:01 /Users/argos/Library/CloudStorage/[email protected]/My Drive/project-support/making-kurtosis-order-of-magnitude-easier  kurtosis engine restart
WARN[2023-03-09T11:21:03-03:00] An error occurred trying to check if you are running the latest Kurtosis CLI version.
WARN[2023-03-09T11:21:03-03:00] Your current version is 'api/golang/v0.68.4'
WARN[2023-03-09T11:21:03-03:00] You can manually upgrade the CLI tool following these instructions: https://docs.kurtosis.com/install#upgrading
INFO[2023-03-09T11:21:03-03:00] Restarting Kurtosis engine...
INFO[2023-03-09T11:21:03-03:00] No Kurtosis engine was found; attempting to start one...
INFO[2023-03-09T11:21:03-03:00] Pulling image 'kurtosistech/engine:api/golang/v0.68.4'...
WARN[2023-03-09T11:21:03-03:00] Failed to pull the latest version of engine server image 'kurtosistech/engine:api/golang/v0.68.4'; you may be running an out-of-date version
INFO[2023-03-09T11:21:03-03:00] Pulling image 'kurtosistech/engine:api/golang/v0.68.4'...
Error: An error occurred starting the Kurtosis engine
 --- at /home/circleci/project/cli/cli/commands/engine/restart/restart.go:83 (run) ---
Caused by: An error occurred starting the engine with the engine existence guarantor
 --- at /home/circleci/project/cli/cli/helpers/engine_manager/engine_manager.go:154 (EngineManager.StartEngineIdempotentlyWithDefaultVersion) ---
Caused by: An error occurred guaranteeing that a Kurtosis engine is running
 --- at /home/circleci/project/cli/cli/helpers/engine_manager/engine_manager.go:228 (EngineManager.startEngineWithGuarantor) ---
Caused by: An error occurred launching the engine server container
 --- at /home/circleci/project/cli/cli/helpers/engine_manager/engine_existence_guarantor.go:153 (engineExistenceGuarantor.VisitStopped) ---
Caused by: An error occurred launching the engine server container with default version tag 'api/golang/v0.68.4'
 --- at /home/circleci/project/engine/launcher/engine_server_launcher/engine_server_launcher.go:57 (EngineServerLauncher.LaunchWithDefaultVersion) ---
Caused by: An error occurred launching the engine server container with environment variables 'map[SERIALIZED_ARGS:{"grpcListenPortNum":9710,"grpcProxyListenPortNum":9711,"logLevelStr":"debug","imageVersionTag":"api/golang/v0.68.4","metricsUserId":"0497e811755b8f775ef0d99cd22b1ef221708b5a95119857a310cbc4f2eabcae","didUserAcceptSendingMetrics":true,"kurtosisBackendType":"docker","kurtosisBackendConfig":{}}]'
 --- at /home/circleci/project/engine/launcher/engine_server_launcher/engine_server_launcher.go:105 (EngineServerLauncher.LaunchWithCustomVersion) ---
Caused by: An error occurred creating the engine using image 'kurtosistech/engine' with tag 'api/golang/v0.68.4'
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/metrics_reporting/metrics_reporting_kurtosis_backend.go:52 (MetricsReportingKurtosisBackend.CreateEngine) ---
Caused by: An error occurred starting the Kurtosis engine container
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/docker_kurtosis_backend/engine_functions/create_engine.go:138 (CreateEngine) ---
Caused by: An error occurred fetching image 'kurtosistech/engine:api/golang/v0.68.4'
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/docker_manager/docker_manager.go:418 (DockerManager.CreateAndStartContainer) ---
Caused by: Failed to pull Docker image 'kurtosistech/engine:api/golang/v0.68.4' from remote image repository
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/docker_manager/docker_manager.go:994 (DockerManager.FetchImage) ---
Caused by: Failed to pull image kurtosistech/engine:api/golang/v0.68.4
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/docker_manager/docker_manager.go:1011 (DockerManager.PullImage) ---
Caused by: invalid reference format

Desired behavior

kurtosis engine restart should work seamlessly

[Docs]: `request` duplicates docs from the XXXHttpRequestRecipes on Starlark Types

Where did you see an issue in our documentation?

https://docs.kurtosis.com/reference/starlark-instructions#request

Description of the issue

Before we had the "Starlark Types" dedicated page, we were inlining the Get/PostHttpRequestRecipe params under request SL instruction. This legacy is left over in what's there now:

get_request_recipe = GetHttpRequestRecipe(
    # The port ID that is the server port for the request
    # MANDATORY
    port_id = "my_port",

    # The endpoint for the request
    # MANDATORY
    endpoint = "/endpoint?input=data",

    # The extract dictionary takes in key-value pairs where:
    # Key is a way you refer to the extraction later on
    # Value is a 'jq' string that contains logic to extract from response body
    # OPTIONAL
    extract = {
        "extracted-field": ".name.id",
    },
)

For all places in the request docs, we should direct the users to the official docs of the Get/PostHttpRequestRecipe on the Starlark Types page for full details, and remove the explanatory comments (e.g. MANDATORY) on the properties of the recipes under the request section.

[FR]: Remove the `--id` flag to `enclave add`

Background and motivation

This is deprecated, and has been for several months now

Current behavior

enclave add --id is a passthrough to enclave add --name

Desired behavior

enclave add --name is the only way to set an enclave's name

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[bug]: Typo when analytics are enable or disable

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.5

(Optional) What is your metrics user ID?

0497e811755b8f775ef0d99cd22b1ef221708b5a95119857a310cbc4f2eabcae

What is the severity of this bug?

Papercut, this bug is frustrating, but I have a workaround.

Description & steps to reproduce

Enabling and disabling analytics prints:

INFO[2023-03-09T22:21:42-03:00] Analytics tracking is now enable
INFO[2023-03-09T22:21:35-03:00] Analytics tracking is now disable

Should have a "d" on the end of both

Relevant log output

No response

Desired behavior

"enabled" "disabled"

[FR]: Detect `EXPOSE` port bindings in a Docker image

Background and motivation

I'm trying to run the Postgres image. According to the docs, you don't actually have to set any ports whatsoever. I believe this is because Docker is automatically detecting the EXPOSE directive in the Postgres image's Dockerfile.

Current behavior

You must specify all ports in the ServiceConfig.ports directive. This is painful for me, as I'm not even sure what the Postgres port is (will mean I need to dig into their Dockerfile).

Desired behavior

Kurtosis autodetects the EXPOSE directives in the image's Dockerfile, autoassigns them a port ID, and they're usable without any knowledge from the user.

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[bug]: Kurtosis won't upgrade to latest version

What version of the Kurtosis CLI were you running when you encountered this bug?

0.66.10

(Optional) What is your metrics user ID?

No response

What is the severity of this bug?

Critical, I am blocked and Kurtosis is unusable to us because of this bug.

Description & steps to reproduce

I can't upgrade Kurtosis to latest, even with brew tap --repair

 11:09:39 /Users/argos/Library/CloudStorage/[email protected]/My Drive/project-support/making-kurtosis-order-of-magnitude-easier  brew tap --repair
 11:10:18 /Users/argos/Library/CloudStorage/[email protected]/My Drive/project-support/making-kurtosis-order-of-magnitude-easier  brew upgrade kurtosis-cli
Warning: kurtosis-tech/tap/kurtosis-cli 0.66.10 already installed
 11:10:24 /Users/argos/Library/CloudStorage/[email protected]/My Drive/project-support/making-kurtosis-order-of-magnitude-easier  kurtosis version
WARN[2023-03-09T11:10:56-03:00] You are running an old version of the Kurtosis CLI; we suggest you to update it to the latest version, '0.68.2'
WARN[2023-03-09T11:10:56-03:00] You can manually upgrade the CLI tool following these instructions: https://docs.kurtosis.com/install#upgrading
0.66.10

Relevant log output

No response

Desired behavior

I should be able to upgrade Kurtosis to latest

[FR]: Print enclave name when running `kurtosis clean -a` (in addition to the UUID)

Observed Behavior

When I run kurtosis clean -a with a running or stopped enclave, Kurtosis will remove all artifacts and prints out the enclave UUID.

image

Expected Behavior

I'd like to be able to see the UUID and the names of the artifacts that were cleaned.

Why

Printing both the UUID and the name of the artifacts that were cleaned helps with readability and makes the print outputs more consistent with other commands, such as kurtosis enclave ls. kurtosis service add and kurtosis enclave inspect which prints out both UUID and names for enclaves and containers.

Example output of kurtosis enclave inspect:
image

Example output of kurtosis enclave ls:
image

Example output of kurtosis service add:
image

[bug]: `wait` hangs forever, rather than throwing an error, when you don't specify the service to wait upon

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.8

(Optional) What is your metrics user ID?

0497e811755b8f775ef0d99cd22b1ef221708b5a95119857a310cbc4f2eabcae

What is the severity of this bug?

Painful, this is causing significant friction in my workflow.

Description & steps to reproduce

Write a wait without specifying the service:

    plan.wait(
        ExecRecipe(command = psql_command_prefix + ["-c", "\\l"]),
        "code",
        "==",
        0,
    )

Run, and observe it hang forever without throwing an error.

Relevant log output

No response

Desired behavior

An error should be thrown, because we're not actually specifying where we're running the wait.

[FR]: Empty & reload enclave by watching SL script/package

Background and motivation

I'm iterating on the quickstart Starlark script. This involves a lot of "make a change, then kurtosis run, repeat". Pains:

  • My enclave name changes every time
  • I have to wait the 3s for a new enclave to boot up every time I want to rerun
  • Sometimes I make an immediate, dumb error (e.g. Starlark typo). So I make a half-second change, then need to wait another

Current behavior

  1. Make change to Starlark script
  2. Try a kurtosis run, which involves a ~3s enclave startup time before the SL even runs
  3. Fix errors or add more code
  4. Repeat

Desired behavior

I can tell Kurtosis to start watching a SL script or package. Any time I write a change, Kurtosis will empty out the enclave and redo everything as if I ran kurtosis run ....... I'll also need to be able to define parameters for this live-reloading, if my SL script or package is parameterized.

This will be extra useful when we have static port bindings, so that a user can set up static port bindings for an enclave + servicename + port ID, and the enclave ID won't keep changing under them.

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[bug]: a `request` command that returns a non-200 exit code still passes

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.8

(Optional) What is your metrics user ID?

0497e811755b8f775ef0d99cd22b1ef221708b5a95119857a310cbc4f2eabcae

What is the severity of this bug?

Painful, this is causing significant friction in my workflow.

Description & steps to reproduce

Run the following package:
package.zip

Relevant log output

> request recipe=PostHttpRequestRecipe(port_id="http", endpoint="/actor", body="{\"first_name\":\"Kevin\",\"last_name\":\"Bacon\"}", content_type="application/json", extract="")
Request had response code '503' and body "{\"code\":\"PGRST002\",\"details\":null,\"hint\":null,\"message\":\"Could not query the database for the schema cache. Retrying.\"}"

Desired behavior

A non-200 should, by default, be a failed Starlark instruction

[FR]: `kurtosis files ls`

Background and motivation

I'm building the quickstart, and I wanted to see if my upload_files worked (though I assuemd it did because the plan worked ;))

Current behavior

Desired behavior

kurtosis files ls shows the files artifacts in an enclave

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[Docs]: Remove deprecation warnings for old recipes

Where did you see an issue in our documentation?

https://docs.kurtosis.com/reference/starlark-types/#execrecipe

Description of the issue

On both https://docs.kurtosis.com/reference/starlark-types/#execrecipe and https://docs.kurtosis.com/reference/starlark-instructions#wait , there are loud warnings about recipe stuff that I believe was deprecated last year. We can probably just do the break now, and remove the warnings. Adding @victorcolombo because he knows most about this

[FR]: Default `wait` timeout should be 15s, not 15m

Background and motivation

I slammed the following wait into my Starlark using the best of my knowledge:

    plan.wait(
        ExecRecipe(command = psql_command_prefix + ["-c", "\\l"]),
        "code",
        "==",
        0,
    )

however, it's hanging forever, even though the actual request is working. I strongly suspect something is misconfigured with my assertion. However, this hung for a veryyyyy long time, and I saw in the docs that the default timeout is 15m (!!!)

Current behavior

Default waits will wait for 15m

Desired behavior

Default timeout of waits is 15s

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[FR]: Enclave identifier is optional

Background and motivation

Even with tab-complete, it's a hassle to keep specifying enclave identifier.

Current behavior

The user must always specify the enclave ID

Desired behavior

All the enclave subcommands (inspect, dump, etc.) default to the most recently-added enclave. The user can run a command (enclave use?) which will change the default to the enclave identifier of their choice, for as long as that enclave exists. If that enclave no longer exists, the user gets a warning that Kurtosis is reverting back to the old default.

NOTE: depending on what users want, a future improvement could be allowing users to configure the default strategy (e.g. an alternative would be, "whichever enclave you interacted with last").

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[FR]: remove all "API container" fields in `enclave inspect` output (including the result of `kurtosis run`)

Background and motivation

The quickstart user experience testers got confused by this, and it's not useful or necessary for users, plus pollutes the enclave inspect output.

Current behavior

All the "API Container" rows get printed

Desired behavior

All these rows in enclave inspect output are removed

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[FR]: Show the output of `enclave inspect` after a `kurtosis run`

Background and motivation

I'm dev'ing on the quickstart, which involves MANY short loops of "make a small change to my SL, then kurtosis run". I always have to do an enclave inspect afterwards. This requires me to do two things.

Current behavior

See above

Desired behavior

After every kurtosis run, I get the enclave inspect output by default. Would play very nicely with #162

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[bug]: `wait` nondeterministically hangs when it should succeed

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.8

(Optional) What is your metrics user ID?

0497e811755b8f775ef0d99cd22b1ef221708b5a95119857a310cbc4f2eabcae

What is the severity of this bug?

Critical, I am blocked and Kurtosis is unusable to us because of this bug.

Description & steps to reproduce

I'm running the attached SL package.

package.zip

When it gets to the wait, it hangs:

 14:01:01 /private/tmp/test  kurtosis clean -a && kurtosis run .
INFO[2023-03-14T14:06:20-03:00] Cleaning old Kurtosis engine containers...
INFO[2023-03-14T14:06:20-03:00] Successfully cleaned old Kurtosis engine containers
INFO[2023-03-14T14:06:20-03:00] Cleaning enclaves...
INFO[2023-03-14T14:06:20-03:00] Successfully removed the following enclaves:
c9344cd3f2b149bb874003e762169c89	falling-steppe
INFO[2023-03-14T14:06:20-03:00] Successfully cleaned enclaves
INFO[2023-03-14T14:06:20-03:00] Creating a new enclave for Starlark to run inside...
INFO[2023-03-14T14:06:23-03:00] Enclave 'gloomy-stream' created successfully
INFO[2023-03-14T14:06:23-03:00] Executing Starlark package at '/private/tmp/test' as the passed argument '.' looks like a directory
INFO[2023-03-14T14:06:23-03:00] Compressing package 'github.com/mieubrisse/quickstart' at '.' for upload
INFO[2023-03-14T14:06:24-03:00] Uploading and executing package 'github.com/mieubrisse/quickstart'

> upload_files src="github.com/mieubrisse/quickstart/dvdrental.tar"
Files with artifact name 'divine-hedge' uploaded with artifact UUID 'fd636959acb94e95abb34a380a1736fc'

> add_service service_name="postgres" config=ServiceConfig(image="postgres:15.2-alpine", ports={"postgres": PortSpec(number=5432, application_protocol="postgresql")}, files={"/seed-data": "divine-hedge"}, env_vars={"POSTGRES_DB": "app_db", "POSTGRES_PASSWORD": "password", "POSTGRES_USER": "app_user"})
Service 'postgres' added with service UUID '505af683c6464a73af8b7910b36f929b'

> wait recipe=ExecRecipe(command=["psql", "-U", "app_user", "-d", "app_db", "-c", "\\l"]) field="code" assertion="==" target_value=0
⡿   ████████████████████ Execution in progress

The Postgres is indeed up and running per enclave inspect:

UUID:                                 d7edddc9cb46
Enclave Name:                         gloomy-stream
Enclave Status:                       RUNNING
Creation Time:                        Tue, 14 Mar 2023 14:06:20 -03
API Container Status:                 RUNNING
API Container Host GRPC Port:         127.0.0.1:56282
API Container Host GRPC Proxy Port:   127.0.0.1:56283

========================================== User Services ==========================================
UUID           Name       Ports                                                Status
505af683c646   postgres   postgres: 5432/tcp -> postgresql://127.0.0.1:56300   RUNNING

And the same command works via service shell:

ae1ef1d423f0:/# "psql" "-U" "app_user" "-d" "app_db" "-c" "\\l"
                                                List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    | ICU Locale | Locale Provider |   Access privileges
-----------+----------+----------+------------+------------+------------+-----------------+-----------------------
 app_db    | app_user | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            |
 postgres  | app_user | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            |
 template0 | app_user | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/app_user          +
           |          |          |            |            |            |                 | app_user=CTc/app_user
 template1 | app_user | UTF8     | en_US.utf8 | en_US.utf8 |            | libc            | =c/app_user          +
           |          |          |            |            |            |                 | app_user=CTc/app_user
(4 rows)

ae1ef1d423f0:/# echo $?
0

My enclave dump output is attached:

enclave-dump.zip

This seems to be nondeterministic, because this same command worked previously

Relevant log output

No response

Desired behavior

wait should work deterministically

[FR]: Make the `kurtosis feedback` command guide users to easier ways of feedback

Background and motivation

I expected kurtosis feedback to guide me in filing feedback. However, I just got the display with the links. If I hadn't seen the feature get built, I wouldn't know that:

  1. you can pass in flags to go directly to the feedback
  2. I should even pass in -h to see what those flags are
  3. I can type a message as the first argument to auto-populate it

(Also, quick aside, but the message I type in for Github gets discarded)

Current behavior

kurtosis feedback prints a block of text with links

Desired behavior

Running kurtosis feedback guides me to giving feedback in easier ways (flag, passing in the message)

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[FR]: Print the out-of-date Kurtosis version WARN message once per hour

Background and motivation

This error message is really, really annoying. It actually does force me to upgrade though, so it's very good for what we want it - just would like this to be less annoying (and the Waku folks agree).

Current behavior

The pester happens on every kurtosis CLI run

Desired behavior

The pester happens maximum once per hour.

(Impl note: we can easily accomplish this by dropping a file with the last pester time in the "data" directory of XDG. Use the codepath for the CLI actually determining what the latest version is as an example. @leoporoli built this and it works very well).

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[FR]: service object returned by `add_service` should have a `name` field

Background and motivation

I'm creating a Postgres service, and then want to attach a wait to it. Rather than needing to reuse a hardcoded const service name "postgres", I expected to be able to use postgres.name (postgres is the name of the variable that I store the result of add_service in).

Current behavior

User needs to hardcode the service name again

Desired behavior

The result of add_service and add_services has the service name.

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[Docs]: It's unclear what the `extract` field is of the XXXHttpRequest objects from the comment above them

Where did you see an issue in our documentation?

https://docs.kurtosis.com/reference/starlark-types/#httprequestrecipe

Description of the issue

The current comment on extract is:

            # The extract dictionary takes in key-value pairs where:
            # Key is a way you refer to the extraction later on
            # Value is a 'jq' string that contains logic to extract from response body
            # # To lean more about jq, please visit https://devdocs.io/jq/

This defines what it is, but not how it's useful. Something better would be explaining what an extract is, and how you'd use it.

RELEVANCE: I wasn't actually sure if I needed an extract or not

[FR]: build `kurtosis twitter` command, to send users to our Twitter account

Background and motivation

Analogous to kurtosis discord

Current behavior

Nothing exists to send users to the Discord

Desired behavior

kurtosis twitter opens Kurtosis Twitter in the user's browser

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[bug]: `kurtosis clean -a` only prints the name of *some* enclaves, not all.

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.5

(Optional) What is your metrics user ID?

07d14724970e58810d93e5520436603ca4c113ad9bd608bec371f9122534cf4b

What is the severity of this bug?

Papercut, this bug is frustrating, but I have a workaround.

Description & steps to reproduce

When I have many enclaves and run kurtosis clean -a, I see that Kurtosis removes both running and stopped enclaves and prints out their UUID and name. However, I noticed that not all of the enclave names got printed (even though the removed enclave UUIDs got printed). See screenshots below.

I had many running enclaves:
Screenshot 2023-03-09 at 4 26 27 PM

But when I ran kurtosis clean -a, it only printed the names of some of the enclaves that were removed:
Screenshot 2023-03-09 at 4 26 51 PM

Relevant log output

See screenshots above.

Desired behavior

I would expect that everytime I run kurtosis clean -a, both the UUID and name of all removed enclaves will get printed for me.

[FR]: add options to `kurtosis feedback` to include zips of package directory and enclave dump

Background and motivation

In writing #177 I wanted to provide good debugging info, but I had to do a lot of hassle to dump the enclave, zip it up, zip up the SL package directory, and then include both of them on the Github ticket. It would have been a lot nicer for me if kurtosis feedback handled this; I could have given higher-quality feedback much quicker.

Current behavior

User has to manually remember to do all the things

Desired behavior

Optional flag that, when provided, will zip up the provided files and attach them to the Github ticket

Optional flag that, when provided, will do an enclave dump of the specified enclave and attach it to the Github ticket

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[bug]: An `exec` that returns a non-0 exit code still passes

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.8

(Optional) What is your metrics user ID?

No response

What is the severity of this bug?

Painful, this is causing significant friction in my workflow.

Description & steps to reproduce

Run an exec that returns a non-0 exit code

Relevant log output

> exec recipe=ExecRecipe(service_name="postgres", command=["pg_restore", "-U", "app_user", "-d", "app_db", "--no-owner", "--role=app_user", "/seed-data/dvdrental.tar"])
Command returned with exit code '1' and the following output:
--------------------
pg_restore: error: could not open input file "/seed-data/dvdrental.tar": No such file or directory

--------------------

Desired behavior

The step should fail at execution

[FR]: Sort services in `enclave inspect` by service creation time

Background and motivation

Right now the current enclave inspect output sorts services on their UUID, which leads to crazy sorts:

Screen Shot 2023-03-09 at 15 56 12

It would be reasonable to sort based on the service creation time

Current behavior

Sort by UUID

Desired behavior

Sort by service creation time

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[FR]: In `enclave ls` and `enclave inspect`, show `STOPPED` as yellow and `RUNNING` as green

Background and motivation

In developing the quickstart, I had two services that crashed immediately upon startup. We can help call the user's attention to this by highlighting STOPPED as yellow and RUNNING as green.

Current behavior

RUNNING and STOPPED are both in normal white text

Desired behavior

RUNNING is green, and STOPPED is yellow

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[Docs]: All Starlark code examples should have a `,` after the final element

Where did you see an issue in our documentation?

Everywhere in the docs

Description of the issue

Because there's a tendency for the final property not to have a trailing comma (e.g. https://docs.kurtosis.com/reference/starlark-instructions#request:~:text=set_connection(%0A%20%20%20%20subnetworks%20%3D%20(%22subnetworkA%22%2C%20%22subnetworkB%22)%2C%0A%20%20%20%20config%20%3D%20connection_config%0A) ), the user can't actually reorder those lines if they please. Starlark allows for trailing-arg final commas, so we definitely should have them.

[FR]: Add new `kurtosis feedback` flags

Background & current behavior

When I run: kurtosis feedback "my feedback" --github, I end up on the Github issues page where I then have to use the Github UI to select what kind of Issue to file (docs, feature request, or bug report).

More often than not, I already know what kind of Github issue I want to file. Being able to specify my preferred feedback route using a flag to pass into the kurtosis feedback command would make it easier and smoother for me to submit feedback to the Kurtosis team.

Desired behavior

I would like to see 3 new flags added to the kurtosis feedback --github command:

  1. When I run: kurtosis feedback "my feedback" --github --bug a Github link opens up to the Bug Report Github issue template with the "Description and steps to reproduce" section pre-populated with "my feedback" (example)
  2. When I run: kurtosis feedback "my feedback" --github --fr a Github link opens up to the Feature Request Github issue template with the "Background and current behavior" section pre-populated with "my feedback" (example).
  3. When I run: kurtosis feedback "my feedback" --github --docs a Github link opens up to the Docs Issue Github issue template with the "Description of the issue" section pre-populated with "my feedback" (example).

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[bug]: A service rejected for not matching the name regex isn't clear what's actually going wrong

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.7

(Optional) What is your metrics user ID?

0497e811755b8f775ef0d99cd22b1ef221708b5a95119857a310cbc4f2eabcae

What is the severity of this bug?

Papercut, this bug is frustrating, but I have a workaround.

Description & steps to reproduce

I'm running the following SL:

    postgres = plan.add_service(
        "postgres:15.2-alpine",
        ServiceConfig(
            image = "postgres",
            ports = {
                POSTGRES_PORT_ID: PortSpec(5432, application_protocol = "postgresql"),
            },
            env_vars = {
                "POSTGRES_PASSWORD": POSTGRES_PASSWORD,
            },
        ),
    )

As you can see, I accidentally swapped the image & service names. This threw an error because : isn't part of the valid regex.

Relevant log output

WARN[2023-03-14T12:28:58-03:00] You are running an old version of the Kurtosis CLI; we suggest you to update it to the latest version, '0.68.8'
WARN[2023-03-14T12:28:58-03:00] You can manually upgrade the CLI tool following these instructions: https://docs.kurtosis.com/install#upgrading
INFO[2023-03-14T12:28:58-03:00] Creating a new enclave for Starlark to run inside...
INFO[2023-03-14T12:29:01-03:00] Enclave 'whispering-ravine' created successfully

> add_service service_name="postgres:15.2-alpine" config=ServiceConfig(image="postgres", ports={"postgres": PortSpec(number=5432, application_protocol="postgresql")}, env_vars={"POSTGRES_PASSWORD": "password"})
There was an error executing Starlark code
An error occurred executing instruction (number 1) at DEFAULT_PACKAGE_ID_FOR_SCRIPT[5:32]:
add_service(service_name="postgres:15.2-alpine", config=ServiceConfig(image="postgres", ports={"postgres": PortSpec(number=5432, application_protocol="postgresql")}, env_vars={"POSTGRES_PASSWORD": "password"}))
 --- at /home/circleci/project/core/server/api_container/server/startosis_engine/startosis_executor.go:62 (StartosisExecutor.Execute.func1) ---
Caused by: Unexpected error occurred starting service 'postgres:15.2-alpine'
 --- at /home/circleci/project/core/server/api_container/server/startosis_engine/kurtosis_instruction/add_service/add_service.go:130 (AddServiceCapabilities.Execute) ---
Caused by: An error occurred while trying to get the user service container attributes for user service with UUID 'ad0ed246a194492eacf7bfea0fd0725e'
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/docker_kurtosis_backend/user_services_functions/start_user_services.go:320 (createStartServiceOperation.func1) ---
Caused by: An error occurred creating the user service Docker container name object
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/object_attributes_provider/enclave_object_attributes_provider.go:215 (dockerEnclaveObjectAttributesProviderImpl.ForUserServiceContainer) ---
Caused by: An error occurred creating Docker object name from string 'postgres:15.2-alpine--ad0ed246a194492eacf7bfea0fd0725e'
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/object_attributes_provider/enclave_object_attributes_provider.go:447 (dockerEnclaveObjectAttributesProviderImpl.getNameForUserServiceContainer) ---
Caused by: Object name 'postgres:15.2-alpine--ad0ed246a194492eacf7bfea0fd0725e' doesn't match Docker docker object name regex '^[a-zA-Z0-9-._]+$'
 --- at /home/circleci/project/container-engine-lib/lib/backend_impls/docker/object_attributes_provider/docker_object_name/docker_object_name.go:23 (CreateNewDockerObjectName) ---

Error encountered running Starlark code.

Desired behavior

Right now, the error is quite obtuse, talking about "Docker objects" and so on. Much better would be something saying that my service name doesn't pass validation.

[FR]: Deserialize `args` object as a dictionary, not a struct

Background and motivation

I'm building the quickstart, and the args object is a top-level struct, but nested objects are dictionaries. This is very confusing.

Current behavior

args object is a struct

Desired behavior

args object, and all its nested objects, are dictionaries

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[FR]: `wait` should default to `code` `==` (`0` for exec, `200` for requests)

Background and motivation

There's a bunch of information that's work to specify with a wait, and requires me knowing what the wait fields are and how they work. I'd have expected I just toss in a recipe and Kurtosis figures it out.

Current behavior

I have to specify the assertion, the comparison, and the value.

Desired behavior

Kurtosis defaults to code ==, and uses 0 for execs and 200 for requests.

Docs are, of course, updated to reflect this

How important is this feature or improvement to you?

Nice to have, this feature would make using Kurtosis more enjoyable.

[FR]: all TCP ports for a service should automatically get a wait that checks if they're open

Background and motivation

When building the quickstart, I found it to be quite cumbersome to build the various recipes (particularly HTTP). I realized that I'm already telling Kurtosis the ports, and if Kurtosis can do a simple "don't proceed until all ports are open" check then we'd solve a LOT of user pain.

Current behavior

User has to manually wire up the waits in a bunch of different ways, and can ONLY do HTTP requests (which require a ton of information to configure).

Desired behavior

By default, all TCP ports that get defined on a service come with a simple TCP-level "can Kurtosis connect to the port?" wait.

The user can also add extra configuration to define:

  • Turning off the wait entirely
  • Timeouts
  • Initial delay

How important is this feature or improvement to you?

Painful, the lack of this feature makes using Kurtosis frictionful.

[bug]: `enclave add` has flag `--with-partitioning`

What version of the Kurtosis CLI were you running when you encountered this bug?

0.68.6

(Optional) What is your metrics user ID?

0497e811755b8f775ef0d99cd22b1ef221708b5a95119857a310cbc4f2eabcae

What is the severity of this bug?

Papercut, this bug is frustrating, but I have a workaround.

Description & steps to reproduce

Run enclave add -h. View that the flag is called --with-partitioning

Relevant log output

No response

Desired behavior

The flag should be called --with-subnetworks to match kurtosis run

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.