-
Notifications
You must be signed in to change notification settings - Fork 752
Plain mode: support port forwarding #3699
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| #!/usr/bin/env bash | ||
|
|
||
| # SPDX-FileCopyrightText: Copyright The Lima Authors | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| set -euxo pipefail | ||
|
|
||
| INSTANCE=nonplain-static-port-forward | ||
| TEMPLATE=hack/test-templates/static-port-forward.yaml | ||
|
|
||
| limactl delete -f $INSTANCE || true | ||
|
|
||
| limactl start --name=$INSTANCE --tty=false $TEMPLATE | ||
|
|
||
| limactl shell $INSTANCE -- bash -c 'until [ -e /run/nginx.pid ]; do sleep 1; done' | ||
| limactl shell $INSTANCE -- bash -c 'until systemctl is-active --quiet test-server-9080; do sleep 1; done' | ||
| limactl shell $INSTANCE -- bash -c 'until systemctl is-active --quiet test-server-9070; do sleep 1; done' | ||
|
|
||
| curl -sSf http://127.0.0.1:9090 | grep -i 'nginx' && echo 'Static port forwarding (9090) works in normal mode!' | ||
| curl -sSf http://127.0.0.1:9080 | grep -i 'Dynamic port 9080' && echo 'Dynamic port forwarding (9080) works in normal mode!' | ||
| curl -sSf http://127.0.0.1:9070 | grep -i 'Dynamic port 9070' && echo 'Dynamic port forwarding (9070) works in normal mode!' | ||
|
|
||
| limactl delete -f $INSTANCE | ||
| echo "All tests passed for normal mode - both static and dynamic ports work!" | ||
| # EOF |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,35 @@ | ||
| #!/usr/bin/env bash | ||
|
|
||
| # SPDX-FileCopyrightText: Copyright The Lima Authors | ||
| # SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
| set -euxo pipefail | ||
|
|
||
| INSTANCE=plain-static-port-forward | ||
| TEMPLATE=hack/test-templates/static-port-forward.yaml | ||
|
|
||
| limactl delete -f $INSTANCE || true | ||
|
|
||
| limactl start --name=$INSTANCE --plain=true --tty=false $TEMPLATE | ||
|
|
||
| limactl shell $INSTANCE -- bash -c 'until [ -e /run/nginx.pid ]; do sleep 1; done' | ||
|
|
||
| curl -sSf http://127.0.0.1:9090 | grep -i 'nginx' && echo 'Static port forwarding (9090) works in plain mode!' | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This line does not stop on error, because bash-5.3$ bash -c 'set -e; false && echo 1; echo 2; false; echo 3'
2This test script is unreliable. |
||
|
|
||
| if curl -sSf http://127.0.0.1:9080 2>/dev/null; then | ||
| echo 'ERROR: Dynamic port 9080 should not be forwarded in plain mode!' | ||
| exit 1 | ||
| else | ||
| echo 'Dynamic port 9080 is correctly NOT forwarded in plain mode.' | ||
| fi | ||
|
|
||
| if curl -sSf http://127.0.0.1:9070 2>/dev/null; then | ||
| echo 'ERROR: Dynamic port 9070 should not be forwarded in plain mode!' | ||
| exit 1 | ||
| else | ||
| echo 'Dynamic port 9070 is correctly NOT forwarded in plain mode.' | ||
| fi | ||
|
|
||
| limactl delete -f $INSTANCE | ||
| echo "All tests passed for plain mode - only static ports work!" | ||
| # EOF | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -51,6 +51,7 @@ declare -A CHECKS=( | |
| ["snapshot-offline"]="" | ||
| ["clone"]="" | ||
| ["port-forwards"]="1" | ||
| ["static-port-forwards"]="" | ||
| ["vmnet"]="" | ||
| ["disk"]="" | ||
| ["user-v2"]="" | ||
|
|
@@ -95,6 +96,12 @@ case "$NAME" in | |
| CHECKS["param-env-variables"]="1" | ||
| CHECKS["set-user"]="1" | ||
| ;; | ||
| "static-port-forward") | ||
| CHECKS["static-port-forwards"]="1" | ||
| CHECKS["port-forwards"]="" | ||
| CHECKS["container-engine"]="" | ||
| CHECKS["restart"]="" | ||
| ;; | ||
| "docker") | ||
| CONTAINER_ENGINE="docker" | ||
| ;; | ||
|
|
@@ -405,6 +412,13 @@ if [[ -n ${CHECKS["port-forwards"]} ]]; then | |
| set +x | ||
| fi | ||
|
|
||
| if [[ -n ${CHECKS["static-port-forwards"]} ]]; then | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this test performed in CI? |
||
| INFO "Testing static port forwarding functionality" | ||
| "${scriptdir}/test-plain-static-port-forward.sh" "$NAME" | ||
| "${scriptdir}/test-nonplain-static-port-forward.sh" "$NAME" | ||
| INFO "All static port forwarding tests passed!" | ||
| fi | ||
|
|
||
| if [[ -n ${CHECKS["vmnet"]} ]]; then | ||
| INFO "Testing vmnet functionality" | ||
| guestip="$(limactl shell "$NAME" ip -4 -j addr show dev lima0 | jq -r '.[0].addr_info[0].local')" | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,64 @@ | ||
| images: | ||
| - location: "https://cloud-images.ubuntu.com/releases/22.04/release/ubuntu-22.04-server-cloudimg-amd64.img" | ||
| arch: "x86_64" | ||
|
|
||
| provision: | ||
| - mode: system | ||
| script: | | ||
| apt-get update | ||
| apt-get install -y nginx python3 | ||
| systemctl enable nginx | ||
| systemctl start nginx | ||
|
|
||
| cat > /etc/systemd/system/test-server-9080.service << 'EOF' | ||
| [Unit] | ||
| Description=Test Server on Port 9080 | ||
| After=network.target | ||
|
|
||
| [Service] | ||
| Type=simple | ||
| User=root | ||
| ExecStart=/usr/bin/python3 -m http.server 9080 --bind 127.0.0.1 | ||
| Restart=always | ||
|
|
||
| [Install] | ||
| WantedBy=multi-user.target | ||
| EOF | ||
|
|
||
| cat > /etc/systemd/system/test-server-9070.service << 'EOF' | ||
| [Unit] | ||
| Description=Test Server on Port 9070 | ||
| After=network.target | ||
|
|
||
| [Service] | ||
| Type=simple | ||
| User=root | ||
| ExecStart=/usr/bin/python3 -m http.server 9070 --bind 127.0.0.1 | ||
| Restart=always | ||
|
|
||
| [Install] | ||
| WantedBy=multi-user.target | ||
| EOF | ||
|
|
||
| mkdir -p /var/www/html-9080 | ||
| mkdir -p /var/www/html-9070 | ||
|
|
||
| echo '<html><body><h1>Dynamic port 9080</h1></body></html>' > /var/www/html-9080/index.html | ||
| echo '<html><body><h1>Dynamic port 9070</h1></body></html>' > /var/www/html-9070/index.html | ||
|
|
||
| systemctl daemon-reload | ||
| systemctl enable test-server-9080 | ||
| systemctl enable test-server-9070 | ||
| systemctl start test-server-9080 | ||
| systemctl start test-server-9070 | ||
|
|
||
| portForwards: | ||
| - guestPort: 80 | ||
| hostPort: 9090 | ||
| static: true | ||
| - guestPort: 9080 | ||
| hostPort: 9080 | ||
| static: false | ||
| - guestPort: 9070 | ||
| hostPort: 9070 | ||
| static: false |
Uh oh!
There was an error while loading. Please reload this page.