Skip to content

Add a feature to the tailscale devcontainer to auto-set the operator #58

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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 21 additions & 3 deletions src/tailscale/tailscaled-devcontainer-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,21 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

# if an operator argument has been provided, set the operator to
# the specified value; if the value is the special value "$USER"
# then set the operator to the default user for the devcontainer.
#
# This is done before the sudo switchover so we have the actual
# user persisted.
if [[ -n "$OPERATOR" ]]; then
if [[ "$OPERATOR" == "\$USER" ]]; then
Copy link
Preview

Copilot AI Aug 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The string comparison uses escaped dollar sign '$USER' but the test scenario uses '$USER' without escaping. This comparison will never match the actual input from scenarios.json.

Suggested change
if [[ "$OPERATOR" == "\$USER" ]]; then
if [[ "$OPERATOR" == '$USER' ]]; then

Copilot uses AI. Check for mistakes.

OPERATOR=$(id -un)
fi
export OPERATOR
fi

if [[ $(id -u) -ne 0 ]]; then
if ! command -v sudo > /dev/null; then
if ! command -v sudo >/dev/null; then
>&2 echo "tailscaled could not start as root."
exit 1
fi
Expand All @@ -31,7 +44,6 @@ EOF
fi
fi


TAILSCALED_PID=""
TAILSCALED_SOCK=/var/run/tailscale/tailscaled.sock
TAILSCALED_LOG=/var/log/tailscaled.log
Expand Down Expand Up @@ -72,6 +84,12 @@ if [[ -n "$auth_key" ]]; then
if [[ -n "${CODESPACE_NAME}" ]]; then
hostnamearg="--hostname=${CODESPACE_NAME}"
fi
/usr/local/bin/tailscale up --accept-routes --authkey="$auth_key" $hostnamearg

operatorarg=""
if [[ -n "${OPERATOR}" ]]; then
operatorarg="--operator=${OPERATOR}"
fi

/usr/local/bin/tailscale up --accept-routes --authkey="$auth_key" $hostnamearg $operatorarg
Copy link
Preview

Copilot AI Aug 7, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The variables $hostnamearg and $operatorarg should be quoted to prevent word splitting and glob expansion issues if they contain spaces or special characters.

Suggested change
/usr/local/bin/tailscale up --accept-routes --authkey="$auth_key" $hostnamearg $operatorarg
/usr/local/bin/tailscale up --accept-routes --authkey="$auth_key" "$hostnamearg" "$operatorarg"

Copilot uses AI. Check for mistakes.

fi
fi
13 changes: 12 additions & 1 deletion test/tailscale/scenarios.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,16 @@
"features": {
"tailscale": {}
}
},
"tailscale_operator": {
"image": "ubuntu:latest",
"containerEnv": {
"TS_AUTH_KEY": "test-auth-key"
},
"features": {
"tailscale": {
"operator": "$USER"
}
}
}
}
}
19 changes: 19 additions & 0 deletions test/tailscale/tailscale_operator.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash
# Copyright (c) 2025 Tailscale Inc & AUTHORS All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

set -e

source dev-container-features-test-lib

# Wait for the auth key to be seen by the start script.
count=100
while ((count--)); do
[[ -f /tmp/test-auth-key-seen ]] && break
sleep 0.1
done

check "tailscale operator is set" bash -c 'tailscale debug prefs | grep -q OperatorUser'

reportResults
4 changes: 3 additions & 1 deletion test/tailscale/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,6 @@ if [[ -n "$VERSION" ]]; then
check "version is correct" bash -c "tailscale version --daemon | grep -q $VERSION"
fi

reportResults
check "tailscale operator is not set" bash -c '! ( tailscale debug prefs | grep -q OperatorUser )'

reportResults
Loading