Showing preview only (4,471K chars total). Download the full file or copy to clipboard to get everything.
Repository: telepresenceio/telepresence
Branch: release/v2
Commit: afb4f787ef2a
Files: 862
Total size: 4.1 MB
Directory structure:
gitextract_r2gzeu42/
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── Bug_report.md
│ │ └── Feature_request.md
│ ├── actions/
│ │ ├── install-dependencies/
│ │ │ └── action.yaml
│ │ └── upload-logs/
│ │ └── action.yaml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── dev.yaml
│ ├── go-dependency-submission.yaml
│ ├── image-scan.yaml
│ ├── licenses.yaml
│ ├── release-teleroute.yaml
│ ├── release.yaml
│ ├── stale.yaml
│ └── unit_tests.yaml
├── .gitignore
├── .golangci.yml
├── .mailmap
├── .protolint.yaml
├── CHANGELOG.OLD.md
├── CHANGELOG.yml
├── CLAUDE.md
├── CODE-OF-CONDUCT.md
├── CODEOWNERS
├── DEPENDENCIES.md
├── DEPENDENCY_LICENSES.md
├── GOVERNANCE-maintainer.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── SECURITY.md
├── build-aux/
│ ├── INSTALLERS.md
│ ├── admission_controller_tls/
│ │ └── main.go
│ ├── docker/
│ │ └── images/
│ │ ├── Dockerfile.client
│ │ ├── Dockerfile.routecontroller
│ │ ├── Dockerfile.traffic
│ │ └── Dockerfile.winbuild
│ ├── genversion/
│ │ └── main.go
│ ├── image-importer.yaml
│ ├── main.mk
│ ├── maintenance.mk
│ ├── pkg-installer/
│ │ ├── Distribution.xml
│ │ ├── build-pkg.sh
│ │ ├── io.telepresence.rootd.plist
│ │ ├── postinstall
│ │ ├── syslog.conf
│ │ ├── telepresence-rootd
│ │ ├── uninstall
│ │ └── welcome.rtf
│ ├── prelude.mk
│ ├── systemd-installer/
│ │ ├── .gitignore
│ │ ├── build-packages.sh
│ │ ├── config.yml
│ │ ├── nfpm.yaml.in
│ │ ├── postinstall.sh
│ │ ├── postremove.sh
│ │ ├── preremove.sh
│ │ ├── telepresence-rootd.service
│ │ └── uninstall.sh
│ ├── tools.mk
│ ├── unparsable-packages.yaml
│ ├── winmake.bat
│ └── wix-installer/
│ ├── Dialogs_en-us.wxl
│ ├── MainPackage.wxs
│ ├── Makefile
│ ├── Telepresence.wxs
│ ├── config.yml
│ ├── tpwrapper.go
│ └── txt2rtf.ps1
├── charts/
│ ├── chart.go
│ └── telepresence-oss/
│ ├── .helmignore
│ ├── Chart.yaml
│ ├── README.md
│ ├── templates/
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── agentInjectorWebhook.yaml
│ │ ├── certificate.yaml
│ │ ├── clientRbac/
│ │ │ ├── cluster-scope.yaml
│ │ │ ├── connect.yaml
│ │ │ └── namespace-scope.yaml
│ │ ├── deployment.yaml
│ │ ├── issuer.yaml
│ │ ├── pre-delete-hook.yaml
│ │ ├── routecontroller-daemonset.yaml
│ │ ├── routecontroller-rbac.yaml
│ │ ├── service.yaml
│ │ ├── tests/
│ │ │ └── test-connection.yaml
│ │ ├── trafficManager-configmap.yaml
│ │ └── trafficManagerRbac/
│ │ ├── cluster-scope.yaml
│ │ ├── namespace-scope.yaml
│ │ ├── service-account.yaml
│ │ └── webhook-secret.yaml
│ ├── values.schema.yaml
│ └── values.yaml
├── cmd/
│ ├── cobraparser/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── generate/
│ │ │ └── generate.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── types/
│ │ └── commandinfo.go
│ ├── routecontroller/
│ │ └── main.go
│ └── teleroute/
│ ├── .gitignore
│ ├── DEVELOPING.md
│ ├── Dockerfile
│ ├── Makefile
│ ├── config.json
│ ├── driver/
│ │ ├── driver.go
│ │ ├── network.go
│ │ └── options.go
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── docs/
│ ├── CONTRIBUTING.md
│ ├── README.md
│ ├── common/
│ │ └── quantity.md
│ ├── community.md
│ ├── compare/
│ │ └── mirrord.md
│ ├── concepts/
│ │ ├── devloop.md
│ │ ├── faster.md
│ │ └── intercepts.md
│ ├── doc-links.yml
│ ├── faqs.md
│ ├── helm/
│ │ └── values.schema.json
│ ├── howtos/
│ │ ├── cluster-in-vm.md
│ │ ├── docker-compose.md
│ │ ├── docker.md
│ │ ├── engage.md
│ │ ├── large-clusters.md
│ │ └── mtls.md
│ ├── install/
│ │ ├── client.md
│ │ ├── cloud.md
│ │ ├── manager.md
│ │ └── upgrade.md
│ ├── licenses.md
│ ├── quick-start.md
│ ├── redirects.yml
│ ├── reference/
│ │ ├── architecture.md
│ │ ├── cli/
│ │ │ ├── telepresence.md
│ │ │ ├── telepresence_completion.md
│ │ │ ├── telepresence_compose.md
│ │ │ ├── telepresence_compose_attach.md
│ │ │ ├── telepresence_compose_bridge.md
│ │ │ ├── telepresence_compose_build.md
│ │ │ ├── telepresence_compose_commit.md
│ │ │ ├── telepresence_compose_config.md
│ │ │ ├── telepresence_compose_cp.md
│ │ │ ├── telepresence_compose_create.md
│ │ │ ├── telepresence_compose_down.md
│ │ │ ├── telepresence_compose_events.md
│ │ │ ├── telepresence_compose_exec.md
│ │ │ ├── telepresence_compose_export.md
│ │ │ ├── telepresence_compose_images.md
│ │ │ ├── telepresence_compose_kill.md
│ │ │ ├── telepresence_compose_logs.md
│ │ │ ├── telepresence_compose_ls.md
│ │ │ ├── telepresence_compose_pause.md
│ │ │ ├── telepresence_compose_port.md
│ │ │ ├── telepresence_compose_ps.md
│ │ │ ├── telepresence_compose_publish.md
│ │ │ ├── telepresence_compose_pull.md
│ │ │ ├── telepresence_compose_push.md
│ │ │ ├── telepresence_compose_restart.md
│ │ │ ├── telepresence_compose_rm.md
│ │ │ ├── telepresence_compose_run.md
│ │ │ ├── telepresence_compose_scale.md
│ │ │ ├── telepresence_compose_start.md
│ │ │ ├── telepresence_compose_stats.md
│ │ │ ├── telepresence_compose_stop.md
│ │ │ ├── telepresence_compose_top.md
│ │ │ ├── telepresence_compose_unpause.md
│ │ │ ├── telepresence_compose_up.md
│ │ │ ├── telepresence_compose_version.md
│ │ │ ├── telepresence_compose_volumes.md
│ │ │ ├── telepresence_compose_wait.md
│ │ │ ├── telepresence_compose_watch.md
│ │ │ ├── telepresence_config.md
│ │ │ ├── telepresence_config_view.md
│ │ │ ├── telepresence_connect.md
│ │ │ ├── telepresence_curl.md
│ │ │ ├── telepresence_docker-run.md
│ │ │ ├── telepresence_gather-logs.md
│ │ │ ├── telepresence_genyaml.md
│ │ │ ├── telepresence_genyaml_annotations.md
│ │ │ ├── telepresence_genyaml_config.md
│ │ │ ├── telepresence_genyaml_container.md
│ │ │ ├── telepresence_genyaml_initcontainer.md
│ │ │ ├── telepresence_genyaml_volume.md
│ │ │ ├── telepresence_helm.md
│ │ │ ├── telepresence_helm_install.md
│ │ │ ├── telepresence_helm_lint.md
│ │ │ ├── telepresence_helm_uninstall.md
│ │ │ ├── telepresence_helm_upgrade.md
│ │ │ ├── telepresence_helm_version.md
│ │ │ ├── telepresence_ingest.md
│ │ │ ├── telepresence_intercept.md
│ │ │ ├── telepresence_leave.md
│ │ │ ├── telepresence_list-contexts.md
│ │ │ ├── telepresence_list-namespaces.md
│ │ │ ├── telepresence_list.md
│ │ │ ├── telepresence_loglevel.md
│ │ │ ├── telepresence_mcp.md
│ │ │ ├── telepresence_mcp_claude.md
│ │ │ ├── telepresence_mcp_claude_disable.md
│ │ │ ├── telepresence_mcp_claude_enable.md
│ │ │ ├── telepresence_mcp_claude_list.md
│ │ │ ├── telepresence_mcp_cursor.md
│ │ │ ├── telepresence_mcp_cursor_disable.md
│ │ │ ├── telepresence_mcp_cursor_enable.md
│ │ │ ├── telepresence_mcp_cursor_list.md
│ │ │ ├── telepresence_mcp_start.md
│ │ │ ├── telepresence_mcp_stream.md
│ │ │ ├── telepresence_mcp_tools.md
│ │ │ ├── telepresence_mcp_vscode.md
│ │ │ ├── telepresence_mcp_vscode_disable.md
│ │ │ ├── telepresence_mcp_vscode_enable.md
│ │ │ ├── telepresence_mcp_vscode_list.md
│ │ │ ├── telepresence_quit.md
│ │ │ ├── telepresence_replace.md
│ │ │ ├── telepresence_revoke.md
│ │ │ ├── telepresence_serve.md
│ │ │ ├── telepresence_status.md
│ │ │ ├── telepresence_uninstall.md
│ │ │ ├── telepresence_version.md
│ │ │ └── telepresence_wiretap.md
│ │ ├── cluster-config.md
│ │ ├── compose.md
│ │ ├── config.md
│ │ ├── dns.md
│ │ ├── docker-run.md
│ │ ├── engagements/
│ │ │ ├── cli.md
│ │ │ ├── conflicts.md
│ │ │ ├── container.md
│ │ │ └── sidecar.md
│ │ ├── environment.md
│ │ ├── inside-container.md
│ │ ├── monitoring.md
│ │ ├── plugins.md
│ │ ├── rbac.md
│ │ ├── restapi.md
│ │ ├── route-controller.md
│ │ ├── routing.md
│ │ ├── tun-device.md
│ │ ├── volume.md
│ │ └── vpn.md
│ ├── release-notes.md
│ ├── release-notes.mdx
│ ├── troubleshooting.md
│ └── variables.yml
├── examples/
│ ├── compose/
│ │ ├── proxy-voting.override.yaml
│ │ ├── proxy-web.override.yaml
│ │ └── replace.override.yaml
│ └── docker/
│ └── iam-authenticator/
│ └── Dockerfile
├── go.mod
├── go.sum
├── integration_test/
│ ├── agent_injector_disabled_test.go
│ ├── also_proxy_test.go
│ ├── argo_rollouts_test.go
│ ├── bind_to_podip_test.go
│ ├── cidr_conflict_test.go
│ ├── cli_test.go
│ ├── cloud_config_test.go
│ ├── compose_test.go
│ ├── config_test.go
│ ├── connected_test.go
│ ├── container_test.go
│ ├── docker_daemon_test.go
│ ├── docker_run_test.go
│ ├── env_interpolate_test.go
│ ├── gather_logs_test.go
│ ├── h2c_intercept_test.go
│ ├── headless_test.go
│ ├── helm_test.go
│ ├── http_intercepts_test.go
│ ├── ignored_mounts_test.go
│ ├── inactive_client_test.go
│ ├── ingest_test.go
│ ├── inject_policy_test.go
│ ├── injector_test.go
│ ├── install_test.go
│ ├── integration_test.go
│ ├── intercept_env_test.go
│ ├── intercept_flags_test.go
│ ├── intercept_localhost_test.go
│ ├── intercept_mount_test.go
│ ├── itest/
│ │ ├── apply_app.go
│ │ ├── assertions.go
│ │ ├── cluster.go
│ │ ├── config.go
│ │ ├── connected.go
│ │ ├── context.go
│ │ ├── env.go
│ │ ├── harness.go
│ │ ├── helm.go
│ │ ├── image.go
│ │ ├── logdir.go
│ │ ├── multiple_services.go
│ │ ├── namespace.go
│ │ ├── runner.go
│ │ ├── single_service.go
│ │ ├── status.go
│ │ ├── suite.go
│ │ ├── tempdir.go
│ │ ├── template.go
│ │ ├── timed.go
│ │ └── traffic_manager.go
│ ├── kubeauth_test.go
│ ├── kubeconfig_extension_test.go
│ ├── large_files_test.go
│ ├── limitrange_test.go
│ ├── list_watch_test.go
│ ├── loglevel_test.go
│ ├── manager_grpc_test.go
│ ├── manual_agent_test.go
│ ├── mounts_test.go
│ ├── multi_connect_test.go
│ ├── multiple_intercepts_test.go
│ ├── multiple_port_intercept_test.go
│ ├── multiple_services_test.go
│ ├── multiport_test.go
│ ├── namespaces_test.go
│ ├── not_connected_test.go
│ ├── otel_test.go
│ ├── pod_cidr_test.go
│ ├── podscaling_test.go
│ ├── proxy_via_test.go
│ ├── reconnect_session_test.go
│ ├── replace_test.go
│ ├── restapi_test.go
│ ├── single_service_test.go
│ ├── subdomain_test.go
│ ├── svcdomain_test.go
│ ├── testdata/
│ │ ├── apiserveraccess/
│ │ │ └── main.go
│ │ ├── cli-container/
│ │ │ └── Dockerfile
│ │ ├── count-server/
│ │ │ └── main.go
│ │ ├── echo-server/
│ │ │ ├── Dockerfile
│ │ │ ├── certs/
│ │ │ │ ├── tls.crt
│ │ │ │ └── tls.key
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── k8s/
│ │ │ ├── client_experiment.yaml
│ │ │ ├── client_rancher.goyaml
│ │ │ ├── client_sa.yaml
│ │ │ ├── disruption-budget.goyaml
│ │ │ ├── echo-argo-rollout.yaml
│ │ │ ├── echo-auto-inject.yaml
│ │ │ ├── echo-both.yaml
│ │ │ ├── echo-double-one-unnamed.yaml
│ │ │ ├── echo-easy.yaml
│ │ │ ├── echo-extra-udp.yaml
│ │ │ ├── echo-headless.yaml
│ │ │ ├── echo-interpolate.yaml
│ │ │ ├── echo-manual-inject-deploy.yaml
│ │ │ ├── echo-manual-inject-svc.yaml
│ │ │ ├── echo-min.yaml
│ │ │ ├── echo-no-containerport.yaml
│ │ │ ├── echo-no-svc-ann.yaml
│ │ │ ├── echo-no-svc.yaml
│ │ │ ├── echo-no-vols.yaml
│ │ │ ├── echo-one.yaml
│ │ │ ├── echo-same-target-port.yaml
│ │ │ ├── echo-secondary.yaml
│ │ │ ├── echo-spring.yaml
│ │ │ ├── echo-tls.goyaml
│ │ │ ├── echo-udp-tcp-unnamed.yaml
│ │ │ ├── echo-w-hostalias.goyaml
│ │ │ ├── echo-w-sidecars.yaml
│ │ │ ├── echo-w-subdomain.yaml
│ │ │ ├── echo_with_env.yaml
│ │ │ ├── generic.goyaml
│ │ │ ├── hello-w-volumes.goyaml
│ │ │ ├── many-volumes.yaml
│ │ │ ├── memory-constraints.yaml
│ │ │ ├── namespaces.yaml
│ │ │ ├── pol-disabled.yaml
│ │ │ ├── pol-enabled.yaml
│ │ │ ├── pol-none.yaml
│ │ │ ├── pv.goyaml
│ │ │ ├── pvc.goyaml
│ │ │ ├── rs-echo.yaml
│ │ │ ├── secret-reader-rbac.goyaml
│ │ │ ├── ss-echo.yaml
│ │ │ ├── svc-deploy.goyaml
│ │ │ ├── tel-cert.yaml
│ │ │ └── with-probes.yaml
│ │ ├── k8screds/
│ │ │ └── main.go
│ │ ├── otel/
│ │ │ ├── helm-yamls/
│ │ │ │ └── otel-operator.yml
│ │ │ └── instrumentation.yml
│ │ ├── routing-values.yaml
│ │ ├── scripts/
│ │ │ ├── veth-down.sh
│ │ │ └── veth-up.sh
│ │ ├── stdiotest/
│ │ │ └── main.go
│ │ ├── telepresence-1.9.9.tgz
│ │ └── udp-echo/
│ │ ├── Dockerfile
│ │ ├── go.mod
│ │ └── main.go
│ ├── tls_test.go
│ ├── to_pod_test.go
│ ├── udp_test.go
│ ├── uhn_dns_test.go
│ ├── uninstall_test.go
│ ├── webhook_test.go
│ ├── wiretap_test.go
│ ├── workload_configuration_test.go
│ ├── workload_watch_test.go
│ ├── workloads_test.go
│ └── wpad_test.go
├── k8s/
│ ├── agent-injector-rbac.yaml
│ ├── agent-injector-secret.yaml
│ ├── agent-injector.yaml
│ ├── apitest.yaml
│ ├── dnsutils-headless.yaml
│ ├── echo-auto-headless.yaml
│ ├── echo-double-one.yaml
│ ├── echo-double.yaml
│ ├── echo-sc.yaml
│ ├── ext-example.yaml
│ ├── hello-w-volume.yaml
│ ├── local-echo-easy.yaml
│ ├── local-echo-next.yaml
│ ├── manager.yaml
│ ├── minikube-registry.yaml
│ ├── private-reg-proxy.yaml
│ └── rs-echo-svc2.yaml
├── packaging/
│ ├── artifacthub-repo.yml
│ ├── bundle.wxs.in
│ ├── helmpackage.go
│ ├── homebrew-oss-formula.rb
│ ├── homebrew-package.sh
│ ├── install-telepresence.ps1
│ ├── telepresence.wxs.in
│ └── windows-package.sh
├── pkg/
│ ├── agentconfig/
│ │ ├── container.go
│ │ ├── container_test.go
│ │ ├── initcontainer.go
│ │ ├── injectpolicy.go
│ │ ├── intercepttarget.go
│ │ ├── sidecar.go
│ │ ├── util.go
│ │ └── volumes.go
│ ├── agentmap/
│ │ ├── capsbase26.go
│ │ ├── capsbase26_test.go
│ │ ├── discorvery.go
│ │ └── generator.go
│ ├── annotation/
│ │ └── annotation.go
│ ├── authenticator/
│ │ ├── authenticator.go
│ │ ├── config.go
│ │ ├── exec.go
│ │ ├── exec_test.go
│ │ ├── grpc/
│ │ │ └── authenticator.go
│ │ └── patcher/
│ │ └── patcher.go
│ ├── cache/
│ │ ├── client.go
│ │ └── map.go
│ ├── client/
│ │ ├── agentpf/
│ │ │ └── clients.go
│ │ ├── bwcompat/
│ │ │ └── clusterinfo.go
│ │ ├── cache/
│ │ │ ├── cache.go
│ │ │ └── watcher.go
│ │ ├── cli/
│ │ │ ├── ann/
│ │ │ │ └── annotations.go
│ │ │ ├── cmd/
│ │ │ │ ├── completion.go
│ │ │ │ ├── compose.go
│ │ │ │ ├── config.go
│ │ │ │ ├── connect.go
│ │ │ │ ├── curl.go
│ │ │ │ ├── docker_run.go
│ │ │ │ ├── gather_logs.go
│ │ │ │ ├── gather_logs_test.go
│ │ │ │ ├── genyaml.go
│ │ │ │ ├── helm.go
│ │ │ │ ├── ingest.go
│ │ │ │ ├── intercept.go
│ │ │ │ ├── kubeauth.go
│ │ │ │ ├── leave.go
│ │ │ │ ├── list.go
│ │ │ │ ├── list_contexts.go
│ │ │ │ ├── list_namespaces.go
│ │ │ │ ├── loglevel.go
│ │ │ │ ├── man-pages.go
│ │ │ │ ├── mcp.go
│ │ │ │ ├── mcp_test.go
│ │ │ │ ├── quit.go
│ │ │ │ ├── replace.go
│ │ │ │ ├── revoke.go
│ │ │ │ ├── serve.go
│ │ │ │ ├── status.go
│ │ │ │ ├── telepresence.go
│ │ │ │ ├── testdata/
│ │ │ │ │ ├── license
│ │ │ │ │ ├── testLogDir/
│ │ │ │ │ │ ├── cli.log
│ │ │ │ │ │ ├── connector-20210916T130347.log
│ │ │ │ │ │ ├── connector-20210916T130356.log
│ │ │ │ │ │ ├── connector-20210916T130624.log
│ │ │ │ │ │ ├── connector-20210916T130643.log
│ │ │ │ │ │ ├── connector.log
│ │ │ │ │ │ ├── daemon-20210916T130318.log
│ │ │ │ │ │ ├── daemon-20210916T130402.log
│ │ │ │ │ │ ├── daemon-20210916T130624.log
│ │ │ │ │ │ ├── daemon-20210916T130643.log
│ │ │ │ │ │ ├── daemon.log
│ │ │ │ │ │ ├── echo-auto-inject-6496f77cbd-n86nc
│ │ │ │ │ │ └── traffic-manager-5c69859f94-g4ntj
│ │ │ │ │ └── zipDir/
│ │ │ │ │ ├── diff_name.log
│ │ │ │ │ ├── file1.log
│ │ │ │ │ └── file2.log
│ │ │ │ ├── uninstall.go
│ │ │ │ ├── usage.go
│ │ │ │ ├── version.go
│ │ │ │ └── wiretap.go
│ │ │ ├── connect/
│ │ │ │ ├── connector.go
│ │ │ │ ├── daemon.go
│ │ │ │ ├── init_command.go
│ │ │ │ └── version_check.go
│ │ │ ├── daemon/
│ │ │ │ ├── dial.go
│ │ │ │ ├── identifier.go
│ │ │ │ ├── identifier_test.go
│ │ │ │ ├── info.go
│ │ │ │ ├── request.go
│ │ │ │ ├── request_test.go
│ │ │ │ └── userd.go
│ │ │ ├── docker/
│ │ │ │ ├── auto_complete.go
│ │ │ │ ├── compose/
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── connection.go
│ │ │ │ │ ├── dc-cli.json
│ │ │ │ │ ├── engagement.go
│ │ │ │ │ ├── extension.go
│ │ │ │ │ ├── extension_test.go
│ │ │ │ │ ├── toplevelextension.go
│ │ │ │ │ └── transform.go
│ │ │ │ ├── flags.go
│ │ │ │ ├── published_ports.go
│ │ │ │ ├── run_flags.go
│ │ │ │ └── runner.go
│ │ │ ├── env/
│ │ │ │ ├── flags.go
│ │ │ │ ├── syntax.go
│ │ │ │ └── syntax_test.go
│ │ │ ├── flags/
│ │ │ │ ├── addunique.go
│ │ │ │ ├── context.go
│ │ │ │ ├── deprecation.go
│ │ │ │ ├── map.go
│ │ │ │ ├── unparsed.go
│ │ │ │ ├── unparsed_test.go
│ │ │ │ └── zerovalue.go
│ │ │ ├── global/
│ │ │ │ └── flags.go
│ │ │ ├── helm/
│ │ │ │ ├── chart.go
│ │ │ │ ├── install.go
│ │ │ │ ├── lint.go
│ │ │ │ └── release.go
│ │ │ ├── ingest/
│ │ │ │ ├── command.go
│ │ │ │ ├── info.go
│ │ │ │ └── state.go
│ │ │ ├── intercept/
│ │ │ │ ├── command.go
│ │ │ │ ├── command_test.go
│ │ │ │ ├── describe_intercepts.go
│ │ │ │ ├── info.go
│ │ │ │ ├── info_test.go
│ │ │ │ └── state.go
│ │ │ ├── main.go
│ │ │ ├── mount/
│ │ │ │ ├── flags.go
│ │ │ │ ├── info.go
│ │ │ │ ├── prepare_unix.go
│ │ │ │ └── prepare_windows.go
│ │ │ ├── output/
│ │ │ │ ├── output.go
│ │ │ │ └── output_test.go
│ │ │ └── progress/
│ │ │ ├── colors.go
│ │ │ ├── event.go
│ │ │ ├── json.go
│ │ │ ├── noop.go
│ │ │ ├── plain.go
│ │ │ ├── quiet.go
│ │ │ ├── spinner.go
│ │ │ ├── tty.go
│ │ │ ├── tty_test.go
│ │ │ └── writer.go
│ │ ├── cmd_error.go
│ │ ├── config.go
│ │ ├── config_darwin.go
│ │ ├── config_linux.go
│ │ ├── config_test.go
│ │ ├── config_unix.go
│ │ ├── config_util.go
│ │ ├── config_windows.go
│ │ ├── const.go
│ │ ├── docker/
│ │ │ ├── container.go
│ │ │ ├── context.go
│ │ │ ├── daemon.go
│ │ │ ├── daemon_test.go
│ │ │ ├── image.go
│ │ │ ├── kubeauth/
│ │ │ │ └── cmd.go
│ │ │ ├── plugin.go
│ │ │ ├── teleroute/
│ │ │ │ ├── network.go
│ │ │ │ ├── server.go
│ │ │ │ ├── server_linux.go
│ │ │ │ └── server_other.go
│ │ │ ├── volume.go
│ │ │ └── volume_test.go
│ │ ├── ensured_state.go
│ │ ├── envconfig.go
│ │ ├── envconfig_unix.go
│ │ ├── envconfig_windows.go
│ │ ├── install_id.go
│ │ ├── k8s/
│ │ │ ├── cani.go
│ │ │ ├── cluster.go
│ │ │ ├── config.go
│ │ │ └── connect.go
│ │ ├── logging/
│ │ │ ├── cached_timed_level.go
│ │ │ ├── dup_test.go
│ │ │ ├── dup_unix.go
│ │ │ ├── dup_windows.go
│ │ │ ├── initcontext.go
│ │ │ ├── initcontext_test.go
│ │ │ ├── initcontext_unix_test.go
│ │ │ ├── initcontext_windows_test.go
│ │ │ ├── rotatingfile.go
│ │ │ ├── rotatingfile_unix.go
│ │ │ ├── rotatingfile_windows.go
│ │ │ ├── stat.go
│ │ │ ├── stat_darwin.go
│ │ │ ├── stat_linux.go
│ │ │ ├── stat_linux_test.go
│ │ │ ├── stat_test.go
│ │ │ └── stat_windows.go
│ │ ├── portforward/
│ │ │ ├── borrowed_kubectl_cmdutil.go
│ │ │ ├── grpcresolver.go
│ │ │ ├── podaddr.go
│ │ │ ├── resolve.go
│ │ │ └── streamconn.go
│ │ ├── remotefs/
│ │ │ ├── bridge.go
│ │ │ ├── fuseftp.go
│ │ │ ├── fuseftp_docker.go
│ │ │ ├── fuseftp_embedded.go
│ │ │ ├── fuseftp_external.go
│ │ │ ├── fuseftp_grpc.go
│ │ │ ├── fuseftp_linked.go
│ │ │ ├── fuseftp_other.go
│ │ │ ├── mounter.go
│ │ │ └── sftp.go
│ │ ├── rootd/
│ │ │ ├── dbus/
│ │ │ │ └── resolved.go
│ │ │ ├── dns/
│ │ │ │ ├── client.go
│ │ │ │ ├── client_queue.go
│ │ │ │ ├── connpool.go
│ │ │ │ ├── connpool_test.go
│ │ │ │ ├── resolved_linux.go
│ │ │ │ ├── server.go
│ │ │ │ ├── server_darwin.go
│ │ │ │ ├── server_linux.go
│ │ │ │ ├── server_test.go
│ │ │ │ └── server_windows.go
│ │ │ ├── grpc.go
│ │ │ ├── in_process.go
│ │ │ ├── service.go
│ │ │ ├── session.go
│ │ │ ├── stream_creator.go
│ │ │ └── vip/
│ │ │ ├── env_nat.go
│ │ │ ├── env_nat_test.go
│ │ │ └── vip.go
│ │ ├── stream_error.go
│ │ ├── userd/
│ │ │ ├── daemon/
│ │ │ │ ├── grpc.go
│ │ │ │ └── service.go
│ │ │ ├── service.go
│ │ │ ├── session.go
│ │ │ └── trafficmgr/
│ │ │ ├── agents.go
│ │ │ ├── config.go
│ │ │ ├── context.go
│ │ │ ├── gather_logs.go
│ │ │ ├── ingest.go
│ │ │ ├── ingest_test.go
│ │ │ ├── intercept.go
│ │ │ ├── mount.go
│ │ │ ├── podaccess.go
│ │ │ ├── session.go
│ │ │ └── session_info_cache.go
│ │ ├── version.go
│ │ └── version_test.go
│ ├── dnsproxy/
│ │ ├── lookup.go
│ │ ├── lookup_test.go
│ │ ├── resolvefile_unix.go
│ │ ├── resolvefile_unix_test.go
│ │ └── rpc.go
│ ├── dos/
│ │ ├── aferofs/
│ │ │ └── wrapper.go
│ │ ├── env.go
│ │ ├── exe.go
│ │ ├── filesystem.go
│ │ ├── filesystem_test.go
│ │ ├── lockedfile.go
│ │ ├── package.go
│ │ ├── stdio.go
│ │ └── wdwrapper.go
│ ├── dpipe/
│ │ ├── dpipe.go
│ │ ├── dpipe_test.go
│ │ ├── dpipe_unix.go
│ │ ├── dpipe_windows.go
│ │ └── testdata/
│ │ └── echo/
│ │ └── echo.go
│ ├── errcat/
│ │ └── errors.go
│ ├── filelocation/
│ │ ├── app.go
│ │ ├── ctx.go
│ │ ├── osfile.go
│ │ ├── osfile_darwin.go
│ │ ├── osfile_linux.go
│ │ └── osfile_windows.go
│ ├── forwarder/
│ │ ├── basic.go
│ │ ├── tcp.go
│ │ └── udp.go
│ ├── grpc/
│ │ ├── client/
│ │ │ └── connect.go
│ │ ├── error.go
│ │ ├── errors/
│ │ │ └── errors.go
│ │ ├── server/
│ │ │ ├── context.go
│ │ │ ├── logging.go
│ │ │ └── server.go
│ │ └── watcher/
│ │ └── watcher.go
│ ├── icept/
│ │ ├── conflicts.go
│ │ ├── conflicts_test.go
│ │ └── find.go
│ ├── informer/
│ │ ├── context.go
│ │ └── factory.go
│ ├── ioutil/
│ │ ├── free_ports.go
│ │ ├── keyvalueformatter.go
│ │ ├── print.go
│ │ ├── safename.go
│ │ ├── tempname.go
│ │ └── writeallto.go
│ ├── iputil/
│ │ ├── ipnet.go
│ │ ├── ips.go
│ │ ├── join.go
│ │ ├── normalize.go
│ │ └── parse.go
│ ├── json/
│ │ └── marshal.go
│ ├── k8sapi/
│ │ ├── cani.go
│ │ ├── clientconfigprovider.go
│ │ ├── interface.go
│ │ ├── kind.go
│ │ ├── namespaceid.go
│ │ ├── object.go
│ │ ├── util.go
│ │ └── workload.go
│ ├── labels/
│ │ └── selector.go
│ ├── log/
│ │ ├── base_logger.go
│ │ ├── group.go
│ │ └── timed_level.go
│ ├── maps/
│ │ ├── utils.go
│ │ └── xmap.go
│ ├── matcher/
│ │ ├── header_stringer.go
│ │ ├── header_stringer_test.go
│ │ ├── headers.go
│ │ ├── headers_test.go
│ │ ├── paths.go
│ │ ├── request.go
│ │ ├── request_test.go
│ │ └── value.go
│ ├── pprof/
│ │ └── pprof.go
│ ├── proc/
│ │ ├── cmd.go
│ │ ├── docker_linux.go
│ │ ├── docker_other.go
│ │ ├── exec.go
│ │ ├── exec_unix.go
│ │ ├── exec_windows.go
│ │ ├── wsl_linux.go
│ │ └── wsl_other.go
│ ├── restapi/
│ │ ├── api.go
│ │ └── api_test.go
│ ├── routing/
│ │ ├── routing.go
│ │ ├── routing_darwin.go
│ │ ├── routing_linux.go
│ │ ├── routing_test.go
│ │ ├── routing_unix.go
│ │ ├── routing_unix_test.go
│ │ └── routing_windows.go
│ ├── shellquote/
│ │ ├── shellstring.go
│ │ ├── shellstring_unix.go
│ │ ├── shellstring_unix_test.go
│ │ ├── shellstring_windows.go
│ │ └── shellstring_windows_test.go
│ ├── sigctx/
│ │ └── context.go
│ ├── slice/
│ │ ├── contains.go
│ │ ├── csv.go
│ │ └── strings.go
│ ├── subnet/
│ │ ├── bitfield256.go
│ │ ├── bitfield256_test.go
│ │ ├── set.go
│ │ ├── set_test.go
│ │ ├── subnet.go
│ │ ├── subnet_test.go
│ │ └── testdata/
│ │ └── ips.txt
│ ├── tmconfig/
│ │ ├── admin_command.go
│ │ └── configmap.go
│ ├── tunnel/
│ │ ├── client_stream.go
│ │ ├── connid.go
│ │ ├── connid_test.go
│ │ ├── context.go
│ │ ├── dialer.go
│ │ ├── message.go
│ │ ├── metrics.go
│ │ ├── pipe.go
│ │ ├── pool.go
│ │ ├── probe.go
│ │ ├── provider.go
│ │ ├── server_stream.go
│ │ ├── stream.go
│ │ ├── stream_conn.go
│ │ ├── stream_conn_test.go
│ │ ├── stream_test.go
│ │ ├── synthetic.go
│ │ ├── timed_handler.go
│ │ └── udplistener.go
│ ├── types/
│ │ ├── addrportandproto.go
│ │ ├── engagement.go
│ │ ├── mountpolicy.go
│ │ ├── portandproto.go
│ │ ├── portidentifier.go
│ │ ├── portmapping.go
│ │ └── proto.go
│ ├── version/
│ │ └── version.go
│ ├── vif/
│ │ ├── device.go
│ │ ├── device_darwin.go
│ │ ├── device_linux.go
│ │ ├── device_notlinux.go
│ │ ├── device_unix.go
│ │ ├── device_windows.go
│ │ ├── logging.go
│ │ ├── router.go
│ │ ├── router_test.go
│ │ ├── stack.go
│ │ └── tunneling_device.go
│ └── workload/
│ ├── informers.go
│ ├── state.go
│ └── util.go
├── rpc/
│ ├── LICENSE
│ ├── agent/
│ │ ├── agent.pb.go
│ │ ├── agent.proto
│ │ └── agent_grpc.pb.go
│ ├── authenticator/
│ │ ├── authenticator.pb.go
│ │ ├── authenticator.proto
│ │ └── authenticator_grpc.pb.go
│ ├── common/
│ │ ├── version.pb.go
│ │ └── version.proto
│ ├── connector/
│ │ ├── connector.pb.go
│ │ ├── connector.proto
│ │ └── connector_grpc.pb.go
│ ├── daemon/
│ │ ├── daemon.pb.go
│ │ ├── daemon.proto
│ │ └── daemon_grpc.pb.go
│ ├── go.mod
│ ├── go.sum
│ ├── manager/
│ │ ├── manager.pb.go
│ │ ├── manager.proto
│ │ └── manager_grpc.pb.go
│ └── teleroute/
│ ├── service.pb.go
│ ├── service.proto
│ └── service_grpc.pb.go
└── test-infra/
├── aws-okd/
│ ├── README.md
│ └── dns/
│ ├── .gitignore
│ └── dns.tf
└── aws-vpn/
├── .gitignore
├── README.md
├── dns.tf
├── eks.tf
├── locals.tf
├── network.tf
├── pki.sh
├── provider.tf
└── vpn.tf
================================================
FILE CONTENTS
================================================
================================================
FILE: .dockerignore
================================================
.circleci/
.idea/
.git/
build-aux/
build-output/
!build-output/version.txt
!build-output/helm-version.txt
integration_test/
k8s/
packaging/
test-infra/
tools/
================================================
FILE: .editorconfig
================================================
root = true
[*]
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.go]
indent_style = tab
; mimic gofmt's go/printer.printer.funcBody().maxSize
max_line_length = 100
; mimic gofmt's cmd/gofmt.tabWidth
tab_width = 8
[{go.mod,go.sum}]
indent_style = tab
[*.proto]
indent_style = space
indent_size = 2
================================================
FILE: .gitattributes
================================================
# Always check out with LF so that golangci-lint doesn't break
*.go text eol=lf
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: [thallgren]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/ISSUE_TEMPLATE/Bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve Telepresence
---
**Describe the bug**
A clear and concise description of what the bug is.
Please use `telepresence loglevel debug` to ensure we have the most helpful logs,
reproduce the error, and then run `telepresence gather-logs` to create a
zip file of all logs for Telepresence's components (root and user daemons,
traffic-manager, and traffic-agents) and attach it to this issue. See an
example command below:
```
telepresence loglevel debug
* reproduce the error *
telepresence gather-logs --output-file /tmp/telepresence_logs.zip
# To see all options, run the following command
telepresence gather-logs --help
```
**To Reproduce**
Steps to reproduce the behavior:
1. When I run '...'
2. I see '....'
3. So I look at '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Versions (please complete the following information):**
- Output of `telepresence version` (preferably while telepresence is connected)
- Operating system of workstation running `telepresence` commands
- Kubernetes environment and Version [e.g. Minikube, bare metal, Google Kubernetes Engine]
**Additional context**
Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/Feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for Telepresence
---
**Please describe your use case / problem.**
A clear and concise description of your use case / problem. The "why" is really valuable to us. For example, "I have a set of services whose clients have long-lived connections."
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Versions (please complete the following information)**
- Output of `telepresence version` (just in case the feature exists in future versions)
- Kubernetes Environment and Version
**Additional context**
Add any other context about the feature request here.
================================================
FILE: .github/actions/install-dependencies/action.yaml
================================================
name: "Install dependencies"
description: "Install dependencies required by the runner"
runs:
using: composite
steps:
- uses: actions/setup-go@v5
with:
go-version: stable
- if: runner.os == 'Linux'
name: install Linux dependencies
shell: bash
run: |
sudo rm -f /etc/apt/sources.list.d/google-chrome.list
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu sshfs socat libfuse-dev make jq
sudo sh -c 'echo user_allow_other >> /etc/fuse.conf'
- if: runner.os == 'macOS'
name: install macOS dependencies
shell: bash
env:
HOMEBREW_NO_INSTALL_FROM_API: ""
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK: "1"
run: |
brew untap homebrew/core || :
brew untap homebrew/cask || :
# Remove Python3 symlinks in /usr/local/bin as workaround to brew update issues
# https://github.com/actions/setup-python/issues/577
rm /usr/local/bin/2to3* || :
rm /usr/local/bin/idle3* || :
rm /usr/local/bin/pydoc* || :
rm /usr/local/bin/python3* || :
brew update
brew install --cask macfuse
brew install gromgit/fuse/sshfs-mac
brew link --overwrite sshfs-mac
if [[ ${RUNNER_ARCH} == "ARM64" ]]; then
brew install jq
fi
- if: runner.os == 'Windows'
name: setup make
shell: pwsh
run: |
# Use make from Git for Windows (pre-installed on runners)
echo "C:\Program Files\Git\usr\bin" | Out-File -FilePath $env:GITHUB_PATH -Append
- if: runner.os == 'Windows'
name: download winfsp
uses: nick-fields/retry/@v3
with:
max_attempts: 3
timeout_minutes: 1
shell: bash
command: make winfsp.msi
- if: runner.os == 'Windows'
name: download sshfs
uses: nick-fields/retry/@v3
with:
max_attempts: 3
timeout_minutes: 1
shell: bash
command: make sshfs-win.msi
- if: runner.os == 'Windows'
name: download sshfs
uses: nick-fields/retry/@v3
with:
max_attempts: 3
timeout_minutes: 1
shell: bash
command: make wintun.dll
- if: runner.os == 'Windows'
name: install winfsp and sshfs
shell: powershell
run: |
Start-Process msiexec -Wait -verb runAs -Args "/i build-output\\winfsp.msi /passive /qn /L*V winfsp-install.log"
Start-Process msiexec -Wait -verb runAs -Args "/i build-output\\sshfs-win.msi /passive /qn /L*V sshfs-win-install.log"
[Environment]::SetEnvironmentVariable("Path", "C:\\;C:\\Program Files\\SSHFS-Win\\bin;$ENV:Path", "Machine")
================================================
FILE: .github/actions/upload-logs/action.yaml
================================================
name: "Upload logs"
description: "Upload logs from the test run"
runs:
using: composite
steps:
- run: |
LOGS="test-logs/${{ runner.os }}/${{ runner.arch }}"
mkdir -p "$LOGS"
if [[ $RUNNER_OS != Windows ]]; then
rsync -ma --include='*/' --include='*.tap' --include='*.log' --include='Test*.webm' --exclude='*' . "$LOGS"
fi
for file in \
{"${XDG_CACHE_HOME:-$HOME/.cache}/telepresence/logs","$HOME/Library/Logs/telepresence","$LOCALAPPDATA/telepresence/logs","."}/*.log
do
if [ -s "$file" ]; then
cp -v "$file" "$LOGS" || true
fi
done
shell: bash
name: Gather logs
- name: Upload logs
uses: actions/upload-artifact@v4
with:
# If an environment variable LOG_SUFFIX is set, it will be appended to the log filename.
name: ${{github.job}}-logs-${{ env.LOG_SUFFIX }}
path: |
test-logs/${{ runner.os }}/${{ runner.arch }}/*
================================================
FILE: .github/pull_request_template.md
================================================
## Description
A few sentences describing the overall goals of the pull request's commits.
## Checklist
<!--
Please review the requirements for each checkbox, and check them
off (change "[ ]" to "[x]") as you verify that they are complete.
-->
- [ ] I made sure to update `./CHANGELOG.yml` (our release notes are generated from this file).
- [ ] I made sure to add any documentation changes required for my change.
- [ ] My change is adequately tested.
- [ ] I updated `CONTRIBUTING.md` with any special dev tricks I had to use to work on this code efficiently.
- [ ] Once my PR is ready to have integration tests ran, I posted the PR in #telepresence-oss channel on the
[CNCF Slack](https://slack.cncf.io/) so that the "ok to test" label can be applied.
================================================
FILE: .github/workflows/dev.yaml
================================================
name: "Integration Tests"
on:
pull_request:
types:
- labeled
permissions:
contents: read
pull-requests: write
env:
TELEPRESENCE_REGISTRY: local
jobs:
build_and_test:
if: ${{ github.event.label.name == 'ok to test' || github.event.label.name == 'compatibility test' }}
strategy:
fail-fast: false
matrix:
runners:
- ubuntu-latest
# Re-enable when we can run a proper cluster. Colima almost works on macOS but the very limited
# resources available make the test fail very often. On windows, we'll need WSL2
# - macos-latest
# - windows-latest
runs-on: ${{ matrix.runners }}
steps:
- name: Remove ok to test label
if: github.event.label.name == 'ok to test'
uses: buildsville/add-remove-label@v2.0.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
labels: ok to test
type: remove
- name: Remove compatibility test label
if: github.event.label.name == 'compatibility test'
uses: buildsville/add-remove-label@v2.0.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
labels: compatibility test
type: remove
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: "${{ github.event.pull_request.head.sha }}"
- name: install dependencies
uses: ./.github/actions/install-dependencies
- name: Get Telepresence Version
id: version
run: |
v=$(go run build-aux/genversion/main.go ${{github.run_id}})
echo "TELEPRESENCE_VERSION=$v" >> "$GITHUB_ENV"
echo "TELEPRESENCE_SEMVER=${v#v}" >> "$GITHUB_ENV"
- name: Start minikube
if: runner.os == 'Linux'
uses: medyagh/setup-minikube@latest
with:
kubernetes-version: v1.33.5
- name: Build client
run: make build
- name: Build images
run: make client-image tel2-image routecontroller-image
- name: Load images into minikube
run: |
minikube image load ${{env.TELEPRESENCE_REGISTRY}}/telepresence:${{env.TELEPRESENCE_SEMVER}}
minikube image load ${{env.TELEPRESENCE_REGISTRY}}/tel2:${{env.TELEPRESENCE_SEMVER}}
minikube image load ${{env.TELEPRESENCE_REGISTRY}}/route-controller:${{env.TELEPRESENCE_SEMVER}}
- name: Run integration tests
if: github.event.label.name == 'ok to test'
uses: nick-fields/retry/@v3
with:
max_attempts: 3
shell: bash
timeout_minutes: 90
command: |
set -ex
if [[ ${RUNNER_OS} == "Windows" ]]; then
export PATH="$PATH:/C/Program Files/SSHFS-Win/bin:$HOME/kubectl-plugins"
fi
make check-integration
- name: Compatibility with older manager and agent
if: ${{ github.event.label.name == 'compatibility test' }}
env:
DEV_MANAGER_VERSION: "2.24.1"
DEV_MANAGER_REGISTRY: ghcr.io/telepresenceio
uses: nick-fields/retry/@v3
with:
max_attempts: 3
shell: bash
timeout_minutes: 90
command: |
set -ex
if [[ ${RUNNER_OS} == "Windows" ]]; then
export PATH="$PATH:/C/Program Files/SSHFS-Win/bin:$HOME/kubectl-plugins"
fi
make check-integration
- name: Compatibility with older client
if: ${{ github.event.label.name == 'compatibility test' }}
env:
DEV_CLIENT_VERSION: "2.24.1"
DEV_CLIENT_REGISTRY: ghcr.io/telepresenceio
uses: nick-fields/retry/@v3
with:
max_attempts: 3
shell: bash
timeout_minutes: 90
command: |
set -ex
if [[ ${RUNNER_OS} == "Windows" ]]; then
export PATH="$PATH:/C/Program Files/SSHFS-Win/bin:$HOME/kubectl-plugins"
fi
make check-integration
- uses: ./.github/actions/upload-logs
env:
LOG_SUFFIX: "${{ runner.os }}-${{ runner.arch }}-${{ matrix.clusters.distribution }}-${{ matrix.clusters.version }}"
if: ${{ always() }}
================================================
FILE: .github/workflows/go-dependency-submission.yaml
================================================
name: Go Dependency Submission
on:
push:
branches:
- release/v2
# The API requires write permission on the repository to submit dependencies
permissions:
contents: write
jobs:
go-action-detection:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-go@v5
with:
go-version: stable
# we need fuseftp.bits
- name: "Build dependencies"
run: make build-deps
- name: Run snapshot action
uses: actions/go-dependency-submission@v1
with:
go-mod-path: go.mod
go-build-target: cmd/telepresence/main.go
================================================
FILE: .github/workflows/image-scan.yaml
================================================
name: image-scan
on:
push:
branches:
- release/v2
pull_request:
jobs:
trivy-container-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/setup-go@v5
with:
go-version: stable
- name: Build dev image
run: |
make save-tel2-image
- name: Scan
uses: aquasecurity/trivy-action@master
with:
input: build-output/tel2-image.tar
format: sarif
exit-code: 0 # only warn for now until we have backed it into our processes
output: trivy-results.sarif
ignore-unfixed: true
vuln-type: "os,library"
severity: "CRITICAL,HIGH"
hide-progress: false
- name: Upload Scan to GitHub Security Tab
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: "trivy-results.sarif"
pass:
name: image-scan
needs:
- trivy-container-scan
runs-on: ubuntu-latest
steps:
- name: No-Op
if: ${{ false }}
run: "echo Pass"
================================================
FILE: .github/workflows/licenses.yaml
================================================
name: "License verification"
on:
pull_request:
workflow_dispatch:
jobs:
dependency_info_linux:
name: "Linux: Verify use of forbidden licenses"
runs-on: ubuntu-latest
outputs:
is-up-to-date: ${{ steps.check.outputs.up-to-date }}
diff: ${{ steps.check.outputs.diff }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: "${{ github.event.pull_request.head.sha }}"
- name: install dependencies
uses: ./.github/actions/install-dependencies
- name: "Generate dependency information"
shell: bash
run: make generate
- name: "Update dependency information after dependabot change"
uses: datawire/go-mkopensource/actions/save-dependabot-changes@v0.0.7
id: changed-by-dependabot
with:
branches_to_skip: 'release/v2'
- name: "Abort if dependencies changed"
if: steps.changed-by-dependabot.outputs.is_dirty == 'true'
run: |
echo "Dependabot triggered a dependency update. Aborting workflow."
exit 1
- name: "Check dependency files are up-to-date"
id: check
shell: bash
run: |
set -e
git add .
if [[ -n "$(git status --porcelain)" ]]; then
echo "diff=$(PAGER= git diff --cached 2>&1 | base64 -w0)" >> $GITHUB_OUTPUT
echo "up-to-date=no" >> $GITHUB_OUTPUT
else
echo "up-to-date=yes" >> $GITHUB_OUTPUT
fi
up_to_date_check_linux:
name: "Linux: Check out-of-date licenses"
needs: dependency_info_linux
runs-on: ubuntu-latest
steps:
- name: "Check dependency files are up-to-date"
shell: bash
run: |
set -e
if [[ "${{needs.dependency_info_linux.outputs.is-up-to-date}}" == "no" ]]; then
echo '::error:: Changes detected after dependency generation. Run ' \
'`make generate` and commit the latest version of the ' \
'dependency information files'
echo ${{needs.dependency_info_linux.outputs.diff}} | base64 -d
exit 1
fi
echo '::info:: Files are up-to-date'
================================================
FILE: .github/workflows/release-teleroute.yaml
================================================
on:
push:
tags:
# These aren't regexps. They are "Workflow Filter patterns"
- teleroute-[0-9]+.[0-9]+.[0-9]
jobs:
build-release:
strategy:
fail-fast: false
matrix:
architecture:
- amd64
- arm64
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: stable
- name: Push image
working-directory: ./cmd/teleroute
env:
PLUGIN_ARCH: ${{ matrix.architecture }}
VER: ${{ github.ref }}
run: |
echo '${{ secrets.GITHUB_TOKEN }}' | docker login ghcr.io -u='${{ github.actor }}' --password-stdin
PLUGIN_VERSION=${VER#refs/tags/teleroute-} make push
================================================
FILE: .github/workflows/release.yaml
================================================
name: Releases
on:
push:
tags:
# These aren't regexps. They are "Workflow Filter patterns"
- v[0-9]+.[0-9]+.[0-9]
- v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+
- v[0-9]+.[0-9]+.[0-9]+-test.[0-9]+
env:
TELEPRESENCE_REGISTRY: ghcr.io/telepresenceio
jobs:
build-release:
strategy:
fail-fast: false
matrix:
runner:
- ubuntu-latest
- macos-latest
- windows-latest
arch:
- amd64
- arm64
runs-on: ${{ matrix.runner }}
env:
GOARCH: ${{ matrix.arch }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/install-dependencies
name: install dependencies
- name: set version
shell: bash
run: echo "TELEPRESENCE_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
- name: generate binaries
run: make release-binary
- name: Install WiX Toolset
if: runner.os == 'Windows' && matrix.arch == 'amd64'
shell: pwsh
run: |
dotnet tool install --global wix --version 6.0.2
wix extension add -g WixToolset.BootstrapperApplications.wixext/6.0.2
wix extension add -g WixToolset.UI.wixext/6.0.2
wix extension add -g WixToolset.Util.wixext/6.0.2
- name: Build WiX Installer
if: runner.os == 'Windows' && matrix.arch == 'amd64'
shell: bash
run: |
export PATH="$USERPROFILE/.dotnet/tools:$PATH"
cd build-aux/wix-installer
make bundle ARCH=${{ matrix.arch }}
cp ../../build-output/bin/TelepresenceInstall.exe ../../build-output/release/telepresence-windows-${{ matrix.arch }}-setup.exe
- name: Install nfpm
if: runner.os == 'Linux'
shell: bash
run: |
# Always download x86_64 nfpm since ubuntu-latest runners are x86_64
# nfpm cross-compiles packages for the target arch specified in config
curl -sfL "https://github.com/goreleaser/nfpm/releases/download/v2.44.1/nfpm_2.44.1_Linux_x86_64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/nfpm /usr/local/bin/nfpm
- name: Build Linux Packages
if: runner.os == 'Linux'
shell: bash
run: |
cd build-aux/systemd-installer
VERSION="${TELEPRESENCE_VERSION#v}" ARCH=${{ matrix.arch }} ./build-packages.sh
- name: Upload binaries
uses: actions/upload-artifact@v4
with:
name: binaries-${{ matrix.runner }}-${{ matrix.arch }}
path: build-output/release
retention-days: 1
push-images:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/install-dependencies
name: install dependencies
- name: set version
shell: bash
run: |
v=${{ github.ref_name }}
echo "TELEPRESENCE_VERSION=$v" >> "$GITHUB_ENV"
echo "TELEPRESENCE_SEMVER=${v#v}" >> "$GITHUB_ENV"
- name: Setup docker buildx
uses: docker/setup-buildx-action@v3
with:
platforms: linux/amd64,linux/arm64
- name: Build image dependencies
run: make images-deps
- name: Make helm chart
run: make helm-chart
- name: Log in to registry
run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u ${{ github.actor }} --password-stdin
- name: Push client image
run: |
docker buildx build --platform=linux/amd64,linux/arm64 --build-arg TELEPRESENCE_VERSION=${{env.TELEPRESENCE_SEMVER}} \
--push --tag ${{env.TELEPRESENCE_REGISTRY}}/telepresence:${{env.TELEPRESENCE_SEMVER}} -f build-aux/docker/images/Dockerfile.client .
- name: Push tel2 image
run: |
docker buildx build --platform=linux/amd64,linux/arm64 --build-arg TELEPRESENCE_VERSION=${{env.TELEPRESENCE_SEMVER}} \
--push --tag ${{env.TELEPRESENCE_REGISTRY}}/tel2:${{env.TELEPRESENCE_SEMVER}} -f build-aux/docker/images/Dockerfile.traffic .
- name: Push routeController image
run: |
docker buildx build --platform=linux/amd64,linux/arm64 \
--push --tag ${{env.TELEPRESENCE_REGISTRY}}/route-controller:${{env.TELEPRESENCE_SEMVER}} -f build-aux/docker/images/Dockerfile.routecontroller .
- name: Push Helm Chart
run: helm push build-output/telepresence-oss-chart.tgz oci://${{env.TELEPRESENCE_REGISTRY}}
- name: Log out from registry
if: always()
run: docker logout
publish-release:
runs-on: ubuntu-latest
needs:
- build-release
outputs:
draft: ${{ steps.semver_check.outputs.draft }}
prerelease: ${{ steps.semver_check.outputs.prerelease }}
semver: ${{ steps.semver_check.outputs.semver }}
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Display structure of downloaded files
run: ls -R
- name: Determine if version is RC, TEST, or GA
id: semver_check
run: |
v=${{ github.ref_name }}
echo "semver=${v#v}" >> "$GITHUB_OUTPUT"
if [[ "${v}" =~ ^v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+$ ]]; then
echo "make_latest=false" >> $GITHUB_OUTPUT
echo "draft=false" >> $GITHUB_OUTPUT
echo "prerelease=true" >> $GITHUB_OUTPUT
elif [[ "${v}" =~ ^v[0-9]+.[0-9]+.[0-9]+-test.[0-9]+$ ]]; then
echo "make_latest=false" >> $GITHUB_OUTPUT
echo "draft=false" >> $GITHUB_OUTPUT
echo "prerelease=true" >> $GITHUB_OUTPUT
elif [[ "${v}" =~ ^v[0-9]+.[0-9]+.[0-9]+-draft.[0-9]+$ ]]; then
echo "make_latest=false" >> $GITHUB_OUTPUT
echo "draft=true" >> $GITHUB_OUTPUT
echo "prerelease=false" >> $GITHUB_OUTPUT
else
echo "make_latest=true" >> $GITHUB_OUTPUT
echo "draft=false" >> $GITHUB_OUTPUT
echo "prerelease=false" >> $GITHUB_OUTPUT
fi
- name: Create draft release
if: ${{ steps.semver_check.outputs.draft == 'true' }}
uses: ncipollo/release-action@v1
with:
artifacts: "binaries-*/*"
token: ${{ secrets.GITHUB_TOKEN }}
draft:
tag: ${{ github.ref_name }}
body: |
## Draft Release
For more information, visit our [installation docs](https://www.telepresence.io/docs/latest/quick-start).
- name: Create release
if: ${{ steps.semver_check.outputs.draft == 'false' }}
uses: ncipollo/release-action@v1
with:
artifacts: "binaries-*/*"
token: ${{ secrets.GITHUB_TOKEN }}
prerelease: ${{ steps.semver_check.outputs.prerelease }}
makeLatest: ${{ steps.semver_check.outputs.make_latest }}
tag: ${{ github.ref_name }}
body: |
## Official Release Artifacts
### Installers (with root daemon as a system service)
These installers include the option to run the root daemon as a system service, eliminating the need for elevated privileges when using Telepresence.
| Platform | Architecture | Package |
|----------|--------------|---------|
| Linux (Debian/Ubuntu) | amd64 | [telepresence-linux-amd64.deb](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-amd64.deb) |
| Linux (Debian/Ubuntu) | arm64 | [telepresence-linux-arm64.deb](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-arm64.deb) |
| Linux (Fedora/RHEL) | amd64 | [telepresence-linux-amd64.rpm](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-amd64.rpm) |
| Linux (Fedora/RHEL) | arm64 | [telepresence-linux-arm64.rpm](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-${{ steps.semver_check.outputs.semver }}-linux-arm64.rpm) |
| macOS | amd64 | [telepresence-darwin-amd64.pkg](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-amd64.pkg) |
| macOS | arm64 | [telepresence-darwin-arm64.pkg](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-arm64.pkg) |
| Windows | amd64 | [telepresence-windows-amd64-setup.exe](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-windows-amd64-setup.exe) |
| Windows | arm64 | *Not available — WinFSP and SSHFS-Win installers lack arm64 versions. Use the zip file below.* |
### Standalone Binaries
Standalone binaries for manual installation. The root daemon runs on-demand with elevated privileges.
| Platform | Architecture | Binary |
|----------|--------------|--------|
| Linux | amd64 | [telepresence-linux-amd64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-linux-amd64) |
| Linux | arm64 | [telepresence-linux-arm64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-linux-arm64) |
| macOS | amd64 | [telepresence-darwin-amd64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-amd64) |
| macOS | arm64 | [telepresence-darwin-arm64](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-darwin-arm64) |
| Windows | amd64 | [telepresence-windows-amd64.zip](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-windows-amd64.zip) |
| Windows | arm64 | [telepresence-windows-arm64.zip](https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}/telepresence-windows-arm64.zip) |
### Helm Chart
- 📦 [Telepresence Helm Chart](https://artifacthub.io/packages/helm/telepresence-oss/telepresence-oss/${{ steps.semver_check.outputs.semver }})
For more information, visit our [installation docs](https://www.telepresence.io/docs/quick-start).
- uses: actions/checkout@v4
if: ${{ steps.semver_check.outputs.make_latest == 'true' }}
- name: Update Homebrew
if: ${{ steps.semver_check.outputs.make_latest == 'true' }}
run: |
v=${{ github.ref_name }}
packaging/homebrew-package.sh "${v#v}" "${{ vars.GH_BOT_USER }}" "${{ vars.GH_BOT_EMAIL }}" "${{ secrets.HOMEBREW_TAP_TOKEN }}"
prune-images:
if: ${{ always() }}
runs-on: ubuntu-latest
permissions:
packages: write
needs:
- push-images
steps:
- name: Prune tel2 and telepresence
uses: dataaxiom/ghcr-cleanup-action@v1
with:
owner: telepresenceio
packages: tel2,telepresence
token: ${{ secrets.GITHUB_TOKEN }}
delete-untagged: true
delete-ghost-images: true
delete-partial-images: true
delete-orphaned-images: true
build-macos-pkg:
# This job builds signed and notarized macOS .pkg installers.
# It uses a protected environment requiring approval from authorized reviewers.
# If not approved, the release proceeds without .pkg installers (standalone binaries are still available).
environment: macos-signing
needs:
- publish-release
strategy:
fail-fast: false
matrix:
arch:
- amd64
- arm64
runs-on: macos-latest
env:
GOARCH: ${{ matrix.arch }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/install-dependencies
name: install dependencies
- name: set version
shell: bash
run: echo "TELEPRESENCE_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
- name: generate binaries
run: make release-binary
- name: Import Apple certificates
env:
MACOS_CERTIFICATE_P12: ${{ secrets.MACOS_CERTIFICATE_P12 }}
MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }}
run: |
# Create a temporary keychain
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
KEYCHAIN_PASSWORD=$(openssl rand -base64 32)
security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH"
security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
# Import certificates from base64-encoded P12
echo "$MACOS_CERTIFICATE_P12" | base64 --decode > $RUNNER_TEMP/certificate.p12
security import $RUNNER_TEMP/certificate.p12 -P "$MACOS_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k "$KEYCHAIN_PATH"
rm $RUNNER_TEMP/certificate.p12
# Add keychain to search list and set as default
security list-keychain -d user -s "$KEYCHAIN_PATH" login.keychain
security default-keychain -s "$KEYCHAIN_PATH"
# Allow codesign to access the keychain without prompting
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH"
# Store keychain path for cleanup
echo "KEYCHAIN_PATH=$KEYCHAIN_PATH" >> $GITHUB_ENV
- name: Build signed macOS Installer
env:
MACOS_SIGN_APPLICATION: ${{ secrets.MACOS_SIGN_APPLICATION }}
MACOS_SIGN_INSTALLER: ${{ secrets.MACOS_SIGN_INSTALLER }}
MACOS_NOTARIZE_APPLE_ID: ${{ secrets.MACOS_NOTARIZE_APPLE_ID }}
MACOS_NOTARIZE_TEAM_ID: ${{ secrets.MACOS_NOTARIZE_TEAM_ID }}
MACOS_NOTARIZE_PASSWORD: ${{ secrets.MACOS_NOTARIZE_PASSWORD }}
run: |
cd build-aux/pkg-installer
VERSION="${TELEPRESENCE_VERSION#v}" ARCH=${{ matrix.arch }} ./build-pkg.sh
- name: Cleanup macOS keychain
if: always() && env.KEYCHAIN_PATH != ''
run: |
security delete-keychain "$KEYCHAIN_PATH" || true
- name: Add signed package to release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
cp build-output/Telepresence.pkg telepresence-darwin-${{ matrix.arch }}.pkg
gh release upload ${{ github.ref_name }} telepresence-darwin-${{ matrix.arch }}.pkg --clobber
test-release:
needs:
- push-images
- publish-release
if: ${{ needs.publish-release.outputs.draft == 'false' }}
strategy:
fail-fast: false
matrix:
runner:
- ubuntu-latest
- macos-latest
- windows-latest
arch:
- amd64
- arm64
runs-on: ${{ matrix.runner }}
steps:
- name: download binary
env:
DOWNLOAD_URL: "https://github.com/telepresenceio/telepresence/releases/download/${{ github.ref_name }}"
shell: bash
run: |
if [ "${{ runner.os }}" = "macOS" ]; then
curl -fL ${{ env.DOWNLOAD_URL }}/telepresence-darwin-${{ matrix.arch }} -o ./telepresence || { echo "Curl command failed" ; exit 1; }
elif [ "${{ runner.os }}" = "Windows" ]; then
curl -fL ${{ env.DOWNLOAD_URL }}/telepresence-windows-${{ matrix.arch }}.zip -o ./telepresence.zip || { echo "Curl command failed" ; exit 1; }
unzip ./telepresence.zip || { echo "Unzip command failed" ; exit 1; }
else
curl -fL ${{ env.DOWNLOAD_URL }}/telepresence-linux-${{ matrix.arch }} -o ./telepresence || { echo "Curl command failed" ; exit 1; }
fi
- name: test binary
shell: bash
if: ${{ !((runner.os == 'Linux' || runner.os == 'Windows') && runner.arch == 'X64' && matrix.arch == 'arm64') }}
run: |
chmod +x ./telepresence
output=$(./telepresence version)
if [ $? -eq 0 ]; then
echo "Telepresence command executed successfully"
else
echo "Telepresence command failed"
exit 1
fi
echo "$output" | grep -q "Client\s*:\s*${{ github.ref_name }}"
if [ $? -eq 0 ]; then
echo "Version match!"
else
echo "Version does not match!"
exit 1
fi
================================================
FILE: .github/workflows/stale.yaml
================================================
name: 'Close stale issues and PR'
on:
schedule:
- cron: '12 10 * * *'
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment, or this will be closed in 7 days.'
stale-pr-message: 'This PR is stale because it has been open 30 days with no activity. Remove stale label or comment, or this will be closed in 14 days.'
close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.'
close-pr-message: 'This PR was closed because it has been stalled for 14 days with no activity.'
days-before-issue-stale: 60
days-before-pr-stale: 30
days-before-issue-close: 7
days-before-pr-close: 14
operations-per-run: 80
exempt-issue-labels: feature,friction
================================================
FILE: .github/workflows/unit_tests.yaml
================================================
name: "Build and Unit test"
on:
pull_request:
env:
HOMEBREW_NO_INSTALL_FROM_API:
jobs:
unit:
strategy:
fail-fast: false
matrix:
runners:
- ubuntu-latest
- macos-latest
- windows-latest
runs-on: ${{ matrix.runners }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
ref: "${{ github.event.pull_request.head.sha }}"
- name: install dependencies
uses: ./.github/actions/install-dependencies
- name: install build dependencies
run: make build-deps
- name: Lint
if: ${{ runner.os != 'Windows' }}
uses: golangci/golangci-lint-action@v7
with:
args: --timeout 8m ./...
- name: Lint (limited on windows)
if: ${{ runner.os == 'Windows' }}
uses: golangci/golangci-lint-action@v7
with:
args: --timeout 8m ./cmd/telepresence/... ./integration_test/... ./pkg/...
- name: Build
run: make build
- name: Run tests
uses: nick-fields/retry/@v3
with:
max_attempts: 3
timeout_minutes: 12
command: make check-unit
================================================
FILE: .gitignore
================================================
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories
vendor/
# Editor nonsense
.vscode
.idea
*.iml
*.swp
.DS_Store
build-output
/tools/*
!/tools/src/
# Don't accidentally add files from `go build`
telepresence
traffic
tst-manager
!/cmd/*/
mcp-tools.json
# Include Chart directory
!/charts/telepresence-oss
# But don't include this one
/charts/telepresence-oss/k8s-defs.json
# Downloaded fuseftp bits
fuseftp.bits
# Needed to build on windows
.wintools
.gocache
# Don't accidentally add binaries built byintegration tests
/integration_test/testdata/echo-server/echo-server
/build-aux/genversion/genversion
# Vagrant
.vagrant/
tests.log
/.claude/settings.local.json
/bugs/
================================================
FILE: .golangci.yml
================================================
version: "2"
run:
build-tags:
- citest
modules-download-mode: readonly
linters:
enable:
- asasalint
- asciicheck
- bidichk
- bodyclose
- copyloopvar
- cyclop
- decorder
- depguard
- dogsled
- durationcheck
- errname
- forbidigo
- gochecknoglobals
- gocognit
- gocritic
- gocyclo
- godot
- goheader
- gomodguard
- goprintffuncname
- grouper
- importas
- lll
- loggercheck
- makezero
- misspell
- nakedret
- nolintlint
- nosprintfhostport
- prealloc
- predeclared
- reassign
- unconvert
- unparam
- usestdlibvars
- whitespace
disable:
- containedctx
- contextcheck
- dupl
- err113
- errchkjson
- errorlint
- exhaustive
- exhaustruct
- forcetypeassert
- funlen
- gochecknoinits
- goconst
- godox
- gomoddirectives
- gosec
- interfacebloat
- ireturn
- maintidx
- nestif
- nilerr
- nilnil
- nlreturn
- noctx
- nonamedreturns
- paralleltest
- promlinter
- revive
- rowserrcheck
- sqlclosecheck
- tagliatelle
- testpackage
- thelper
- tparallel
- varnamelen
- wastedassign
- wrapcheck
- wsl
settings:
cyclop:
max-complexity: 32
depguard:
rules:
main:
files:
- $all
deny:
- pkg: io/ioutil
desc: '`io/ioutil` is deprecated in Go 1.16, use `io` or `os` instead'
- pkg: syscall
desc: Use `golang.org/x/sys/...` instead of `syscall`
- pkg: github.com/golang/protobuf
desc: Use `google.golang.org/protobuf` instead of `github.com/golang/protobuf`
- pkg: github.com/kballard/go-shellquote
desc: Use `github.com/telepresenceio/telepresence/pkg/shellquote.ShellString` instead of `github.com/kballard/go-shellquote.Join`
forbidigo:
forbid:
- pattern: '^os\.IsNotExist$'
msg: Use errors.Is(err, fs.ErrNotExist)
gocognit:
min-complexity: 60
gocyclo:
min-complexity: 35
gomodguard:
blocked:
modules:
- gotest.tools:
recommendations:
- github.com/stretchr/testify
- github.com/google/go-cmp/cmp
- gotest.tools/v2:
recommendations:
- github.com/stretchr/testify
- github.com/google/go-cmp/cmp
- gotest.tools/v3:
recommendations:
- github.com/stretchr/testify
- github.com/google/go-cmp/cmp
lll:
line-length: 180
tab-width: 2
nolintlint:
require-explanation: true
require-specific: true
allow-no-explanation:
- gocognit
allow-unused: true
prealloc:
range-loops: false
staticcheck:
checks:
- all
# Don't check "Apply De Morgan's law".
# https://staticcheck.dev/docs/checks/#QF1001
- -QF1001
# Don't check "Incorrect or missing package comment".
# https://staticcheck.dev/docs/checks/#ST1000
- -ST1000
# Don't check "Poorly chosen identifier".
# https://staticcheck.dev/docs/checks/#ST1003
- -ST1003
exclusions:
generated: lax
rules:
- linters:
- const
- dupl
- gochecknoglobals
- goconst
- golint
- lll
- unparam
path: _test\.go
- path: (.+)\.go$
text: Error return value of `(\w+\.)+(Close|CloseSend|Flush|Remove|(Un)?Setenv|(Fp|P)rint(f|ln))\` is not checked
- path: (.+)\.go$
text: 'structtag: struct field \w+ repeats json tag'
- path: (.+)\.go$
text: Subprocess launched with function call as argument or cmd arguments
- linters:
- cyclop
path: (.+)_test\.go
paths:
- third_party$
- builtin$
- examples$
issues:
max-same-issues: 0
formatters:
enable:
- gofmt
- gofumpt
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$
================================================
FILE: .mailmap
================================================
Alex Gervais <alex@datawire.io> alex <alex@datawire.io>
Alex Gervais <alex@datawire.io> <alex.gervais@gmail.com>
Donny Yung <donaldyung@datawire.io> <donaldryung@gmail.com>
Flynn <flynn@datawire.io> <kflynn@users.noreply.github.com>
John Esmet <johnesmet@datawire.io> <jesmet@appnexus.com>
Luke Shumaker <lukeshu@datawire.io> <lukeshu@lukeshu.com>
Maxime Legault-Venne <maximelegaultvenne@datawire.io> <mlegoven@hotmail.com>
Rafael Schloming <rhs@datawire.io> <rhs@alum.mit.edu>
Thomas Hallgren <thomas@datawire.io> <thomas@tada.se>
Abhay Saxena <ark3@email.com> <ark3@datawire.io>
Alvaro Saurin <alvaro.saurin@gmail.com> <1841612+inercia@users.noreply.github.com>
Philip Lombardi <plombardi89@gmail.com> plombardi <plombardi89@gmail.com>
Philip Lombardi <plombardi89@gmail.com> <893096+plombardi89@users.noreply.github.com>
Philip Lombardi <plombardi89@gmail.com> <plombardi@datawire.io>
================================================
FILE: .protolint.yaml
================================================
lint:
# Which rules to enable/disable.
rules:
remove:
- ENUM_FIELD_NAMES_PREFIX
# Settings for those rules.
rules_option:
max_line_length:
max_chars: 120
================================================
FILE: CHANGELOG.OLD.md
================================================
# Changelog
### 2.13.3 (May 25, 2023)
- Feature: Add `.Values.hooks.curl.imagePullSecrets` and `.Values.hooks.curl.imagePullSecrets` to Helm values.
PR [3079](https://github.com/telepresenceio/telepresence/pull/3079).
- Change: The default setting of the reinvocationPolicy for the mutating webhook dealing with agent injections
changed from `Never` to `IfNeeded`.
- Bugfix: The `eks.amazonaws.com/serviceaccount` volume injected by EKS is now exported and remotely mounted
during an intercept.
Ticket [3166](https://github.com/telepresenceio/telepresence/issues/3166).
- Bugfix: The mutating webhook now correctly applies the namespace selector even if the cluster version contains
non-numeric characters. For example, it can now handle versions such as Major:"1", Minor:"22+".
PR [3184](https://github.com/telepresenceio/telepresence/pull/3184).
- Bugfix: The "telepresence" Docker network will now propagate DNS AAAA queries to the Telepresence DNS resolver when
it runs in a Docker container.
Ticket [3179](https://github.com/telepresenceio/telepresence/issues/3179).
- Bugfix: Running `telepresence intercept --local-only --docker-run` no longer results in a panic.
Ticket [3171](https://github.com/telepresenceio/telepresence/issues/3171).
- Bugfix: Running `telepresence intercept --local-only --mount false` no longer results in an incorrect error message
saying "a local-only intercept cannot have mounts".
Ticket [3171](https://github.com/telepresenceio/telepresence/issues/3171).
- Bugfix: The helm chart now correctly handles custom `agentInjector.webhook.port` that was not being set in hook URLs.
PR [3161](https://github.com/telepresenceio/telepresence/pull/3161).
- Bugfix: `.intercept.disableGlobal` and `.timeouts.agentArrival` are now correctly honored.
### 2.13.2 (May 12, 2023)
- Bugfix: Replaced `/` characters with a `-` when the authenticator service creates the kubeconfig in the Telepresence cache.
PR [3167](https://github.com/telepresenceio/telepresence/pull/3167).
- Feature: Configurable strategy (`auto`, `powershell`. or `registry`) to set the global DNS search path on Windows. Default
is `auto` which means try `powershell` first, and if it fails, fall back to `registry`.
Ticket [3152](https://github.com/telepresenceio/telepresence/issues/3152).
- Feature: The timeout for the traffic manager to wait for traffic agent to arrive can
now be configured in the `values.yaml` file using `timeouts.agentArrival`. The default
timeout is still 30 seconds.
PR [3148](https://github.com/telepresenceio/telepresence/pull/3148).
- Bugfix: The automatic discovery of a local container based cluster (minikube or kind) used when the
Telepresence daemon runs in a container, now works on macOS and Windows, and with different profiles,
ports, and cluster names
PR [3165](https://github.com/telepresenceio/telepresence/pull/3165).
- Bugfix: FTP Stability improvements. Multiple simultaneous intercepts can transfer large files in bidirectionally and in parallel.
PR [3157](https://github.com/telepresenceio/telepresence/pull/3157).
- Bugfix: Pods using persistent volumes no longer causes timeouts when intercepted.
- Bugfix: Ensure that `telepresence connect` succeeds even though DNS isn't configured correctly.
Ticket [3143](https://github.com/telepresenceio/telepresence/issues/3143).
PR [3154](https://github.com/telepresenceio/telepresence/pull/3154).
- Bugfix: The traffic-manager would sometimes panic with a "close of closed channel" message and exit.
PR [3160](https://github.com/telepresenceio/telepresence/pull/3160).
- Bugfix: The traffic-manager would sometimes panic and exit after some time due to a type cast panic.
Ticket [3149](https://github.com/telepresenceio/telepresence/issues/3149).
### 2.13.1 (April 20, 2023)
- Change: Update ambassador-agent to version 1.13.13
### 2.13.0 (April 18, 2023)
- Feature: The Docker network used by a Kind or Minikube (using the "docker" driver) installation, is automatically
detected and connected to a Docker container running the Telepresence daemon.
- Feature: Mapped namespaces are included in the output of the `telepresence status` command.
- Feature: There's a new --address flag to the intercept command allowing users to set the target IP of the intercept.
- Feature: The new flags `--docker-build`, and `--docker-build-opt` was added to `telepresence intercept` to facilitate a
docker run directly from a docker context.
- Bugfix: Using `telepresence intercept --docker-run` now works with a container based daemon started with `telepresence connect --docker`
- Bugfix: DNS works properly even when no cluster subnet is routed by the Telepresence VIF.
- Bugfix: The Traffic Manager uses a fail-proof way to determine the cluster domain.
- Bugfix: DNS on windows is more reliable and performant.
- Bugfix: The agent is now correctly injected even with a high number of deployment starting at the same time.
- Bugfix: The kubeconfig is made self-contained before running Telepresence daemon in a Docker container.
- Bugfix: The client will no longer need cluster wide permissions when connected to a namespace scoped Traffic Manager.
- BugFix: The version command won't throw an error anymore if there is no kubeconfig file defined.
### 2.12.2 (April 4, 2023)
- Security: Update golang to 1.20.3 to address CVE-2023-24534, CVE-2023-24536, CVE-2023-24537, CVE-2023-24538
### 2.12.1 (March 22, 2023)
- Bugfix: Illegal characters are now replaced when a docker container name is generated from a kubernetes context name.
### 2.12.0 (March 20, 2023)
- Feature: Telepresence can now start or connect to a daemon in a docker container by use of the global `--docker` flag.
- Feature: Adds an authenticator package to support integration with the [client-go credential](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins) plugins when the
daemon runs in a docker container.
- Feature: The `telepresence helm` command now accepts a `--namespace` flag.
- Change: Telepresence will now detect if services and pods are routable, independently of one another, before adding their routes. This is a change from before, when being already able to connect to pods prevented the addition of routes for services too.
- Bugfix: The traffic-manager will no longer panic when the CNAME of kubernetes.default doesn't contain .svc.
- Bugfix: The `telepresence helm install/upgrade --set` family of flags now work correctly with comma separated values.
### 2.11.1 (February 27, 2023)
- Bugfix: The multi-arch build now for the proprietary traffic-manager and traffic-agent now works for both amd64 and arm64.
### 2.11.0 (February 22, 2023)
- Feature: When Telepresence detects that it runs in a docker container, it will now expose its DNS on `localhost:53`. This makes the
container itself a DNS server. Very handy when other containers use `--network container:[tp-container]`.
- Feature: A new flag, `--local-mount-port <port>` will make `telepresence intercept --detailed-output --output=[yaml|json]` create
a bridge to the remote SFTP service instead of starting an sshfs client. This enables the sshfs client to be started outside of the
container, and thus, mount filesystems that then can be used as source for volumes that other containers will use.
- Feature: The Telepresence daemon can now run as a long-lived process in a docker container so that CLI commands that
run in other containers can use a common daemon for network access and intercepts.
- Feature: A new boolean flag `--detailed-output` was added to the `telepresence intercept` command. It will output very
detailed information about an intercept when used together with `--output=[json|yaml]`.
Pull Request [3013](https://github.com/telepresenceio/telepresence/pull/3013).
- Feature: IPv6 support. Thanks to [@0x6a77](https://www.github.com/0x6a77).
Ticket [2978](https://github.com/telepresenceio/telepresence/issues/2978).
- Feature: Adds two parameters `--also-proxy` and `--never-proxy` to the `telepresence connect` command.
Ticket [2950](https://github.com/telepresenceio/telepresence/issues/2950).
- Feature: Add a parameter `--manager-namespace` to the `telepresence connect` command.
Ticket [2968](https://github.com/telepresenceio/telepresence/issues/2968)
- Feature: Add a configuration `cluster.defaultManagerNamespace` for setting the default manager namespace.
Ticket [2968](https://github.com/telepresenceio/telepresence/issues/2968)
- Change: The namespace of the connected manager is now displayed in the `telepresence status` output.
Ticket [2968](https://github.com/telepresenceio/telepresence/issues/2968)
- Change: Depreciate `--watch` flag in `telepresence list` command. This is now covered by `--output json-stream`
- Change: Add `--output` option `json-stream`
- Bugfix: Fixed a bug when detecting VPN conflicts on macOS that removed conflicting gateway links.
- Bugfix: Fixed a bug where connecting to certain VPNs that map the CIDR range of the cluster would result in no routes getting added.
Ticket [3006](https://github.com/telepresenceio/telepresence/issues/3006)
- Bugfix: Support ARM64 architecture
Ticket [2786](https://github.com/telepresenceio/telepresence/issues/2786)
### 2.10.6 (February 14, 2023)
Security release to rebuild with go 1.19.6
### 2.10.5 (February 6, 2023)
- Change: mTLS Secrets will now be mounted into the traffic agent, instead of expected to be read by it from the API.
- Bugfix: Fixed a bug that prevented the local daemons from automatically reconnecting to the traffic manager when the network connection was lost.
### 2.10.4 (January 20, 2023)
- Bugfix: Fix backward compatibility issue when using traffic-managers of version 2.9.5 or older.
### 2.10.2 (January 16, 2023)
- Bugfix: Ensure that CLI and user-daemon binaries are the same version when running `telepresence helm install`
or `telepresence helm upgrade`.
### 2.10.1 (January 11, 2023)
- Bugfix: Fixed a regex in our release process.
### 2.10.0 (January 11, 2023)
- Feature: The Traffic Manager can now be set to either "team" mode or "single user" mode.
When in team mode, intercepts will default to http intercepts.
- Feature: The `telepresence helm` sub-commands `insert` and `upgrade` now accepts all types
of helm `--set-XXX` flags.
- Feature: A new `telepresence helm upgrade` command was added with the additional flags
`--reuse-values` and `--reset-values`. This means that the `telpresence helm install --upgrade`
flag has been deprecated.
- Feature: Image pull secrets for the traffic-agent can now be added using the Helm chart setting
`agent.image.pullSecrets`.
- Change: The configmap `traffic-manager-clients` has been renamed to `traffic-manager`.
- Change: The Helm installation will now fail if `intercept.disableGlobal=true` and `traffiManager.mode`
is not set to `team`.
- Change: If the cluster is Kubernetes 1.21 or later, the mutating webhook will find the correct namespace
using the label `kubernetes.io/metadata.name` rather than `app.kuberenetes.io/name`. Ticket [2913](https://github.com/telepresenceio/telepresence/issues/2913).
- Change: The name of the mutating webhook now contains the namespace of the traffic-manager so
that the webhook is easier to identify when there are multiple namespace scoped telepresence
installations in the cluster.
- Change: The OSS Helm chart is no longer pushed to the datawire Helm repository. It will
instead be pushed from the telepresence proprietary repository. The OSS Helm chart is still
what's embedded in the OSS telepresence client. PR [2943](https://github.com/telepresenceio/telepresence/pull/2943).
- Bugfix: Telepresence no longer panics when `--docker-run` is combined with `--name <name>` instead of
`--name=<name>`. Ticket [2953](https://github.com/telepresenceio/telepresence/issues/2953).
- Bugfix: Telepresence traffic-manager extracts the cluster domain (e.g. "cluster.local") using a CNAME lookup for "kubernetes.default"
instead of "kubernetes.default.svc".
- Bugfix: A timeout was added to the pre-delete hook `uninstall-agents`, so that a helm uninstall doesn't
hang when there is no running traffic-manager. PR [2937](https://github.com/telepresenceio/telepresence/pull/2937).
### 2.9.5 (December 8, 2022)
- Security: Update golang to 1.19.4 to address
[CVE-2022-41720 and CVE-2022-41717](https://groups.google.com/g/golang-announce/c/L_3rmdT0BMU).
- Bugfix: A regression that was introduced in 2.9.3, preventing use of gce authentication without also
having a config element present in the gce configuration in the kubeconfig, has been fixed.
### 2.9.4 (December 5, 2022)
- Feature: The traffic-manager can automatically detect that the node subnets are different from the
pod subnets, and switch detection strategy to instead use subnets that cover the pod IPs.
- Bugfix: The `telepresence helm` command `--set x=y` flag didn't correctly set values of other types
than `string`. The code now uses standard Helm semantics for this flag.
- Bugfix: Telepresence now uses the correct `agent.image` properties in the Helm chart when copying
agent image settings from the `config.yml` file.
- Bugfix: Initialization of FTP type file sharing is delayed, so that setting it using the Helm chart
value `intercept.useFtp=true` works as expected.
- Bugfix: The port-forward that is created when Telepresence connects to a cluster is now properly
closed when `telepresence quit` is called.
- Bugfix: The user daemon no longer panics when the `config.yml` is modified at a time when the user daemon
is running but no session is active.
- Bugfix: Fix race condition that would occur when `telepresence connect` `telepresence leave` was called
several times in rapid succession.
### 2.9.3 (November 23, 2022)
- Feature: The helm chart now supports `livenessProbe` and `readinessProbe` for the traffic-manager
deployment, so that the pod automatically restarts if it doesn't respond.
- Change: The root daemon now communicates directly with the traffic-manager instead of routing all
outbound traffic through the user daemon.
- Change: The output of `telepresence version` is now aligned and no longer contains "(api v3)"
- Bugfix: Using `telepresence loglevel LEVEL` now also sets the log level in the root daemon.
- Bugfix: Multi valued kubernetes flags such as `--as-group` are now propagated correctly.
- Bugfix: The root daemon would sometimes hang indefinitely when quit and connect were called
in rapid succession.
- Bugfix: Don't use `systemd.resolved` base DNS resolver unless cluster is proxied.
### 2.9.2 (November 16, 2022)
- Bugfix: Fix panic when connecting to an older traffic-manager.
- Bugfix: Fix `http-header` flag sometimes wouldn't propagate correctly.
### 2.9.1 (November 15, 2022)
- Bugfix: Fix regression in 2.9.0 causing `no Auth Provider found for name “gcp”` when connecting.
### 2.9.0 (November 15, 2022)
- Feature: A new `telepresence config view` command was added that shows how the client is currently configured.
- Feature: The traffic-manager can now configure all clients that connect through the `client:` map in
the `values.yaml` file.
- Feature: The traffic-manager version is now included in the output from the `telepresence version` command.
- Feature: add `podLabels` values to Helm Chart to add extra labels to deployment.
- Feature: The telepresence flag `--output` now accepts `yaml` as a valid format.
- Change: The `telepresence status --json` flag is deprecated. Use `telepresence status --output=json` instead.
- Bugfix: Informational messages that don't really originate from the command, such as "Launching Telepresence Root Daemon",
or "An update of telepresence ...", are discarded instead of being printed as plain text before the actual formatted
output when using the `--output=json`.
- Bugfix: An attempt to use an invalid value for the global `--output` flag now renders a proper error message.
- Bugfix: Unqualified service names now resolves OK when using `telepresence intercept --docker-run`.
- Bugfix: Files lingering under /etc/resolver on macOS are now removed when a new root daemon starts.
### 2.8.5 (November 2, 2022)
- Change: This is a security release. It's identical with 2.8.3 but built using Go 1.19.3 to address
[CVE-2022-41716 and Go issue https://go.dev/issue/56284](https://github.com/golang/go/issues/56284).
### 2.8.4 (November 2, 2022)
- Change: Failed security release. Use 2.8.5.
### 2.8.3 (October 27, 2022)
- Feature: The traffic-manager can be configured to disable global (non-http) intercepts using the
Helm chart setting `intercept.disableGlobal`.
- Feature: The port used for the mutating webhook can be configured using the Helm chart setting
`agentInjector.webhook.port`.
- Feature: A new repeated `--set a.b.c=v` flag was added to the `telepresence helm install` command so that
values can be passed directly from the command line, without first storing them in a file.
- Change: The default port for the mutating webhook is now `443`. It used to be `8443`.
- Change: The traffic-manager will no longer default to use the `tel2` image for the traffic-agent when it is
unable to connect to Ambassador Cloud. Air-gapped environments must declare what image to use in the Helm chart.
- Bugfix: `telepresence connect` now works as long as the traffic manager is installed, even if
it wasn't installed via `helm install`
- Bugfix: Telepresence check-vpn no longer crashes when the daemons don't start properly.
- Bugfix: The root daemon no longer crashes when the session boot times out before the cluster connection succeeds.
### 2.8.2 (October 15, 2022)
- Feature: The Telepresence DNS resolver is now capable of resolving queries of type `A`, `AAAA`, `CNAME`,
`MX`, `NS`, `PTR`, `SRV`, and `TXT`.
- Feature: A new `client` struct was added to the Helm chart. It contains a `connectionTTL` that controls
how long the traffic manager will retain a client connection without seeing any sign of life from the client.
- Feature: A `dns` struct container the fields `includeSuffixes` and `excludeSuffixes` was added to the Helm
chart `client` struct, making those values configurable per cluster.
- Feature: The API port used by the traffic-manager is now configurable using the Helm chart value `apiPort`.
The default port is 8081.
- Change: The Helm chart `dnsConfig` was deprecated but retained for backward compatibility. The fields
`alsoProxySubnets` and `neverProxySubnets` can now be found under `routing` in the `client` struct.
- Change: The Helm chart `agentInjector.agentImage` was moved to `agent.image`. The old value is deprecated but
retained for backward compatibility.
- Change: The Helm chart `agentInjector.appProtocolStrategy` was moved to `agent.appProtocolStrategy`. The old
value is deprecated but retained for backward compatibility.
- Change: The Helm chart `dnsServiceName`, `dnsServiceNamespace`, and `dnsServiceIP` has been removed, because
they are no longer needed. The TUN-device will use the traffic-manager pod-IP on platforms where it needs to
dedicate an IP for its local resolver.
- Bugfix: Environment variable interpolation now works for all definitions that are copied from pod containers
into the injected traffic-agent container.
- Bugfix: An attempt to create simultaneous intercepts that span multiple namespace on the same workstation
is detected early and prohibited instead of resulting in failing DNS lookups later on.
- Bugfix: Spurious and incorrect ""!! SRV xxx"" messages will no longer appear in the logs when the reason
is normal context cancellation.
- Bugfix: Single label names now resolves correctly when using Telepresence in Docker on a Linux host
- Bugfix: The Helm chart value `appProtocolStrategy` is now correctly named (used to be `appPortStategy`)
- Bugfix: Include file name in error message when failing to parse JSON file.
### 2.7.6 (September 16, 2022)
- Reintroduce everything from 2.7.4 with fix for issue preventing the CLI from launching on arm64 builds
### 2.7.5 (September 14, 2022)
- Revert of release 2.7.5 (so essentially the same as 2.7.3)
### 2.7.4 (September 14, 2022)
- Feature: The `resources` for the traffic-agent container and the optional init container can
be specified in the Helm chart using the `resource` and `initResource` fields of the
`agentInjector.agentImage`.
- Feature: When the traffic-manager fails to inject a traffic-agent, the cause for the failure is
detected by reading the cluster events, and propagated to the user.
- Feature: Telepresence can now use an embedded FTP client and load an existing FUSE library
instead of running an external `sshfs` or `sshfs-win` binary. This feature is experimental
in 2.7.x and enabled by setting `intercept.useFtp` to `true` in the `config.yml`.
- Change: Telepresence on Windows upgraded winfsp from version 1.10 to 1.11
- Bugfix: Running CLI commands on Apple M1 machines will no longer throw warnings about `/proc/cpuinfo`
and `/proc/self/auxv`.
### 2.7.3 (September 7, 2022)
- Bugfix: CLI commands that are executed by the user daemon now use a pseudo TTY. This enables
`docker run -it` to allocate a TTY and will also give other commands like `bash read` the
same behavior as when executed directly in a terminal.
- Bugfix: The traffic-manager will no longer log numerous warnings saying: "Issuing a
systema request without ApiKey or InstallID may result in an error".
- Bugfix: The traffic-manager will no longer log an error saying: "Unable to derive subnets
from nodes" when the `podCIDRStrategy` is `auto` and it chooses to instead derive the
subnets from the pod IPs.
### 2.7.2 (August 25, 2022)
- Bugfix: Standard I/O is restored when using `telepresence intercept <opts> -- <command>`.
- Bugfix: Graciously handle nil intercept environment from the traffic-manager.
- Feature: The timeout for the initial connectivity check that Telepresence performs
in order to determine if the cluster's subnets are proxied or not can now be configured
in the `config.yml` file using `timeouts.connectivityCheck`. The default timeout was
changed from 5 seconds to 500 milliseconds to speed up the actual connect.
- Feature: Adds cli autocompletion for the `--namespace` flag on the `list` and `intercept` commands,
autocompletion for interceptable workloads on the `intercept` command, and autocompletion for
active intercepts on the `leave` command.
- Change: The command `telepresence gather-traces` now prints out a message on success.
- Change: The command `telepresence upload-traces` now prints out a message on success.
- Change: The command `telepresence gather-traces` now traces itself and reports errors with trace gathering
- Change: The `cli.log` log is now logged at the same level as the `connector.log`
- Bugfix: Streams created between the traffic-agent and the workstation are now properly closed
when no interceptor process has been started on the workstation. This fixes a potential problem where
a large number of attempts to connect to a non-existing interceptor would cause stream congestion
and an unresponsive intercept.
- Bugfix: Telepresence help message functionality without a running user daemon has been restored.
- Bugfix: The `telepresence list` command no longer includes the `traffic-manager` deployment.
### 2.7.1 (August 10, 2022)
- Change: The command `telepresence uninstall` has been restored, but the `--everything` flag is now deprecated.
- Change: `telepresence helm uninstall` will only uninstall the traffic-manager and no longer accepts the `--everything`, `--agent`,
or `--all-agents` flags.
- Bugfix: `telepresence intercept` will attempt to connect to the traffic manager before creating an intercept.
### 2.7.0 (August 8, 2022)
- Feature: `telepresence intercept` has gained a
`--preview-url-add-request-headers` flag (and `telepresence preview create` a `--add-request-headers` flag) that can be used to inject
request headers in to every request made through the preview URL.
- Feature: The Docker image now contains a new program in addition to
the existing traffic-manager and traffic-agent: the pod-daemon. The
pod-daemon is a trimmed-down version of the user-daemon that is
designed to run as a sidecar in a Pod, enabling CI systems to create
preview deploys.
- Feature: The Telepresence components now collect OpenTelemetry traces.
Up to 10MB of trace data are available at any given time for collection from
components. `telepresence gather-traces` is a new command that will collect
all that data and place it into a gzip file, and `telepresence upload-traces` is
a new command that will push the gzipped data into an OTLP collector.
- Feature: The agent injector now supports a new annotation, `telepresence.getambassador.io/inject-ignore-volume-mounts`, that can be used to make the injector ignore specified volume mounts denoted by a comma-separated string.
- Change: The traffic manager is no longer automatically installed into the cluster. Connecting or creating an intercept in a cluster without a traffic manager will return an error.
- Feature: A new telepresence helm command was added to provide an easy way to install, upgrade, or uninstall the telepresence traffic-manager.
- Change: The command `telepresence uninstall` has been moved to `telepresence helm uninstall`.
- Change: Add an emptyDir volume and volume mount under `/tmp` on the agent sidecar so it works with `readOnlyRootFileSystem: true`
- Feature: Added prometheus support to the traffic manager.
### 2.6.8 (June 23, 2022)
- Feature: The name and namespace for the DNS Service that the traffic-manager uses in DNS auto-detection can now be specified.
- Feature: Should the DNS auto-detection logic in the traffic-manager fail, users can now specify a fallback IP to use.
- Feature: It is now possible to intercept UDP ports with Telepresence and also use `--to-pod` to forward UDP
traffic from ports on localhost.
- Change: The Helm chart will now add the `nodeSelector`, `affinity` and `tolerations` values to the traffic-manager's
post-upgrade-hook and pre-delete-hook jobs.
- Bugfix: Telepresence no longer fails to inject the traffic agent into the pod generated for workloads that have no
volumes and `automountServiceAccountToken: false`.
- Feature: The helm-chart now supports settings resources, securityContext and podSecurityContext for use with chart hooks.
### 2.6.7 (June 22, 2022)
- Bugfix: The Telepresence client will remember and reuse the traffic-manager session after a network failure
or other reason that caused an unclean disconnect.
- Bugfix: Telepresence will no longer forward DNS requests for "wpad" to the cluster.
- Bugfix: The traffic-agent will properly shut down if one of its goroutines errors.
### 2.6.6 (June 9, 2022)
- Bugfix: The propagation of the `TELEPRESENCE_API_PORT` environment variable now works correctly.
- Bugfix: The `--output json` global flag no longer outputs multiple objects.
### 2.6.5 (June 3, 2022)
- Feature: The `reinvocationPolicy` or the traffic-agent injector webhook can now be configured using the Helm chart.
- Feature: The traffic manager now accepts a root CA for a proxy, allowing it to connect to ambassador cloud from behind an HTTPS proxy.
This can be configured through the helm chart.
- Feature: A policy that controls when the mutating webhook injects the traffic-agent was added, and can be configured in the Helm chart.
- Change: Telepresence on Windows upgraded wintun.dll from version 0.12 to version 0.14.1
- Change: Telepresence on Windows upgraded winfsp from version 1.9 to 1.10
- Change: Telepresence upgraded its embedded Helm from version 3.8.1 to 3.9
- Change: Telepresence upgraded its embedded Kubernetes API from version 0.23.4 to 0.24.1
- Feature: Added a `--watch` flag to `telepresence list` that can be used to watch interceptable workloads.
- Change: The configuration setting for `images.webhookAgentImage` is now deprecated. Use `images.agentImage` instead.
- Bugfix: The `reinvocationPolicy` or the traffic-agent injector webhook now defaults to `Never` insteadof `IfNeeded` so
that `LimitRange`s on namespaces can inject a missing `resources` element into the injected traffic-agent container.
- Bugfix: UDP based communication with services in the cluster now works as expected.
- Bugfix: The command help will only show Kubernetes flags on the commands that supports them
- Bugfix: Only the errors from the last session will be considered when counting the number of errors in the log after
a command failure.
### 2.6.4 (May 23, 2022)
- Bugfix: The traffic-manager RBAC grants permissions to update services, deployments, replicatsets, and statefulsets. Those
permissions are needed when the traffic-manager upgrades from versions < 2.6.0 and can be revoked after the upgrade.
### 2.6.3 (May 20, 2022)
- Bugfix: The `--mount` intercept flag now handles relative mount points correctly on non-windows platforms. Windows
still require the argument to be a drive letter followed by a colon.
- Bugfix: The traffic-agent's configuration update automatically when services are added, updated or deleted.
- Bugfix: The `--mount` intercept flag now handles relative mount points correctly on non-windows platforms. Windows
still require the argument to be a drive letter followed by a colon.
- Bugfix: The traffic-agent's configuration update automatically when services are added, updated or deleted.
- Bugfix: Telepresence will now always inject an initContainer when the service's targetPort is numeric
- Bugfix: Workloads that have several matching services pointing to the same target port are now handled correctly.
- Bugfix: A potential race condition causing a panic when closing a DNS connection is now handled correctly.
- Bugfix: A container start would sometimes fail because and old directory remained in a mounted temp volume.
### 2.6.2 (May 17, 2022)
- Bugfix: Workloads controlled by workloads like Argo `Rollout` are injected correctly.
- Bugfix: Multiple services appointing the same container port no longer result in duplicated ports in an injected pod.
- Bugfix: The `telepresence list` command no longer errors out with "grpc: received message larger than max" when listing namespaces
with a large number of workloads.
### 2.6.1 (May 16, 2022)
- Bugfix: Telepresence will now handle multiple path entries in the KUBECONFIG environment correctly.
- Bugfix: Telepresence will no longer panic when using preview URLs with traffic-managers < 2.6.0
- Change: Traffic-manager now attempts to obtain a cluster id from the license if it could not obtain it from the Kubernetes API.
### 2.6.0 (May 13, 2022)
- Feature: Traffic-agent is now capable of intercepting multiple containers and multiple ports per container.
- Feature: Telepresence client now require less RBAC permissions in order to intercept.
- Change: All pod-injection is performed by the mutating webhook. Client will no longer modify workloads.
- Change: Traffic-agent is configured using a ConfigMap entry. In prior versions, the configuration was passed in the container environment.
- Change: The helm-chart no longer has a default set for the agentInjector.image.name, and unless its set, the traffic-manager will ask
SystemA for the preferred image.
- Change: Client no longer needs RBAC permissions to update deployments, replicasets, and statefulsets.
- Change: Telepresence now uses Helm version 3.8.1 when installing the traffic-manager
- Change: The traffic-manager will not accept connections from clients older than 2.6.0. It can't, because they still use the old way of
injecting the agent by modifying the workload.
- Change: When upgrading, all workloads with injected agents will have their agent "uninstalled" automatically. The mutating webhook will
then ensure that their pods will receive an updated traffic-agent.
- Bugfix: Remote mounts will now function correctly with custom `securityContext`.
- Bugfix: The help for commands that accept kubernetes flags will now display those flags in a separate group.
- Bugfix: Using `telepresence leave` or `telepresence quit` on an intercept that spawned a command using `--` on the command line
will now terminate that command since it's considered parented by the intercept that is removed.
- Change: Add support for structured output as JSON by setting the global --output=json flag.
### 2.5.8 (April 27, 2022)
- Bugfix: Telepresence now ensures that the download folder for the enhanced free client is created prior to downloading it.
### 2.5.7 (April 25, 2022)
- Change: A namespaced traffic-manager will no longer require cluster wide RBAC. Only Roles and RoleBindings are now used.
- Bugfix: The DNS recursion detector didn't work correctly on Windows, resulting in sporadic failures to resolve names
that were resolved correctly at other times.
- Bugfix: A telepresence session will now last for 24 hours after the user's last connectivity. If a session expires, the connector will automatically try to reconnect.
### 2.5.6 (April 15, 2022)
- Bugfix: The `gather-logs` command will no longer send any logs through `gRPC`.
- Change: Telepresence agents watcher will now only watch namespaces that the user has accessed since the last `connect`.
### 2.5.5 (April 8, 2022)
- Change: The traffic-manager now requires permissions to read pods across namespaces even if installed with limited permissions
- Bugfix: The DNS resolver used on Linux with systemd-resolved now flushes the cache when the search path changes.
- Bugfix: The `telepresence list` command will produce a correct listing even when not preceded by a `telepresence connect`.
- Bugfix: The root daemon will no longer get into a bad state when a disconnect is rapidly followed by a new connect.
- Bugfix: The client will now only watch agents from accessible namespaces, and is also constrained to namespaces explicitly mapped
using the `connect` command's `--mapped-namespaces` flag.
- Bugfix: The `gather-logs` command will only gather traffic-agent logs from accessible namespaces, and is also constrained to namespaces
explicitly mapped using the `connect` command's `--mapped-namespaces` flag.
### 2.5.4 (March 29, 2022)
- Change: The list command, when used with the `--intercepts` flag, will list the users intercepts from all namespaces
- Change: The status command includes the install id, user id, account id, and user email in its result, and can print output as JSON
- Change: The lookup-timeout config flag used to set timeouts for DNS queries resolved by a cluster now also configures the timeout for fallback queries (i.e. queries not resolved by the cluster) when connected to the cluster.
- Change: The TUN device will no longer route pod or service subnets if it is running in a machine that's already connected to the cluster
- Bugfix: The client's gather logs command and agent watcher will now respect the configured grpc.maxReceiveSize
- Bugfix: Client and agent sessions no longer leaves dangling waiters in the traffic-manager when they depart.
- Bugfix: An advice to "see logs for details" is no longer printed when the argument count is incorrect in a CLI command.
- Bugfix: Removed a bad concatenation that corrupted the output path of `telepresence gather-logs`.
- Bugfix: Agent container is no longer sensitive to a random UID or an UID imposed by a SecurityContext.
- Bugfix: Intercepts that fail to create are now consistently removed to prevent non-working dangling intercepts from sticking around.
- Bugfix: The ingress-l5 flag will no longer be forcefully set to equal the --ingress-host flag
- Bugfix: The DNS fallback resolver on Linux now correctly handles concurrent requests without timing them out
### 2.5.3 (February 25, 2022)
- Feature: Client-side binaries for the arm64 architecture are now available for linux
- Bugfix: Fixed bug in the TCP stack causing timeouts after repeated connects to the same address
### 2.5.2 (February 23, 2022)
- Bugfix: Fixed a bug where Telepresence would use the last server in resolv.conf
### 2.5.1 (February 19, 2022)
- Bugfix: Fixed a bug where using a GKE cluster would error with: No Auth Provider found for name "gcp"
### 2.5.0 (February 18, 2022)
- Feature: The flags `--http-path-equal`, `--http-path-prefix`, and `--http-path-regex` can can be used in addition to the `--http-match`
flag to filter personal intercepts by the request URL path
- Feature: The flag `--http-meta` can be used to declare metadata key value pairs that will be returned by the Telepresence rest API
endpoint /intercept-info
- Feature: Telepresence Login now prompts you to optionally install an enhanced free client, which has some additional features when used with Ambassador Cloud.
- Change: Logs generated by the CLI are no longer discarded. Instead, they will end up in `cli.log`.
- Change: Both daemon logfiles now rotate daily instead of once for each new connect
- Change: The flag `--http-match` was renamed to `--http-header`. Old flag still works, but is deprecated and doesn't
show up in the help.
- Change: The verb "watch" was added to the set of required verbs when accessing services and workloads for the client RBAC ClusterRole
- Change: Telepresence is no longer backward compatible with versions 2.4.4 or older because the deprecated multiplexing tunnel functionality was removed.
- Change: The global networking flags are no longer global. Using them will render a deprecation warning unless they are supported by the command.
The subcommands that support networking flags are `connect`, `current-cluster-id`, and `genyaml`.
- Change: Telepresence now includes GOARCH of the binary in the metadata reported.
- Bugfix: The also-proxy and never-proxy subnets are now displayed correctly when using the `telepresence status` command
- Bugfix: Telepresence will no longer require `SETENV` privileges when starting the root daemon.
- Bugfix: Telepresence will now parse device names containing dashes correctly when determining routes that it should never block.
- Bugfix: The cluster domain (typically "cluster.local") is no longer added to the DNS `search` on Linux using `systemd-resolved`. Instead,
it is added as a `domain` so that names ending with it are routed to the DNS server.
- Bugfix: Fixed a bug where the `--json` flag did not output json for `telepresence list` when there were no workloads.
- Change: Updated README file with more details about the project.
- Bugfix: Fixed a bug where the overriding DNS resolver would break down in Linux if /etc/resolv.conf listed an ipv6 resolver
### 2.4.11 (February 10, 2022)
- Change: Include goarch metadata for reporting to distinguish between Intel and Apple Silicon Macs
### 2.4.10 (January 13, 2022)
- Feature: The flag `--http-plaintext` can be used to ensure that an intercept uses plaintext http or grpc when
communicating with the workstation process.
- Feature: The port used by default in the `telepresence intercept` command (8080), can now be changed by setting
the `intercept.defaultPort` in the `config.yml` file.
- Feature: The strategy when selecting the application protocol for personal intercepts in agents injected by the
mutating webhook can now be configured using the `agentInjector.appProtocolStrategy` in the Helm chart.
- Feature: The strategy when selecting the application protocol for personal intercepts can now be configured using
the `intercept.appProtocolStrategy` in the `config.yml` file.
- Change: Telepresence CI now runs in GitHub Actions instead of Circle CI.
- Bugfix: Telepresence will no longer log invalid: "unhandled connection control message: code DIAL_OK" errors.
- Bugfix: User will not be asked to log in or add ingress information when creating an intercept until a check has been
made that the intercept is possible.
- Bugfix: Output to `stderr` from the traffic-agent's `sftp` and the client's `sshfs` processes are properly logged as errors.
- Bugfix: Auto installer will no longer not emit backslash separators for the `/tel-app-mounts` paths in the
traffic-agent container spec when running on Windows
### 2.4.9 (December 9, 2021)
- Bugfix: Fixed an error where access tokens were not refreshed if you log in
while the daemons are already running.
- Bugfix: A helm upgrade using the --reuse-values flag no longer fails on a "nil pointer" error caused by a nil `telpresenceAPI` value.
### 2.4.8 (December 3, 2021)
- Feature: A RESTful service was added to Telepresence, both locally to the client and to the `traffic-agent` to help determine if messages with a set of headers should be
consumed or not from a message queue where the intercept headers are added to the messages.
- Change: The environment variable TELEPRESENCE_LOGIN_CLIENT_ID is no longer used.
- Feature: There is a new subcommand, `test-vpn`, that can be used to diagnose connectivity issues with a VPN.
- Bugfix: The tunneled network connections between Telepresence and
Ambassador Cloud now behave more like ordinary TCP connections,
especially around timeouts.
### 2.4.7 (November 24, 2021)
- Feature: The agent injector now supports a new annotation, `telepresence.getambassador.io/inject-service-name`, that can be used to set the name of the service to be intercepted.
This will help disambiguate which service to intercept for when a workload is exposed by multiple services, such as can happen with Argo Rollouts
- Feature: The kubeconfig extensions now support a `never-proxy` argument, analogous to `also-proxy`, that defines a set of subnets that will never be proxied via telepresence.
- Feature: Added flags to "telepresence intercept" that set the ingress fields as an alternative to using the dialogue.
- Change: Telepresence check the versions of the client and the daemons and ask the user to quit and restart if they don't match.
- Change: Telepresence DNS now uses a very short TTL instead of explicitly flushing DNS by killing the `mDNSResponder` or doing `resolvectl flush-caches`
- Bugfix: Legacy flags such as `--swap-deployment` can now be used together with global flags.
- Bugfix: Outbound connections are now properly closed when the peer closes.
- Bugfix: The DNS-resolver will trap recursive resolution attempts (may happen when the cluster runs in a docker-container on the client).
- Bugfix: The TUN-device will trap failed connection attempts that results in recursive calls back into the TUN-device (may happen when the
cluster runs in a docker-container on the client).
- Bugfix: Fixed a potential deadlock when a new agent joined the traffic manager.
- Bugfix: The app-version value of the Helm chart embedded in the telepresence binary is now automatically updated at build time. The value is hardcoded in the
original Helm chart when we release so this fix will only affect our nightly builds.
- Bugfix: The configured webhookRegistry is now propagated to the webhook installer even if no webhookAgentImage has been set.
- Bugfix: Login logs the user in when their access token has expired, instead of having no effect.
### 2.4.6 (November 2, 2021)
- Feature: Telepresence CLI is now built and published for Apple Silicon Macs.
- Feature: Telepresence now supports manually injecting the traffic-agent YAML into workload manifests.
Use the `genyaml` command to create the sidecar YAML, then add the `telepresence.getambassador.io/manually-injected: "true"` annotation to your pods to allow Telepresence to intercept them.
- Feature: Added a json flag for the "telepresence list" command. This will aid automation.
- Change: `--help` text now includes a link to https://www.telepresence.io/ so users who download Telepresence via Brew or some other mechanism are able to find the documentation easily.
- Bugfix: Telepresence will no longer attempt to proxy requests to the API server when it happens to have an IP address within the CIDR range of pods/services.
### 2.4.5 (October 15, 2021)
- Feature: Intercepting headless services is now supported. It's now possible to request a headless service on whatever port it exposes and get a response from the intercept.
- Feature: Preview url questions have more context and provide "best guess" defaults.
- Feature: The `gather-logs` command added two new flags. One to anonymize pod names + namespaces and the other for getting the pod yaml of the `traffic-manager` and any pod that contains a `traffic-agent`.
- Change: Use one tunnel per connection instead of multiplexing into one tunnel. This client will still be backwards compatible with older `traffic-manager`s that only support multiplexing.
- Bugfix: Telepresence will now log that the kubernetes server version is unsupported when using a version older than 1.17.
- Bugfix: Telepresence only adds the security context when necessary: intercepting a headless service or using a numeric port with the webhook agent injector.
### 2.4.4 (September 27, 2021)
- Feature: The strategy used by traffic-manager's discovery of pod CIDRs can now be configured using the Helm chart.
- Feature: Add the command `telepresence gather-logs`, which bundles the logs for all components
into one zip file that can then be shared in a GitHub issue, in slack, etc. Use
`telepresence gather-logs --help` to see additional options for running the command.
- Feature: The agent injector now supports injecting Traffic Agents into pods that have unnamed ports.
- Bugfix: The traffic-manager now uses less CPU-cycles when computing the pod CIDRs.
- Bugfix: If a deployment annotated with webhook annotations is deployed before telepresence is installed, telepresence will now install an agent in that deployment before intercept
- Bugfix: Fix an issue where the traffic-manager would sometimes go into a CPU loop.
- Bugfix: The TUN-device no longer builds an unlimited internal buffer before sending it when receiving lots of TCP-packets without PSH.
Instead, the buffer is flushed when it reaches a size of 64K.
- Bugfix: The user daemon would sometimes hang when it encountered a problem connecting to the cluster or the root daemon.
- Bugfix: Telepresence correctly reports an intercept port conflict instead of panicking with segfault.
### 2.4.3 (September 15, 2021)
- Feature: The environment variable `TELEPRESENCE_INTERCEPT_ID` is now available in the interceptor's environment.
- Bugfix: A timing related bug was fixed that sometimes caused a "daemon did not start" failure.
- Bugfix: On Windows, crash stack traces and other errors were not
written to the log files, now they are.
- Bugfix: On Linux kernel 4.11 and above, the log file rotation now
properly reads the birth-time of the log file. On older kernels, it
continues to use the old behavior of using the change-time in place
of the birth-time.
- Bugfix: Telepresence will no longer refer the user to the daemon logs for errors that aren't related to
problems that are logged there.
- Bugfix: The overriding DNS resolver will no longer apply search paths when resolving "localhost".
- Bugfix: The cluster domain used by the DNS resolver is retrieved from the traffic-manager instead of being
hard-coded to "cluster.local".
- Bugfix: "Telepresence uninstall --everything" now also uninstalls agents installed via mutating webhook
- Bugfix: Downloading large files during an intercept will no longer cause timeouts and hanging traffic-agent.
- Bugfix: Passing false to the intercept command's --mount flag will no longer result in a filesystem being mounted.
- Bugfix: The traffic manager will establish outbound connections in parallel instead of sequentially.
- Bugfix: The `telepresence status` command reports correct DNS settings instead of "Local IP: nil, Remote IP: nil"
### 2.4.2 (September 1, 2021)
- Feature: A new `telepresence loglevel <level>` subcommand was added that enables changing the loglevel
temporarily for the local daemons, the `traffic-manager` and the `traffic-agents`.
- Change: The default log-level is now `info` for all components of Telepresence.
- Bugfix: The overriding DNS resolver will no longer apply search paths when resolving "localhost".
- Bugfix: The RBAC was not updated in the helm chart to enable the traffic-manager to `get` and `list`
namespaces, which would impact users who use licensed features of the Telepresence extensions in an
air-gapped environment.
- Bugfix: The timeout for Helm actions wasn't always respected which could cause a failing install of the
`traffic-manager` to make the user daemon to hang indefinitely.
### 2.4.1 (August 30, 2021)
- Bugfix: Telepresence will now mount all directories from `/var/run/secrets`, not just the kubernetes.io ones.
This allows the mounting of secrets directories such as eks.amazonaws.com (for IRSA tokens)
- Bugfix: The grpc.maxReceiveSize setting is now correctly propagated to all grpc servers.
This allows users to mitigate a root daemon crash when sending a message over the default maximum size.
- Bugfix: Some slight fixes to the `homebrew-package.sh` script which will enable us to run
it manually if we ever need to make homebrew point at an older version.
- Feature: Helm chart has now a feature to on demand regenerate certificate used for mutating webhook by setting value.
`agentInjector.certificate.regenerate`
- Change: The traffic-manager now requires `get` namespace permissions to get the cluster ID instead of that value being
passed in as an environment variable to the traffic-manager's deployment.
- Change: The traffic-manager is now installed via an embedded version of the Helm chart when `telepresence connect` is first performed on a cluster.
This change is transparent to the user.
A new configuration flag, `timeouts.helm` sets the timeouts for all helm operations performed by the Telepresence binary.
- Bugfix: Telepresence will initialize the default namespace from the kubeconfig on each call instead of just doing it when connecting.
- Bugfix: The timeout to keep idle outbound TCP connections alive was increased from 60 to 7200 seconds which is the same as
the Linux `tcp_keepalive_time` default.
- Bugfix: Telepresence will now remove a socket that is the result of an ungraceful termination and retry instead of printing
an error saying "this usually means that the process has terminated ungracefully"
- Change: Failure to report metrics is logged using loglevel info rather than error.
- Bugfix: A potential deadlock situation is fixed that sometimes caused the user daemon to hang when the user
was logged in.
- Feature: The scout reports will now include additional metadata coming from environment variables starting with
`TELEPRESENCE_REPORT_`.
- Bugfix: The config setting `images.agentImage` is no longer required to contain the repository. The repository is
instead picked from `images.repository`.
- Change: The `registry`, `webhookRegistry`, `agentImage` and `webhookAgentImage` settings in the `images` group of the `config.yml`
now get their defaults from `TELEPRESENCE_AGENT_IMAGE` and `TELEPRESENCE_REGISTRY`.
### 2.4.0 (August 4, 2021)
- Feature: There is now a native Windows client for Telepresence.
All the same features supported by the macOS and Linux client are available on Windows.
- Feature: Telepresence can now receive messages from the cloud and raise
them to the user when they perform certain commands.
- Bugfix: Initialization of `systemd-resolved` based DNS sets
routing domain to improve stability in non-standard configurations.
- Bugfix: Edge case error when targeting a container by port number.
Before if your matching/target container was at containers list index 0,
but if there was a container at index 1 with no ports, then the
"no ports" container would end up the selected one
- Bugfix: A `$(NAME)` reference in the agent's environment will now be
interpolated correctly.
- Bugfix: Telepresence will no longer print an INFO level log message when
no config.yml file is found.
- Bugfix: A panic is no longer raised when passing an argument to the
`telepresence intercept` option `--http-match` that doesn't contain an
equal sign.
- Bugfix: The `traffic-manager` will only send subnet updates to a
client root daemon when the subnets actually change.
- Bugfix: The agent uninstaller now distinguishes between recoverable
and unrecoverable failures, allowing uninstallation from manually changed
resources
### 2.3.7 (July 23, 2021)
- Feature: An `also-proxy` entry in the Kubernetes cluster config will
show up in the output of the `telepresence status` command.
- Feature: `telepresence login` now has an `--apikey=KEY` flag that
allows for non-interactive logins. This is useful for headless
environments where launching a web-browser is impossible, such as
cloud shells, Docker containers, or CI.
- Bugfix: Dialer will now close if it gets a ConnectReject. This was
encountered when doing an intercept without a local process running
and would result in requests hanging indefinitely.
- Bugfix: Made `telepresence list` command faster.
- Bugfix: Mutating webhook injector correctly hides named ports for probes.
- Bugfix: Initialization of `systemd-resolved` based DNS is more stable and
failures causing telepresence to default to the overriding resolver will no
longer cause general DNS lookup failures.
- Bugfix: Fixed a regression introduced in 2.3.5 that caused `telepresence current-cluster-id`
to crash.
- Bugfix: New API keys generated internally for communication with
Ambassador Cloud no longer show up as "no description" in the
Ambassador Cloud web UI. Existing API keys generated by older
versions of Telepresence will still show up this way.
- Bugfix: Fixed a race condition that logging in and logging out
rapidly could cause memory corruption or corruption of the
`user-info.json` cache file used when authenticating with Ambassador
Cloud.
### 2.3.6 (July 20, 2021)
- Bugfix: Fixed a regression introduced in 2.3.5 that caused preview
URLs to not work.
- Bugfix: Fixed a regression introduced in 2.3.5 where the Traffic
Manager's `RoleBinding` did not correctly appoint the
`traffic-manager` `Role`, causing subnet discovery to not be able to
work correctly.
- Bugfix: Fixed a regression introduced in 2.3.5 where the root daemon
did not correctly read the configuration file; ignoring the user's
configured log levels and timeouts.
- Bugfix: Fixed an issue that could cause the user daemon to crash
during shutdown, as during shutdown it unconditionally attempted to
close a channel even though the channel might already be closed.
### 2.3.5 (July 15, 2021)
- Feature: Telepresence no longer depends on having an external
`kubectl` binary, which might not be present for OpenShift users
(who have `oc` instead of `kubectl`).
- Feature: `skipLogin` can be used in the config.yml to tell the cli not to connect to cloud when using an air-gapped environment.
- Feature: The Telepresence Helm chart now supports installing multiple
Traffic Managers in multiple namespaces. This will allow operators to
install Traffic Managers with limited permissions that match the
permissions restrictions that Telepresence users are subject to.
- Feature: The maximum size of messages that the client can receive over gRPC can now be configured. The gRPC default of 4MB isn't enough
under some circumstances.
- Change: `TELEPRESENCE_AGENT_IMAGE` and `TELEPRESENCE_REGISTRY` are now only configurable via config.yml.
- Bugfix: Fixed and improved several error messages, to hopefully be
more helpful.
- Bugfix: Fixed a DNS problem on macOS causing slow DNS lookups when connecting to a local cluster.
### 2.3.4 (July 9, 2021)
- Bugfix: Some log statements that contained garbage instead of a proper IP address now produce the correct address.
- Bugfix: Telepresence will no longer panic when multiple services match a workload.
- Bugfix: The traffic-manager will now accurately determine the service subnet by creating a dummy-service in its own namespace.
- Bugfix: Telepresence connect will no longer try to update the traffic-manager's clusterrole if the live one is identical to the desired one.
- Bugfix: The Telepresence helm chart no longer fails when installing with `--set clientRbac.namespaced=true`
### 2.3.3 (July 7, 2021)
- Feature: Telepresence now supports installing the Traffic Manager
via Helm. This will make it easy for operators to install and
configure the server-side components of Telepresence separately from
the CLI (which in turn allows for better separation of permissions).
- Feature: As the `traffic-manager` can now be installed in any
namespace via Helm, Telepresence can now be configured to look for
the traffic manager in a namespace other than `ambassador`. This
can be configured on a per-cluster basis.
- Feature: `telepresence intercept` now supports a `--to-pod` flag
that can be used to port-forward sidecars' ports from an intercepted
pod
- Feature: `telepresence status` now includes more information about
the root daemon.
- Feature: We now do nightly builds of Telepresence for commits on release/v2 that haven't been tagged and published yet.
- Change: Telepresence no longer automatically shuts down the old
`api_version=1` `edgectl` daemon. If migrating from such an old
version of `edgectl` you must now manually shut down the `edgectl`
daemon before running Telepresence. This was already the case when
migrating from the newer `api_version=2` `edgectl`.
- Bugfix: The root daemon no longer terminates when the user daemon
disconnects from its gRPC streams, and instead waits to be
terminated by the CLI. This could cause problems with things not
being cleaned up correctly.
- Bugfix: An intercept will survive deletion of the intercepted pod
provided that another pod is created (or already exists) that can
take over.
### 2.3.2 (June 18, 2021)
- Feature: The mutator webhook for injecting traffic-agents now
recognizes a `telepresence.getambassador.io/inject-service-port`
annotation to specify which port to intercept; bringing the
functionality of the `--port` flag to users who use the mutator
webook in order to control Telepresence via GitOps.
- Feature: Outbound connections are now routed through the intercepted
Pods which means that the connections originate from that Pod from
the cluster's perspective. This allows service meshes to correctly
identify the traffic.
- Change: Inbound connections from an intercepted agent are now
tunneled to the manager over the existing gRPC connection, instead
of establishing a new connection to the manager for each inbound
connection. This avoids interference from certain service mesh
configurations.
- Change: The traffic-manager requires RBAC permissions to list Nodes,
Pods, and to create a dummy Service in the manager's namespace.
- Change: The on-laptop client no longer requires RBAC permissions to
list Nodes in the cluster or to create Services, as that
functionality has been moved to the traffic-manager.
- Bugfix: Telepresence will now detect the pod CIDR ranges even if
they are not listed in the Nodes.
- Bugfix: The list of cluster subnets that the virtual network
interface will route is now configured dynamically and will follow
changes in the cluster.
- Bugfix: Subnets fully covered by other subnets are now pruned
internally and thus never superfluously added to the laptop's
routing table.
- Change: The `trafficManagerAPI` timout default has changed from 5
seconds to 15 seconds, in order to facilitate the extended time it
takes for the traffic-manager to do its initial discovery of cluster
info as a result of the above bugfixes.
- Bugfix: On macOS, files generated under `/etc/resolver/` as the
result of using `include-suffixes` in the cluster config are now
properly removed on quit.
- Bugfix: Telepresence no longer erroneously terminates connections
early when sending a large HTTP response from an intercepted
service.
- Bugfix: When shutting down the user-daemon or root-daemon on the
laptop, `telepresence quit` and related commands no longer return
early before everything is fully shut down. Now it can be counted
on that by the time the command has returned that all the
side-effects on the laptop have been cleaned up.
### 2.3.1 (June 14, 2021)
- Feature: Agents can now be installed using a mutator webhook
- Feature: DNS resolver can now be configured with respect to what IP addresses that are used, and what lookups that gets sent to the cluster.
- Feature: Telepresence can now be configured to proxy subnets that aren't part of the cluster but only accesible from the cluster.
- Change: The `trafficManagerConnect` timout default has changed from 20 seconds to 60 seconds, in order to facilitate
the extended time it takes to apply everything needed for the mutator webhook.
- Change: Telepresence is now installable via `brew install datawire/blackbird/telepresence`
- Bugfix: Fix a bug where sometimes large transfers from services on the cluster would hang indefinitely
### 2.3.0 (June 1, 2021)
- Feature: Telepresence is now installable via brew
- Feature: `telepresence version` now also includes the version of the currently running user daemon.
- Change: A TUN-device is used instead of firewall rules for routing outbound connections.
- Change: Outbound connections now use gRPC instead of ssh, and the traffic-manager no longer has a sshd running.
- Change: The traffic-agent no longer has a sshd running. Remote volume mounts use sshfs in slave mode, talking directly to sftp.
- Change: The local DNS now routes the name lookups to intercepted agents or traffic-manager.
- Change: The default log-level for the traffic-manager and the root-daemon was changed from "debug" to "info".
- Change: The command line is now statically-linked, so it is usable on systems with different libc's.
- Bugfix: Using --docker-run no longer fail to mount remote volumes when docker runs as root.
- Bugfix: Fixed a number of race conditions.
- Bugfix: Fix a crash when there is an error communicating with the traffic-manager about Ambassador Cloud.
- Bugfix: Fix a bug where sometimes when displaying or logging a timeout error it fails to determine which configurable timeout is responsible.
- Bugfix: The root-user daemon now respects the timeouts in the normal user's configuration file.
### 2.2.2 (May 17, 2021)
- Feature: Telepresence translates legacy Telepresence commands into viable Telepresence commands.
- Bugfix: Intercepts will only look for agents that are in the same namespace as the intercept.
### 2.2.1 (April 29, 2021)
- Bugfix: Improve `ambassador` namespace detection that was trying to create the namespace even when the namespace existed, which was an undesired RBAC escalation for operators.
- Bugfix: Telepresence will now no longer generate excessive traffic trying repeatedly to exchange auth tokens with Ambassador Cloud. This could happen when upgrading from <2.1.4 if you had an expired `telepresence login` from before upgrading.
- Bugfix: `telepresence login` now correctly handles expired logins, just like all of the other subcommands.
### 2.2.0 (April 19, 2021)
- Feature: `telepresence intercept` now has the option `--docker-run` which will start a docker container with intercepted environment and volume mounts.
- Bugfix: `telepresence uninstall` can once again uninstall agents installed by older versions of Telepresence.
- Feature: Addition of `telepresence current-cluster-id` and `telepresence license` commands for using licenses with the Ambassador extension, primarily in air-gapped environments.
### 2.1.5 (April 12, 2021)
- Feature: When intercepting `--port` now supports specifying a service port or a service name. Previously, only service name was supported.
- Feature: Intercepts using `--mechanism=http` now support mTLS.
- Bugfix: One of the log messages was using the incorrect variable, which led to misleading error messages on `telepresence uninstall`.
- Bugfix: Telepresence no longer generates port names longer than 15 characters.
### 2.1.4 (April 5, 2021)
- Feature: `telepresence status` has been enhanced to provide more information. In particular, it now provides separate information on the daemon and connector processes, as well as showing login status.
- Feature: Telepresence now supports intercepting StatefulSets
- Change: Telepresence necessary RBAC has been refined to support StatefulSets and now requires "get,list,update" for StatefulSets
- Change: Telepresence no longer requires that port 1080 must be available.
- Change: Telepresence now makes use of refresh tokens to avoid requiring the user to manually log in so often.
- Bugfix: Fix race condition that occurred when intercepting a ReplicaSet while another pod was terminating in the same namespace (this fixes a transient test failure)
- Bugfix: Fix error when intercepting a ReplicaSet requires the containerPort to be hidden.
- Bugfix: `telepresence quit` no longer starts the daemon process just to shut it down.
- Bugfix: Telepresence no longer hangs the next time it's run after getting killed.
- Bugfix: Telepresence now does a better job of automatically logging in as necessary, especially with regard to expired logins.
- Bugfix: Telepresence was incorrectly looking across all namespaces for services when intercepting, but now it only looks in the given namespace. This should prevent people from running into "Found multiple services" errors when services with the same selectors existed in other namespaces.
### 2.1.3 (March 29, 2021)
- Feature: Telepresence now supports intercepting ReplicaSets (that aren't owned by a Deployment)
- Change: The --deployment (-d) flag is now --workload (-w), as we start supporting more workloads than just Deployments
- Change: Telepresence necessary RBAC has changed and now requires "delete" for Pods and "get,list,update" for ReplicaSets
- Security: Upgrade to a newer OpenSSL, to address OpenSSL CVE-2021-23840.
- Bugfix: Connecting to Minikube/Hyperkit no longer fails intermittently.
- Bugfix: Telepresence will now make /var/run/secrets/kubernetes.io available when mounting remote volumes.
- Bugfix: Hiccups in the connection to the cluster will no longer cause the connector to shut down; it now retries properly.
- Bugfix: Fix a crash when binary dependencies are missing.
- Bugfix: You can now specify a service when doing an intercept (--service), this is useful if you have two services that select on the same labels (e.g. If using Argo Rollouts do deployments)
### 2.1.2 (March 19, 2021)
- Bugfix: Uninstalling agents now only happens once per deployment instead of once per agent.
- Bugfix: The list command no longer shows agents from namespaces that aren't mapped.
- Bugfix: IPv6 routes now work and don't prevent other pfctl rules being written in macOS
- Bugfix: Pods with `hostname` and/or `subdomain` now get correct DNS-names and routes.
- Change: Service UID was added to InterceptSpec to better link intercepts and services.
- Feature: All timeouts can now be configured in a <user-config-dir>/telepresence/config.yml file
### 2.1.1 (March 12, 2021)
- Bugfix: When looking at the container to intercept, it will check if there's a better match before using a container without containerPorts.
- Bugfix: Telepresence will now map `kube-*` and `ambassador` namespaces by default.
- Bugfix: Service port declarations that lack a TargetPort field will now correctly default to using the Port field instead.
- Bugfix: Several DNS fixes. Notably, introduce a fake "tel2-search" domain that gets replaced with a dynamic DNS search when queried, which fixes DNS for Docker with no `-net host`.
- Change: Improvements to how we report the requirements for volume mounts; notably, if the requirements are not met then it defaults to `--mount=false`.
- Change: There has been substantial code cleanup in the "connector" process.
### 2.1.0 (March 8, 2021)
- Feature: Support headless services (including ExternalName), which you can use if you used "Also Proxy" in telepresence 1.
- Feature: Preview URLs can now set a layer-5 hostname (TLS-SNI and HTTP "Host" header) that is different than the layer-3 hostname (IP-address/DNS-name) that is used to dial to the ingress.
- Feature: The Ingress info will now contain a layer-5 hostname that can be used for TLS-SLI and HTTP "Host" header when accessing a service.
- Feature: Users can choose which port to intercept when intercepting a service with multiple ports.
- Bugfix: Environment variables declared with `envFrom` in the app-container are now propagated correctly to the client during intercept.
- Bugfix: The description of the `--everything` flag for the `uninstall` command was corrected.
- Bugfix: Connecting to a large cluster could take a very long time and even make the process hang. This is no longer the case.
- Bugfix: Telepresence now explicitly requires macFUSE version 4.0.5 or higher for macOS.
- Bugfix: A `tail -F <daemon log file>` no longer results in a "Permission denied" when reconnecting to the cluster.
- Change: The telepresence daemon will no longer use port 1234 for the firewall-to-SOCKS server, but will instead choose an available port dynamically.
- Change: On connect, telepresence will no longer suggest the `--mapped-namespaces` flag when the user connects to a large cluster.
### 2.0.3 (February 24, 2021)
- Feature: There is now an extension mechanism where you can tell Telepresence about different agents and what arguments they support. The new `--mechanism` flag can explicitly identify which extension to use.
- Feature: An intercept of `NAME` that is made using `--namespace=NAMESPACE` but not using `--deployment` will use `NAME` as the name of the deployment and `NAME-NAMESPACE` as the name of the intercept.
- Feature: Declare a local-only intercept for the purpose of getting direct outbound access to the intercept's namespace using boolean flag `--local-only`.
- Bugfix: Fix a regression in the DNS resolver that prevented name resolution using NAME.NAMESPACE. Instead, NAME.NAMESPACE.svc.cluster.local was required.
- Bugfix: Fixed race-condition in the agent causing attempts to dial to `:0`.
- Bugfix: It is now more strict about which agent versions are acceptable and will be more eager to apply upgrades.
- Change: Related to things now being in extensions, the `--match` flag has been renamed to `--http-match`.
- Change: Cluster connection timeout has been increased from 10s to 20s.
- Change: On connect, if telepresence detects a large cluster, it will suggest the `--mapped-namespaces` flag to the user as a way to speed it up.
- Change: The traffic-agent now has a readiness probe associated with its container.
### 2.0.2 (February 18, 2021)
- Feature: Telepresence is now capable of forwarding the intercepted Pod's volume mounts (as Telepresence 0.x did) via the `--mount` flag to `telepresence intercept`.
- Feature: Telepresence will now allow simultaneous intercepts in different namespaces.
- Feature: It is now possible for a user to limit what namespaces that will be used by the DNS-resolver and the NAT.
- Bugfix: Fix the kubectl version number check to handle version numbers with a "+" in them.
- Bugfix: Fix a bug with some configurations on macOS where we clash with mDNSResponder's use of port 53.
### 2.0.1 (February 9, 2021)
- Feature: Telepresence is now capable of forwarding the environment variables of an intercepted service (as Telepresence 0.x did) and emit them to a file as text or JSON. The environment variables will also be propagated to any command started by doing a `telepresence intercept nnn -- <command>`.
- Bugfix: A bug causing a failure in the Telepresence DNS resolver when attempting to listen to the Docker gateway IP was fixed. The fix affects Windows using a combination of Docker and WSL2 only.
- Bugfix: Telepresence now works correctly while OpenVPN is running on macOS.
- Change: The background processes `connector` and `daemon` will now use rotating logs and a common directory.
- macOS: `~/Library/Logs/telepresence/`
- Linux: `$XDG_CACHE_HOME/telepresence/logs/` or `$HOME/.cache/telepresence/logs/`
================================================
FILE: CHANGELOG.yml
================================================
# The YAML in this file should contain:
#
# items: An array of releases with the following attributes:
# - version: The (optional) version number of the release, if applicable.
# - date: >-
# The date of the release in the format YYYY-MM-DD.
# If the date is (SUPERSEDED), then the release didn't happen, which means
# that its notes belong to the next release.
# - notes: An array of noteworthy changes included in the release, each having the following attributes:
# - type: The type of change, one of `bugfix`, `feature`, `security` or `change`.
# - title: A short title of the noteworthy change.
# - body: >-
# Two or three sentences describing the change and why it
# is noteworthy. This is HTML, not plain text or
# markdown. It is handy to use YAML's ">-" feature to
# allow line-wrapping.
# - image: >-
# The URL of an image that visually represents the
# noteworthy change. This path is relative to the
# `release-notes` directory; if this file is
# `FOO/releaseNotes.yml`, then the image paths are
# relative to `FOO/release-notes/`.
# - docs: The path to the documentation page where additional information can be found.
#
# For older changes, see CHANGELOG.OLD.md
items:
- version: 2.27.2
date: 2026-03-09
notes:
- type: bugfix
title: Fix duplicate Section field in .deb package causing dpkg install failure
body: >-
The <code>.deb</code> package control file contained a duplicate <code>Section</code> field,
which caused <code>dpkg -i</code> to fail with a parsing error. The <code>Section</code>
field was specified both as a top-level <code>nfpm</code> default and explicitly under
<code>deb.fields</code>. Moved to the top-level <code>section</code> key and removed the
<code>deb.fields</code> block entirely.
docs: https://github.com/telepresenceio/telepresence/issues/4073
- version: 2.27.1
date: 2026-03-08
notes:
- type: bugfix
title: Fix duplicate Priority field in .deb package causing dpkg install failure
body: >-
The <code>.deb</code> package control file contained a duplicate <code>Priority</code> field,
which caused <code>dpkg -i</code> to fail with a parsing error. This was caused by
<code>nfpm</code> adding <code>Priority: optional</code> by default while the build
configuration also specified it explicitly under <code>deb.fields</code>.
docs: https://github.com/telepresenceio/telepresence/issues/4070
- type: bugfix
title: Fix ingest command lookup when container name is not specified
body: >-
The traffic manager now properly handles ingest lookups when using
<code>telepresence ingest <workload> -- command</code> without specifying
a container name. Previously, this would fail for workloads because the lookup
couldn't find ingests with empty container names. The traffic manager now provides
clearer error messages when a container name is required but not specified, and
correctly resolves ingests for single-container workloads automatically.
docs: https://github.com/telepresenceio/telepresence/issues/4067
- version: 2.27.0
date: 2026-02-28
notes:
- type: feature
title: Add macOS package installer with root daemon as a system service
body: >-
A new macOS package installer (.pkg) is now available that installs Telepresence with the root daemon
configured as a launchd service. This eliminates the need for elevated privileges when using Telepresence,
as the daemon starts automatically at boot and runs in the background. Available for both Intel (amd64)
and Apple Silicon (arm64) Macs.
docs: install/client
- type: feature
title: Add Linux package installers with root daemon as a system service
body: >-
New Linux package installers (.deb for Debian/Ubuntu and .rpm for Fedora/RHEL) are now available that
install Telepresence with the root daemon configured as a systemd service. This eliminates the need for
elevated privileges when using Telepresence, as the service is enabled and started automatically during
installation. Available for both amd64 and arm64 architectures.
docs: install/client
- type: feature
title: Add Windows installer with root daemon as a system service
body: >-
A new Windows installer (.exe) is now available that installs Telepresence with the root daemon configured
as a Windows service. The installer bundles WinFSP and SSHFS-Win dependencies for volume mount support,
adds Telepresence to the system PATH, and optionally installs the TelepresenceDaemon service. This eliminates
the need for elevated privileges when using Telepresence. Currently available for amd64 architecture only
due to dependency constraints.
docs: install/client
- type: feature
title: Add route-controller DaemonSet to prevent routing loops on local clusters
body: >-
A new optional <code>route-controller</code> DaemonSet can be deployed alongside the traffic-manager
on local Kubernetes clusters (Kind, minikube, k3d, Docker Desktop) to prevent routing loops caused by
deleted or non-existent service ClusterIPs. It installs an iptables <code>FORWARD</code> chain
<code>DROP</code> rule for the service CIDR on every node, and adds per-IP kernel blackhole routes
when a Service is deleted. Enable it with <code>routeController.enabled=true</code> in the Helm chart.
docs: reference/route-controller
- type: feature
title: Automatic cache cleanup on version change
body: >-
Telepresence now tracks its version in a version.json file in the cache directory. When the CLI detects
that the major.minor version differs from the running binary, it automatically quits running daemons and
clears stale cache entries (preserving logs). This prevents issues caused by leftover cache files from a
previous version. Patch and pre-release version changes do not trigger a cache cleanup.
- type: bugfix
title: Cluster DNS not injected into containers started by telepresence compose
body: >-
When using <code>telepresence compose up</code>, cluster hostnames did not resolve inside the compose
container because the daemon DNS IP and the tel2-search DNS search domain were not being added to the
generated compose spec. DNS and dns_search are now correctly set for all engaged compose services.
docs: https://github.com/telepresenceio/telepresence/issues/4053
- version: 2.26.2
date: 2026-02-14
notes:
- type: bugfix
title: Dial 127.0.0.1 instead of 0.0.0.0 when connecting to local daemons
body: >-
When a VPN routes all private network addresses, dialing 0.0.0.0 gets routed through the VPN instead
of reaching the locally running daemon. This causes Telepresence to report that no daemon is running
even though the processes are active and listening. The client now dials 127.0.0.1 explicitly, and
the Docker-published daemon port is bound to 127.0.0.1 to match.
docs: https://github.com/telepresenceio/telepresence/issues/4048
- type: bugfix
title: Fix HTTP intercepts via telepresence compose failing when httpFilters or httpPaths are set
body: >-
The compose extension set HeaderFilters and PathFilters on the intercept spec but left the mechanism as "tcp".
This caused the traffic manager to reject the intercept with "global TCP/UDP intercepts are disabled".
The mechanism is now correctly switched to "http" when any HTTP filters are specified, matching the behavior
of the CLI intercept command.
- type: bugfix
title: Fix "root daemon is embedded" error on Windows elevated terminals
body: >-
When running Telepresence in an elevated (administrator) terminal on Windows, commands like connect and
loglevel failed with "root daemon is embedded". The user daemon now correctly delegates to the in-process
root daemon session instead of returning an error.
docs: https://github.com/telepresenceio/telepresence/issues/4049
- type: bugfix
title: Fix h2c (HTTP/2 cleartext) prior knowledge not working on transport
body: >-
Since Go 1.24, having both HTTP1 and UnencryptedHTTP2 enabled on an HTTP transport causes Go to
default to HTTP/1.1 instead of using h2c prior knowledge. The transport now explicitly disables
HTTP1 when UnencryptedHTTP2 is enabled, fixing h2c communication for both the default forwarding
handler and intercepted traffic.
docs: https://github.com/telepresenceio/telepresence/issues/4056
- version: 2.26.1
date: 2026-01-26
notes:
- type: bugfix
title: Add support for "warning" as an alias for "warn" in log levels
body: >-
The "warning" alias for "warn" was the only acceptable value in the Helm chart, yet the traffic manager didn't accept it. This is
now fixed so that both names are accepted by the Helm chart and by the traffic manager.
docs: https://github.com/telepresenceio/telepresence/issues/4043
- version: 2.26.0
date: 2026-01-23
notes:
- type: feature
title: Add ability for cluster admins to revoke other users' intercepts.
body: |-
The traffic-manager can now execute commands defined in the traffic-manager ConfigMap. As a result, clients that are authorized to
update this ConfigMap can issue those commands.
This mechanism lays the groundwork for distinguishing administrators from regular users in Telepresence. Administrators can be
granted RBAC permissions that allow them to update the traffic-manager ConfigMap, while regular users cannot.
The new command, `telepresence revoke <intercept-id>`, uses this mechanism to revoke the intercept associated with the specified
ID.
docs: reference/engagements/conflicts
- type: feature
title: Add support for overriding intercepts owned by inactive clients
body: >-
Introduce the Helm chart setting `intercept.inactiveBlockTimeout` that controls the maximum amount of time an intercept may be
held by a client that is unreachable or inactive. Once this timeout is exceeded, the intercept no longer blocks conflicting
intercepts and may be automatically removed when another client attempts to create a conflicting intercept.
docs: reference/engagements/conflicts
- type: feature
title: Add support for sudo-rs
body: >-
Telepresence now supports running the root daemon using `sudo-rs`. This is necessary on Ubuntu where `sudo-rs` has become the
default for `sudo`.
- type: feature
title: Add configuration to disable global TCP/UDP intercepts
body: >-
A new Helm chart configuration option `intercept.allowGlobalIntercepts` has been added to control
whether global TCP/UDP intercepts are permitted. When set to `false`, only HTTP intercepts with
header or path filters are allowed, preventing users from creating global intercepts that block
other developers from intercepting the same port. This is particularly useful in shared development
environments where multiple developers need to work on the same service simultaneously. The setting
defaults to `true` to maintain full backward compatibility with existing deployments. When a user
attempts to create a global intercept while the setting is disabled, they receive a helpful error
message suggesting the use of `--http-header` or `--http-path-*` flags for HTTP-filtered intercepts.
docs: reference/cluster_config#restricting_global_intercepts
- type: feature
title: Enhanced Traffic Manager Startup Reliability
body: |-
The Traffic Manager deployment now includes a `startupProbe` that accurately detects when the service is fully initialized and
ready to handle traffic. This enhancement brings the following benefits:
- **Prevents Premature Traffic Routing**: The manager only reports itself as ready after all configurations are loaded,
eliminating potential race conditions
- **Smoother Upgrades and Rollouts**: Deployment orchestration tools can reliably determine when the Traffic Manager is
operational, improving overall installation stability
This change is particularly beneficial in large clusters or complex networking environments where initialization may take longer
than expected.
- type: feature
title: Support customizable daemon config file
body: >-
The config file for Telepresence is now configurable through the command-line flag `--config`.
The `--config <agent config>` flag of the `telepresence genyaml` command was renamed to `--agent` to avoid confusion.
- type: feature
title: Support customizable daemon log file paths
body: >-
Log file paths for the Telepresence daemons are now configurable through the command-line flag `--logfile`
that denotes a custom log file location or redirect of the log output to stdout/stderr. Two new log-level
configuration entries for `cli` and `kubeAuthDaemon` are also introduced, expanding the existing log-level
controls beyond just `userDaemon` and `rootDaemon`.
- type: feature
title: Add ability to exclude or include modifications made by other injectors when injecting the traffic agent.
body: >-
The Traffic Agent now has a new configuration option `agentInjector.mutationAware` that can be set to `false` to exclude
modifications made by other injectors when injecting the traffic agent. Setting `agentInjector.mutationAware=true` requires
`agentInjector.webhook.reinvocationPolicy=IfNeeded`. The default setting is `true`.
- type: feature
title: Add ability to disable the Traffic Agent's HTTP2/Clear-Text probing.
body: >-
The Traffic Agent now has a new configuration option `agent.enableH2cProbing` that can be set to `false` to disable the
HTTP2/Clear-Text probing. The default setting is `true` to preserve backwards compatibility, but this will be changed to `false`
in a future release.
- type: feature
title: Add ability to configure the Traffic Agent's retry interval for watching intercepts.
body: >-
The Traffic Agent's retry interval when it establishes its watcher for intercepts is now configurable using the Helm chart value
`agent.watchRetryInterval`. The default retry interval was also increased from 2 seconds to 10 seconds to improve resilience when
connections to the traffic manager are lost.
- type: feature
title: Make traffic-agent consumption metrics reporting optional.
body: >-
Metrics reporting for the traffic-agent can now be optionally enabled or disabled via the `agent.enableConsumptionMetrics` Helm
chart value. The traffic-agent metrics will also be completely disabled when the Helm chart value `prometheus.port` is unset or
zero.
This change is intended to reduce the amount of unnecessary traffic generated by the traffic-agent when consumption metrics
reporting is of no interest to the user.
- type: feature
title: Improved efficiency of traffic manager map updates.
body: >-
The watchable map has been refactored into a client/server model that supports delta-based updates. Where supported, gRPC now
transmits only incremental changes instead of full snapshots, significantly reducing payload sizes. This improvement is especially
important for large clusters, where full snapshots can be sizable and costly to transmit. Full snapshot streaming remains
available as a backward-compatible fallback for clients that do not support delta methods.
- type: change
title: Use TCP/IP instead of Unix sockets for all communication between local processes.
body: >-
Telepresence now uses TCP/IP sockets for all communication between local processes. This change reduces the
risk of socket-related errors caused by lingering sockets from previous Telepresence sessions. It also
eliminates the difficulties of using Unix sockets for communication between a system service and user
processes on Windows.
- type: change
title: Don't allow connect with --docker when client is configured with intercept.useFtp=true
body: |-
The `--docker` flag is not allowed when the client is configured with `intercept.useFtp=true` and an error is now generated
instantly by the `telepresence connect --docker` command.
The docker volume plugin cannot use FTP because it requires two ports: a fixed control port that Telepresence can proxy, and a
dynamic data port (randomly chosen during connection) that Telepresence cannot proxy on-demand. The port-forwarder only forwards
pre-configured ports and doesn't understand FTP's protocol. Consequently, FTP isn't allowed in this scenario. If it was, then when
an FTP server tells the client to use an unpredictable second port for file transfers, Telepresence would block it—causing the
connection to fail every time.
- type: change
title: Better names for the Telepresence Daemons
body: |-
Using the name xxx-foreground isn't very intuitive when talking about daemon processes. Yes, the command, when issued in a
terminal, will start the daemon in foreground so the names of the commands does have some logic to them, but then again, starting
in the foreground is the default behavior of any command. And when the same command is started from the CLI, it will be started in
the background, despite its name.
The daemons are therefore now renamed:
- connector-foreground => userd
- daemon-foreground => rootd
- kubeauth-foreground => kubeauthd
This also affects the Telepresence hidden CLI commands `telepresence daemon-foreground` and `telepresence connector-foreground`.
- type: bugfix
title: Add retry logic for tunnel connection attempts
body: >-
The tunnel dialer now uses a backoff-based retry mechanism when establishing connections. This ensures that dialing attempts for
both TCP and UDP protocols persist if the target IP is not immediately ready to receive requests.
- type: bugfix
title: Retry mechanism for client tunnel creation
body: >-
The traffic agent now includes a backoff-based retry mechanism when establishing tunnel streams to a client. This prevents
"no dial watcher" connection failures caused by a race condition where the tunnel request arrives before the client has fully
initialized its communication channel.
- type: bugfix
title: Fix "close of closed channel" panic in the root daemon process.
body: >-
The root daemon process would sometimes panic with "close of closed channel" due to a race condition in the DNS cache logic.
This issue has been fixed.
- version: 2.25.2
date: 2025-12-26
notes:
- type: bugfix
title: Ensure that the exit code from a docker command becomes the exit code of the Telepresence command.
body: >-
When running a Docker command using `telepresence docker-run` or `telepresence curl`, the exit code would be 1 for all non-zero
exit codes from the Docker command. This has been fixed so that the exit code from the Docker command becomes the exit code of the
Telepresence command.
- type: bugfix
title: Fix a bug causing truncation of command text when generating external command help.
body: >-
The Telepresence CLI would truncate the command text when generating help for external commands such as `docker compose` that
had text spanning more than one line. This has been fixed so that the full command text is displayed.
- type: bugfix
title: Fix schema for agent.image.pullSecrets
body: >-
The `agent.image.pullSecrets` is referenced by the helm chart's deployment.yaml but was previously disallowed by the schema file.
- version: 2.25.1
date: 2025-11-10
notes:
- type: bugfix
title: Volumes did not mount correctly when using `telepresence connect --docker` when Docker had IPv6 enabled.
body: >-
Telepresence failed to mount volumes after connecting with `telepresence connect --docker` when Docker Engine had IPv6 enabled in
its default bridge network. Disabling IPv6 in the Telepresence client configuration did not resolve the issue. This was fixed in
Telepresence Volume Plugin "telemount" version 0.3.2, which circumvented a [bug in sshfs](https://github.com/libfuse/sshfs/issues/335).
Additionally, the volume plugin will no longer use IPv6 when the client configuration `docker.enableIPv6` is set to `false`.
- type: bugfix
title: Remove unnecessary setcap from traffic binary
body: >-
The setcap capability (cap_net_bind_service) was removed from the traffic binary build process.
This capability was originally added to allow the binary to bind to privileged ports, specifically
port 443 for the mutating webhook. Since version 2.24.0, the default mutating webhook port was
changed to 8443 (a non-privileged port), making this capability unnecessary. Removing it simplifies
the build process and reduces the security surface area.
- version: 2.25.0
date: 2025-10-16
notes:
- type: feature
title: HTTP Intercepts with HTTP header and path filtering
body: |-
Telepresence now supports HTTP Intercepts, enabling fine-grained HTTP traffic filtering for intercepts.
Users can intercept only specific HTTP requests based on headers and URL paths using the new `--http-header`,
`--http-path-prefix`, `--http-path-equal`, and `--http-path-regex` flags. This allows multiple developers
to work on the same service simultaneously by intercepting only their specific traffic patterns, rather than
intercepting all traffic to a service.
**Routing Precedence Model**: Header-based intercepts take priority over path-only intercepts. When multiple
intercepts are active on the same workload, requests are evaluated against header-based filters first, then
path-only filters. This enables different developers to use header-based personal intercepts (e.g.,
`x-user=alice`) while others use path-based intercepts (e.g., `/admin/*`) without conflicts.
**Conflict Detection**: Intercepts conflict only when their filters would route the same traffic to different
destinations. Key rules:
- Different header values (e.g., `X-User=adam` vs `X-User=bertil`) do NOT conflict
- Header filters use subset logic: `X-User=adam` conflicts with `X-User=adam, X-Session=123` (first is subset)
- Same headers with different paths do NOT conflict: `X-User=adam + /api/*` vs `X-User=adam + /admin/*`
- Path-only intercepts operate at a lower priority tier than header-based intercepts
The feature maintains full backward compatibility with existing TCP intercepts.
docs: howtos/engage#intercept-your-application
- type: feature
title: TLS/mTLS Intercept Support
body: |-
Support was added for HTTP-filtered intercepts on applications using TLS/mTLS encryption. The new functionality enables
Telepresence to decrypt and inspect encrypted traffic by accessing TLS certificates, facilitating debugging and testing of secure
applications.
Certificates can be accessed via mounted volumes or Kubernetes secrets in the same namespace. New annotations
(`telepresence.io/downstream-cert-path` and `telepresence.io/downstream-cert-secret`) allow configuration of certificate paths or
secrets for decrypting traffic on specified ports. For mTLS, the `telepresence.io/upstream-cert-` annotation prefix supports
re-encryption of upstream traffic using client-side certificates.
For self-signed certificates, the `telepresence.io/upstream-insecure-skip-verify` annotation bypasses verification, enabling
HTTP-filtered intercepts in development environments. The `--plaintext` option allows unencrypted traffic during intercepts or
wiretaps.
docs: howtos/mtls
- type: feature
title: Add MCP server to Telepresence CLI
body: >-
The Telepresence CLI now includes a lightweight MCP server that can be used to allow local AI agents to execute
some CLI commands, such as connecting to a traffic manager, listing interceptable apps, and creating an intercept.
The server can be enabled using the new `telepresence mcp claude enable` or `telepresence mcp vscode enable` commands.
- type: feature
title: Enhance Resilience of Engagements During Traffic-Manager Redeploys
body: >-
The telepresence client and traffic-agent now automatically reconnect to the traffic-manager after a restart.
Upon reconnection, they share their current state, ensuring ongoing engagements remain uninterrupted. This
improvement minimizes user impact during traffic-manager upgrades.
- type: feature
title: Add support for IPv6 and dual-stack when using `telepresence connect --docker`
body: |-
Telepresence now supports using `telepresence connect --docker` together with Kubernetes single-stack IPv4
networking, single-stack IPv6 networking, or dual-stack networking with both network families. Both are
enabled by default, but can be disabled by setting the `client.docker.enableIPv4` or `client.docker.enableIPv6`
to false in the Helm chart, or by using the corresponding settings `docker.enableIPv4` or `docker.enableIPv6`
the client configuration file.
The new dual-stack support requires the teleroute network plugin 0.4.0 or later. The client will install this
version automatically unless you work in an air-gapped environment.
- type: feature
title: RESTful API Service Reintroduced with HTTP Filtering Support
body: >-
The Telepresence RESTful API service has been restored with enhanced support for HTTP header and path filtering. This service
enables workloads to programmatically query whether they should handle requests based on active intercepts.
Added `--metadata` flag allows attaching custom metadata to intercepts that can be retrieved through the API endpoints.
The API server is now accessible via `TELEPRESENCE_API_HOST` and `TELEPRESENCE_API_PORT` environment variables in both cluster
pods and local intercept handlers.
docs: reference/restapi
- type: feature
title: More efficient DNS handling in the traffic-manager
body: |-
Telepresence will no longer send DNS queries for A and AAAA records to the traffic-manager. Instead, it will
send a single query for the name and then derive the record type from the type of IP address (IPv4 or IPv6) in
the response. This reduces the number of DNS queries sent to the cluster's DNS server and makes the behavior
more consistent with the `net.LookupNetIP` function in the Go standard library, which the traffic-manager
ultimately uses.
The lookups will now be performed exclusively by the traffic-manager, never by the traffic-agent. This means
that traffic-agents with special DNS configurations might stop working. If this is a problem, the old behavior
can be restored by setting the `client.dns.useComplexLookup` parameter in the Helm chart or the
`dns.useComplexLookup` parameter in the client configuration file.
- type: feature
title: Updated Helm chart to include keywords and the source repository URL.
body: >-
Improves the Helm chart's discoverability on platforms like Artifact Hub and
automatically adds a direct link to the source code for users, providing better context.
- type: change
title: Telepresence client now requires a traffic manager version of at least 2.21.0.
body: >-
The traffic manager is now required to be at least version 2.21.0. Versions earlier than 2.21.0 will no
longer work. The reason for this is that implementing the new reconnect behavior would require too much
conditional code with older traffic-managers, and a lot of functionality wouldn't work anyway.
- type: change
title: Build binaries and docker images that are stripped from dwarf and debug info.
body: >-
The Telepresence binaries and docker images are now built with the `-w -s` flags, which strip the debug
symbols and the DWARF information. This reduces the size of the binaries and docker images by about 50MB.
Debug binaries can be built using `DEBUG=1 make build`.
- version: 2.24.1
date: 2025-09-05
notes:
- type: bugfix
title: Fix invalid filename generated by telepresence gather-logs command
body: >-
The `telepresence gather-logs` command would generate a filename that was invalid on Windows unless the user
specified the filename explicitly using the `--output-file` flag. This was fixed using a more condensed
format for the timestamp in the filename.
docs: https://github.com/telepresenceio/telepresence/issues/3956
- type: bugfix
title: A `telepresence connect --docker` fails kubeconfig points to a port-forwarded localhost
body: >-
Telepresence would fail to connect to a cluster from within a container if the kubeconfig pointed to a
port-forwarded localhost because that localhost is not reachable from within the container. This situation is
now detected so that the address used from within the container has "localhost" replaced with
"host.docker.internal", or an alternative alias configured by the user using the new `docker.hostGateway`
parameter in the client configuration.
- type: bugfix
title: A `telepresence connect --docker` would fail with some k3s configurations
body: >-
Telepresence would fail to connect to a k3s cluster unless the cluster's IP was a loopback address. This is
now changed so that any IP:port combination is accepted as long as a container can be found that defines a
mapping for it.
- type: bugfix
title: Restore default value for agent-state.yaml in the traffic-manager configmap
body: >-
The value was previously an empty string which caused problems when when Argo CD tried to synchronize it.
docs: https://github.com/telepresenceio/telepresence/pull/3953
- version: 2.24.0
date: 2025-08-25
notes:
- type: feature
title: Support for Docker Compose
body: >-
Telepresence now supports integration with Docker Compose. It connects to and interacts with cluster resources
by utilizing `x-tele` extensions within a Docker Compose specification. These extensions configure
your local services to effectively act as handlers for Telepresence connections, providing them with the
necessary access to the traffic, volumes, and environment of the engaged container.
docs: howtos/docker-compose
- type: feature
title: Serve up a web-page with telepresence serve.
body: >-
A new `telepresence serve <service>` command was added that starts a web browser on the specified service. The
command is especially useful when used in combination with `telepresence connect --docker` because it will
then expose the given service on a random port on localhost.
docs: reference/cli/telepresence_serve
- type: feature
title: Add ability to optionally clean up sidecars that have been idle above a specified duration
body: >-
Added configuration parameter `agent.maxIdleTime` to the Helm Chart, to control how long a sidecar can be idle before it is cleaned up.
The updating of latestEngagementTime is done every 1m in the Remain Call, which is now called every 1min, compared to every 5s in the past.
The agent state (containing latestEngagementTime) is updated in memory, and lazily persisted to the traffic-manager configmap every 2min.
Removal of the sidecar is also done in the Remain Call, if the sidecar has been idle for longer than the configured `agent.maxIdleTime`.
- type: feature
title: Add option to drop client label in prometheus metrics for GDPR compliance
docs: https://github.com/telepresenceio/telepresence/issues/3491
body: >-
The Helm Chart now has a `prometheus.dropClientLabel` option that can be set to true to drop the client label from the prometheus metrics.
This is useful for GDPR compliance, as the client label contains personal data, which can be potentially problematic, i.e allowing the ability to
track the working times of an individual.
- type: feature
title: Prefix metrics with "telepresence_"
docs: https://github.com/telepresenceio/telepresence/issues/3920
body: Avoids metric conflicts and makes these more explicit to improve search in observability stacks.
- type: feature
title: CLI documentation in markdown format
body: >-
The Telepresence CLI is now capable of generating its own documentation in markdown format using the
new `telepresence man-pages` command. The generated documentation is included under the heading "Telepresence
CLI" in the the Telepresence reference documentation.
docs: reference/cli/telepresence
- type: feature
title: Service Port Rerouting
body: >-
The telepresence connect command introduces a new `--reroute-remote <host>:<port>:<new-port>[/{tcp|udp}]` flag,
allowing users to remap service ports. This feature redirects requests sent to `<host>:<new-port>` to
`<host>:<port>` within the Telepresence VIF. The flag can be repeated.
- type: feature
title: Local Port Rerouting
body: >-
The telepresence connect command introduces a new `--reroute-local <local-port>:<host>:<port>[/{tcp|udp}]` flag,
allowing users to redirect requests sent to ports on localhost to arbitrary service ports. This feature enables
requests sent to `localhost:<local-port>` to be redirected to `<host:port>`. The flag can be repeated.
- type: feature
title: Add information about using Kubernetes auth plugins when using Telepresence CLI in a container
body: >-
Kubernetes, and hence the Telepresence CLI, must have access to auth plugins declared in the kubeconfig. A
section was added to the documentation explaining how to achieve this when using the Telepresence CLI in a
container.
docs: reference/inside-container#kubernetes-auth-plugins
- type: feature
title: Add log directory to the output of `telepresence config view`
body: >-
The `telepresence config view` command now includes the path to the directory where the Telepresence logs are
stored.
- type: change
title: The default port for the mutating webhook is now 8443. It used to be 443
body: >-
Port numbers below 1000 are reserved for privileged processes and are often restricted by firewalls.
Consequently, the default port for the mutating webhook was changed from 443 to 8443. You can override this
default port using the agentInjector.webhook.port value in the Helm Chart. This change is particularly
significant for clusters using Telepresence, where firewall rules limit the admission webhook's access to
worker nodes, such as in an Amazon EKS cluster.
- version: 2.23.6
date: 2025-07-23
notes:
- type: bugfix
title: Public DNS names aren't resolved from local docker application started by Telepresence
body: >-
A container running using `telepresence docker-run` or `telepresence <engage-type> --docker-run` was not able to resolve public
DNS names such as "google.com". The problem is caused by an undocumented behavior in Docker's internal DNS-resolver when the
`--dns` flag is used in conjunction with the teleroute network, where the DNS-server no longer finds public names even thought
another bridge network is connected. The problem was solved by using a fallback resolver in the Telepresence DNS resolver.
- version: 2.23.5
date: 2025-07-20
notes:
- type: bugfix
title: Let docker.Start pass on --interactive to docker start.
body: >-
An `-i` or `--interactive` flag given when the user runs a container with telepresence must be propagated to
`docker start` to attach `stdin`.
- version: 2.23.4
date: 2025-07-18
notes:
- type: bugfix
title: Never truncate meaningful output from a command
body: >-
The new human-friendly output using a progress reporter would sometimes truncate error output. This is no
longer the case. Instead, all output will be wrapped.
- type: bugfix
title: Typo in client mount-policy "RemoteReadonly" should be "RemoteReadOnly"
body: >-
The Helm Chart correctly expects the remote read-only mount policy to be `RemoteReadOnly`, but the client
expected it to be `RemoteReadonly` (without a leading capital letter in the word "only").
- type: bugfix
title: DNS server does not respect semicolons as comments in resolv.conf files
body: >-
Telepresence does not work correctly if `/etc/resolv.conf` contains semicolons, which are valid comments as of
[linux manpage](https://man7.org/linux/man-pages/man5/resolv.conf.5.html).
docs: https://github.com/telepresenceio/telepresence/issues/3908
- type: bugfix
title: Use NXDOMAIN instead SERVFAIL for DNS recursion errors (timeouts)
body: >-
A DNS for a single label name that fails in a minikube - or another type of local cluster - will sometimes
result in a recursive lookup on the host. Without any type of recursion detection, this lookup will timeout
waiting for itself. Previously, this resulted in a `SERVFAIL` from the cluster DNS, which triggered renewed
lookup attempts that never stopped. This is now changed so that the same type of timeouts instead results
in an `NXDOMAIN` error that doesn't trigger renewed attempts.
Also, the recursion check now handles that the cluster's DNS adds suffixes from its search-path.
docs: reference/config#recursioncheck
- version: 2.23.3
date: 2025-07-07
notes:
- type: bugfix
title: Fix tunnel channel reuse in traffic-agent to prevent connection failures
body: >-
Previously, when a tunnel became active, the map maintained by the traffic-agent containing channel values for
agent-to-client tunnels wasn't cleared. This resulted in closed channels remaining in the map. When port
numbers were eventually reused, these stale entries would be discovered and their closed channels would cause
immediate stream termination, leading to data loss.
- type: bugfix
title: The -p flags would have no effect in combination with --docker-run
body: |-
When using `telepresence <engage> --docker-run` with a `-p <port spec>` flag, the Docker driver silently
ignored the port specification. This occurred because the `--network=<teleroute network>` flag disabled both
additional network directives and the default bridge network (which is normally used when no network is
specified). This has been resolved by:
1. Adding the teleroute network after container creation instead of using a flag
2. Replacing the single `docker run` command with a sequence of:
- `docker create`
- Network addition
- `docker start`
- type: bugfix
title: Requests lost when using wiretap
body: >-
Wiretap connection `Close` and `Write` could sometimes be out of sync, so that the `Close` would be executed
before the `Write`, causing a "read/write on closed pipe" error and loss of data.
- version: 2.23.2
date: 2025-06-27
notes:
- type: bugfix
title: Adding an alsoProxy subnet with 32-bit mask no longer works on macOS
body: >-
Routing improvements introduced in 2.23.0 surfaced a problem when using special handling of submets with
32-bit masks. The special handling now causes problems on macOS. The logic is now conditioned to only run
under linux since it's no longer needed on other operating systems.
- type: bugfix
title: The gather-logs command produces no cluster-side logs when connected with --docker
body: >-
The `telepresence gather-logs` command did not include cluster-side logs when connected using `--docker`,
because it tried to store such logs in a temporary directory created by the CLI. The directory was not mounted
in the daemon container. This is now changed so that the temporary directory is created under the users
cache directory, which is guaranteed to be mounted on the container.
- type: bugfix
title: Docker volume mounts failing when connected using both --docker --proxy-via flags
body: >-
The volume mounter would fail when doing a `telepresence connect --docker --proxy-via all=<workload>` followed
by an intercept using `--docker-run`, because the bridge that the daemon created would try to access the
intercepted pod using its proxied IP. Now, the bridge will instead use the pod's real IP.
- version: 2.23.1
date: 2025-06-24
notes:
- type: feature
title: New telepresence helm version command.
body: >-
The new `telepresence helm version` command prints the version of the helm client that is embedded in the
telepresence binary.
- type: bugfix
title: Engagement disconnects after certain amount of time
body: |-
The configuration parameter `connectionTTL`, controlling how long a client could be completely idle before
the traffic-manager or traffic-agent would consider it dead and disconnect (default 24 hours), had no effect.
Instead, an engagement would disconnect after 2 hours (the default gRPC `keepAlive.Time` duration). The
default of 24 hours is now reinstated.
The Helm value `client.connectionTTL` was moved to `grpc.connectionTTL` because it is a server configuration.
The old value will still work, but it is deprecated and will be removed eventually.
docs: https://github.com/telepresenceio/telepresence/issues/3861
- type: bugfix
title: Telepresence breaks if config.yml exists but is empty
body: >-
Telepresence would refuse to connect with a misleading error if the `config.yml` file containing the client's
configuration parameters existed but was empty.
docs: https://github.com/telepresenceio/telepresence/issues/3887
- version: 2.23.0
date: 2025-06-17
notes:
- type: feature
title: New telepresence wiretap command
body: >-
The new `telepresence wiretap` command introduces a read-only form of an `intercept` where the original
container will run unaffected while a copy of the wiretapped traffic is sent to the client.
Similar to an `ingest`, a `wiretap` will always enforce read-only status on all volume mounts, and since that
makes the `wiretap` completely read-only, there's no limit to how many simultaneous wiretaps that can be
served. In fact, a `wiretap` and an `intercept` on the same port can run simultaneously.
- type: feature
title: Add Telepresence Docker Network Plugin "Teleroute"
body: |-
The new Teleroute plugin makes it possible for containers to use the Telepresence daemon's VIF without having
to change their network mode, i.e. a `--network container:<daemon container>` is no longer needed. Instead,
a container can use a custom network created when the Telepresence daemon connects to the cluster.
This network uses the new driver "teleroute" which is provided by Telepresence.
With the Teleroute Docker network plugin in place, there's no longer a need for special handling of network
related docker flags, and the following changes have been made:
1. The Teleroute Docker network driver will be installed unless it is already present.
2. A Teleroute network will be created when starting the Telepresence daemon as a container. This network will
then communicate with that container and expose the same CIDRs as the daemon's VIF.
3. A container started with `telepresence curl`, or
`telepresence {ingest|intercept|replace|wiretap} --docker-{run|build|debug}` will no longer change its
network mode using `--network container:<daemon container>`, instead it will use
`--network <name of teleroute network>`.
4. As a consequence of #3, published ports and other networks that are added no longer need special handling
using socat containers, so all of that has been removed.
docs: reference/teleroute
- type: feature
title: Control whether the initContainer injection is enabled/disabled
body: >-
The initContainer injection can be optionally disabled by setting the `agent.initContainer.enabled` parameter
to false in the `values.yaml` file of the Helm chart. This feature was added to improve compatibility with
systems like OpenShift where the initContainer injection cannot be used due to inability to give initContainer
NET_ADMIN permissions.
- type: feature
title: Human friendly progress reporting
body: >-
Telepresence now uses a progress reporter that is very similar to the one used by Docker compose. The
implementation is a variation of that reporter's source code, so big thanks to the Docker compose CLI authors
for making it available as OSS.
A new global `--progress <progress>` flag was added. It defaults to "auto" which means that the style is
chosen depending on whether the command runs from a tty type terminal. Other possible values are "plain",
"quiet", and "json". `--progress quiet` is implied when formatted output is chosen using `--output json|yaml`.
- type: feature
title: Add the ability to use a name for the target host, and defer its resolution
body: >-
Knowing the IP of the local service that acts as the handler service for an intercept, replace, or wiretap
is not possible until that service has been started, and telepresence will therefore now accept a name for the
`--address` flag. The name is not resolved by the daemon until a request is made to the engaged container on a
port that is routed to the local service.
- type: feature
title: Add intercept.mountsRoot to the client configuration
body: >-
The new `intercept.mountsRoot` can be set to a directory that will be used as the root for all automatically
generated mount directories. The default is to use the platforms temp directory.
The setting is not used on windows, where the mounts use drive letters.
- type: feature
title: Add docker.addHostGateway to the client configuration.
body: >-
When `docker.addHostGateway` is set to `true`, the `docker run`
that starts the containerized Telepresence daemon will include the flag
`--add-host host.docker.internal:host-gateway`.
The flag is set to `true` by default on linux platforms and `false` on
other platforms.
- type: feature
title: Client configuration to override the Helm download URL
body: >-
The default download URL `oci://ghcr.io/telepresenceio/telepresence-oss` used when installing Helm charts with
versions that differ from the version of the embedded Helm chart can now be overridden using the client config
value `helm.chartURL`.
- type: change
title: Dropped support for Telepresence legacy flags
body: |-
The `telepresence` CLI command will no longer support legacy flags such as:
- `--swap-deployment`
- `--new-deployment`
- `--docker-mount`
- `--method`
A "Legacy Telepresence command used" warning has been printed for several years now, and the mapping for the
`--swap-deployment` was the `intercept` command, which is very confusing today since we now have the `replace`
command.
- type: bugfix
title: Let containerized daemon consistently use the same port for gRPC
body: >-
The port used for the containerized gRPC was randomly selected using the hosts network namespace. This is now
changed so that the port used by the container is preset and configurable and then mapped to a random port
on the host.
The port number can be configured using `grpc.daemonPort` and defaults to `4038`.
- type: bugfix
title: Telepresence fails to start the root daemon on Windows unless current user is the administrator
body:
The telepresence CLI starts a user daemon and a root daemon. The latter is started using administrator
privileges. On a Windows box, this means that the root daemon runs using a different user account (typically
"Administrator") unless the current user can run processes with elevated privileges. The socket used for
communication with the root daemon was assumed to reside in `%USERPROFILE%\AppData\Local\telepresence`
and was therefore not found by the CLI and the user daemon. The location will henceforth always be based on the
`%USERDATA` of the CLI user.
docs: https://github.com/telepresenceio/telepresence/issues/3875
- type: bugfix
title: Telepresence DNS Fallback stripping CNAME information from DNS Records.
body: >-
The fallback DNS server used on Linux systems without a systemd.resolved configuration, would assume that
suffixes belonging to the `search` defined in the `/etc/resolved` had been added by the caller. Since this
search path was assumed to be intended for the local machine only, the suffix was stripped off prior to
sending the name to the cluster for resolution. This made queries fail that relied on the qualified name to
resolve CNAME records. The logic stripping the suffix was therefore removed.
docs: https://github.com/telepresenceio/telepresence/issues/3873
- version: 2.22.6
date: 2025-06-03
notes:
- type: bugfix
title: Regression causing "unexpected slice size" with older traffic-managers.
body: >-
Older traffic-managers have a different way of reporting the service-subnet. The new way, using a
list of subnets reused a proto slice in the GRPC message that was expected to be empty, but older
traffic-managers will pass the IP of the kube-dns here. It cannot be parsed as a list of
subnets. A check that remedies this mismatch was inserted.
- version: 2.22.5
date: 2025-05-29
notes:
- type: bugfix
title: Unable to correctly determine service CIDR with Kubernetes >= 1.33
body: >-
Starting with Kubernetes 1.33, the strategy of extracting the cluster's service CIDR from an error message no
longer works because the error message has changed. The root cause for this is that Kubernetes introduced the
ability to use [Multiple Service CIDRs](https://gist.github.com/aojea/c20eb117bf1c1214f8bba26c495be9c7). Since
`ServiceCIDR` is now a resource, it can be easily retrieved (and modified) using standard Kubernetes client
API calls, and this is what the traffic manager will use going forward.
The fix required an addition to the traffic-manager's RBAC, granting it sufficient permissions to list
`networking.k8s.io/servicecidrs`. A future enhancement will allow the traffic manager to watch for service
CIDR changes.
- type: bugfix
title: Helm chart schema type for nodeSelector was incorrect
body: >-
The Helm chart schema for the `nodeSelector` value was incorrect. Kubernetes defines different types for
nodeSelector (inside PodSpec objects) and NodeSelector (inside NodeAffinity, VolumeNodeAffinity and a
bunch of other places). The schema was changed to use the correct type. The name `nodeSelector` is still
used in the Helm chart so this change is backwards compatible.
- type: bugfix
title: Pods with container ports named the same caused intercept to fail
body: >-
Intercept container ports now have numbers appended to them if there are multiple
ports from multiple containers with the same name. This bugfix works around an issue
where Kubernetes allows multiple port definitions in a pod spec to have the same name.
- type: bugfix
title: Don't include k8s-defs.json to chart package
body: >-
The k8s-defs.json was unnecessarily included to the Helm chart package and this increased the Helm release
secret size so much that it could prevent installation of the Helm chart depending on k8s settings. To fix
this k8s-defs.json is not included to the Helm chart anymore.
- version: 2.22.4
date: 2025-04-26
notes:
- type: bugfix
title: Don't require internet access when installing the traffic-manager using Helm
body: >-
A regression occurred with the introduction of Helm validation in version 2.22.0. The schema relied on
external HTTPS links, which inadvertently created a requirement for internet accessibility. To resolve this,
we have embedded these resources within the schema, thus removing the need for an internet connection.
- type: bugfix
title: Client failed connect with "failed to exit idle mode" in the connector.log after being idle
body: >-
The port-forward connections used for connecting the daemon to the traffic-agents were using
an incorrect context, causing them to fail after being idle for some time.
- type: bugfix
title: Fix deadlock in Telepresence daemon
body: >-
A deadlock would sometimes occur in the Telepresence daemon that prevented it from doing a clean
exit during `telepresence quit`.
- type: bugfix
title: Don't log error message when a pod watcher ends due to cancellation
body: >-
Errors printed in the daemon log during normal cancellation of the WatchAgentPods goroutine are
now removed.
- version: 2.22.3
date: 2025-04-08
notes:
- type: change
title: The Windows install script will now install Telepresence to "%ProgramFiles%\telepresence"
body: |-
Telepresence is now installed into "%ProgramFiles%\telepresence" instead of "C:\telepresence".
The directory and the Path entry for `C:\telepresence` are not longer used and should be removed.
- type: bugfix
title: The Windows install script didn't handle upgrades properly
body: |-
The following changes were made:
- The script now requires administrator privileges
- The Path environment is only updated when there's a need for it
docs: https://github.com/telepresenceio/telepresence/issues/3827
- type: bugfix
title: The Telepresence Helm chart could not be used as a dependency in another chart.
body: >-
The JSON schema validation implemented in Telepresence 2.22.0 had a defect: it rejected the `global` object.
This object, a Helm-managed construct, facilitates the propagation of arbitrary configurations from a parent
chart to its dependencies. Consequently, charts intended for dependency use must permit the presence of the
`global` object.
docs: https://github.com/telepresenceio/telepresence/issues/3833
- type: bugfix
title: Recreating namespaces was not possible when using a dynamically namespaced Traffic Manager
body: >-
A shared informer was sometimes reused when namespaces were removed and then later added again, leading
to errors like "handler ... was not added to shared informer because it has stopped already".
docs: https://github.com/telepresenceio/telepresence/issues/3831
- type: bugfix
title: Single label name DNS lookups didn't work unless at least one traffic-agent was installed
body: >-
A problem with incorrect handling of single label names in the traffic-manager's DNS resolver was fixed. The
problem would cause lookups like `curl echo` to fail, even though telepresence was connected to a namespace
containing an "echo" service, unless at least one of the workloads in the connected namespace had a
traffic-agent.
- version: 2.22.2
date: 2025-03-28
notes:
- type: bugfix
title: Panic when using telepresence replace in a IPv6-only cluster
body: |-
A "slice bounds out of range" would occur when the targeted Pod's Traffic Agent requested a local dialer to
be created on the client. This was due to a glitch in the VPN-tunnel implementation that got triggered when
a remote IPv6-address was combined with a local IPv4-address.
docs: https://github.com/telepresenceio/telepresence/issues/3828
- version: 2.22.1
date: 2025-03-27
notes:
- type: bugfix
title: Only restore inactive traffic-agent after a replace.
body: |-
A regression in the 2.20.0 release would cause the traffic-agent to be replaced with a dormant version that
didn't touch any ports when an intercept ended. This terminated other ongoing intercepts on the same pod.
This is now changed so that the traffic-agent remains unaffected for this use-case.
- version: 2.22.0
date: 2025-03-14
notes:
- type: feature
title: New telepresence replace command.
body: |-
The new `telepresence replace` command simplifies and clarifies container replacement.
Previously, the `--replace` flag within the `telepresence intercept` command was used to replace containers.
However, this approach introduced inconsistencies and limitations:
* **Confusion:** Using a flag to modify the core function of a command designed for traffic interception led
to ambiguity.
* **Inaccurate Behavior:** Replacement was not possible when no incoming traffic was intercepted, as the
command's design focused on traffic routing.
To address these issues, the `--replace` flag within `telepresence intercept` has been deprecated. The new
`telepresence replace` command provides a dedicated and consistent method for replacing containers, enhancing
clarity and reliability.
Key differences between `replace` and `intercept`:
1. **Scope:** The `replace` command targets and affects an entire container, impacting all its traffic, while
an `intercept` targets specific services and/or service/container ports.
2. **Port Declarations:** Remote ports specified using the `--port` flag are container ports.
3. **No Default Port:** A `replace` can occur without intercepting any ports.
4. **Container State:** During a `replace`, the original container is no longer active within the cluster.
The deprecated `--replace` flag still works, but is hidden from the `telepresence intercept` command help, and
will print a deprecation warning when used.
- type: feature
title: Add json-schema for the Telepresence Helm Chart
body: >-
Helm can validate a chart using a json-schema using the command `helm lint`, and this schema can be part of
the actual Helm chart. The telepresence-oss Helm chart now includes such a schema, and a new
`telepresence helm lint` command was added so that linting can be performed using the embedded chart.
- type: feature
title: No dormant container present during replace.
body: |-
Telepresence will no longer inject a dormant container during a `telepresence replace` operation. Instead, the
Traffic Agent now directly serves as the replacement container, eliminating the need to forward traffic to the
original application container. This simplification offers several advantages when using the `--replace` flag:
- **Removal of the init-container:** The need for a separate init-container is no longer necessary.
- **Elimination of port renames:** Port renames within the intercepted pod are no longer required.
- type: feature
title: One single invocation of the Telepresence intercept command can now intercept multiple ports.
body: >-
It is now possible to intercept multiple ports with one single invocation of `telepresence intercept` by just
repeating the `--port` flag.
- type: feature
title: Unify how Traffic Manager selects namespaces
body: |-
The definition of what namespaces that a Traffic Manager would manage use was scattered into several Helm
chart values, such as `manager.Rbac.namespaces`, `client.Rbac.namespaces`, and
`agentInjector.webhook.namespaceSelector`. The definition is now unified to the mutual exclusive top-level
Helm chart values `namespaces` and `namespaceSelector`.
The `namespaces` value is just for convenience and a short form of expressing:
```yaml
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: in
values: <namespaces>.
```
docs: install/manager#static-versus-dynamic-namespace-selection
- type: feature
title: Improved control over how remote volumes are mounted using mount policies
body: >-
Mount policies, that affects how the telepresence traffic-agent shares the pod's volumes, and also how the
client will mount them, can now be provided using the Helm chart value `agent.mountPolicies` or as JSON
object in the workload annotation `telepresence.io/mount-policies`. A mount policy is applied to a volume
or to all paths matching a path-prefix (distinguished by checking if first character is a '/'), and can
be one of `Ignore`, `Local`, `Remote`, or `RemoteReadOnly`.
- type: feature
title: List output includes workload kind.
body: >-
The output of the `telepresence list` command will now include the workload kind (deployment, replicaset,
statefulset, or rollout) in all entries.
- type: feature
title: Add ability to override the default securityContext for the Telepresence init-container
body: >-
Users can now use the Helm value `agent.initSecurityContext` to override the default securityContext for the
Telepresence init-container.
- type: change
title: Let download page use direct links to GitHub
body: >-
The download links on the release page now points directly to the assets on the download page, instead of
using being routed from getambassador.io/download/tel2oss/releases.
- type: change
title: Use telepresence.io as annotation prefix instead of telepresence.getambassador.io
body: >-
The workload and pod annotations used by Telepresence will now use the prefix `telepresence.io` instead of
`telepresence.getambassador.io`. The new prefix is consistent with the prefix used by labels, and it also
matches the host name of the documentation site. Annotations using the old name will still work, but warnings
will be logged when they are encountered.
- type: change
title: Make the DNS recursion check configurable and turn it off by default.
body: >-
Very few systems experience a DNS recursion lookup problem. It can only occur when the cluster runs locally
and the cluster's DNS is configured to somehow use DNS server that is started by Telepresence. The check
is therefore now configurable through the client setting `dns.recursionCheck`, and it is `false` by default.
- type: change
title: Trigger the mutating webhook with Kubernetes eviction objects instead of patching workloads.
body: >-
Telepresence will now attempt to evict pods in order to trigger the traffic-agent's injection or removal, and
revert to patching workloads if evictions are prevented by the pod's disruption budget. This causes a slight
change in the traffic-manager RBAC, as the traffic-manager must be able to create "pod/eviction" objects.
- type: change
title: The telepresence-agents configmap is no longer used.
body: >-
The traffic-agent configuration was moved into a pod-annotation. This avoids sync problems between the
telepresence-agents (which is no no longer present) and the pods.
- type: change
title: Drop deprecated current-cluster-id command.
body: >-
The clusterID was deprecated some time ago, and replaced by the ID of the namespace where the traffic-manager
is installed.
- type: bugfix
title: Make telepresence connect --docker work with Rancher Desktop
body: >-
Rancher Desktop will start a K3s control-plane and typically expose the
Kubernetes API server at `127.0.0.1:6443`. Telepresence can connect to
this cluster when running on the host, but the address is not available
when connecting in docker mode.
The problem is solved by ensuring that the Kubernetes API server address used when
doing a `telepresence connect --docker` is swapped from 127.0.0.1 to the
internal address of the control-plane node. This works because that
address is available to other docker containers, and the Kubernetes API
server is configured with a certificate that accepts it.
- type: bugfix
title: Rename charts/telepresence to charts/telepresence-oss.
body: >-
The Helm chart name "telepresence-oss" was inconsistent with its contained folder "telepresence". As a result,
attempts to install the chart using an argo ApplicationSet failed. The contained folder was renamed to match
the chart name.
- type: bugfix
title: Conflict detection between namespaced and cluster-wide install.
body: >-
The namespace conflict detection mechanism would only discover conflicts between two _namespaced_ Traffic
Managers trying to manage the same namespace. This is now fixed so that all types conflicts are discovered.
docs: install/manager#namespace-collision-detection
- type: bugfix
title: Don't dispatch DNS discovery queries to the cluster.
body: >-
macOS based systems will often PTR queries using nameslike `b._dns-sd._udp`, lb._dns-sd._udp`, or
`db-dns-sd._udp`. Those queries are no longer dispatched to the cluster.
- type: bugfix
title: Using the --namespace option with telepresence causes a deadlock.
body: >-
Using `telepresence list --namespace <ns>` with a namespace different from the one that telepresence was
connected to, would cause a deadlock, and then produce an empty list.
- type: bugfix
title: Fix problem with exclude-suffix being hidden by DNS search path.
body: >-
In some situations, a name ending with an exclude-suffix like "xyz.com" would be expanded by a search path
into "xyz.com.<connected namespace>" and therefore not be excluded. Instead, the name was sent to the cluster
to be resolved, causing an unnecessary load on its DNS server.
- version: 2.21.3
date: 2025-02-06
notes:
- type: bugfix
title: Using the --proxy-via flag would sometimes cause connection timeouts.
body: >-
Typically, a `telepresence connect --proxy-via <subnet>=<workflow>` would fail with a "deadline exceeded"
message when several workloads were present in the namespace, the one targeted by the proxy-via didn't yet
have an agent installed, and other workloads had an agent. This was due to a race condition in the logic
for the agent-based port-forwards in the root daemon. The conditions causing this race are now eliminated.
- type: bugfix
title: Fix panic in root daemon when using the "allow conflicting subnets" feature on macOS.
body: >-
A regression was introduced in version 2.21.0, causing a panic due to an unimplemented method in the
TUN-device on macOS based clients.
- type: bugfix
title: Ensure that annotation enabled traffic-agents are uninstall when uninstalling the traffic-manager.
body: >-
A traffic-agent injected because the workload had the inject annotation enabled would sometimes not get
uninstalled when the traffic-manager was uninstalled.
- version: 2.21.2
date: 2025-01-26
notes:
- type: bugfix
title: Fix panic when agentpf.client creates a Tunnel
body: >-
A race could occur where several requests where made to `agentpf.client.Tunnel` on a client that had errored
when creating its port-forward to the agent. The implementation could handle one such requests but not
several, resulting in a panic in situations where multiple simultaneous requests were made to the same client
during a very short time period,
- type: bugfix
title: Fix goroutine leak in dialer.
body: >-
The context passed to the `Tunnel` call that creates a stream for a dialer, was not cancelled when the dialer
was finished, so the stream was never properly closed, leading to one dormant goroutine for each stream.
- version: 2.21.1
date: 2024-12-17
notes:
- type: bugfix
title: Allow ingest of serverless deployments without specifying an inject-container-ports annotation
body: >-
The ability to intercept a workload without a service is built around the
`telepresence.getambassador.io/inject-container-ports` annotation, and it was also required in order to ingest
such a workload. This was counterintuitive and the requirement was removed. An ingest doesn't use a port.
docs: https://github.com/telepresenceio/telepresence/issues/3741
- type: bugfix
title: Upgrade module dependencies to get rid of critical vulnerability.
body: >-
Upgrade module dependencies to latest available stable. This includes upgrading golang.org/x/crypto, which
had critical issues, from 0.30.0 to 0.31.0 where those issues are resolved.
- version: 2.21.0
date: 2024-12-13
notes:
- type: feature
title: Automatic VPN conflict avoidance
body: >-
Telepresence not only detects subnet conflicts between the cluster and workstation VPNs but also resolves them
by performing network address translation to move conflicting subnets out of the way.
docs: reference/vpn
- type: feature
title: Virtual Address Translation (VNAT).
body: >-
It is now possible to use a virtual subnet without routing the affected IPs to a specific workload. A new
`telepresence connect --vnat CIDR` flag was added that will perform virtual network address translation of
cluster IPs. This flag is very similar to the `--proxy-via CIDR=WORKLOAD` introduced in 2.19, but without
the need to specify a workload.
docs: reference/vpn
- type: feature
title: Intercepts targeting a specific container
body: >-
In certain scenarios, the container owning the intercepted port differs
from the container the intercept targets. This port owner's sole purpose
is to route traffic from the service to the intended container, often
using a direct localhost connection.
This update introduces a `--container <name>` option to the intercept
command. While this option doesn't influence the port selection, it
guarantees that the environment variables and mounts propagated to the
client originate from the specified container. Additionally, if the
`--replace` option is used, it ensures that this container is replaced.
docs: reference/engagements/container
- type: feature
title: New telepresence ingest command
body: >-
The new `telepresence ingest` command, similar to `telepresence intercept`, provides local access to the
volume mounts and environment variables of a targeted container. However, unlike `telepresence intercept`,
`telepresence ingest` does not redirect traffic to the container and ensures that the mounted volumes are
read-only.
An ingest requires a traffic-agent to be installed in the pods of the targeted workload. Beyond that, it's
a client-side operation. This allows developers to have multiple simultaneous ingests on the same container.
docs: howtos/intercepts#ingest-your-service
- type: feature
title: New telepresence curl command
body: >-
The new `telepresence curl` command runs curl from within a container. The command requires that a connection
has been established using `telepresence connect --docker`, and the container that runs `curl` will share the
same network as the containerized telepresence daemon.
docs: reference/docker-run#the-telepresence-curl-command
- type: feature
title: New telepresence docker-run command
body: >-
The new `telepresence docker-run <flags and arguments>` requires that a connection has been established using
`telepresence connect --docker` It will perform a `docker run <flags and arguments>` and add the flag necessary
to ensure that started container shares the same network as the containerized telepresence daemon.
docs: reference/docker-run#the-telepresence-docker-run-command
- type: feature
title: Mount everything read-only during intercept
body: >-
It is now possible to append ":ro" to the intercept `--mount` flag value. This ensures that all remote volumes
that the intercept mounts are read-only.
- type: feature
title: Unify client configuration
body: >-
Previously, client configuration was divided between the config.yml file and a Kubernetes extension. DNS and
routing settings were initially found only in the extension. However, the Helm client structure allowed
entries from both.
To simplify this, we've now aligned the config.yml and Kubernetes extension with the Helm client structure.
This means DNS and routing settings are now included in both. The Kubernetes extension takes precedence over
the config.yml and Helm client object.
While the old-style Kubernetes extension is still supported for compatibility, it cannot be used with the new
style.
docs: reference/config
- type: feature
title: Use WebSockets for port-forward instead of the now deprecated SPDY.
body: >-
Telepresence will now use WebSockets instead of SPDY when creating port-forwards to the Kubernetes Cluster, and
will fall back to SPDY when connecting to clusters that don't support SPDY. Use of the deprecated SPDY can be
forced by setting `cluster.forceSPDY=true` in the `config.yml`.
See [Streaming Transitions from SPDY to WebSockets](https://kubernetes.io/blog/2024/08/20/websockets-transition/)
for more information about this transition.
- type: feature
title: Make usage data collection configurable using an extension point, and default to no-ops
body: >-
The OSS code-base will no longer report usage data to the proprietary collector at Ambassador Labs. The actual calls
to the collector remain, but will be no-ops unless a proper collector client is installed using an extension point.
- type: feature
title: Add deployments, statefulSets, replicaSets to workloads Helm chart value
body: >-
The Helm chart value `workloads` now supports the kinds `deployments.enabled`, `statefulSets.enabled`, `replicaSets.enabled`.
and `rollouts.enabled`. All except `rollouts` are enabled by default. The traffic-manager will ignore workloads, and
Telepresence will not be able to intercept them, if the `enabled` of the corresponding kind is set to `false`.
docs: reference/engagements/sidecar#disable-workloads
- type: feature
title: Improved command auto-completion
body: >-
The auto-completion of namespaces, services, and containers have been added where appropriate, and the default
file auto completion has been removed from most commands.
- type: feature
title: Docker run flags --publish, --expose, and --network now work with docker mode connections
body: >-
After establishing a connection to a cluster using `telepresence connect --docker`, you can run new containers that share
the same network as the containerized daemon that maintains the connection. This enables seamless communication between
your local development environment and the remote services.
Normally, Docker has a limitation that prevents combining a shared network configuration with custom networks
and exposing ports. However, Telepresence now elegantly circumvents this limitation so that a container started with
`telepresence docker-run`, `telepresence intercept --docker-run`, or `telepresence ingest --docker-run` can use flags
like `--network`, `--publish`, or `--expose`.
To achieve this, Telepresence temporarily adds the necessary network to the containerized daemon. This allows the new
container to join the same network. Additionally, Telepresence starts extra socat containers to handle port mapping,
ensuring that the desired ports are exposed to the local environment.
docs: reference/docker-run#the-telepresence-docker-run-command
- type: feature
title: Prevent recursion in the Telepresence Virtual Network Interface (VIF)
body: >-
Network problems may arise when running Kubernetes locally (e.g., Docker Desktop, Kind, Minikube, k3s),
because the VIF on the host is also accessible from the cluster's nodes. A request that isn't handled by a
cluster resource might be routed back into the VIF and cause a recursion.
These recursions can now be prevented by setting the client configuration property
`routing.recursionBlockDuration` so that new connection attempts are temporarily blocked for a specific
IP:PORT pair immediately after
gitextract_r2gzeu42/
├── .dockerignore
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── Bug_report.md
│ │ └── Feature_request.md
│ ├── actions/
│ │ ├── install-dependencies/
│ │ │ └── action.yaml
│ │ └── upload-logs/
│ │ └── action.yaml
│ ├── pull_request_template.md
│ └── workflows/
│ ├── dev.yaml
│ ├── go-dependency-submission.yaml
│ ├── image-scan.yaml
│ ├── licenses.yaml
│ ├── release-teleroute.yaml
│ ├── release.yaml
│ ├── stale.yaml
│ └── unit_tests.yaml
├── .gitignore
├── .golangci.yml
├── .mailmap
├── .protolint.yaml
├── CHANGELOG.OLD.md
├── CHANGELOG.yml
├── CLAUDE.md
├── CODE-OF-CONDUCT.md
├── CODEOWNERS
├── DEPENDENCIES.md
├── DEPENDENCY_LICENSES.md
├── GOVERNANCE-maintainer.md
├── LICENSE
├── MAINTAINERS.md
├── Makefile
├── README.md
├── SECURITY.md
├── build-aux/
│ ├── INSTALLERS.md
│ ├── admission_controller_tls/
│ │ └── main.go
│ ├── docker/
│ │ └── images/
│ │ ├── Dockerfile.client
│ │ ├── Dockerfile.routecontroller
│ │ ├── Dockerfile.traffic
│ │ └── Dockerfile.winbuild
│ ├── genversion/
│ │ └── main.go
│ ├── image-importer.yaml
│ ├── main.mk
│ ├── maintenance.mk
│ ├── pkg-installer/
│ │ ├── Distribution.xml
│ │ ├── build-pkg.sh
│ │ ├── io.telepresence.rootd.plist
│ │ ├── postinstall
│ │ ├── syslog.conf
│ │ ├── telepresence-rootd
│ │ ├── uninstall
│ │ └── welcome.rtf
│ ├── prelude.mk
│ ├── systemd-installer/
│ │ ├── .gitignore
│ │ ├── build-packages.sh
│ │ ├── config.yml
│ │ ├── nfpm.yaml.in
│ │ ├── postinstall.sh
│ │ ├── postremove.sh
│ │ ├── preremove.sh
│ │ ├── telepresence-rootd.service
│ │ └── uninstall.sh
│ ├── tools.mk
│ ├── unparsable-packages.yaml
│ ├── winmake.bat
│ └── wix-installer/
│ ├── Dialogs_en-us.wxl
│ ├── MainPackage.wxs
│ ├── Makefile
│ ├── Telepresence.wxs
│ ├── config.yml
│ ├── tpwrapper.go
│ └── txt2rtf.ps1
├── charts/
│ ├── chart.go
│ └── telepresence-oss/
│ ├── .helmignore
│ ├── Chart.yaml
│ ├── README.md
│ ├── templates/
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── agentInjectorWebhook.yaml
│ │ ├── certificate.yaml
│ │ ├── clientRbac/
│ │ │ ├── cluster-scope.yaml
│ │ │ ├── connect.yaml
│ │ │ └── namespace-scope.yaml
│ │ ├── deployment.yaml
│ │ ├── issuer.yaml
│ │ ├── pre-delete-hook.yaml
│ │ ├── routecontroller-daemonset.yaml
│ │ ├── routecontroller-rbac.yaml
│ │ ├── service.yaml
│ │ ├── tests/
│ │ │ └── test-connection.yaml
│ │ ├── trafficManager-configmap.yaml
│ │ └── trafficManagerRbac/
│ │ ├── cluster-scope.yaml
│ │ ├── namespace-scope.yaml
│ │ ├── service-account.yaml
│ │ └── webhook-secret.yaml
│ ├── values.schema.yaml
│ └── values.yaml
├── cmd/
│ ├── cobraparser/
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── generate/
│ │ │ └── generate.go
│ │ ├── go.mod
│ │ ├── go.sum
│ │ ├── main.go
│ │ └── types/
│ │ └── commandinfo.go
│ ├── routecontroller/
│ │ └── main.go
│ └── teleroute/
│ ├── .gitignore
│ ├── DEVELOPING.md
│ ├── Dockerfile
│ ├── Makefile
│ ├── config.json
│ ├── driver/
│ │ ├── driver.go
│ │ ├── network.go
│ │ └── options.go
│ ├── go.mod
│ ├── go.sum
│ └── main.go
├── docs/
│ ├── CONTRIBUTING.md
│ ├── README.md
│ ├── common/
│ │ └── quantity.md
│ ├── community.md
│ ├── compare/
│ │ └── mirrord.md
│ ├── concepts/
│ │ ├── devloop.md
│ │ ├── faster.md
│ │ └── intercepts.md
│ ├── doc-links.yml
│ ├── faqs.md
│ ├── helm/
│ │ └── values.schema.json
│ ├── howtos/
│ │ ├── cluster-in-vm.md
│ │ ├── docker-compose.md
│ │ ├── docker.md
│ │ ├── engage.md
│ │ ├── large-clusters.md
│ │ └── mtls.md
│ ├── install/
│ │ ├── client.md
│ │ ├── cloud.md
│ │ ├── manager.md
│ │ └── upgrade.md
│ ├── licenses.md
│ ├── quick-start.md
│ ├── redirects.yml
│ ├── reference/
│ │ ├── architecture.md
│ │ ├── cli/
│ │ │ ├── telepresence.md
│ │ │ ├── telepresence_completion.md
│ │ │ ├── telepresence_compose.md
│ │ │ ├── telepresence_compose_attach.md
│ │ │ ├── telepresence_compose_bridge.md
│ │ │ ├── telepresence_compose_build.md
│ │ │ ├── telepresence_compose_commit.md
│ │ │ ├── telepresence_compose_config.md
│ │ │ ├── telepresence_compose_cp.md
│ │ │ ├── telepresence_compose_create.md
│ │ │ ├── telepresence_compose_down.md
│ │ │ ├── telepresence_compose_events.md
│ │ │ ├── telepresence_compose_exec.md
│ │ │ ├── telepresence_compose_export.md
│ │ │ ├── telepresence_compose_images.md
│ │ │ ├── telepresence_compose_kill.md
│ │ │ ├── telepresence_compose_logs.md
│ │ │ ├── telepresence_compose_ls.md
│ │ │ ├── telepresence_compose_pause.md
│ │ │ ├── telepresence_compose_port.md
│ │ │ ├── telepresence_compose_ps.md
│ │ │ ├── telepresence_compose_publish.md
│ │ │ ├── telepresence_compose_pull.md
│ │ │ ├── telepresence_compose_push.md
│ │ │ ├── telepresence_compose_restart.md
│ │ │ ├── telepresence_compose_rm.md
│ │ │ ├── telepresence_compose_run.md
│ │ │ ├── telepresence_compose_scale.md
│ │ │ ├── telepresence_compose_start.md
│ │ │ ├── telepresence_compose_stats.md
│ │ │ ├── telepresence_compose_stop.md
│ │ │ ├── telepresence_compose_top.md
│ │ │ ├── telepresence_compose_unpause.md
│ │ │ ├── telepresence_compose_up.md
│ │ │ ├── telepresence_compose_version.md
│ │ │ ├── telepresence_compose_volumes.md
│ │ │ ├── telepresence_compose_wait.md
│ │ │ ├── telepresence_compose_watch.md
│ │ │ ├── telepresence_config.md
│ │ │ ├── telepresence_config_view.md
│ │ │ ├── telepresence_connect.md
│ │ │ ├── telepresence_curl.md
│ │ │ ├── telepresence_docker-run.md
│ │ │ ├── telepresence_gather-logs.md
│ │ │ ├── telepresence_genyaml.md
│ │ │ ├── telepresence_genyaml_annotations.md
│ │ │ ├── telepresence_genyaml_config.md
│ │ │ ├── telepresence_genyaml_container.md
│ │ │ ├── telepresence_genyaml_initcontainer.md
│ │ │ ├── telepresence_genyaml_volume.md
│ │ │ ├── telepresence_helm.md
│ │ │ ├── telepresence_helm_install.md
│ │ │ ├── telepresence_helm_lint.md
│ │ │ ├── telepresence_helm_uninstall.md
│ │ │ ├── telepresence_helm_upgrade.md
│ │ │ ├── telepresence_helm_version.md
│ │ │ ├── telepresence_ingest.md
│ │ │ ├── telepresence_intercept.md
│ │ │ ├── telepresence_leave.md
│ │ │ ├── telepresence_list-contexts.md
│ │ │ ├── telepresence_list-namespaces.md
│ │ │ ├── telepresence_list.md
│ │ │ ├── telepresence_loglevel.md
│ │ │ ├── telepresence_mcp.md
│ │ │ ├── telepresence_mcp_claude.md
│ │ │ ├── telepresence_mcp_claude_disable.md
│ │ │ ├── telepresence_mcp_claude_enable.md
│ │ │ ├── telepresence_mcp_claude_list.md
│ │ │ ├── telepresence_mcp_cursor.md
│ │ │ ├── telepresence_mcp_cursor_disable.md
│ │ │ ├── telepresence_mcp_cursor_enable.md
│ │ │ ├── telepresence_mcp_cursor_list.md
│ │ │ ├── telepresence_mcp_start.md
│ │ │ ├── telepresence_mcp_stream.md
│ │ │ ├── telepresence_mcp_tools.md
│ │ │ ├── telepresence_mcp_vscode.md
│ │ │ ├── telepresence_mcp_vscode_disable.md
│ │ │ ├── telepresence_mcp_vscode_enable.md
│ │ │ ├── telepresence_mcp_vscode_list.md
│ │ │ ├── telepresence_quit.md
│ │ │ ├── telepresence_replace.md
│ │ │ ├── telepresence_revoke.md
│ │ │ ├── telepresence_serve.md
│ │ │ ├── telepresence_status.md
│ │ │ ├── telepresence_uninstall.md
│ │ │ ├── telepresence_version.md
│ │ │ └── telepresence_wiretap.md
│ │ ├── cluster-config.md
│ │ ├── compose.md
│ │ ├── config.md
│ │ ├── dns.md
│ │ ├── docker-run.md
│ │ ├── engagements/
│ │ │ ├── cli.md
│ │ │ ├── conflicts.md
│ │ │ ├── container.md
│ │ │ └── sidecar.md
│ │ ├── environment.md
│ │ ├── inside-container.md
│ │ ├── monitoring.md
│ │ ├── plugins.md
│ │ ├── rbac.md
│ │ ├── restapi.md
│ │ ├── route-controller.md
│ │ ├── routing.md
│ │ ├── tun-device.md
│ │ ├── volume.md
│ │ └── vpn.md
│ ├── release-notes.md
│ ├── release-notes.mdx
│ ├── troubleshooting.md
│ └── variables.yml
├── examples/
│ ├── compose/
│ │ ├── proxy-voting.override.yaml
│ │ ├── proxy-web.override.yaml
│ │ └── replace.override.yaml
│ └── docker/
│ └── iam-authenticator/
│ └── Dockerfile
├── go.mod
├── go.sum
├── integration_test/
│ ├── agent_injector_disabled_test.go
│ ├── also_proxy_test.go
│ ├── argo_rollouts_test.go
│ ├── bind_to_podip_test.go
│ ├── cidr_conflict_test.go
│ ├── cli_test.go
│ ├── cloud_config_test.go
│ ├── compose_test.go
│ ├── config_test.go
│ ├── connected_test.go
│ ├── container_test.go
│ ├── docker_daemon_test.go
│ ├── docker_run_test.go
│ ├── env_interpolate_test.go
│ ├── gather_logs_test.go
│ ├── h2c_intercept_test.go
│ ├── headless_test.go
│ ├── helm_test.go
│ ├── http_intercepts_test.go
│ ├── ignored_mounts_test.go
│ ├── inactive_client_test.go
│ ├── ingest_test.go
│ ├── inject_policy_test.go
│ ├── injector_test.go
│ ├── install_test.go
│ ├── integration_test.go
│ ├── intercept_env_test.go
│ ├── intercept_flags_test.go
│ ├── intercept_localhost_test.go
│ ├── intercept_mount_test.go
│ ├── itest/
│ │ ├── apply_app.go
│ │ ├── assertions.go
│ │ ├── cluster.go
│ │ ├── config.go
│ │ ├── connected.go
│ │ ├── context.go
│ │ ├── env.go
│ │ ├── harness.go
│ │ ├── helm.go
│ │ ├── image.go
│ │ ├── logdir.go
│ │ ├── multiple_services.go
│ │ ├── namespace.go
│ │ ├── runner.go
│ │ ├── single_service.go
│ │ ├── status.go
│ │ ├── suite.go
│ │ ├── tempdir.go
│ │ ├── template.go
│ │ ├── timed.go
│ │ └── traffic_manager.go
│ ├── kubeauth_test.go
│ ├── kubeconfig_extension_test.go
│ ├── large_files_test.go
│ ├── limitrange_test.go
│ ├── list_watch_test.go
│ ├── loglevel_test.go
│ ├── manager_grpc_test.go
│ ├── manual_agent_test.go
│ ├── mounts_test.go
│ ├── multi_connect_test.go
│ ├── multiple_intercepts_test.go
│ ├── multiple_port_intercept_test.go
│ ├── multiple_services_test.go
│ ├── multiport_test.go
│ ├── namespaces_test.go
│ ├── not_connected_test.go
│ ├── otel_test.go
│ ├── pod_cidr_test.go
│ ├── podscaling_test.go
│ ├── proxy_via_test.go
│ ├── reconnect_session_test.go
│ ├── replace_test.go
│ ├── restapi_test.go
│ ├── single_service_test.go
│ ├── subdomain_test.go
│ ├── svcdomain_test.go
│ ├── testdata/
│ │ ├── apiserveraccess/
│ │ │ └── main.go
│ │ ├── cli-container/
│ │ │ └── Dockerfile
│ │ ├── count-server/
│ │ │ └── main.go
│ │ ├── echo-server/
│ │ │ ├── Dockerfile
│ │ │ ├── certs/
│ │ │ │ ├── tls.crt
│ │ │ │ └── tls.key
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go
│ │ ├── k8s/
│ │ │ ├── client_experiment.yaml
│ │ │ ├── client_rancher.goyaml
│ │ │ ├── client_sa.yaml
│ │ │ ├── disruption-budget.goyaml
│ │ │ ├── echo-argo-rollout.yaml
│ │ │ ├── echo-auto-inject.yaml
│ │ │ ├── echo-both.yaml
│ │ │ ├── echo-double-one-unnamed.yaml
│ │ │ ├── echo-easy.yaml
│ │ │ ├── echo-extra-udp.yaml
│ │ │ ├── echo-headless.yaml
│ │ │ ├── echo-interpolate.yaml
│ │ │ ├── echo-manual-inject-deploy.yaml
│ │ │ ├── echo-manual-inject-svc.yaml
│ │ │ ├── echo-min.yaml
│ │ │ ├── echo-no-containerport.yaml
│ │ │ ├── echo-no-svc-ann.yaml
│ │ │ ├── echo-no-svc.yaml
│ │ │ ├── echo-no-vols.yaml
│ │ │ ├── echo-one.yaml
│ │ │ ├── echo-same-target-port.yaml
│ │ │ ├── echo-secondary.yaml
│ │ │ ├── echo-spring.yaml
│ │ │ ├── echo-tls.goyaml
│ │ │ ├── echo-udp-tcp-unnamed.yaml
│ │ │ ├── echo-w-hostalias.goyaml
│ │ │ ├── echo-w-sidecars.yaml
│ │ │ ├── echo-w-subdomain.yaml
│ │ │ ├── echo_with_env.yaml
│ │ │ ├── generic.goyaml
│ │ │ ├── hello-w-volumes.goyaml
│ │ │ ├── many-volumes.yaml
│ │ │ ├── memory-constraints.yaml
│ │ │ ├── namespaces.yaml
│ │ │ ├── pol-disabled.yaml
│ │ │ ├── pol-enabled.yaml
│ │ │ ├── pol-none.yaml
│ │ │ ├── pv.goyaml
│ │ │ ├── pvc.goyaml
│ │ │ ├── rs-echo.yaml
│ │ │ ├── secret-reader-rbac.goyaml
│ │ │ ├── ss-echo.yaml
│ │ │ ├── svc-deploy.goyaml
│ │ │ ├── tel-cert.yaml
│ │ │ └── with-probes.yaml
│ │ ├── k8screds/
│ │ │ └── main.go
│ │ ├── otel/
│ │ │ ├── helm-yamls/
│ │ │ │ └── otel-operator.yml
│ │ │ └── instrumentation.yml
│ │ ├── routing-values.yaml
│ │ ├── scripts/
│ │ │ ├── veth-down.sh
│ │ │ └── veth-up.sh
│ │ ├── stdiotest/
│ │ │ └── main.go
│ │ ├── telepresence-1.9.9.tgz
│ │ └── udp-echo/
│ │ ├── Dockerfile
│ │ ├── go.mod
│ │ └── main.go
│ ├── tls_test.go
│ ├── to_pod_test.go
│ ├── udp_test.go
│ ├── uhn_dns_test.go
│ ├── uninstall_test.go
│ ├── webhook_test.go
│ ├── wiretap_test.go
│ ├── workload_configuration_test.go
│ ├── workload_watch_test.go
│ ├── workloads_test.go
│ └── wpad_test.go
├── k8s/
│ ├── agent-injector-rbac.yaml
│ ├── agent-injector-secret.yaml
│ ├── agent-injector.yaml
│ ├── apitest.yaml
│ ├── dnsutils-headless.yaml
│ ├── echo-auto-headless.yaml
│ ├── echo-double-one.yaml
│ ├── echo-double.yaml
│ ├── echo-sc.yaml
│ ├── ext-example.yaml
│ ├── hello-w-volume.yaml
│ ├── local-echo-easy.yaml
│ ├── local-echo-next.yaml
│ ├── manager.yaml
│ ├── minikube-registry.yaml
│ ├── private-reg-proxy.yaml
│ └── rs-echo-svc2.yaml
├── packaging/
│ ├── artifacthub-repo.yml
│ ├── bundle.wxs.in
│ ├── helmpackage.go
│ ├── homebrew-oss-formula.rb
│ ├── homebrew-package.sh
│ ├── install-telepresence.ps1
│ ├── telepresence.wxs.in
│ └── windows-package.sh
├── pkg/
│ ├── agentconfig/
│ │ ├── container.go
│ │ ├── container_test.go
│ │ ├── initcontainer.go
│ │ ├── injectpolicy.go
│ │ ├── intercepttarget.go
│ │ ├── sidecar.go
│ │ ├── util.go
│ │ └── volumes.go
│ ├── agentmap/
│ │ ├── capsbase26.go
│ │ ├── capsbase26_test.go
│ │ ├── discorvery.go
│ │ └── generator.go
│ ├── annotation/
│ │ └── annotation.go
│ ├── authenticator/
│ │ ├── authenticator.go
│ │ ├── config.go
│ │ ├── exec.go
│ │ ├── exec_test.go
│ │ ├── grpc/
│ │ │ └── authenticator.go
│ │ └── patcher/
│ │ └── patcher.go
│ ├── cache/
│ │ ├── client.go
│ │ └── map.go
│ ├── client/
│ │ ├── agentpf/
│ │ │ └── clients.go
│ │ ├── bwcompat/
│ │ │ └── clusterinfo.go
│ │ ├── cache/
│ │ │ ├── cache.go
│ │ │ └── watcher.go
│ │ ├── cli/
│ │ │ ├── ann/
│ │ │ │ └── annotations.go
│ │ │ ├── cmd/
│ │ │ │ ├── completion.go
│ │ │ │ ├── compose.go
│ │ │ │ ├── config.go
│ │ │ │ ├── connect.go
│ │ │ │ ├── curl.go
│ │ │ │ ├── docker_run.go
│ │ │ │ ├── gather_logs.go
│ │ │ │ ├── gather_logs_test.go
│ │ │ │ ├── genyaml.go
│ │ │ │ ├── helm.go
│ │ │ │ ├── ingest.go
│ │ │ │ ├── intercept.go
│ │ │ │ ├── kubeauth.go
│ │ │ │ ├── leave.go
│ │ │ │ ├── list.go
│ │ │ │ ├── list_contexts.go
│ │ │ │ ├── list_namespaces.go
│ │ │ │ ├── loglevel.go
│ │ │ │ ├── man-pages.go
│ │ │ │ ├── mcp.go
│ │ │ │ ├── mcp_test.go
│ │ │ │ ├── quit.go
│ │ │ │ ├── replace.go
│ │ │ │ ├── revoke.go
│ │ │ │ ├── serve.go
│ │ │ │ ├── status.go
│ │ │ │ ├── telepresence.go
│ │ │ │ ├── testdata/
│ │ │ │ │ ├── license
│ │ │ │ │ ├── testLogDir/
│ │ │ │ │ │ ├── cli.log
│ │ │ │ │ │ ├── connector-20210916T130347.log
│ │ │ │ │ │ ├── connector-20210916T130356.log
│ │ │ │ │ │ ├── connector-20210916T130624.log
│ │ │ │ │ │ ├── connector-20210916T130643.log
│ │ │ │ │ │ ├── connector.log
│ │ │ │ │ │ ├── daemon-20210916T130318.log
│ │ │ │ │ │ ├── daemon-20210916T130402.log
│ │ │ │ │ │ ├── daemon-20210916T130624.log
│ │ │ │ │ │ ├── daemon-20210916T130643.log
│ │ │ │ │ │ ├── daemon.log
│ │ │ │ │ │ ├── echo-auto-inject-6496f77cbd-n86nc
│ │ │ │ │ │ └── traffic-manager-5c69859f94-g4ntj
│ │ │ │ │ └── zipDir/
│ │ │ │ │ ├── diff_name.log
│ │ │ │ │ ├── file1.log
│ │ │ │ │ └── file2.log
│ │ │ │ ├── uninstall.go
│ │ │ │ ├── usage.go
│ │ │ │ ├── version.go
│ │ │ │ └── wiretap.go
│ │ │ ├── connect/
│ │ │ │ ├── connector.go
│ │ │ │ ├── daemon.go
│ │ │ │ ├── init_command.go
│ │ │ │ └── version_check.go
│ │ │ ├── daemon/
│ │ │ │ ├── dial.go
│ │ │ │ ├── identifier.go
│ │ │ │ ├── identifier_test.go
│ │ │ │ ├── info.go
│ │ │ │ ├── request.go
│ │ │ │ ├── request_test.go
│ │ │ │ └── userd.go
│ │ │ ├── docker/
│ │ │ │ ├── auto_complete.go
│ │ │ │ ├── compose/
│ │ │ │ │ ├── config.go
│ │ │ │ │ ├── connection.go
│ │ │ │ │ ├── dc-cli.json
│ │ │ │ │ ├── engagement.go
│ │ │ │ │ ├── extension.go
│ │ │ │ │ ├── extension_test.go
│ │ │ │ │ ├── toplevelextension.go
│ │ │ │ │ └── transform.go
│ │ │ │ ├── flags.go
│ │ │ │ ├── published_ports.go
│ │ │ │ ├── run_flags.go
│ │ │ │ └── runner.go
│ │ │ ├── env/
│ │ │ │ ├── flags.go
│ │ │ │ ├── syntax.go
│ │ │ │ └── syntax_test.go
│ │ │ ├── flags/
│ │ │ │ ├── addunique.go
│ │ │ │ ├── context.go
│ │ │ │ ├── deprecation.go
│ │ │ │ ├── map.go
│ │ │ │ ├── unparsed.go
│ │ │ │ ├── unparsed_test.go
│ │ │ │ └── zerovalue.go
│ │ │ ├── global/
│ │ │ │ └── flags.go
│ │ │ ├── helm/
│ │ │ │ ├── chart.go
│ │ │ │ ├── install.go
│ │ │ │ ├── lint.go
│ │ │ │ └── release.go
│ │ │ ├── ingest/
│ │ │ │ ├── command.go
│ │ │ │ ├── info.go
│ │ │ │ └── state.go
│ │ │ ├── intercept/
│ │ │ │ ├── command.go
│ │ │ │ ├── command_test.go
│ │ │ │ ├── describe_intercepts.go
│ │ │ │ ├── info.go
│ │ │ │ ├── info_test.go
│ │ │ │ └── state.go
│ │ │ ├── main.go
│ │ │ ├── mount/
│ │ │ │ ├── flags.go
│ │ │ │ ├── info.go
│ │ │ │ ├── prepare_unix.go
│ │ │ │ └── prepare_windows.go
│ │ │ ├── output/
│ │ │ │ ├── output.go
│ │ │ │ └── output_test.go
│ │ │ └── progress/
│ │ │ ├── colors.go
│ │ │ ├── event.go
│ │ │ ├── json.go
│ │ │ ├── noop.go
│ │ │ ├── plain.go
│ │ │ ├── quiet.go
│ │ │ ├── spinner.go
│ │ │ ├── tty.go
│ │ │ ├── tty_test.go
│ │ │ └── writer.go
│ │ ├── cmd_error.go
│ │ ├── config.go
│ │ ├── config_darwin.go
│ │ ├── config_linux.go
│ │ ├── config_test.go
│ │ ├── config_unix.go
│ │ ├── config_util.go
│ │ ├── config_windows.go
│ │ ├── const.go
│ │ ├── docker/
│ │ │ ├── container.go
│ │ │ ├── context.go
│ │ │ ├── daemon.go
│ │ │ ├── daemon_test.go
│ │ │ ├── image.go
│ │ │ ├── kubeauth/
│ │ │ │ └── cmd.go
│ │ │ ├── plugin.go
│ │ │ ├── teleroute/
│ │ │ │ ├── network.go
│ │ │ │ ├── server.go
│ │ │ │ ├── server_linux.go
│ │ │ │ └── server_other.go
│ │ │ ├── volume.go
│ │ │ └── volume_test.go
│ │ ├── ensured_state.go
│ │ ├── envconfig.go
│ │ ├── envconfig_unix.go
│ │ ├── envconfig_windows.go
│ │ ├── install_id.go
│ │ ├── k8s/
│ │ │ ├── cani.go
│ │ │ ├── cluster.go
│ │ │ ├── config.go
│ │ │ └── connect.go
│ │ ├── logging/
│ │ │ ├── cached_timed_level.go
│ │ │ ├── dup_test.go
│ │ │ ├── dup_unix.go
│ │ │ ├── dup_windows.go
│ │ │ ├── initcontext.go
│ │ │ ├── initcontext_test.go
│ │ │ ├── initcontext_unix_test.go
│ │ │ ├── initcontext_windows_test.go
│ │ │ ├── rotatingfile.go
│ │ │ ├── rotatingfile_unix.go
│ │ │ ├── rotatingfile_windows.go
│ │ │ ├── stat.go
│ │ │ ├── stat_darwin.go
│ │ │ ├── stat_linux.go
│ │ │ ├── stat_linux_test.go
│ │ │ ├── stat_test.go
│ │ │ └── stat_windows.go
│ │ ├── portforward/
│ │ │ ├── borrowed_kubectl_cmdutil.go
│ │ │ ├── grpcresolver.go
│ │ │ ├── podaddr.go
│ │ │ ├── resolve.go
│ │ │ └── streamconn.go
│ │ ├── remotefs/
│ │ │ ├── bridge.go
│ │ │ ├── fuseftp.go
│ │ │ ├── fuseftp_docker.go
│ │ │ ├── fuseftp_embedded.go
│ │ │ ├── fuseftp_external.go
│ │ │ ├── fuseftp_grpc.go
│ │ │ ├── fuseftp_linked.go
│ │ │ ├── fuseftp_other.go
│ │ │ ├── mounter.go
│ │ │ └── sftp.go
│ │ ├── rootd/
│ │ │ ├── dbus/
│ │ │ │ └── resolved.go
│ │ │ ├── dns/
│ │ │ │ ├── client.go
│ │ │ │ ├── client_queue.go
│ │ │ │ ├── connpool.go
│ │ │ │ ├── connpool_test.go
│ │ │ │ ├── resolved_linux.go
│ │ │ │ ├── server.go
│ │ │ │ ├── server_darwin.go
│ │ │ │ ├── server_linux.go
│ │ │ │ ├── server_test.go
│ │ │ │ └── server_windows.go
│ │ │ ├── grpc.go
│ │ │ ├── in_process.go
│ │ │ ├── service.go
│ │ │ ├── session.go
│ │ │ ├── stream_creator.go
│ │ │ └── vip/
│ │ │ ├── env_nat.go
│ │ │ ├── env_nat_test.go
│ │ │ └── vip.go
│ │ ├── stream_error.go
│ │ ├── userd/
│ │ │ ├── daemon/
│ │ │ │ ├── grpc.go
│ │ │ │ └── service.go
│ │ │ ├── service.go
│ │ │ ├── session.go
│ │ │ └── trafficmgr/
│ │ │ ├── agents.go
│ │ │ ├── config.go
│ │ │ ├── context.go
│ │ │ ├── gather_logs.go
│ │ │ ├── ingest.go
│ │ │ ├── ingest_test.go
│ │ │ ├── intercept.go
│ │ │ ├── mount.go
│ │ │ ├── podaccess.go
│ │ │ ├── session.go
│ │ │ └── session_info_cache.go
│ │ ├── version.go
│ │ └── version_test.go
│ ├── dnsproxy/
│ │ ├── lookup.go
│ │ ├── lookup_test.go
│ │ ├── resolvefile_unix.go
│ │ ├── resolvefile_unix_test.go
│ │ └── rpc.go
│ ├── dos/
│ │ ├── aferofs/
│ │ │ └── wrapper.go
│ │ ├── env.go
│ │ ├── exe.go
│ │ ├── filesystem.go
│ │ ├── filesystem_test.go
│ │ ├── lockedfile.go
│ │ ├── package.go
│ │ ├── stdio.go
│ │ └── wdwrapper.go
│ ├── dpipe/
│ │ ├── dpipe.go
│ │ ├── dpipe_test.go
│ │ ├── dpipe_unix.go
│ │ ├── dpipe_windows.go
│ │ └── testdata/
│ │ └── echo/
│ │ └── echo.go
│ ├── errcat/
│ │ └── errors.go
│ ├── filelocation/
│ │ ├── app.go
│ │ ├── ctx.go
│ │ ├── osfile.go
│ │ ├── osfile_darwin.go
│ │ ├── osfile_linux.go
│ │ └── osfile_windows.go
│ ├── forwarder/
│ │ ├── basic.go
│ │ ├── tcp.go
│ │ └── udp.go
│ ├── grpc/
│ │ ├── client/
│ │ │ └── connect.go
│ │ ├── error.go
│ │ ├── errors/
│ │ │ └── errors.go
│ │ ├── server/
│ │ │ ├── context.go
│ │ │ ├── logging.go
│ │ │ └── server.go
│ │ └── watcher/
│ │ └── watcher.go
│ ├── icept/
│ │ ├── conflicts.go
│ │ ├── conflicts_test.go
│ │ └── find.go
│ ├── informer/
│ │ ├── context.go
│ │ └── factory.go
│ ├── ioutil/
│ │ ├── free_ports.go
│ │ ├── keyvalueformatter.go
│ │ ├── print.go
│ │ ├── safename.go
│ │ ├── tempname.go
│ │ └── writeallto.go
│ ├── iputil/
│ │ ├── ipnet.go
│ │ ├── ips.go
│ │ ├── join.go
│ │ ├── normalize.go
│ │ └── parse.go
│ ├── json/
│ │ └── marshal.go
│ ├── k8sapi/
│ │ ├── cani.go
│ │ ├── clientconfigprovider.go
│ │ ├── interface.go
│ │ ├── kind.go
│ │ ├── namespaceid.go
│ │ ├── object.go
│ │ ├── util.go
│ │ └── workload.go
│ ├── labels/
│ │ └── selector.go
│ ├── log/
│ │ ├── base_logger.go
│ │ ├── group.go
│ │ └── timed_level.go
│ ├── maps/
│ │ ├── utils.go
│ │ └── xmap.go
│ ├── matcher/
│ │ ├── header_stringer.go
│ │ ├── header_stringer_test.go
│ │ ├── headers.go
│ │ ├── headers_test.go
│ │ ├── paths.go
│ │ ├── request.go
│ │ ├── request_test.go
│ │ └── value.go
│ ├── pprof/
│ │ └── pprof.go
│ ├── proc/
│ │ ├── cmd.go
│ │ ├── docker_linux.go
│ │ ├── docker_other.go
│ │ ├── exec.go
│ │ ├── exec_unix.go
│ │ ├── exec_windows.go
│ │ ├── wsl_linux.go
│ │ └── wsl_other.go
│ ├── restapi/
│ │ ├── api.go
│ │ └── api_test.go
│ ├── routing/
│ │ ├── routing.go
│ │ ├── routing_darwin.go
│ │ ├── routing_linux.go
│ │ ├── routing_test.go
│ │ ├── routing_unix.go
│ │ ├── routing_unix_test.go
│ │ └── routing_windows.go
│ ├── shellquote/
│ │ ├── shellstring.go
│ │ ├── shellstring_unix.go
│ │ ├── shellstring_unix_test.go
│ │ ├── shellstring_windows.go
│ │ └── shellstring_windows_test.go
│ ├── sigctx/
│ │ └── context.go
│ ├── slice/
│ │ ├── contains.go
│ │ ├── csv.go
│ │ └── strings.go
│ ├── subnet/
│ │ ├── bitfield256.go
│ │ ├── bitfield256_test.go
│ │ ├── set.go
│ │ ├── set_test.go
│ │ ├── subnet.go
│ │ ├── subnet_test.go
│ │ └── testdata/
│ │ └── ips.txt
│ ├── tmconfig/
│ │ ├── admin_command.go
│ │ └── configmap.go
│ ├── tunnel/
│ │ ├── client_stream.go
│ │ ├── connid.go
│ │ ├── connid_test.go
│ │ ├── context.go
│ │ ├── dialer.go
│ │ ├── message.go
│ │ ├── metrics.go
│ │ ├── pipe.go
│ │ ├── pool.go
│ │ ├── probe.go
│ │ ├── provider.go
│ │ ├── server_stream.go
│ │ ├── stream.go
│ │ ├── stream_conn.go
│ │ ├── stream_conn_test.go
│ │ ├── stream_test.go
│ │ ├── synthetic.go
│ │ ├── timed_handler.go
│ │ └── udplistener.go
│ ├── types/
│ │ ├── addrportandproto.go
│ │ ├── engagement.go
│ │ ├── mountpolicy.go
│ │ ├── portandproto.go
│ │ ├── portidentifier.go
│ │ ├── portmapping.go
│ │ └── proto.go
│ ├── version/
│ │ └── version.go
│ ├── vif/
│ │ ├── device.go
│ │ ├── device_darwin.go
│ │ ├── device_linux.go
│ │ ├── device_notlinux.go
│ │ ├── device_unix.go
│ │ ├── device_windows.go
│ │ ├── logging.go
│ │ ├── router.go
│ │ ├── router_test.go
│ │ ├── stack.go
│ │ └── tunneling_device.go
│ └── workload/
│ ├── informers.go
│ ├── state.go
│ └── util.go
├── rpc/
│ ├── LICENSE
│ ├── agent/
│ │ ├── agent.pb.go
│ │ ├── agent.proto
│ │ └── agent_grpc.pb.go
│ ├── authenticator/
│ │ ├── authenticator.pb.go
│ │ ├── authenticator.proto
│ │ └── authenticator_grpc.pb.go
│ ├── common/
│ │ ├── version.pb.go
│ │ └── version.proto
│ ├── connector/
│ │ ├── connector.pb.go
│ │ ├── connector.proto
│ │ └── connector_grpc.pb.go
│ ├── daemon/
│ │ ├── daemon.pb.go
│ │ ├── daemon.proto
│ │ └── daemon_grpc.pb.go
│ ├── go.mod
│ ├── go.sum
│ ├── manager/
│ │ ├── manager.pb.go
│ │ ├── manager.proto
│ │ └── manager_grpc.pb.go
│ └── teleroute/
│ ├── service.pb.go
│ ├── service.proto
│ └── service_grpc.pb.go
└── test-infra/
├── aws-okd/
│ ├── README.md
│ └── dns/
│ ├── .gitignore
│ └── dns.tf
└── aws-vpn/
├── .gitignore
├── README.md
├── dns.tf
├── eks.tf
├── locals.tf
├── network.tf
├── pki.sh
├── provider.tf
└── vpn.tf
Showing preview only (518K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5614 symbols across 492 files)
FILE: build-aux/admission_controller_tls/main.go
function main (line 21) | func main() {
function generateKeys (line 32) | func generateKeys(mgrNamespace, dir string) error {
function writeFile (line 53) | func writeFile(dir, file string, data []byte) error {
function generateKeyTriplet (line 82) | func generateKeyTriplet(mgrNamespace string) (crtPem, keyPem, caPem []by...
function bigIntHash (line 145) | func bigIntHash(n *big.Int) []byte {
function ToPEM (line 152) | func ToPEM(file, keyType string, data []byte) ([]byte, error) {
FILE: build-aux/genversion/main.go
function isReleased (line 39) | func isReleased(v semver.Version) bool {
function dirMD5 (line 49) | func dirMD5(root string) ([]byte, error) {
function getLatestChangelogVersion (line 74) | func getLatestChangelogVersion() (v semver.Version, released bool, err e...
function Main (line 105) | func Main() error {
function main (line 175) | func main() {
FILE: build-aux/wix-installer/tpwrapper.go
constant svcName (line 16) | svcName = "TelepresenceDaemon"
type wrapper (line 18) | type wrapper struct
method Execute (line 28) | func (w *wrapper) Execute(_ []string, r <-chan svc.ChangeRequest, chan...
function main (line 87) | func main() {
FILE: charts/chart.go
type DirType (line 21) | type DirType
constant DirTypeTelepresence (line 24) | DirTypeTelepresence DirType = iota
constant TelepresenceChartName (line 25) | TelepresenceChartName = "telepresence-oss"
function filePriority (line 32) | func filePriority(chartName, filename string) int {
function addFile (line 46) | func addFile(tarWriter *tar.Writer, vfs fs.FS, filename string, content ...
type ChartOverlayFuncDef (line 78) | type ChartOverlayFuncDef
function WriteChart (line 85) | func WriteChart(helmChartDir DirType, out io.Writer, chartName string, v...
FILE: cmd/cobraparser/generate/generate.go
function FlagSet (line 18) | func FlagSet(setName string, ci *types.CommandInfo) *pflag.FlagSet {
FILE: cmd/cobraparser/main.go
function main (line 16) | func main() {
FILE: cmd/cobraparser/types/commandinfo.go
type CommandInfo (line 15) | type CommandInfo struct
type FlagInfo (line 24) | type FlagInfo struct
type HelpFetcher (line 35) | type HelpFetcher struct
method fetch (line 40) | func (f *HelpFetcher) fetch(path []string) (string, error) {
method BuildCommandTree (line 69) | func (f *HelpFetcher) BuildCommandTree(path []string, maxDepth int) (*...
function looksLikeHelp (line 62) | func looksLikeHelp(s string) bool {
function parseUsage (line 118) | func parseUsage(text string) string {
function parseShortDescription (line 139) | func parseShortDescription(text string) string {
function parseAvailableCommands (line 157) | func parseAvailableCommands(text string) []string {
function startsWithIndent (line 184) | func startsWithIndent(s string) bool {
function parseFlagsFromSection (line 198) | func parseFlagsFromSection(text string, global, inherited bool, headerPa...
function sliceAfter (line 280) | func sliceAfter(text, headerPattern string) string {
FILE: cmd/routecontroller/main.go
type subnetRule (line 21) | type subnetRule struct
function main (line 26) | func main() {
function run (line 37) | func run(ctx context.Context) error {
function discoverServiceCIDRs (line 61) | func discoverServiceCIDRs(ctx context.Context, cs *kubernetes.Clientset)...
function installSubnetBlackholes (line 95) | func installSubnetBlackholes(ctx context.Context, cs *kubernetes.Clients...
function removeSubnetBlackholes (line 136) | func removeSubnetBlackholes(ctx context.Context, rules []subnetRule) {
FILE: cmd/teleroute/driver/driver.go
type driver (line 13) | type driver struct
method GetCapabilities (line 33) | func (d *driver) GetCapabilities() (*network.CapabilitiesResponse, err...
method CreateNetwork (line 40) | func (d *driver) CreateNetwork(r *network.CreateNetworkRequest) error {
method DeleteNetwork (line 49) | func (d *driver) DeleteNetwork(r *network.DeleteNetworkRequest) error {
method CreateEndpoint (line 57) | func (d *driver) CreateEndpoint(r *network.CreateEndpointRequest) (*ne...
method DeleteEndpoint (line 65) | func (d *driver) DeleteEndpoint(r *network.DeleteEndpointRequest) error {
method Join (line 69) | func (d *driver) Join(r *network.JoinRequest) (*network.JoinResponse, ...
method Leave (line 77) | func (d *driver) Leave(r *network.LeaveRequest) (err error) {
method EndpointInfo (line 81) | func (d *driver) EndpointInfo(r *network.InfoRequest) (*network.InfoRe...
method DiscoverNew (line 85) | func (d *driver) DiscoverNew(*network.DiscoveryNotification) error {
method DiscoverDelete (line 89) | func (d *driver) DiscoverDelete(*network.DiscoveryNotification) error {
method ProgramExternalConnectivity (line 93) | func (d *driver) ProgramExternalConnectivity(*network.ProgramExternalC...
method RevokeExternalConnectivity (line 97) | func (d *driver) RevokeExternalConnectivity(*network.RevokeExternalCon...
method AllocateNetwork (line 101) | func (d *driver) AllocateNetwork(*network.AllocateNetworkRequest) (*ne...
method FreeNetwork (line 105) | func (d *driver) FreeNetwork(*network.FreeNetworkRequest) error {
method withNetwork (line 109) | func (d *driver) withNetwork(id string, f func(*networkState) error) (...
function New (line 19) | func New(ctx context.Context, pid int) network.Driver {
type errNetworkNotFound (line 27) | type errNetworkNotFound
method Error (line 29) | func (e errNetworkNotFound) Error() string {
FILE: cmd/teleroute/driver/network.go
type networkState (line 25) | type networkState struct
method initialize (line 55) | func (n *networkState) initialize(r *network.CreateNetworkRequest) (er...
method connectToDaemon (line 95) | func (n *networkState) connectToDaemon(gateways []netip.Prefix) (err e...
method createEndpoint (line 168) | func (n *networkState) createEndpoint(r *network.CreateEndpointRequest...
method join (line 196) | func (n *networkState) join(r *network.JoinRequest) (response *network...
method leaveEndpoint (line 261) | func (n *networkState) leaveEndpoint(endpointID string) error {
method deleteEndpoint (line 279) | func (n *networkState) deleteEndpoint(endpointID string) error {
function newNetwork (line 38) | func newNetwork(ctx context.Context, pid int, r *network.CreateNetworkRe...
function callDaemon (line 88) | func callDaemon[R proto.Message](ns *networkState, f func(ctx context.Co...
function rawAddrFromPrefixString (line 153) | func rawAddrFromPrefixString(s string) (rawAddr []byte, err error) {
FILE: cmd/teleroute/driver/options.go
type options (line 10) | type options struct
method parse (line 24) | func (o *options) parse(gos map[string]any) error {
type errRequiredOption (line 18) | type errRequiredOption
method Error (line 20) | func (e errRequiredOption) Error() string {
FILE: cmd/teleroute/main.go
constant pluginSocket (line 21) | pluginSocket = "/run/docker/plugins/teleroute.sock"
constant pluginLog (line 22) | pluginLog = "/var/log/teleroute.log"
function main (line 25) | func main() {
constant pluginEntryPoint (line 59) | pluginEntryPoint = "/bin/docker-network-teleroute"
function getPluginHostPID (line 61) | func getPluginHostPID(ctx context.Context) (int, error) {
FILE: integration_test/agent_injector_disabled_test.go
type agentInjectorDisabledSuite (line 10) | type agentInjectorDisabledSuite struct
method SuiteName (line 16) | func (s *agentInjectorDisabledSuite) SuiteName() string {
method SetupSuite (line 26) | func (s *agentInjectorDisabledSuite) SetupSuite() {
method TearDownSuite (line 31) | func (s *agentInjectorDisabledSuite) TearDownSuite() {
method Test_AgentInjectorDisabled (line 35) | func (s *agentInjectorDisabledSuite) Test_AgentInjectorDisabled() {
method Test_VersionWithAgentInjectorDisabled (line 56) | func (s *agentInjectorDisabledSuite) Test_VersionWithAgentInjectorDisa...
method Test_ManualAgent (line 84) | func (s *agentInjectorDisabledSuite) Test_ManualAgent() {
function init (line 20) | func init() {
FILE: integration_test/also_proxy_test.go
method Test_AlsoProxy32 (line 15) | func (s *notConnectedSuite) Test_AlsoProxy32() {
FILE: integration_test/argo_rollouts_test.go
type argoRolloutsSuite (line 18) | type argoRolloutsSuite struct
method SuiteName (line 23) | func (s *argoRolloutsSuite) SuiteName() string {
method SetupSuite (line 33) | func (s *argoRolloutsSuite) SetupSuite() {
method TearDownSuite (line 52) | func (s *argoRolloutsSuite) TearDownSuite() {
method Test_SuccessfullyInterceptsArgoRollout (line 78) | func (s *argoRolloutsSuite) Test_SuccessfullyInterceptsArgoRollout() {
method Test_ListsReplicaSetWhenRolloutDisabled (line 130) | func (s *argoRolloutsSuite) Test_ListsReplicaSetWhenRolloutDisabled() {
function init (line 27) | func init() {
function downloadKubectlArgoRollouts (line 56) | func downloadKubectlArgoRollouts(ctx context.Context, arExe string) error {
FILE: integration_test/bind_to_podip_test.go
method Test_BindToPodIP (line 16) | func (s *connectedSuite) Test_BindToPodIP() {
FILE: integration_test/cidr_conflict_test.go
type cidrConflictSuite (line 20) | type cidrConflictSuite struct
method SuiteName (line 28) | func (s *cidrConflictSuite) SuiteName() string {
method SetupSuite (line 38) | func (s *cidrConflictSuite) SetupSuite() {
method TearDownSuite (line 87) | func (s *cidrConflictSuite) TearDownSuite() {
method Test_AutoConflictResolution (line 93) | func (s *cidrConflictSuite) Test_AutoConflictResolution() {
method Test_AutoConflictAvoidance (line 126) | func (s *cidrConflictSuite) Test_AutoConflictAvoidance() {
method Test_AutoConflictResolution_CloudDisable (line 135) | func (s *cidrConflictSuite) Test_AutoConflictResolution_CloudDisable() {
method Test_AutoConflictResolution_ClientDisable (line 144) | func (s *cidrConflictSuite) Test_AutoConflictResolution_ClientDisable() {
method Test_AllowConflictResolution (line 152) | func (s *cidrConflictSuite) Test_AllowConflictResolution() {
function init (line 32) | func init() {
FILE: integration_test/cli_test.go
type cliSuite (line 12) | type cliSuite struct
method SuiteName (line 16) | func (s *cliSuite) SuiteName() string {
method Test_Version (line 26) | func (s *cliSuite) Test_Version() {
method Test_VersionWithInvalidKubeContext (line 36) | func (s *cliSuite) Test_VersionWithInvalidKubeContext() {
method Test_Help (line 47) | func (s *cliSuite) Test_Help() {
method Test_Status (line 92) | func (s *cliSuite) Test_Status() {
method Test_StatusWithJSON (line 105) | func (s *cliSuite) Test_StatusWithJSON() {
method Test_ConfigViewClientOnly (line 116) | func (s *cliSuite) Test_ConfigViewClientOnly() {
function init (line 20) | func init() {
FILE: integration_test/cloud_config_test.go
method Test_CloudNeverProxy (line 27) | func (s *notConnectedSuite) Test_CloudNeverProxy() {
method Test_CloudAllowConflicting (line 132) | func (s *notConnectedSuite) Test_CloudAllowConflicting() {
method configView (line 167) | func (s *notConnectedSuite) configView() (*client.SessionConfig, error) {
method Test_CloudAgentArrival (line 177) | func (s *notConnectedSuite) Test_CloudAgentArrival() {
method Test_RootdCloudLogLevel (line 206) | func (s *notConnectedSuite) Test_RootdCloudLogLevel() {
method Test_UserdCloudLogLevel (line 294) | func (s *notConnectedSuite) Test_UserdCloudLogLevel() {
FILE: integration_test/compose_test.go
type composeSuite (line 16) | type composeSuite struct
method SuiteName (line 22) | func (s *composeSuite) SuiteName() string {
method SetupSuite (line 32) | func (s *composeSuite) SetupSuite() {
method TearDownTest (line 43) | func (s *composeSuite) TearDownTest() {
method Context (line 47) | func (s *composeSuite) Context() context.Context {
method Test_ComposeDNS (line 51) | func (s *composeSuite) Test_ComposeDNS() {
method Test_ComposeConnect (line 98) | func (s *composeSuite) Test_ComposeConnect() {
method Test_ComposeProxy (line 143) | func (s *composeSuite) Test_ComposeProxy() {
method Test_ComposeIngest (line 188) | func (s *composeSuite) Test_ComposeIngest() {
method Test_ComposeIntercept (line 239) | func (s *composeSuite) Test_ComposeIntercept() {
method Test_ComposeReplace (line 288) | func (s *composeSuite) Test_ComposeReplace() {
method Test_ComposeWiretap (line 337) | func (s *composeSuite) Test_ComposeWiretap() {
function init (line 26) | func init() {
FILE: integration_test/config_test.go
method Test_EmptyConfigFile (line 11) | func (s *notConnectedSuite) Test_EmptyConfigFile() {
FILE: integration_test/connected_test.go
type connectedSuite (line 11) | type connectedSuite struct
method SuiteName (line 16) | func (s *connectedSuite) SuiteName() string {
method Test_ListExcludesTM (line 26) | func (s *connectedSuite) Test_ListExcludesTM() {
method Test_ReportsAllVersions (line 31) | func (s *connectedSuite) Test_ReportsAllVersions() {
method Test_Status (line 41) | func (s *connectedSuite) Test_Status() {
method Test_StatusWithJSON (line 49) | func (s *connectedSuite) Test_StatusWithJSON() {
function init (line 20) | func init() {
FILE: integration_test/container_test.go
method Test_InterceptsContainer (line 19) | func (s *connectedSuite) Test_InterceptsContainer() {
method Test_InterceptsContainerAndReplace (line 91) | func (s *connectedSuite) Test_InterceptsContainerAndReplace() {
FILE: integration_test/docker_daemon_test.go
type dockerDaemonSuite (line 21) | type dockerDaemonSuite struct
method SuiteName (line 27) | func (s *dockerDaemonSuite) SuiteName() string {
method SetupSuite (line 37) | func (s *dockerDaemonSuite) SetupSuite() {
method TearDownTest (line 48) | func (s *dockerDaemonSuite) TearDownTest() {
method Context (line 52) | func (s *dockerDaemonSuite) Context() context.Context {
method Test_DockerDaemon_status (line 56) | func (s *dockerDaemonSuite) Test_DockerDaemon_status() {
method Test_DockerDaemon_hostDaemonNoConflict (line 67) | func (s *dockerDaemonSuite) Test_DockerDaemon_hostDaemonNoConflict() {
method Test_DockerDaemon_alsoProxy32 (line 74) | func (s *dockerDaemonSuite) Test_DockerDaemon_alsoProxy32() {
method Test_DockerDaemon_daemonHostNotConflict (line 118) | func (s *dockerDaemonSuite) Test_DockerDaemon_daemonHostNotConflict() {
method Test_DockerDaemon_singleNameLookup (line 124) | func (s *dockerDaemonSuite) Test_DockerDaemon_singleNameLookup() {
method Test_DockerDaemon_cacheFiles (line 137) | func (s *dockerDaemonSuite) Test_DockerDaemon_cacheFiles() {
method Test_GatherLogsTrafficManager (line 163) | func (s *dockerDaemonSuite) Test_GatherLogsTrafficManager() {
function init (line 31) | func init() {
FILE: integration_test/docker_run_test.go
function runDockerRun (line 17) | func runDockerRun(ctx context.Context, name, svc, port, appDir, tag stri...
method Test_DockerRun_HostDaemon (line 51) | func (s *singleServiceSuite) Test_DockerRun_HostDaemon() {
method Test_DockerRun_DockerDaemon (line 172) | func (s *dockerDaemonSuite) Test_DockerRun_DockerDaemon() {
method Test_DockerRun_VolumePresent (line 292) | func (s *dockerDaemonSuite) Test_DockerRun_VolumePresent() {
method Test_DockerRunCommand (line 310) | func (s *dockerDaemonSuite) Test_DockerRunCommand() {
method Test_DockerRunExternalDNS (line 324) | func (s *dockerDaemonSuite) Test_DockerRunExternalDNS() {
FILE: integration_test/env_interpolate_test.go
method Test_PrefixInterpolated (line 10) | func (s *connectedSuite) Test_PrefixInterpolated() {
FILE: integration_test/gather_logs_test.go
method TestGatherLogs_AllLogs (line 18) | func (s *multipleInterceptsSuite) TestGatherLogs_AllLogs() {
method TestGatherLogs_ManagerOnly (line 32) | func (s *multipleInterceptsSuite) TestGatherLogs_ManagerOnly() {
method TestGatherLogs_AgentsOnly (line 45) | func (s *multipleInterceptsSuite) TestGatherLogs_AgentsOnly() {
method TestGatherLogs_OneAgentOnly (line 58) | func (s *multipleInterceptsSuite) TestGatherLogs_OneAgentOnly() {
method TestGatherLogs_NoPodYamlUnlessLogs (line 71) | func (s *multipleInterceptsSuite) TestGatherLogs_NoPodYamlUnlessLogs() {
method TestGatherLogs_NoK8sLogs (line 84) | func (s *multipleInterceptsSuite) TestGatherLogs_NoK8sLogs() {
method TestGatherLogs_OnlyMappedLogs (line 97) | func (s *connectedSuite) TestGatherLogs_OnlyMappedLogs() {
method cleanLogDir (line 175) | func (s *multipleInterceptsSuite) cleanLogDir(ctx context.Context) {
method svcRegex (line 179) | func (s *multipleInterceptsSuite) svcRegex() string {
method getZipData (line 186) | func (s *multipleInterceptsSuite) getZipData(outputFile string) (bool, i...
function getZipData (line 190) | func getZipData(require *itest.Requirements, outputFile, appNamespace, m...
function readZip (line 237) | func readZip(require *itest.Requirements, zippedFile *zip.File) []byte {
FILE: integration_test/h2c_intercept_test.go
type h2cInterceptSuite (line 18) | type h2cInterceptSuite struct
method SuiteName (line 23) | func (s *h2cInterceptSuite) SuiteName() string {
method SetupSuite (line 33) | func (s *h2cInterceptSuite) SetupSuite() {
method Test_H2CInterceptPreservesProtocol (line 71) | func (s *h2cInterceptSuite) Test_H2CInterceptPreservesProtocol() {
function init (line 27) | func init() {
function startLocalH2CEchoServer (line 42) | func startLocalH2CEchoServer(ctx context.Context, name string) (int, con...
FILE: integration_test/headless_test.go
method Test_SuccessfullyInterceptsHeadlessService (line 12) | func (s *connectedSuite) Test_SuccessfullyInterceptsHeadlessService() {
FILE: integration_test/helm_test.go
type helmSuite (line 13) | type helmSuite struct
method SuiteName (line 20) | func (s *helmSuite) SuiteName() string {
method SetupSuite (line 33) | func (s *helmSuite) SetupSuite() {
method TearDownSuite (line 40) | func (s *helmSuite) TearDownSuite() {
method Test_HelmCanInterceptInManagedNamespace (line 44) | func (s *helmSuite) Test_HelmCanInterceptInManagedNamespace() {
method Test_HelmCannotConnectToUnmanagedNamespace (line 54) | func (s *helmSuite) Test_HelmCannotConnectToUnmanagedNamespace() {
method Test_HelmWebhookInjectsInManagedNamespace (line 67) | func (s *helmSuite) Test_HelmWebhookInjectsInManagedNamespace() {
method Test_HelmWebhookDoesntInjectInUnmanagedNamespace (line 85) | func (s *helmSuite) Test_HelmWebhookDoesntInjectInUnmanagedNamespace() {
method Test_HelmMultipleInstalls (line 103) | func (s *helmSuite) Test_HelmMultipleInstalls() {
method Test_CollidingInstalls (line 144) | func (s *helmSuite) Test_CollidingInstalls() {
function init (line 24) | func init() {
FILE: integration_test/http_intercepts_test.go
type httpInterceptsSuite (line 18) | type httpInterceptsSuite struct
method SuiteName (line 23) | func (s *httpInterceptsSuite) SuiteName() string {
method SetupSuite (line 27) | func (s *httpInterceptsSuite) SetupSuite() {
method Test_HTTPHeaderFiltering (line 34) | func (s *httpInterceptsSuite) Test_HTTPHeaderFiltering() {
method Test_HTTPHeaderFiltering_CurlFormat (line 48) | func (s *httpInterceptsSuite) Test_HTTPHeaderFiltering_CurlFormat() {
method Test_HTTPPathFiltering (line 62) | func (s *httpInterceptsSuite) Test_HTTPPathFiltering() {
method Test_HTTPCombinedFiltering (line 76) | func (s *httpInterceptsSuite) Test_HTTPCombinedFiltering() {
method Test_BackwardCompatibility (line 94) | func (s *httpInterceptsSuite) Test_BackwardCompatibility() {
method Test_HTTPInterceptCoexistence (line 108) | func (s *httpInterceptsSuite) Test_HTTPInterceptCoexistence() {
method Test_TCPPortConflictDetection (line 147) | func (s *httpInterceptsSuite) Test_TCPPortConflictDetection() {
method Test_HTTPManySimultaneous (line 192) | func (s *httpInterceptsSuite) Test_HTTPManySimultaneous() {
function init (line 186) | func init() {
method Test_HTTPManyClientsSimultaneous (line 259) | func (s *notConnectedSuite) Test_HTTPManyClientsSimultaneous() {
method Test_OtelHTTPManyClientsSimultaneous (line 263) | func (s *otelSuite) Test_OtelHTTPManyClientsSimultaneous() {
type NamespaceSuite (line 267) | type NamespaceSuite interface
function testHTTPManyClientsSimultaneous (line 277) | func testHTTPManyClientsSimultaneous(s NamespaceSuite, svc, path string) {
FILE: integration_test/ignored_mounts_test.go
method Test_IgnoredMounts (line 17) | func (s *mountsSuite) Test_IgnoredMounts() {
FILE: integration_test/inactive_client_test.go
type inactiveClientSuite (line 17) | type inactiveClientSuite struct
method SuiteName (line 31) | func (s *inactiveClientSuite) SuiteName() string {
method SetupSuite (line 47) | func (s *inactiveClientSuite) SetupSuite() {
method TearDownSuite (line 57) | func (s *inactiveClientSuite) TearDownSuite() {
method AmendSuiteContext (line 63) | func (s *inactiveClientSuite) AmendSuiteContext(ctx context.Context) c...
method Test_ConflictOverrideInactive (line 72) | func (s *inactiveClientSuite) Test_ConflictOverrideInactive() {
method Test_ConflictOverrideSleeping (line 135) | func (s *inactiveClientSuite) Test_ConflictOverrideSleeping() {
method withSleepingClient (line 202) | func (s *inactiveClientSuite) withSleepingClient(ctx context.Context, ...
function init (line 35) | func init() {
FILE: integration_test/ingest_test.go
type ingestSuite (line 22) | type ingestSuite struct
method SuiteName (line 28) | func (s *ingestSuite) SuiteName() string {
method SetupSuite (line 38) | func (s *ingestSuite) SetupSuite() {
method TearDownSuite (line 86) | func (s *ingestSuite) TearDownSuite() {
method mountPoint (line 111) | func (s *ingestSuite) mountPoint() string {
method Test_IngestCLI (line 129) | func (s *ingestSuite) Test_IngestCLI() {
method Test_IngestIngestConflict (line 154) | func (s *ingestSuite) Test_IngestIngestConflict() {
method Test_IngestInterceptConflict (line 170) | func (s *ingestSuite) Test_IngestInterceptConflict() {
method Test_InterceptIngestConflict (line 186) | func (s *ingestSuite) Test_InterceptIngestConflict() {
method Test_IngestRepeat (line 202) | func (s *ingestSuite) Test_IngestRepeat() {
method Test_IngestFTP (line 213) | func (s *ingestSuite) Test_IngestFTP() {
method Test_IngestProxyVia (line 249) | func (s *ingestSuite) Test_IngestProxyVia() {
method Test_IngestWithCommand (line 305) | func (s *ingestSuite) Test_IngestWithCommand() {
method Test_IngestWithContainerAndCommand (line 315) | func (s *ingestSuite) Test_IngestWithContainerAndCommand() {
method Test_LeaveIngestWithoutContainer (line 325) | func (s *ingestSuite) Test_LeaveIngestWithoutContainer() {
method Test_IngestListFormat (line 340) | func (s *ingestSuite) Test_IngestListFormat() {
function init (line 32) | func init() {
FILE: integration_test/inject_policy_test.go
method applyPolicyApp (line 21) | func (is *installSuite) applyPolicyApp(ctx context.Context, name, namesp...
method assertInjected (line 29) | func (is *installSuite) assertInjected(ctx context.Context, name, namesp...
method injectPolicyTest (line 46) | func (is *installSuite) injectPolicyTest(ctx context.Context, policy age...
method TestInjectPolicy (line 102) | func (is *installSuite) TestInjectPolicy() {
method applyMultipleServices (line 110) | func (is *installSuite) applyMultipleServices(svcCount int) {
method deleteMultipleServices (line 122) | func (is *installSuite) deleteMultipleServices(svcCount int) {
method applyOrDeleteMultipleServices (line 126) | func (is *installSuite) applyOrDeleteMultipleServices(svcCount int, appl...
method Test_MultiOnDemandInjectOnInstall (line 151) | func (is *installSuite) Test_MultiOnDemandInjectOnInstall() {
method Test_MultiOnDemandInjectOnApply (line 187) | func (is *installSuite) Test_MultiOnDemandInjectOnApply() {
FILE: integration_test/injector_test.go
method Test_InterceptOperationRestoredAfterFailingInject (line 20) | func (s *singleServiceSuite) Test_InterceptOperationRestoredAfterFailing...
method Test_HelmUpgradeWebhookSecret (line 106) | func (s *singleServiceSuite) Test_HelmUpgradeWebhookSecret() {
method Test_HelmUpgradeMountedWebhookSecret (line 149) | func (s *singleServiceSuite) Test_HelmUpgradeMountedWebhookSecret() {
FILE: integration_test/install_test.go
constant ManagerAppName (line 35) | ManagerAppName = agentconfig.ManagerAppName
type installSuite (line 37) | type installSuite struct
method SuiteName (line 42) | func (is *installSuite) SuiteName() string {
method AmendSuiteContext (line 64) | func (is *installSuite) AmendSuiteContext(ctx context.Context) context...
method Test_UpgradeRetainsValues (line 73) | func (is *installSuite) Test_UpgradeRetainsValues() {
method Test_HelmTemplateInstall (line 137) | func (is *installSuite) Test_HelmTemplateInstall() {
method Test_FindTrafficManager_notPresent (line 173) | func (is *installSuite) Test_FindTrafficManager_notPresent() {
method Test_EnsureManager_toleratesFailedInstall (line 184) | func (is *installSuite) Test_EnsureManager_toleratesFailedInstall() {
method Test_RemoveManager_canUninstall (line 224) | func (is *installSuite) Test_RemoveManager_canUninstall() {
method Test_No_Upgrade (line 241) | func (is *installSuite) Test_No_Upgrade() {
method Test_findTrafficManager_differentNamespace_present (line 270) | func (is *installSuite) Test_findTrafficManager_differentNamespace_pre...
method findTrafficManagerPresent (line 285) | func (is *installSuite) findTrafficManagerPresent(ctx context.Context,...
method cluster (line 302) | func (is *installSuite) cluster(ctx context.Context, context, managerN...
method Test_HelmSubChart (line 371) | func (is *installSuite) Test_HelmSubChart() {
function init (line 46) | func init() {
function getHelmConfig (line 52) | func getHelmConfig(ctx context.Context, clientGetter genericclioptions.R...
function ensureTrafficManager (line 308) | func ensureTrafficManager(kc *k8s.Cluster) error {
function unTgz (line 316) | func unTgz(ctx context.Context, srcTgz, dstPath string) error {
FILE: integration_test/integration_test.go
function Test_Integration (line 10) | func Test_Integration(t *testing.T) {
FILE: integration_test/intercept_env_test.go
type interceptEnvSuite (line 11) | type interceptEnvSuite struct
method SuiteName (line 16) | func (s *interceptEnvSuite) SuiteName() string {
method Test_ExcludeVariables (line 26) | func (s *interceptEnvSuite) Test_ExcludeVariables() {
function init (line 20) | func init() {
FILE: integration_test/intercept_flags_test.go
type interceptFlagSuite (line 20) | type interceptFlagSuite struct
method SuiteName (line 26) | func (s *interceptFlagSuite) SuiteName() string {
method SetupSuite (line 36) | func (s *interceptFlagSuite) SetupSuite() {
method TearDownSuite (line 48) | func (s *interceptFlagSuite) TearDownSuite() {
method Test_ContainerReplace (line 61) | func (s *interceptFlagSuite) Test_ContainerReplace() {
function init (line 30) | func init() {
FILE: integration_test/intercept_localhost_test.go
type interceptLocalhostSuite (line 16) | type interceptLocalhostSuite struct
method SuiteName (line 24) | func (s *interceptLocalhostSuite) SuiteName() string {
method SetupSuite (line 34) | func (s *interceptLocalhostSuite) SetupSuite() {
method TearDownSuite (line 44) | func (s *interceptLocalhostSuite) TearDownSuite() {
method TestIntercept_WithCustomLocalhost (line 48) | func (s *interceptLocalhostSuite) TestIntercept_WithCustomLocalhost() {
function init (line 28) | func init() {
FILE: integration_test/intercept_mount_test.go
type interceptMountSuite (line 22) | type interceptMountSuite struct
method SuiteName (line 29) | func (s *interceptMountSuite) SuiteName() string {
method SetupSuite (line 39) | func (s *interceptMountSuite) SetupSuite() {
method TearDownSuite (line 61) | func (s *interceptMountSuite) TearDownSuite() {
method Test_InterceptMount (line 79) | func (s *interceptMountSuite) Test_InterceptMount() {
function init (line 33) | func init() {
method Test_InterceptMountRelative (line 97) | func (s *singleServiceSuite) Test_InterceptMountRelative() {
method Test_InterceptDetailedOutput (line 135) | func (s *singleServiceSuite) Test_InterceptDetailedOutput() {
method Test_NoInterceptorResponse (line 167) | func (s *singleServiceSuite) Test_NoInterceptorResponse() {
FILE: integration_test/itest/apply_app.go
function ApplyEchoService (line 17) | func ApplyEchoService(ctx context.Context, name, namespace string, port ...
function ApplyService (line 21) | func ApplyService(ctx context.Context, name, namespace, image string, po...
function DeleteSvcAndWorkload (line 30) | func DeleteSvcAndWorkload(ctx context.Context, workload, name, namespace...
function ApplyApp (line 37) | func ApplyApp(ctx context.Context, name, namespace, workload string) {
function DeleteApp (line 47) | func DeleteApp(ctx context.Context, name, namespace string) {
type AppPort (line 54) | type AppPort struct
type AppData (line 62) | type AppData struct
function ApplyAppTemplate (line 75) | func ApplyAppTemplate(ctx context.Context, namespace string, app *AppDat...
function RolloutStatusWait (line 88) | func RolloutStatusWait(ctx context.Context, namespace, workload string) ...
FILE: integration_test/itest/assertions.go
type Requirements (line 11) | type Requirements struct
method EventuallyContext (line 15) | func (r *Requirements) EventuallyContext(ctx context.Context, conditio...
type Assertions (line 25) | type Assertions struct
method EventuallyContext (line 29) | func (r *Assertions) EventuallyContext(ctx context.Context, condition ...
FILE: integration_test/itest/cluster.go
constant purposeLabel (line 56) | purposeLabel = "tp-cli-testing"
constant AssignPurposeLabel (line 57) | AssignPurposeLabel = "purpose=" + purposeLabel
constant TestUser (line 58) | TestUser = "telepresence-test-developer"
type Cluster (line 61) | type Cluster interface
type cluster (line 113) | type cluster struct
method SetSelf (line 158) | func (s *cluster) SetSelf(self Cluster) {
method Initialize (line 162) | func (s *cluster) Initialize(ctx context.Context) context.Context {
method downloadBinary (line 323) | func (s *cluster) downloadBinary(ctx context.Context, t testing.TB, v ...
method tearDown (line 374) | func (s *cluster) tearDown(ctx context.Context) {
method ensureQuit (line 383) | func (s *cluster) ensureQuit(ctx context.Context) {
method ensureNoManager (line 388) | func (s *cluster) ensureNoManager(ctx context.Context) {
method withBasicConfig (line 426) | func (s *cluster) withBasicConfig(c context.Context, t *testing.T) con...
method GlobalEnv (line 475) | func (s *cluster) GlobalEnv(ctx context.Context) dos.MapEnv {
method Executable (line 517) | func (s *cluster) Executable() (string, error) {
method GeneralError (line 521) | func (s *cluster) GeneralError() error {
method IsCI (line 525) | func (s *cluster) IsCI() bool {
method IsIPv6 (line 529) | func (s *cluster) IsIPv6() bool {
method LargeFileTestDisabled (line 533) | func (s *cluster) LargeFileTestDisabled() bool {
method AgentImage (line 537) | func (s *cluster) AgentImage() string {
method AgentRegistry (line 541) | func (s *cluster) AgentRegistry() string {
method AgentVersion (line 545) | func (s *cluster) AgentVersion() semver.Version {
method ClientImage (line 549) | func (s *cluster) ClientImage() string {
method ClientRegistry (line 553) | func (s *cluster) ClientRegistry() string {
method ClientVersion (line 557) | func (s *cluster) ClientVersion() semver.Version {
method ClientIsVersion (line 567) | func (s *cluster) ClientIsVersion(vr string) bool {
method ManagerImage (line 571) | func (s *cluster) ManagerImage() string {
method ManagerRegistry (line 575) | func (s *cluster) ManagerRegistry() string {
method ManagerVersion (line 579) | func (s *cluster) ManagerVersion() semver.Version {
method ManagerIsVersion (line 585) | func (s *cluster) ManagerIsVersion(vr string) bool {
method SetGeneralError (line 589) | func (s *cluster) SetGeneralError(err error) {
method Suffix (line 593) | func (s *cluster) Suffix() string {
method UserdPProf (line 597) | func (s *cluster) UserdPProf() uint16 {
method RootdPProf (line 601) | func (s *cluster) RootdPProf() uint16 {
method UseLocalPathProvisioner (line 605) | func (s *cluster) UseLocalPathProvisioner() bool {
method CapturePodLogs (line 609) | func (s *cluster) CapturePodLogs(ctx context.Context, app, container, ...
method GetK8SCluster (line 716) | func (s *cluster) GetK8SCluster(ctx context.Context, context, managerN...
function WithCluster (line 145) | func WithCluster(ctx context.Context, f func(ctx context.Context)) {
function unzip (line 358) | func unzip(t testing.TB, zipFile, dir string) {
function PodCreateTimeout (line 415) | func PodCreateTimeout(c context.Context) time.Duration {
function isFinalIncluded (line 561) | func isFinalIncluded(vr string, v semver.Version) bool {
function KubeConfig (line 732) | func KubeConfig(ctx context.Context) string {
constant sensitivePrefix (line 737) | sensitivePrefix = "--$sensitive$--"
function WrapSensitive (line 742) | func WrapSensitive(s string) string {
function Command (line 749) | func Command(ctx context.Context, executable string, args ...string) *ex...
function EnvironMap (line 775) | func EnvironMap(ctx context.Context) dos.MapEnv {
function TelepresenceOk (line 782) | func TelepresenceOk(ctx context.Context, args ...string) string {
function Telepresence (line 800) | func Telepresence(ctx context.Context, args ...string) (string, string, ...
function TelepresenceCmd (line 817) | func TelepresenceCmd(ctx context.Context, args ...string) *exec.Cmd {
function TelepresenceDisconnectOk (line 850) | func TelepresenceDisconnectOk(ctx context.Context, args ...string) {
function TelepresenceDisconnect (line 855) | func TelepresenceDisconnect(ctx context.Context, args ...string) {
function AssertDisconnectOutput (line 860) | func AssertDisconnectOutput(ctx context.Context, stdout string) {
function TelepresenceQuitOk (line 869) | func TelepresenceQuitOk(ctx context.Context, args ...string) {
function TelepresenceQuit (line 875) | func TelepresenceQuit(ctx context.Context, args ...string) {
function AssertQuitOutput (line 880) | func AssertQuitOutput(ctx context.Context, stdout string) {
function RunError (line 893) | func RunError(err error, out []byte) error {
function Run (line 909) | func Run(ctx context.Context, exe string, args ...string) error {
function Output (line 919) | func Output(ctx context.Context, exe string, args ...string) (string, er...
function Kubectl (line 933) | func Kubectl(ctx context.Context, namespace string, args ...string) error {
function KubectlOut (line 938) | func KubectlOut(ctx context.Context, namespace string, args ...string) (...
function retryKubectl (line 946) | func retryKubectl(ctx context.Context, namespace string, args []string, ...
function CreateNamespaces (line 980) | func CreateNamespaces(ctx context.Context, namespaces ...string) {
function DeleteNamespaces (line 995) | func DeleteNamespaces(ctx context.Context, namespaces ...string) {
function StartLocalHttpEchoServerWithAddr (line 1015) | func StartLocalHttpEchoServerWithAddr(ctx context.Context, name, addr st...
function StartLocalHttpEchoServer (line 1049) | func StartLocalHttpEchoServer(ctx context.Context, name string) (int, co...
function PingInterceptedEchoServer (line 1055) | func PingInterceptedEchoServer(ctx context.Context, svc, svcPort string,...
function PingInterceptedEchoServerAndExpect (line 1068) | func PingInterceptedEchoServerAndExpect(ctx context.Context, svc, svcPor...
function WithConfig (line 1118) | func WithConfig(c context.Context, modifierFunc func(config client.Confi...
function WithKubeConfigExtension (line 1138) | func WithKubeConfigExtension(ctx context.Context, extProducer func(*api....
function WithKubeConfig (line 1172) | func WithKubeConfig(ctx context.Context, cfg *api.Config) context.Context {
function RunningPods (line 1178) | func RunningPods(ctx context.Context, svc, ns string) []core.Pod {
function RunningPodsSelector (line 1182) | func RunningPodsSelector(ctx context.Context, ns string, selector labels...
function RunningPodNames (line 1207) | func RunningPodNames(ctx context.Context, svc, ns string) []string {
function RunningPodsWithAgents (line 1219) | func RunningPodsWithAgents(ctx context.Context, appPrefix, ns string) []...
FILE: integration_test/itest/config.go
function SetConfig (line 14) | func SetConfig(ctx context.Context, configDir, configYml string) (contex...
FILE: integration_test/itest/connected.go
type connected (line 11) | type connected struct
method setup (line 26) | func (ch *connected) setup(ctx context.Context) bool {
method tearDown (line 40) | func (ch *connected) tearDown(ctx context.Context) {
function WithConnected (line 15) | func WithConnected(np TrafficManager, f func(ctx context.Context, ch Tra...
FILE: integration_test/itest/context.go
type profileKey (line 20) | type profileKey struct
type Profile (line 22) | type Profile
constant DefaultProfile (line 25) | DefaultProfile Profile = "default"
constant GkeAutopilotProfile (line 26) | GkeAutopilotProfile Profile = "gke-autopilot"
function withProfile (line 29) | func withProfile(ctx context.Context) context.Context {
function GetProfile (line 43) | func GetProfile(ctx context.Context) Profile {
type tContextKey (line 50) | type tContextKey struct
function TestContext (line 52) | func TestContext(t *testing.T, ossRoot, moduleRoot string) context.Conte...
function WithT (line 61) | func WithT(ctx context.Context, t *testing.T) context.Context {
function getT (line 70) | func getT(ctx context.Context) *testing.T {
type ossRootKey (line 77) | type ossRootKey struct
function GetOSSRoot (line 79) | func GetOSSRoot(ctx context.Context) string {
function SetOSSRoot (line 91) | func SetOSSRoot(ctx context.Context, dir string) context.Context {
function WithOSSRoot (line 97) | func WithOSSRoot(ctx context.Context) context.Context {
type moduleRootKey (line 101) | type moduleRootKey struct
function GetModuleRoot (line 103) | func GetModuleRoot(ctx context.Context) string {
function SetModuleRoot (line 115) | func SetModuleRoot(ctx context.Context, dir string) context.Context {
function WithModuleRoot (line 121) | func WithModuleRoot(ctx context.Context) context.Context {
type dirContextKey (line 125) | type dirContextKey struct
function WithWorkingDir (line 128) | func WithWorkingDir(ctx context.Context, dir string) context.Context {
function GetWorkingDir (line 132) | func GetWorkingDir(ctx context.Context) string {
type envContextKey (line 141) | type envContextKey struct
function WithEnv (line 144) | func WithEnv(ctx context.Context, env dos.MapEnv) context.Context {
function WithoutEnv (line 160) | func WithoutEnv(ctx context.Context, keysToRemove []string) context.Cont...
type userContextkey (line 177) | type userContextkey struct
function WithUser (line 179) | func WithUser(ctx context.Context, clusterUser string) context.Context {
function GetUser (line 183) | func GetUser(ctx context.Context) string {
function LookupEnv (line 190) | func LookupEnv(ctx context.Context, key string) (value string, ok bool) {
function getEnv (line 197) | func getEnv(ctx context.Context) dos.MapEnv {
type globalHarnessContextKey (line 204) | type globalHarnessContextKey struct
function withGlobalHarness (line 206) | func withGlobalHarness(ctx context.Context, h Cluster) context.Context {
function GetGlobalHarness (line 210) | func GetGlobalHarness(ctx context.Context) Cluster {
type exeContextKey (line 217) | type exeContextKey struct
function WithExecutable (line 219) | func WithExecutable(ctx context.Context, exe string) context.Context {
function GetExecutable (line 223) | func GetExecutable(ctx context.Context) string {
FILE: integration_test/itest/env.go
type itestConfig (line 22) | type itestConfig struct
function LoadEnvAndConfig (line 27) | func LoadEnvAndConfig(ctx context.Context) context.Context {
function BuildOutput (line 79) | func BuildOutput(ctx context.Context) string {
FILE: integration_test/itest/harness.go
type Harness (line 14) | type Harness interface
type upAndDown (line 26) | type upAndDown struct
type harness (line 33) | type harness struct
method PushHarness (line 44) | func (h *harness) PushHarness(ctx context.Context, setup func(ctx cont...
method HarnessContext (line 49) | func (h *harness) HarnessContext() context.Context {
method RunSuite (line 56) | func (h *harness) RunSuite(s TestingSuite) {
method SetupSuite (line 81) | func (h *harness) SetupSuite() {
method PopHarness (line 102) | func (h *harness) PopHarness() {
method HarnessT (line 137) | func (h *harness) HarnessT() *testing.T {
function NewContextHarness (line 40) | func NewContextHarness(ctx context.Context) Harness {
function suiteEnabled (line 63) | func suiteEnabled(ctx context.Context, s TestingSuite) bool {
function safeSetUp (line 119) | func safeSetUp(ctx context.Context, f func(context.Context) bool) bool {
function safeTearDown (line 124) | func safeTearDown(ctx context.Context, f func(context.Context)) {
function failOnPanic (line 129) | func failOnPanic(ctx context.Context) {
FILE: integration_test/itest/helm.go
method PackageHelmChart (line 28) | func (s *cluster) PackageHelmChart(ctx context.Context) (string, error) {
method GetSetArgsForHelm (line 44) | func (s *cluster) GetSetArgsForHelm(ctx context.Context, values map[stri...
method GetValuesForHelm (line 57) | func (s *cluster) GetValuesForHelm(ctx context.Context, values map[strin...
method TelepresenceHelmInstallOK (line 103) | func (s *cluster) TelepresenceHelmInstallOK(ctx context.Context, upgrade...
method TelepresenceHelmInstall (line 109) | func (s *cluster) TelepresenceHelmInstall(ctx context.Context, upgrade b...
method UninstallTrafficManager (line 319) | func (s *cluster) UninstallTrafficManager(ctx context.Context, managerNa...
FILE: integration_test/itest/image.go
type Image (line 10) | type Image struct
method FQName (line 17) | func (img *Image) FQName() string {
function ImageFromEnv (line 31) | func ImageFromEnv(ctx context.Context, env, defaultTag, defaultRegistry ...
type imageContextKey (line 53) | type imageContextKey struct
function WithImage (line 55) | func WithImage(ctx context.Context, image *Image) context.Context {
function GetImage (line 59) | func GetImage(ctx context.Context) *Image {
type clientImageContextKey (line 66) | type clientImageContextKey struct
function WithClientImage (line 68) | func WithClientImage(ctx context.Context, image *Image) context.Context {
function GetClientImage (line 72) | func GetClientImage(ctx context.Context) *Image {
type agentImageContextKey (line 79) | type agentImageContextKey struct
function WithAgentImage (line 81) | func WithAgentImage(ctx context.Context, image *Image) context.Context {
function GetAgentImage (line 85) | func GetAgentImage(ctx context.Context) *Image {
FILE: integration_test/itest/logdir.go
function CleanLogDir (line 14) | func CleanLogDir(ctx context.Context, require *Requirements, nsRx, mgrNa...
FILE: integration_test/itest/multiple_services.go
type MultipleServices (line 10) | type MultipleServices interface
type multipleServices (line 16) | type multipleServices struct
method setup (line 32) | func (h *multipleServices) setup(ctx context.Context) bool {
method tearDown (line 45) | func (h *multipleServices) tearDown(ctx context.Context) {
method Name (line 57) | func (h *multipleServices) Name() string {
method ServiceCount (line 61) | func (h *multipleServices) ServiceCount() int {
function WithMultipleServices (line 22) | func WithMultipleServices(np NamespacePair, name string, serviceCount in...
FILE: integration_test/itest/namespace.go
type NamespacePair (line 21) | type NamespacePair interface
type Namespaces (line 40) | type Namespaces struct
type namespacesContextKey (line 45) | type namespacesContextKey struct
function WithNamespaces (line 47) | func WithNamespaces(ctx context.Context, namespaces *Namespaces) context...
function GetNamespaces (line 51) | func GetNamespaces(ctx context.Context) *Namespaces {
type nsPair (line 61) | type nsPair struct
method TelepresenceConnect (line 67) | func (s *nsPair) TelepresenceConnect(ctx context.Context, args ...stri...
method TelepresenceTryConnect (line 75) | func (s *nsPair) TelepresenceTryConnect(ctx context.Context, args ...s...
method setup (line 99) | func (s *nsPair) setup(ctx context.Context) bool {
method tearDown (line 123) | func (s *nsPair) tearDown(ctx context.Context) {
method RollbackTM (line 138) | func (s *nsPair) RollbackTM(ctx context.Context) {
method AppNamespace (line 151) | func (s *nsPair) AppNamespace() string {
method ManagerNamespace (line 161) | func (s *nsPair) ManagerNamespace() string {
method ApplyEchoService (line 165) | func (s *nsPair) ApplyEchoService(ctx context.Context, name string, po...
method ApplyApp (line 172) | func (s *nsPair) ApplyApp(ctx context.Context, name, workload string) {
method DeleteApp (line 179) | func (s *nsPair) DeleteApp(ctx context.Context, name string) {
method RolloutStatusWait (line 184) | func (s *nsPair) RolloutStatusWait(ctx context.Context, workload strin...
method DeleteSvcAndWorkload (line 188) | func (s *nsPair) DeleteSvcAndWorkload(ctx context.Context, workload, n...
method ApplyTemplate (line 193) | func (s *nsPair) ApplyTemplate(ctx context.Context, path string, value...
method DeleteTemplate (line 197) | func (s *nsPair) DeleteTemplate(ctx context.Context, path string, valu...
method doWithTemplate (line 206) | func (s *nsPair) doWithTemplate(ctx context.Context, action, path stri...
method Kubectl (line 216) | func (s *nsPair) Kubectl(ctx context.Context, args ...string) error {
method KubectlOk (line 223) | func (s *nsPair) KubectlOk(ctx context.Context, args ...string) string {
method KubectlOut (line 230) | func (s *nsPair) KubectlOut(ctx context.Context, args ...string) (stri...
function WithNamespacePair (line 83) | func WithNamespacePair(ctx context.Context, suffix string, f func(Namesp...
function AppAndMgrNSName (line 117) | func AppAndMgrNSName(suffix string) (appNS, mgrNS string) {
FILE: integration_test/itest/runner.go
type Runner (line 14) | type Runner interface
type namedRunner (line 24) | type namedRunner struct
type runnerKey (line 29) | type runnerKey struct
type suffixedRunner (line 34) | type suffixedRunner struct
method forName (line 93) | func (r *suffixedRunner) forName(key runnerKey) *namedRunner {
type runner (line 41) | type runner struct
method AddClusterSuite (line 54) | func (r *runner) AddClusterSuite(f func(context.Context) TestingSuite) {
method forSuffix (line 58) | func (r *runner) forSuffix(suffix string) *suffixedRunner {
method AddNamespacePairSuite (line 75) | func (r *runner) AddNamespacePairSuite(suffix string, f func(Namespace...
method AddTrafficManagerSuite (line 88) | func (r *runner) AddTrafficManagerSuite(suffix string, f func(TrafficM...
method AddConnectedSuite (line 110) | func (r *runner) AddConnectedSuite(suffix string, f func(TrafficManage...
method AddMultipleServicesSuite (line 123) | func (r *runner) AddMultipleServicesSuite(suffix, name string, svcCoun...
method AddSingleServiceSuite (line 136) | func (r *runner) AddSingleServiceSuite(suffix, name string, f func(ser...
method RunTests (line 146) | func (r *runner) RunTests(c context.Context) { //nolint:gocognit
function AddClusterSuite (line 49) | func AddClusterSuite(f func(context.Context) TestingSuite) {
function AddNamespacePairSuite (line 69) | func AddNamespacePairSuite(suffix string, f func(NamespacePair) TestingS...
function AddTrafficManagerSuite (line 82) | func AddTrafficManagerSuite(suffix string, f func(manager TrafficManager...
function AddConnectedSuite (line 104) | func AddConnectedSuite(suffix string, f func(TrafficManager) TestingSuit...
function AddMultipleServicesSuite (line 117) | func AddMultipleServicesSuite(suffix, name string, svcCount int, f func(...
function AddSingleServiceSuite (line 130) | func AddSingleServiceSuite(suffix, name string, f func(services SingleSe...
function RunTests (line 141) | func RunTests(c context.Context) {
FILE: integration_test/itest/single_service.go
type SingleService (line 9) | type SingleService interface
type singleService (line 14) | type singleService struct
method setup (line 29) | func (h *singleService) setup(ctx context.Context) bool {
method tearDown (line 34) | func (h *singleService) tearDown(ctx context.Context) {
method ServiceName (line 38) | func (h *singleService) ServiceName() string {
function WithSingleService (line 19) | func WithSingleService(h NamespacePair, serviceName string, f func(Singl...
FILE: integration_test/itest/status.go
type StatusResponse (line 15) | type StatusResponse struct
function TelepresenceStatus (line 29) | func TelepresenceStatus(ctx context.Context, args ...string) (*StatusRes...
function TelepresenceStatusOk (line 63) | func TelepresenceStatusOk(ctx context.Context, args ...string) *StatusRe...
FILE: integration_test/itest/suite.go
type TestingSuite (line 9) | type TestingSuite interface
type Suite (line 20) | type Suite struct
method AmendSuiteContext (line 26) | func (s *Suite) AmendSuiteContext(ctx context.Context) context.Context {
method setContext (line 31) | func (s *Suite) setContext(ctx context.Context) {
method Context (line 35) | func (s *Suite) Context() context.Context {
method Assert (line 39) | func (s *Suite) Assert() *Assertions {
method Require (line 43) | func (s *Suite) Require() *Requirements {
FILE: integration_test/itest/tempdir.go
type tempDirBase (line 12) | type tempDirBase struct
type tempDirBaseKey (line 17) | type tempDirBaseKey struct
function withTempDirBase (line 19) | func withTempDirBase(ctx context.Context, td *tempDirBase) context.Conte...
function TempDir (line 28) | func TempDir(ctx context.Context) string {
FILE: integration_test/itest/template.go
type TplResource (line 18) | type TplResource interface
type ContainerPort (line 23) | type ContainerPort struct
type ServicePort (line 29) | type ServicePort struct
type tplBase (line 36) | type tplBase struct
method loadAndApply (line 41) | func (b *tplBase) loadAndApply(ctx context.Context, path, ns string, d...
method Delete (line 51) | func (b *tplBase) Delete(ctx context.Context) error {
type Generic (line 55) | type Generic struct
method Apply (line 72) | func (g *Generic) Apply(ctx context.Context, ns string) error {
type PersistentVolume (line 76) | type PersistentVolume struct
method Apply (line 83) | func (p *PersistentVolume) Apply(ctx context.Context, ns string) error {
type PersistentVolumeClaim (line 87) | type PersistentVolumeClaim struct
method Apply (line 94) | func (r *PersistentVolumeClaim) Apply(ctx context.Context, ns string) ...
type DisruptionBudget (line 98) | type DisruptionBudget struct
function OpenTemplate (line 104) | func OpenTemplate(ctx context.Context, path string, data any) (io.Reader...
function ReadTemplate (line 112) | func ReadTemplate(ctx context.Context, path string, data any) ([]byte, e...
function EvalTemplate (line 126) | func EvalTemplate(content string, data any) ([]byte, error) {
function toYAML (line 141) | func toYAML(v interface{}) string {
FILE: integration_test/itest/timed.go
function TimedRun (line 10) | func TimedRun(ctx context.Context, maxDuration time.Duration, function f...
FILE: integration_test/itest/traffic_manager.go
type TrafficManager (line 39) | type TrafficManager interface
type trafficManager (line 46) | type trafficManager struct
method setup (line 61) | func (th *trafficManager) setup(ctx context.Context) bool {
method tearDown (line 68) | func (th *trafficManager) tearDown(ctx context.Context) {
method trafficManagerConnection (line 72) | func (th *trafficManager) trafficManagerConnection(ctx context.Context...
method DoWithTrafficManager (line 102) | func (th *trafficManager) DoWithTrafficManager(ctx context.Context, f ...
method NewConnectRequest (line 149) | func (th *trafficManager) NewConnectRequest(ctx context.Context) *rpc....
method DoWithSession (line 168) | func (th *trafficManager) DoWithSession(ctx context.Context, cr *rpc.C...
function WithTrafficManager (line 50) | func WithTrafficManager(np NamespacePair, f func(ctx context.Context, ch...
function dialTrafficManager (line 80) | func dialTrafficManager(ctx context.Context, cfg *rest.Config, managerNa...
FILE: integration_test/kubeauth_test.go
method Test_ConnectWithKubeconfigExec (line 20) | func (s *notConnectedSuite) Test_ConnectWithKubeconfigExec() {
method makeKubeConfigWithExec (line 80) | func (s *notConnectedSuite) makeKubeConfigWithExec() (string, *api.Confi...
FILE: integration_test/kubeconfig_extension_test.go
function getClusterIPs (line 30) | func getClusterIPs(cluster *api.Cluster) ([]netip.Addr, error) {
method Test_APIServerIsProxied (line 52) | func (s *notConnectedSuite) Test_APIServerIsProxied() {
method Test_NeverProxy (line 107) | func (s *notConnectedSuite) Test_NeverProxy() {
method Test_ConflictingProxies (line 171) | func (s *notConnectedSuite) Test_ConflictingProxies() {
method Test_AlsoNeverProxyDocker (line 233) | func (s *notConnectedSuite) Test_AlsoNeverProxyDocker() {
method Test_DNSSuffixRules (line 262) | func (s *notConnectedSuite) Test_DNSSuffixRules() {
FILE: integration_test/large_files_test.go
type largeFilesSuite (line 25) | type largeFilesSuite struct
method SuiteName (line 35) | func (s *largeFilesSuite) SuiteName() string {
method Name (line 58) | func (s *largeFilesSuite) Name() string {
method ServiceCount (line 62) | func (s *largeFilesSuite) ServiceCount() int {
method SetupSuite (line 66) | func (s *largeFilesSuite) SetupSuite() {
method TearDownSuite (line 131) | func (s *largeFilesSuite) TearDownSuite() {
method createIntercepts (line 148) | func (s *largeFilesSuite) createIntercepts(ctx context.Context) {
method leaveIntercepts (line 177) | func (s *largeFilesSuite) leaveIntercepts(ctx context.Context) {
method Test_LargeFileIntercepts_fuseftp (line 183) | func (s *largeFilesSuite) Test_LargeFileIntercepts_fuseftp() {
method Test_LargeFileIntercepts_sshfs (line 192) | func (s *largeFilesSuite) Test_LargeFileIntercepts_sshfs() {
method largeFileIntercepts (line 199) | func (s *largeFilesSuite) largeFileIntercepts(ctx context.Context) {
method createLargeFile (line 266) | func (s *largeFilesSuite) createLargeFile(dir string, sz int) (string,...
constant svcCount (line 40) | svcCount = 4
constant fileSize (line 41) | fileSize = 100 * 1024 * 1024
constant fileCountPerSvc (line 42) | fileCountPerSvc = 3
function init (line 45) | func init() {
function validateLargeFile (line 299) | func validateLargeFile(name string, sz int) error {
FILE: integration_test/limitrange_test.go
method limitedRangeTest (line 16) | func (is *installSuite) limitedRangeTest() {
method TestLimitRange (line 64) | func (is *installSuite) TestLimitRange() {
FILE: integration_test/list_watch_test.go
method Test_ListWatch (line 10) | func (s *connectedSuite) Test_ListWatch() {
FILE: integration_test/loglevel_test.go
method Test_RootDaemonLogLevel (line 13) | func (s *notConnectedSuite) Test_RootDaemonLogLevel() {
FILE: integration_test/manager_grpc_test.go
type managerGRPCSuite (line 15) | type managerGRPCSuite struct
method SuiteName (line 22) | func (m *managerGRPCSuite) SuiteName() string {
method SetupSuite (line 32) | func (m *managerGRPCSuite) SetupSuite() {
method TearDownSuite (line 49) | func (m *managerGRPCSuite) TearDownSuite() {
method Test_ClusterInfo (line 56) | func (m *managerGRPCSuite) Test_ClusterInfo() {
function init (line 26) | func init() {
FILE: integration_test/manual_agent_test.go
method Test_ManualAgent (line 20) | func (s *notConnectedSuite) Test_ManualAgent() {
function testManualAgent (line 24) | func testManualAgent(s *itest.Suite, nsp itest.NamespacePair) {
FILE: integration_test/mounts_test.go
type mountsSuite (line 15) | type mountsSuite struct
method SuiteName (line 20) | func (s *mountsSuite) SuiteName() string {
method SetupSuite (line 33) | func (s *mountsSuite) SetupSuite() {
method createDeployment (line 41) | func (s *mountsSuite) createDeployment() [3]itest.TplResource {
method deleteDeployment (line 91) | func (s *mountsSuite) deleteDeployment(ts [3]itest.TplResource) {
method Test_MountWrite (line 98) | func (s *mountsSuite) Test_MountWrite() {
method Test_MountReadOnly (line 128) | func (s *mountsSuite) Test_MountReadOnly() {
method Test_CollidingMounts (line 145) | func (s *mountsSuite) Test_CollidingMounts() {
function init (line 24) | func init() {
FILE: integration_test/multi_connect_test.go
type multiConnectSuite (line 27) | type multiConnectSuite struct
method SuiteName (line 35) | func (s *multiConnectSuite) SuiteName() string {
method SetupSuite (line 46) | func (s *multiConnectSuite) SetupSuite() {
method AmendSuiteContext (line 105) | func (s *multiConnectSuite) AmendSuiteContext(ctx context.Context) con...
method TearDownSuite (line 111) | func (s *multiConnectSuite) TearDownSuite() {
method Test_MultipleConnect (line 117) | func (s *multiConnectSuite) Test_MultipleConnect() {
method Test_MultipleConnect_named (line 133) | func (s *multiConnectSuite) Test_MultipleConnect_named() {
method Test_MultipleConnect_sameNamespace (line 151) | func (s *multiConnectSuite) Test_MultipleConnect_sameNamespace() {
method doubleConnectCheck (line 166) | func (s *multiConnectSuite) doubleConnectCheck(ctx1, ctx2 context.Cont...
function init (line 39) | func init() {
FILE: integration_test/multiple_intercepts_test.go
type multipleInterceptsSuite (line 18) | type multipleInterceptsSuite struct
method SuiteName (line 25) | func (s *multipleInterceptsSuite) SuiteName() string {
method SetupSuite (line 40) | func (s *multipleInterceptsSuite) SetupSuite() {
method TearDownSuite (line 61) | func (s *multipleInterceptsSuite) TearDownSuite() {
method Test_Intercepts (line 84) | func (s *multipleInterceptsSuite) Test_Intercepts() {
method Test_ReportsPortConflict (line 145) | func (s *multipleInterceptsSuite) Test_ReportsPortConflict() {
function init (line 29) | func init() {
FILE: integration_test/multiple_port_intercept_test.go
type multiportInterceptSuite (line 15) | type multiportInterceptSuite struct
method SuiteName (line 24) | func (s *multiportInterceptSuite) SuiteName() string {
method SetupSuite (line 39) | func (s *multiportInterceptSuite) SetupSuite() {
method TearDownSuite (line 61) | func (s *multiportInterceptSuite) TearDownSuite() {
method Test_MultiPortIntercept (line 72) | func (s *multiportInterceptSuite) Test_MultiPortIntercept() {
method Test_MultiPortLocalConflict (line 115) | func (s *multiportInterceptSuite) Test_MultiPortLocalConflict() {
method Test_MultiPortRemoteConflict (line 131) | func (s *multiportInterceptSuite) Test_MultiPortRemoteConflict() {
function init (line 28) | func init() {
FILE: integration_test/multiple_services_test.go
type multipleServicesSuite (line 19) | type multipleServicesSuite struct
method SuiteName (line 24) | func (s *multipleServicesSuite) SuiteName() string {
method Test_LargeRequest (line 34) | func (s *multipleServicesSuite) Test_LargeRequest() {
method Test_List (line 114) | func (s *multipleServicesSuite) Test_List() {
method Test_ListOnlyMapped (line 121) | func (s *multipleServicesSuite) Test_ListOnlyMapped() {
method Test_RepeatedConnect (line 141) | func (s *multipleServicesSuite) Test_RepeatedConnect() {
method Test_ProxiesOutboundTraffic (line 171) | func (s *multipleServicesSuite) Test_ProxiesOutboundTraffic() {
function init (line 28) | func init() {
FILE: integration_test/multiport_test.go
method Test_MultipleUnnamedServicePorts (line 17) | func (s *connectedSuite) Test_MultipleUnnamedServicePorts() {
method Test_NoContainerPort (line 66) | func (s *connectedSuite) Test_NoContainerPort() {
method Test_UnnamedUdpAndTcpPort (line 95) | func (s *connectedSuite) Test_UnnamedUdpAndTcpPort() {
method Test_SameContainerPort (line 195) | func (s *connectedSuite) Test_SameContainerPort() {
FILE: integration_test/namespaces_test.go
type nsSuite (line 16) | type nsSuite struct
method SuiteName (line 21) | func (s *nsSuite) SuiteName() string {
method SetupSuite (line 47) | func (s *nsSuite) SetupSuite() {
method AmendSuiteContext (line 116) | func (s *nsSuite) AmendSuiteContext(ctx context.Context) context.Conte...
method managerNamespace (line 120) | func (s *nsSuite) managerNamespace() string {
method TearDownSuite (line 124) | func (s *nsSuite) TearDownSuite() {
method Test_NamespacesClusterWide (line 137) | func (s *nsSuite) Test_NamespacesClusterWide() {
method Test_NamespacesDynamic (line 152) | func (s *nsSuite) Test_NamespacesDynamic() {
method Test_NamespacesStatic (line 269) | func (s *nsSuite) Test_NamespacesStatic() {
function init (line 25) | func init() {
constant namespaceTpl (line 31) | namespaceTpl = `
type namespaceData (line 42) | type namespaceData struct
FILE: integration_test/not_connected_test.go
type notConnectedSuite (line 15) | type notConnectedSuite struct
method SuiteName (line 20) | func (s *notConnectedSuite) SuiteName() string {
method TearDownTest (line 30) | func (s *notConnectedSuite) TearDownTest() {
method Test_ConnectWithCommand (line 34) | func (s *notConnectedSuite) Test_ConnectWithCommand() {
method Test_InvalidKubeconfig (line 42) | func (s *notConnectedSuite) Test_InvalidKubeconfig() {
method Test_NonExistentContext (line 54) | func (s *notConnectedSuite) Test_NonExistentContext() {
method Test_ConnectingToOtherNamespace (line 61) | func (s *notConnectedSuite) Test_ConnectingToOtherNamespace() {
method Test_ReportsNotConnected (line 109) | func (s *notConnectedSuite) Test_ReportsNotConnected() {
method Test_CreateAndRunIndividualPod (line 122) | func (s *notConnectedSuite) Test_CreateAndRunIndividualPod() {
function init (line 24) | func init() {
FILE: integration_test/otel_test.go
type otelSuite (line 13) | type otelSuite struct
method SuiteName (line 18) | func (s *otelSuite) SuiteName() string {
method SetupSuite (line 28) | func (s *otelSuite) SetupSuite() {
method TearDownSuite (line 91) | func (s *otelSuite) TearDownSuite() {
function init (line 22) | func init() {
FILE: integration_test/pod_cidr_test.go
type podCIDRSuite (line 14) | type podCIDRSuite struct
method SuiteName (line 19) | func (s *podCIDRSuite) SuiteName() string {
method Test_PodCIDRStrategy (line 29) | func (s *podCIDRSuite) Test_PodCIDRStrategy() {
function init (line 23) | func init() {
FILE: integration_test/podscaling_test.go
method Test_RestartInterceptedPod (line 20) | func (s *interceptMountSuite) Test_RestartInterceptedPod() {
method Test_StopInterceptedPodOfMany (line 89) | func (s *interceptMountSuite) Test_StopInterceptedPodOfMany() {
method runningPods (line 180) | func (s *interceptMountSuite) runningPods(ctx context.Context) []string {
FILE: integration_test/proxy_via_test.go
type proxyViaSuite (line 22) | type proxyViaSuite struct
method SuiteName (line 27) | func (s *proxyViaSuite) SuiteName() string {
method SetupSuite (line 43) | func (s *proxyViaSuite) SetupSuite() {
method TearDownSuite (line 62) | func (s *proxyViaSuite) TearDownSuite() {
method Test_ProxyViaLoopBack (line 66) | func (s *proxyViaSuite) Test_ProxyViaLoopBack() {
method Test_ProxyViaEverything (line 134) | func (s *proxyViaSuite) Test_ProxyViaEverything() {
method Test_ProxyViaAll (line 167) | func (s *proxyViaSuite) Test_ProxyViaAll() {
method Test_ProxyViaAllAndMounts (line 188) | func (s *proxyViaSuite) Test_ProxyViaAllAndMounts() {
method Test_NeverProxySubnetIsOmitted (line 229) | func (s *proxyViaSuite) Test_NeverProxySubnetIsOmitted() {
function init (line 31) | func init() {
constant domain (line 38) | domain = "mydomain.local"
constant alias (line 39) | alias = "echo-home"
constant fqnAlias (line 40) | fqnAlias = alias + "." + domain
FILE: integration_test/reconnect_session_test.go
type reconnectSuite (line 16) | type reconnectSuite struct
method SuiteName (line 23) | func (s *reconnectSuite) SuiteName() string {
method SetupSuite (line 38) | func (s *reconnectSuite) SetupSuite() {
method TearDownSuite (line 55) | func (s *reconnectSuite) TearDownSuite() {
method Test_ReconnectAfterNetworkFailure (line 61) | func (s *reconnectSuite) Test_ReconnectAfterNetworkFailure() {
function init (line 27) | func init() {
FILE: integration_test/replace_test.go
type replaceSuite (line 15) | type replaceSuite struct
method SuiteName (line 23) | func (s *replaceSuite) SuiteName() string {
method SetupSuite (line 33) | func (s *replaceSuite) SetupSuite() {
method TearDownSuite (line 89) | func (s *replaceSuite) TearDownSuite() {
method Test_ReplaceWithMultiContainerPorts (line 93) | func (s *replaceSuite) Test_ReplaceWithMultiContainerPorts() {
function init (line 27) | func init() {
FILE: integration_test/restapi_test.go
type request (line 22) | type request struct
type restAPISuite (line 29) | type restAPISuite struct
method SuiteName (line 39) | func (s *restAPISuite) SuiteName() string {
method SetupSuite (line 57) | func (s *restAPISuite) SetupSuite() {
method TearDownSuite (line 114) | func (s *restAPISuite) TearDownSuite() {
method AmendSuiteContext (line 121) | func (s *restAPISuite) AmendSuiteContext(ctx context.Context) context....
method curlAPIServer (line 127) | func (s *restAPISuite) curlAPIServer(ctx context.Context, port uint16,...
method startIntercept (line 152) | func (s *restAPISuite) startIntercept(ctx context.Context, meta, heade...
method waitForInterceptReady (line 176) | func (s *restAPISuite) waitForInterceptReady(ctx context.Context, errC...
method Test_RestAPI_GlobalConsume (line 201) | func (s *restAPISuite) Test_RestAPI_GlobalConsume() {
method Test_RestAPI_GlobalInfo (line 241) | func (s *restAPISuite) Test_RestAPI_GlobalInfo() {
method Test_RestAPI_FilteredConsume (line 286) | func (s *restAPISuite) Test_RestAPI_FilteredConsume() {
method Test_RestAPI_FilteredInfo (line 357) | func (s *restAPISuite) Test_RestAPI_FilteredInfo() {
function init (line 43) | func init() {
FILE: integration_test/single_service_test.go
type singleServiceSuite (line 7) | type singleServiceSuite struct
method SuiteName (line 12) | func (s *singleServiceSuite) SuiteName() string {
function init (line 16) | func init() {
FILE: integration_test/subdomain_test.go
method Test_PodWithSubdomain (line 11) | func (s *connectedSuite) Test_PodWithSubdomain() {
FILE: integration_test/svcdomain_test.go
method Test_SvcDomain (line 12) | func (s *connectedSuite) Test_SvcDomain() {
FILE: integration_test/testdata/apiserveraccess/main.go
function main (line 35) | func main() {
function run (line 60) | func run(c context.Context) error {
constant interceptIdEnv (line 119) | interceptIdEnv = "TELEPRESENCE_INTERCEPT_ID"
function apiURL (line 122) | func apiURL() (string, error) {
function doRequest (line 131) | func doRequest(c context.Context, rqUrl string, path string, hm map[stri...
function intercepted (line 157) | func intercepted(c context.Context, url string, path string, w http.Resp...
FILE: integration_test/testdata/count-server/main.go
function main (line 10) | func main() {
FILE: integration_test/testdata/echo-server/main.go
type request (line 23) | type request struct
function main (line 30) | func main() {
function echoHandler (line 143) | func echoHandler(wr http.ResponseWriter, req *http.Request, outLog, errL...
function forwardHandler (line 184) | func forwardHandler(wr http.ResponseWriter, req *http.Request, outLog, e...
function writeAndLogf (line 237) | func writeAndLogf(w *bytes.Buffer, outLog *log.Logger, format string, ar...
FILE: integration_test/testdata/k8screds/main.go
function main (line 20) | func main() {
function run (line 27) | func run(args []string) error {
function resolveCreds (line 77) | func resolveCreds(ai *api.AuthInfo, cl *api.Cluster) ([]byte, error) {
function resolveExec (line 113) | func resolveExec(execConfig *api.ExecConfig) ([]byte, error) {
FILE: integration_test/testdata/stdiotest/main.go
type runner (line 11) | type runner struct
method run (line 33) | func (r runner) run(cmd *cobra.Command, args []string) error {
function main (line 16) | func main() {
FILE: integration_test/testdata/udp-echo/main.go
function main (line 11) | func main() {
function serveConnection (line 40) | func serveConnection(pc net.PacketConn) error {
FILE: integration_test/tls_test.go
method Test_TLSAnnotations (line 20) | func (s *dockerDaemonSuite) Test_TLSAnnotations() {
FILE: integration_test/to_pod_test.go
method Test_ToPodPortForwarding (line 13) | func (s *connectedSuite) Test_ToPodPortForwarding() {
method Test_ToPodUDPPortForwarding (line 53) | func (s *connectedSuite) Test_ToPodUDPPortForwarding() {
FILE: integration_test/udp_test.go
method TestUDPEcho (line 13) | func (s *connectedSuite) TestUDPEcho() {
FILE: integration_test/uhn_dns_test.go
type unqualifiedHostNameDNSSuite (line 17) | type unqualifiedHostNameDNSSuite struct
method SuiteName (line 22) | func (s *unqualifiedHostNameDNSSuite) SuiteName() string {
method TearDownTest (line 32) | func (s *unqualifiedHostNameDNSSuite) TearDownTest() {
method Test_UHNExcludes (line 36) | func (s *unqualifiedHostNameDNSSuite) Test_UHNExcludes() {
method Test_UHNMappings (line 76) | func (s *unqualifiedHostNameDNSSuite) Test_UHNMappings() {
function init (line 26) | func init() {
FILE: integration_test/uninstall_test.go
method Test_Uninstall (line 14) | func (s *notConnectedSuite) Test_Uninstall() {
FILE: integration_test/webhook_test.go
type webhookSuite (line 12) | type webhookSuite struct
method SuiteName (line 17) | func (s *webhookSuite) SuiteName() string {
method Test_AutoInjectedAgent (line 27) | func (s *webhookSuite) Test_AutoInjectedAgent() {
function init (line 21) | func init() {
method Test_AgentImageFromConfig (line 53) | func (s *notConnectedSuite) Test_AgentImageFromConfig() {
FILE: integration_test/wiretap_test.go
type wiretapSuite (line 22) | type wiretapSuite struct
method SuiteName (line 31) | func (s *wiretapSuite) SuiteName() string {
method SetupSuite (line 41) | func (s *wiretapSuite) SetupSuite() {
method TearDownSuite (line 71) | func (s *wiretapSuite) TearDownSuite() {
method startWiretapHandler (line 75) | func (s *wiretapSuite) startWiretapHandler(ctx context.Context, name, ...
method Test_MultipleTapsOnOnePort (line 107) | func (s *wiretapSuite) Test_MultipleTapsOnOnePort() { //nolint:gocognit
function init (line 35) | func init() {
FILE: integration_test/workload_configuration_test.go
type workloadConfigurationSuite (line 12) | type workloadConfigurationSuite struct
method SuiteName (line 17) | func (s *workloadConfigurationSuite) SuiteName() string {
method disabledWorkloadKind (line 27) | func (s *workloadConfigurationSuite) disabledWorkloadKind(tp, wl strin...
method Test_DisabledReplicaSet (line 48) | func (s *workloadConfigurationSuite) Test_DisabledReplicaSet() {
method Test_DisabledStatefulSet (line 54) | func (s *workloadConfigurationSuite) Test_DisabledStatefulSet() {
method Test_InterceptsDeploymentWithDisabledReplicaSets (line 60) | func (s *workloadConfigurationSuite) Test_InterceptsDeploymentWithDisa...
method Test_InterceptsReplicaSetWithDisabledDeployments (line 95) | func (s *workloadConfigurationSuite) Test_InterceptsReplicaSetWithDisa...
function init (line 21) | func init() {
FILE: integration_test/workload_watch_test.go
method createIntercept (line 13) | func (s *notConnectedSuite) createIntercept(ctx context.Context, client ...
method Test_WorkloadListener (line 50) | func (s *notConnectedSuite) Test_WorkloadListener() {
FILE: integration_test/workloads_test.go
method uninstall (line 15) | func (s *connectedSuite) uninstall(wl string) {
method successfulIntercept (line 29) | func (s *connectedSuite) successfulIntercept(tp, wl, port string) {
method doIntercept (line 58) | func (s *connectedSuite) doIntercept(tp, wl, port string) {
method successfulIngest (line 93) | func (s *connectedSuite) successfulIngest(tp, wl string) {
method Test_SuccessfullyInterceptsDeploymentWithProbes (line 127) | func (s *connectedSuite) Test_SuccessfullyInterceptsDeploymentWithProbes...
method Test_SuccessfullyInterceptsReplicaSet (line 131) | func (s *connectedSuite) Test_SuccessfullyInterceptsReplicaSet() {
method Test_SuccessfullyInterceptsStatefulSet (line 135) | func (s *connectedSuite) Test_SuccessfullyInterceptsStatefulSet() {
method Test_SuccessfullyInterceptsDeploymentWithNoVolumes (line 142) | func (s *connectedSuite) Test_SuccessfullyInterceptsDeploymentWithNoVolu...
method Test_SuccessfullyInterceptsDeploymentWithoutService (line 146) | func (s *connectedSuite) Test_SuccessfullyInterceptsDeploymentWithoutSer...
method Test_SuccessfullyIngestsDeploymentWithProbes (line 150) | func (s *connectedSuite) Test_SuccessfullyIngestsDeploymentWithProbes() {
method Test_SuccessfullyIngestsReplicaSet (line 154) | func (s *connectedSuite) Test_SuccessfullyIngestsReplicaSet() {
method Test_SuccessfullyIngestsStatefulSet (line 158) | func (s *connectedSuite) Test_SuccessfullyIngestsStatefulSet() {
method Test_SuccessfullyIngestsDeploymentWithNoVolumes (line 165) | func (s *connectedSuite) Test_SuccessfullyIngestsDeploymentWithNoVolumes...
method Test_SuccessfullyIngestsDeploymentWithoutService (line 169) | func (s *connectedSuite) Test_SuccessfullyIngestsDeploymentWithoutServic...
FILE: integration_test/wpad_test.go
method Test_WpadNotForwarded (line 18) | func (s *connectedSuite) Test_WpadNotForwarded() {
FILE: packaging/helmpackage.go
type sv (line 13) | type sv
method String (line 15) | func (v *sv) String() string {
method Set (line 19) | func (v *sv) Set(s string) error {
function main (line 27) | func main() {
function packageHelmChart (line 39) | func packageHelmChart(filename string, version semver.Version) error {
FILE: packaging/homebrew-oss-formula.rb
class Formula (line 3) | class __FORMULA_NAME__ < Formula
method install (line 23) | def install
FILE: pkg/agentconfig/container.go
type ContainerBuilder (line 19) | type ContainerBuilder struct
method AgentContainer (line 26) | func (a *ContainerBuilder) AgentContainer(ctx context.Context) (*core....
method mountSecrets (line 198) | func (a *ContainerBuilder) mountSecrets(annotation, certPath string, a...
method firstAppSecurityContext (line 245) | func (a *ContainerBuilder) firstAppSecurityContext() (*core.SecurityCo...
method configuredContainers (line 275) | func (a *ContainerBuilder) configuredContainers(ctx context.Context) [...
method eachConfiguredContainer (line 302) | func (a *ContainerBuilder) eachConfiguredContainer(configureContainers...
function annotationPrefixedPorts (line 218) | func annotationPrefixedPorts(anns map[string]string, prefix string) (m m...
function prefixInterpolated (line 313) | func prefixInterpolated(str, pfx string) string {
function appendAppContainerEnv (line 378) | func appendAppContainerEnv(app *core.Container, cc *Container, es []core...
function appendAppContainerEnvFrom (line 389) | func appendAppContainerEnvFrom(app *core.Container, cc *Container, es []...
FILE: pkg/agentconfig/container_test.go
function Test_prefixInterpolated (line 7) | func Test_prefixInterpolated(t *testing.T) {
FILE: pkg/agentconfig/initcontainer.go
function InitContainer (line 11) | func InitContainer(config *Sidecar) *core.Container {
FILE: pkg/agentconfig/injectpolicy.go
type InjectPolicy (line 9) | type InjectPolicy
method String (line 34) | func (aps InjectPolicy) String() string {
method MarshalJSON (line 47) | func (aps InjectPolicy) MarshalJSON() ([]byte, error) {
method EnvDecode (line 52) | func (aps *InjectPolicy) EnvDecode(val string) (err error) {
method UnmarshalText (line 64) | func (aps *InjectPolicy) UnmarshalText(value []byte) error {
method UnmarshalJSON (line 69) | func (aps *InjectPolicy) UnmarshalJSON(value []byte) error {
constant OnDemand (line 23) | OnDemand InjectPolicy = iota
constant WhenEnabled (line 28) | WhenEnabled
constant Never (line 31) | Never
function NewEnablePolicy (line 38) | func NewEnablePolicy(s string) (InjectPolicy, error) {
FILE: pkg/agentconfig/intercepttarget.go
type InterceptTarget (line 21) | type InterceptTarget
method MatchForSpec (line 41) | func (cp InterceptTarget) MatchForSpec(spec *manager.InterceptSpec) bo...
method AgentPort (line 47) | func (cp InterceptTarget) AgentPort() uint16 {
method TargetPortNumeric (line 51) | func (cp InterceptTarget) TargetPortNumeric() bool {
method ContainerPort (line 60) | func (cp InterceptTarget) ContainerPort() uint16 {
method ContainerPortName (line 64) | func (cp InterceptTarget) ContainerPortName() string {
method Protocol (line 68) | func (cp InterceptTarget) Protocol() types.Proto {
method AppProtocol (line 87) | func (cp InterceptTarget) AppProtocol(ctx context.Context) (proto stri...
method HasServicePortName (line 106) | func (cp InterceptTarget) HasServicePortName(name string) bool {
method HasServicePort (line 115) | func (cp InterceptTarget) HasServicePort(port uint16) bool {
method String (line 124) | func (cp InterceptTarget) String() string {
function NewInterceptTarget (line 23) | func NewInterceptTarget(ics []*Intercept) InterceptTarget {
function portString (line 72) | func portString(ic *Intercept) (s string) {
FILE: pkg/agentconfig/sidecar.go
constant ContainerName (line 20) | ContainerName = "traffic-agent"
constant ManagerAppName (line 21) | ManagerAppName = "traffic-manager"
constant InitContainerName (line 22) | InitContainerName = "tel-agent-init"
constant MountPrefixApp (line 23) | MountPrefixApp = "/tel_app_mounts"
constant ExportsVolumeName (line 24) | ExportsVolumeName = "export-volume"
constant ExportsMountPoint (line 25) | ExportsMountPoint = "/tel_app_exports"
constant TempVolumeName (line 26) | TempVolumeName = "tel-agent-tmp"
constant TempMountPoint (line 27) | TempMountPoint = "/tmp"
constant EnvPrefix (line 28) | EnvPrefix = "_TEL_"
constant EnvPrefixAgent (line 29) | EnvPrefixAgent = EnvPrefix + "AGENT_"
constant EnvPrefixApp (line 30) | EnvPrefixApp = EnvPrefix + "APP_"
constant PodInfoVolumeName (line 31) | PodInfoVolumeName = "pod-info"
constant PodInfoMountPath (line 32) | PodInfoMountPath = "/etc/podinfo"
constant DownstreamTLSVolumeName (line 33) | DownstreamTLSVolumeName = "downstream-tls"
constant DownstreamTLSVolumePath (line 34) | DownstreamTLSVolumePath = "/downstream-tls"
constant UpstreamTLSVolumeName (line 35) | UpstreamTLSVolumeName = "upstream-tls"
constant UpstreamTLSVolumePath (line 36) | UpstreamTLSVolumePath = "/upstream-tls"
constant EnvAgentConfig (line 39) | EnvAgentConfig = "AGENT_CONFIG"
constant EnvInterceptContainer (line 42) | EnvInterceptContainer = "TELEPRESENCE_CONTAINER"
constant EnvInterceptMounts (line 45) | EnvInterceptMounts = "TELEPRESENCE_MOUNTS"
constant EnvLocalMounts (line 48) | EnvLocalMounts = "TELEPRESENCE_LOCAL_MOUNTS"
constant EnvAPIHost (line 51) | EnvAPIHost = "TELEPRESENCE_API_HOST"
constant EnvAPIPort (line 54) | EnvAPIPort = "TELEPRESENCE_API_PORT"
constant WorkloadNameLabel (line 56) | WorkloadNameLabel = annotation.DomainPrefix + "workloadName"
constant WorkloadKindLabel (line 57) | WorkloadKindLabel = annotation.DomainPrefix + "workloadKind"
constant WorkloadEnabledLabel (line 58) | WorkloadEnabledLabel = annotation.DomainPrefix + "workloadEnabled"
type ReplacePolicy (line 61) | type ReplacePolicy
constant ReplacePolicyIntercept (line 68) | ReplacePolicyIntercept ReplacePolicy = iota
constant ReplacePolicyContainer (line 72) | ReplacePolicyContainer
constant ReplacePolicyInactive (line 75) | ReplacePolicyInactive
type Intercept (line 80) | type Intercept struct
type Container (line 116) | type Container struct
type Sidecar (line 144) | type Sidecar struct
method InterceptTarget (line 217) | func (s *Sidecar) InterceptTarget(containerPort uint16, proto types.Pr...
method InterceptorInactivePort (line 247) | func (s *Sidecar) InterceptorInactivePort(containerPort uint16, proto ...
method Clone (line 256) | func (s *Sidecar) Clone() *Sidecar {
method EachContainer (line 271) | func (s *Sidecar) EachContainer(pod *core.Pod, f func(*core.Container,...
method FindIntercept (line 285) | func (s *Sidecar) FindIntercept(serviceName, containerName string, por...
method Marshal (line 353) | func (s *Sidecar) Marshal() ([]byte, error) {
function UnmarshalYAML (line 358) | func UnmarshalYAML(data []byte) (*Sidecar, error) {
function MarshalTight (line 372) | func MarshalTight(ac *Sidecar) (string, error) {
function UnmarshalJSON (line 403) | func UnmarshalJSON(data string) (*Sidecar, error) {
FILE: pkg/agentconfig/util.go
function IsInterceptForService (line 7) | func IsInterceptForService(pi types.PortIdentifier, ic *Intercept) bool {
function IsInterceptForContainer (line 20) | func IsInterceptForContainer(pi types.PortIdentifier, ic *Intercept) bool {
function PortUniqueIntercepts (line 35) | func PortUniqueIntercepts(cn *Container) []*Intercept {
method ProxyPort (line 51) | func (s *Sidecar) ProxyPort(agentPort uint16) uint16 {
method numberOfPossibleIntercepts (line 55) | func (s *Sidecar) numberOfPossibleIntercepts() (count int) {
FILE: pkg/agentconfig/volumes.go
function AgentVolumes (line 15) | func AgentVolumes(agentName string, pod *core.Pod) (volumes []core.Volum...
function appendSecretVolume (line 63) | func appendSecretVolume(env dos.Env, annotation string, pod *core.Pod, v...
method appendVolumeMounts (line 81) | func (a *ContainerBuilder) appendVolumeMounts(app *core.Container, cc *C...
FILE: pkg/agentmap/capsbase26.go
function CapsBase26 (line 4) | func CapsBase26(v uint64) string {
function Base26 (line 9) | func Base26(v uint64) string {
function addBase26 (line 14) | func addBase26(c byte, v uint64) string {
FILE: pkg/agentmap/capsbase26_test.go
function TestCapsBase26 (line 10) | func TestCapsBase26(t *testing.T) {
FILE: pkg/agentmap/discorvery.go
type WorkloadOwnerNotFoundError (line 27) | type WorkloadOwnerNotFoundError struct
function FindOwnerWorkload (line 31) | func FindOwnerWorkload(ctx context.Context, obj k8sapi.Object, supported...
function GetWorkload (line 75) | func GetWorkload(ctx context.Context, name, namespace string, workloadKi...
function getWorkload (line 86) | func getWorkload(ai apps.Interface, ri argorollouts.RolloutInformer, nam...
function getDeployment (line 111) | func getDeployment(ai apps.Interface, name, namespace string) (wl k8sapi...
function getRollout (line 119) | func getRollout(ri argorollouts.RolloutInformer, name, namespace string)...
function getReplicaSet (line 130) | func getReplicaSet(ai apps.Interface, name, namespace string) (k8sapi.Wo...
function getStatefulSet (line 138) | func getStatefulSet(ai apps.Interface, name, namespace string) (k8sapi.W...
function FindServicesForPod (line 146) | func FindServicesForPod(ctx context.Context, pod *core.PodTemplateSpec, ...
type objectsStringer (line 174) | type objectsStringer
method String (line 176) | func (os objectsStringer) String() string {
function findServicesSelecting (line 197) | func findServicesSelecting(ctx context.Context, namespace string, lbs la...
function findContainerMatchingPort (line 249) | func findContainerMatchingPort(port *core.ServicePort, cns []core.Contai...
function IsPodRunning (line 299) | func IsPodRunning(pod *core.Pod) bool {
function AgentContainer (line 310) | func AgentContainer(pod *core.Pod) *core.Container {
function InitContainer (line 315) | func InitContainer(pod *core.Pod) *core.Container {
function containerByName (line 319) | func containerByName(name string, cns []core.Container) *core.Container {
FILE: pkg/agentmap/generator.go
type GeneratorConfig (line 28) | type GeneratorConfig struct
method Generate (line 87) | func (cfg *GeneratorConfig) Generate(
method appendAgentContainerConfigs (line 196) | func (cfg *GeneratorConfig) appendAgentContainerConfigs(
method newContainerConfig (line 249) | func (cfg *GeneratorConfig) newContainerConfig(cn *core.Container, ind...
method appendServiceLessAgentContainerConfigs (line 302) | func (cfg *GeneratorConfig) appendServiceLessAgentContainerConfigs(
function portsFromContainerPortsAnnotation (line 48) | func portsFromContainerPortsAnnotation(ctx context.Context, wl k8sapi.Wo...
function portsFromAnnotationValue (line 74) | func portsFromAnnotationValue(wl k8sapi.Workload, annotation, value stri...
function findContainerPort (line 285) | func findContainerPort(cns []core.Container, p types.PortIdentifier) (*c...
function containerReplacePolicy (line 358) | func containerReplacePolicy(existingConfig *agentconfig.Sidecar, cn *cor...
function filterServicePorts (line 374) | func filterServicePorts(svc *core.Service, portAnnotations []types.PortI...
FILE: pkg/annotation/annotation.go
constant DomainPrefix (line 10) | DomainPrefix = "telepresence.io/"
constant Config (line 12) | Config = DomainPrefix + "agent-config"
constant InjectContainerPorts (line 13) | InjectContainerPorts = DomainPrefix + "inject-container-ports"
constant InjectIgnoreVolumeMounts (line 14) | InjectIgnoreVolumeMounts = DomainPrefix + "inject-ignore-volume-mounts"
constant InjectServiceName (line 15) | InjectServiceName = DomainPrefix + "inject-service-name"
constant InjectServicePorts (line 16) | InjectServicePorts = DomainPrefix + "inject-service-ports"
constant InjectTrafficAgent (line 17) | InjectTrafficAgent = DomainPrefix + "inject-traffic-agent"
constant ManuallyInjected (line 18) | ManuallyInjected = DomainPrefix + "manually-injected"
constant ReplacedContainerPrefix (line 19) | ReplacedContainerPrefix = DomainPrefix + "replaced-container."
constant RestartedAt (line 20) | RestartedAt = DomainPrefix + "restartedAt"
constant VolumeMountPolicies (line 21) | VolumeMountPolicies = DomainPrefix + "mount-policies"
constant DownstreamTLSSecret (line 22) | DownstreamTLSSecret = DomainPrefix + "downstream-tls-secret"
constant DownstreamCertificatePath (line 23) | DownstreamCertificatePath = DomainPrefix + "downstream-tls-path"
constant UpstreamTLSSecret (line 24) | UpstreamTLSSecret = DomainPrefix + "upstream-tls-secret"
constant UpstreamCertificatePath (line 25) | UpstreamCertificatePath = DomainPrefix + "upstream-tls-path"
constant UpstreamInsecureSkipVerify (line 26) | UpstreamInsecureSkipVerify = DomainPrefix + "upstream-insecure-skip-verify"
constant UpstreamProbeTimeout (line 27) | UpstreamProbeTimeout = DomainPrefix + "upstream-probe-timeout"
constant LegacyDomainPrefix (line 29) | LegacyDomainPrefix = "telepresence.getambassador.io/"
constant LegacyInjectContainerPorts (line 30) | LegacyInjectContainerPorts = LegacyDomainPrefix + "inject-container-...
constant LegacyInjectIgnoreVolumeMounts (line 31) | LegacyInjectIgnoreVolumeMounts = LegacyDomainPrefix + "inject-ignore-vol...
constant LegacyInjectServiceName (line 32) | LegacyInjectServiceName = LegacyDomainPrefix + "inject-service-name"
constant LegacyInjectServicePort (line 33) | LegacyInjectServicePort = LegacyDomainPrefix + "inject-service-port"
constant LegacyInjectTrafficAgent (line 34) | LegacyInjectTrafficAgent = LegacyDomainPrefix + "inject-traffic-ag...
constant LegacyManuallyInjected (line 35) | LegacyManuallyInjected = LegacyDomainPrefix + "manually-injected"
function GetAnnotation (line 38) | func GetAnnotation(ctx context.Context, annotations map[string]string, k...
function ReplaceAnnotationKey (line 49) | func ReplaceAnnotationKey(cn string) string {
FILE: pkg/authenticator/authenticator.go
function NewService (line 12) | func NewService(
type ExecCredentialsResolver (line 20) | type ExecCredentialsResolver interface
type Service (line 27) | type Service struct
method GetExecCredentials (line 31) | func (a Service) GetExecCredentials(ctx context.Context, contextName s...
method getExecConfigFromContext (line 45) | func (a Service) getExecConfigFromContext(contextName string) (*client...
FILE: pkg/authenticator/config.go
function LoadKubeConfig (line 5) | func LoadKubeConfig(kubeConfig string) clientcmd.ClientConfig {
FILE: pkg/authenticator/exec.go
function ResolveExecConfig (line 14) | func ResolveExecConfig(ctx context.Context, execConfig *clientcmdapi.Exe...
FILE: pkg/authenticator/exec_test.go
function TestExecCredentialsNoLocalEnv (line 11) | func TestExecCredentialsNoLocalEnv(t *testing.T) {
function TestExecCredentialsYesLocalEnv (line 23) | func TestExecCredentialsYesLocalEnv(t *testing.T) {
FILE: pkg/authenticator/grpc/authenticator.go
function RegisterAuthenticatorServer (line 15) | func RegisterAuthenticatorServer(srv *grpc.Server, clientConfigProvider ...
type Authenticator (line 21) | type Authenticator interface
type AuthenticatorServer (line 25) | type AuthenticatorServer struct
method GetContextExecCredentials (line 32) | func (h *AuthenticatorServer) GetContextExecCredentials(ctx context.Co...
FILE: pkg/authenticator/patcher/patcher.go
constant kubeConfigStubSubCommands (line 15) | kubeConfigStubSubCommands = "kubeauth"
type AddressProvider (line 26) | type AddressProvider
type Patcher (line 27) | type Patcher
function CreateExternalKubeConfig (line 34) | func CreateExternalKubeConfig(
function replaceAuthExecWithStub (line 95) | func replaceAuthExecWithStub(rawConfig *clientcmdapi.Config, executable,...
function needsStubbedExec (line 120) | func needsStubbedExec(rawConfig *clientcmdapi.Config) bool {
FILE: pkg/cache/client.go
type Entry (line 7) | type Entry interface
type ClientMap (line 12) | type ClientMap struct
method Watch (line 16) | func (c *ClientMap[K, V]) Watch(doneCh <-chan struct{}, deltaCh <-chan D...
function NewClientMap (line 41) | func NewClientMap[K comparable, V any](options ...func(config *xsync.Map...
type Server (line 45) | type Server interface
FILE: pkg/cache/map.go
type Delta (line 13) | type Delta struct
method Merge (line 18) | func (delta *Delta[K, V]) Merge(other Delta[K, V]) {
type subscription (line 41) | type subscription struct
type Map (line 49) | type Map struct
function NewMap (line 60) | func NewMap[K comparable, V any](equal func(V, V) bool, notifyDelay time...
method Subscribe (line 83) | func (m *Map[K, V]) Subscribe(done <-chan struct{}, includeFilter func(K...
method Compute (line 116) | func (m *Map[K, V]) Compute(key K, f func(V, bool) (V, xsync.ComputeOp))...
method CompareAndSwap (line 145) | func (m *Map[K, V]) CompareAndSwap(key K, oldValue, newValue V) (swapped...
method Delete (line 157) | func (m *Map[K, V]) Delete(key K) {
method LoadAll (line 167) | func (m *Map[K, V]) LoadAll() map[K]V {
method LoadMatching (line 177) | func (m *Map[K, V]) LoadMatching(filter func(K, V) bool) map[K]V {
method LoadAndDelete (line 190) | func (m *Map[K, V]) LoadAndDelete(key K) (previous V, loaded bool) {
method LoadAndStore (line 204) | func (m *Map[K, V]) LoadAndStore(key K, value V) (existing V, loaded boo...
method LoadOrCompute (line 222) | func (m *Map[K, V]) LoadOrCompute(key K, valueFn func() V) (actual V, lo...
method LoadOrStore (line 235) | func (m *Map[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool) {
method Store (line 247) | func (m *Map[K, V]) Store(key K, value V) {
method markSubscribers (line 252) | func (m *Map[K, V]) markSubscribers(key K, value V) {
method notify (line 263) | func (m *Map[K, V]) notify() {
type allDelta (line 278) | type allDelta struct
function filteredMap (line 284) | func filteredMap[K comparable, V any](m map[K]V, include func(K, V) bool...
method filteredDelta (line 297) | func (ad *allDelta[K, V]) filteredDelta(initialized bool, include func(K...
method send (line 310) | func (ad *allDelta[K, V]) send(sb *subscription[K, V]) {
method makeDelta (line 329) | func (m *Map[K, V]) makeDelta() allDelta[K, V] {
FILE: pkg/client/agentpf/clients.go
type client (line 28) | type client struct
method String (line 50) | func (ac *client) String() string {
method Tunnel (line 58) | func (ac *client) Tunnel(ctx context.Context, opts ...grpc.CallOption)...
method ensureConnect (line 82) | func (ac *client) ensureConnect(ctx context.Context) (agent.AgentClien...
method ensureConnectLocked (line 88) | func (ac *client) ensureConnectLocked(ctx context.Context) (agent.Agen...
method idleTime (line 135) | func (ac *client) idleTime() time.Duration {
method dormant (line 139) | func (ac *client) dormant() bool {
method connected (line 149) | func (ac *client) connected() bool {
method intercepted (line 156) | func (ac *client) intercepted() bool {
method cancel (line 163) | func (ac *client) cancel() bool {
method refresh (line 180) | func (ac *client) refresh(ai *manager.AgentPodInfo) {
method startDialWatcherLocked (line 208) | func (ac *client) startDialWatcherLocked() error {
method notify (line 432) | func (ac *client) notify(waiter chan struct{}) {
constant dormantLingerTime (line 48) | dormantLingerTime = 5 * time.Second
type Clients (line 249) | type Clients interface
type clients (line 259) | type clients struct
method GetClient (line 288) | func (s *clients) GetClient(ip netip.Addr) (pvd tunnel.Provider) {
method GetRandomAgent (line 320) | func (s *clients) GetRandomAgent(ctx context.Context) (aa agent.AgentC...
method GetWorkloadClient (line 357) | func (s *clients) GetWorkloadClient(workload string) (pvd tunnel.Provi...
method SetProxyVia (line 368) | func (s *clients) SetProxyVia(workload string) {
method isProxyVIA (line 372) | func (s *clients) isProxyVIA(info *manager.AgentPodInfo) bool {
method hasWaiterFor (line 377) | func (s *clients) hasWaiterFor(info *manager.AgentPodInfo) bool {
method WatchAgentPods (line 389) | func (s *clients) WatchAgentPods(rmc manager.ManagerClient) error {
method notifyWaiters (line 440) | func (s *clients) notifyWaiters() {
method waitWithTimeout (line 454) | func (s *clients) waitWithTimeout(timeout time.Duration, waitOn <-chan...
method WaitForIP (line 466) | func (s *clients) WaitForIP(ctx context.Context, timeout time.Duration...
method WaitForWorkload (line 507) | func (s *clients) WaitForWorkload(timeout time.Duration, name string) ...
method updateClients (line 534) | func (s *clients) updateClients(ais []*manager.AgentPodInfo) error {
function NewClients (line 269) | func NewClients(cl *k8s.Cluster, session *manager.SessionInfo) Clients {
FILE: pkg/client/bwcompat/clusterinfo.go
function FixLegacyClusterInfo (line 8) | func FixLegacyClusterInfo(mgrInfo *manager.ClusterInfo) {
FILE: pkg/client/cache/cache.go
type Permissions (line 18) | type Permissions
constant Public (line 21) | Public Permissions = 0o644
constant Private (line 22) | Private Permissions = 0o600
function SaveToUserCache (line 25) | func SaveToUserCache(ctx context.Context, object any, file string, perm ...
function LoadFromUserCache (line 42) | func LoadFromUserCache(ctx context.Context, dest any, file string) error {
function DeleteFromUserCache (line 55) | func DeleteFromUserCache(ctx context.Context, file string) error {
function TouchUserCache (line 63) | func TouchUserCache(ctx context.Context, file string) error {
function UserCacheModTime (line 68) | func UserCacheModTime(ctx context.Context, file string) (time.Time, erro...
function ExistsInCache (line 76) | func ExistsInCache(ctx context.Context, fileName string) (bool, error) {
FILE: pkg/client/cache/watcher.go
function WatchUserCache (line 19) | func WatchUserCache(ctx context.Context, subDir string, onChange func(co...
FILE: pkg/client/cli/ann/annotations.go
constant UserDaemon (line 6) | UserDaemon = "userD"
constant Session (line 7) | Session = "session"
constant VersionCheck (line 8) | VersionCheck = "versionCheck"
constant UpdateCheckFormat (line 9) | UpdateCheckFormat = "updateCheckFormat"
constant Progress (line 10) | Progress = "progress"
constant Optional (line 16) | Optional = "optional"
constant Required (line 17) | Required = "required"
constant Tel2 (line 18) | Tel2 = "https://%s/download/tel2/%s/%s/stable.txt"
FILE: pkg/client/cli/cmd/completion.go
constant completionLongPlain (line 12) | completionLongPlain = `To load completions:
constant completionLongMarkdown (line 52) | completionLongMarkdown = `To load completions:
function addCompletion (line 98) | func addCompletion(rootCmd *cobra.Command, markdown bool) {
FILE: pkg/client/cli/cmd/compose.go
function composeCmd (line 9) | func composeCmd() *cobra.Command {
FILE: pkg/client/cli/cmd/config.go
function configCmd (line 18) | func configCmd() *cobra.Command {
constant clientOnlyFlag (line 27) | clientOnlyFlag = "client-only"
function configView (line 29) | func configView() *cobra.Command {
function runConfigView (line 45) | func runConfigView(cmd *cobra.Command, _ []string) error {
FILE: pkg/client/cli/cmd/connect.go
function connectCmd (line 14) | func connectCmd() *cobra.Command {
FILE: pkg/client/cli/cmd/curl.go
function curlCmd (line 12) | func curlCmd() *cobra.Command {
function runCurl (line 31) | func runCurl(cmd *cobra.Command, args []string) error {
FILE: pkg/client/cli/cmd/docker_run.go
function dockerRunCmd (line 24) | func dockerRunCmd() *cobra.Command {
function findAndParseFlag (line 42) | func findAndParseFlag(flags *pflag.FlagSet, flagName string, args []stri...
function parseFlags (line 57) | func parseFlags(cmd *cobra.Command, args []string) ([]string, error) {
function runDockerRunCLI (line 71) | func runDockerRunCLI(cmd *cobra.Command, args []string) error {
function runDockerRun (line 75) | func runDockerRun(cmd *cobra.Command, args []string) error {
FILE: pkg/client/cli/cmd/gather_logs.go
type gatherLogsCommand (line 33) | type gatherLogsCommand struct
method gatherLogs (line 97) | func (gl *gatherLogsCommand) gatherLogs(cmd *cobra.Command, _ []string...
method gatherClusterLogs (line 253) | func (gl *gatherLogsCommand) gatherClusterLogs(ctx context.Context, ex...
function gatherLogs (line 42) | func gatherLogs() *cobra.Command {
type anonymizer (line 91) | type anonymizer struct
method anonymizeFileNames (line 380) | func (a *anonymizer) anonymizeFileNames(lr *connector.LogsResponse, ex...
method getPodName (line 397) | func (a *anonymizer) getPodName(podName string) string {
method anonymizeLog (line 442) | func (a *anonymizer) anonymizeLog(logFile string) error {
function retrieveLocalLogs (line 193) | func retrieveLocalLogs(ctx context.Context, daemonLogs []string, exportD...
function getLogFiles (line 230) | func getLogFiles(exportDir string) ([]string, error) {
function anonymizeLogs (line 244) | func anonymizeLogs(ctx context.Context, files []string, az *anonymizer) {
function isEmpty (line 282) | func isEmpty(file string) (bool, error) {
function copyFiles (line 291) | func copyFiles(dstFile, srcFile string) error {
function zipFiles (line 313) | func zipFiles(files []string, zipFileName string) error {
function getSignificantPodNames (line 498) | func getSignificantPodNames(podName string) []string {
FILE: pkg/client/cli/cmd/gather_logs_test.go
function Test_gatherLogsZipFiles (line 23) | func Test_gatherLogsZipFiles(t *testing.T) {
function Test_gatherLogsCopyFiles (line 108) | func Test_gatherLogsCopyFiles(t *testing.T) {
function Test_gatherLogsNoK8s (line 167) | func Test_gatherLogsNoK8s(t *testing.T) {
function Test_gatherLogsGetPodName (line 310) | func Test_gatherLogsGetPodName(t *testing.T) {
function Test_gatherLogsAnonymizeLogs (line 346) | func Test_gatherLogsAnonymizeLogs(t *testing.T) {
function Test_gatherLogsSignificantPodNames (line 386) | func Test_gatherLogsSignificantPodNames(t *testing.T) {
function ReadZip (line 440) | func ReadZip(zippedFile *zip.File) ([]byte, error) {
function checkZipEqual (line 455) | func checkZipEqual(zippedFile *zip.File, srcLogDir string) (bool, error) {
FILE: pkg/client/cli/cmd/genyaml.go
type genYAMLCommand (line 32) | type genYAMLCommand struct
method getOutputWriter (line 88) | func (i *genYAMLCommand) getOutputWriter() (io.WriteCloser, error) {
method loadConfigMapEntry (line 99) | func (i *genYAMLCommand) loadConfigMapEntry() (*agentconfig.Sidecar, e...
method loadWorkload (line 118) | func (i *genYAMLCommand) loadWorkload(ctx context.Context) (k8sapi.Wor...
method writeObjToOutput (line 155) | func (i *genYAMLCommand) writeObjToOutput(obj any) error {
method WithJoinedClientSetInterface (line 175) | func (i *genYAMLCommand) WithJoinedClientSetInterface(ctx context.Cont...
function genYAML (line 40) | func genYAML() *cobra.Command {
function getInput (line 70) | func getInput(inputFile string) ([]byte, error) {
type genConfigMap (line 224) | type genConfigMap struct
method generateConfigMap (line 268) | func (g *genConfigMap) generateConfigMap(ctx context.Context, wl k8sap...
method run (line 277) | func (g *genConfigMap) run(cmd *cobra.Command, kubeFlags map[string]st...
function allKubeFlags (line 229) | func allKubeFlags() *pflag.FlagSet {
function genConfigMapSubCommand (line 236) | func genConfigMapSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
type genContainerInfo (line 298) | type genContainerInfo struct
method run (line 322) | func (g *genContainerInfo) run(cmd *cobra.Command, kubeFlags map[strin...
function genContainerSubCommand (line 302) | func genContainerSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
type genInitContainerInfo (line 360) | type genInitContainerInfo struct
method run (line 382) | func (g *genInitContainerInfo) run(*cobra.Command, map[string]string) ...
function genInitContainerSubCommand (line 364) | func genInitContainerSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
type genAnnotationsInfo (line 398) | type genAnnotationsInfo struct
method run (line 418) | func (g *genAnnotationsInfo) run() error {
function genVAnnotationsSubCommand (line 402) | func genVAnnotationsSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
type genVolumeInfo (line 435) | type genVolumeInfo struct
method run (line 459) | func (g *genVolumeInfo) run() error {
function genVolumeSubCommand (line 439) | func genVolumeSubCommand(yamlInfo *genYAMLCommand) *cobra.Command {
FILE: pkg/client/cli/cmd/helm.go
function helmCmd (line 15) | func helmCmd() *cobra.Command {
type HelmCommand (line 24) | type HelmCommand struct
method addValueSettingFlags (line 94) | func (ha *HelmCommand) addValueSettingFlags(flags *pflag.FlagSet) {
method Type (line 164) | func (ha *HelmCommand) Type() helm.RequestType {
method run (line 168) | func (ha *HelmCommand) run(cmd *cobra.Command, _ []string) (err error) {
function helmInstall (line 35) | func helmInstall() *cobra.Command {
function helmUpgrade (line 69) | func helmUpgrade() *cobra.Command {
function helmUninstall (line 110) | func helmUninstall() *cobra.Command {
function helmLint (line 128) | func helmLint() *cobra.Command {
function helmVersion (line 151) | func helmVersion() *cobra.Command {
FILE: pkg/client/cli/cmd/ingest.go
function ingestCmd (line 11) | func ingestCmd() *cobra.Command {
FILE: pkg/client/cli/cmd/intercept.go
function interceptCmd (line 10) | func interceptCmd() *cobra.Command {
FILE: pkg/client/cli/cmd/kubeauth.go
function kubeauthCmd (line 15) | func kubeauthCmd() *cobra.Command {
function authenticateContext (line 27) | func authenticateContext(cmd *cobra.Command, args []string) (err error) {
FILE: pkg/client/cli/cmd/leave.go
function leaveCmd (line 24) | func leaveCmd() *cobra.Command {
function disengage (line 83) | func disengage(ctx context.Context, name, container string) error {
FILE: pkg/client/cli/cmd/list.go
constant includeIntercepts (line 26) | includeIntercepts = iota
constant includeIngests (line 27) | includeIngests
constant includeReplacements (line 28) | includeReplacements
constant includeWiretaps (line 29) | includeWiretaps
type listCommand (line 32) | type listCommand struct
method list (line 100) | func (s *listCommand) list(cmd *cobra.Command, _ []string) error {
method printList (line 181) | func (s *listCommand) printList(ctx context.Context, workloads []*conn...
function list (line 40) | func list() *cobra.Command {
type watchWorkloadStreamResponse (line 94) | type watchWorkloadStreamResponse struct
FILE: pkg/client/cli/cmd/list_contexts.go
type listContextsCommand (line 12) | type listContextsCommand struct
method run (line 35) | func (lcc *listContextsCommand) run(cmd *cobra.Command, _ []string) er...
function listContexts (line 16) | func listContexts() *cobra.Command {
type kubeCtx (line 30) | type kubeCtx struct
FILE: pkg/client/cli/cmd/list_namespaces.go
type listNamespacesCommand (line 12) | type listNamespacesCommand struct
method run (line 30) | func (lnc *listNamespacesCommand) run(cmd *cobra.Command, _ []string) ...
function listNamespaces (line 16) | func listNamespaces() *cobra.Command {
FILE: pkg/client/cli/cmd/loglevel.go
constant defaultDuration (line 22) | defaultDuration = 30 * time.Minute
type logLevelCommand (line 24) | type logLevelCommand struct
method setTempLogLevel (line 60) | func (lls *logLevelCommand) setTempLogLevel(cmd *cobra.Command, args [...
function logLevelArg (line 30) | func logLevelArg(cmd *cobra.Command, args []string) error {
function loglevel (line 41) | func loglevel() *cobra.Command {
FILE: pkg/client/cli/cmd/man-pages.go
function manPages (line 12) | func manPages() *cobra.Command {
function genMarkdown (line 29) | func genMarkdown(cmd *cobra.Command, dir string) error {
function entityEscape (line 38) | func entityEscape(s string, w *bytes.Buffer) {
function genCommandMarkdown (line 56) | func genCommandMarkdown(cmd *cobra.Command, dir string, buf *bytes.Buffe...
FILE: pkg/client/cli/cmd/mcp.go
function mcp (line 8) | func mcp() *cobra.Command {
FILE: pkg/client/cli/cmd/mcp_test.go
function TestMCP (line 9) | func TestMCP(t *testing.T) {
FILE: pkg/client/cli/cmd/quit.go
function quit (line 10) | func quit() *cobra.Command {
FILE: pkg/client/cli/cmd/replace.go
function replaceCmd (line 10) | func replaceCmd() *cobra.Command {
FILE: pkg/client/cli/cmd/revoke.go
function revokeCmd (line 18) | func revokeCmd() *cobra.Command {
function revokeIntercept (line 40) | func revokeIntercept(ctx context.Context, interceptID string) error {
FILE: pkg/client/cli/cmd/serve.go
type serveCommand (line 27) | type serveCommand struct
method addFlags (line 48) | func (sc *serveCommand) addFlags(cmd *cobra.Command) {
method run (line 53) | func (sc *serveCommand) run(cmd *cobra.Command, args []string) error {
method serveFromContainer (line 82) | func (sc *serveCommand) serveFromContainer(ctx context.Context, addr n...
method serveFromHost (line 125) | func (sc *serveCommand) serveFromHost(ctx context.Context, addr netip....
method openBrowser (line 143) | func (sc *serveCommand) openBrowser(ctx context.Context, on *url.URL, ...
function serveCmd (line 31) | func serveCmd() *cobra.Command {
constant browserProgressID (line 78) | browserProgressID = "Web-browser"
constant socatProgressID (line 79) | socatProgressID = "Port-forward"
FILE: pkg/client/cli/cmd/status.go
type StatusInfo (line 27) | type StatusInfo struct
method WriterTos (line 203) | func (s *StatusInfo) WriterTos() []io.WriterTo {
method MarshalJSON (line 218) | func (s *StatusInfo) MarshalJSON() ([]byte, error) {
method toMap (line 222) | func (s *StatusInfo) toMap() map[string]any {
type MultiConnectStatusInfo (line 33) | type MultiConnectStatusInfo struct
method MarshalJSON (line 406) | func (s *MultiConnectStatusInfo) MarshalJSON() ([]byte, error) {
method toMap (line 414) | func (s *MultiConnectStatusInfo) toMap() (map[string]any, error) {
method WriterTos (line 429) | func (s *MultiConnectStatusInfo) WriterTos() []io.WriterTo {
type SingleConnectStatusInfo (line 38) | type SingleConnectStatusInfo struct
method WriterTos (line 368) | func (s *SingleConnectStatusInfo) WriterTos() []io.WriterTo {
method MarshalJSON (line 377) | func (s *SingleConnectStatusInfo) MarshalJSON() ([]byte, error) {
method toMap (line 385) | func (s *SingleConnectStatusInfo) toMap() (map[string]any, error) {
type RootDaemonStatus (line 43) | type RootDaemonStatus struct
method WriteTo (line 464) | func (ds *RootDaemonStatus) WriteTo(out io.Writer) (int64, error) {
type UserDaemonStatus (line 54) | type UserDaemonStatus struct
method WriteTo (line 549) | func (cs *UserDaemonStatus) WriteTo(out io.Writer) (int64, error) {
method print (line 564) | func (cs *UserDaemonStatus) print(kvf *ioutil.KeyValueFormatter) {
type ContainerizedDaemonStatus (line 79) | type ContainerizedDaemonStatus struct
method WriteTo (line 440) | func (cs *ContainerizedDaemonStatus) WriteTo(out io.Writer) (int64, er...
type TrafficManagerStatus (line 86) | type TrafficManagerStatus struct
method MarshalJSON (line 614) | func (ts *TrafficManagerStatus) MarshalJSON() ([]byte, error) {
method toMap (line 622) | func (ts *TrafficManagerStatus) toMap() (map[string]any, error) {
method WriteTo (line 639) | func (ts *TrafficManagerStatus) WriteTo(out io.Writer) (int64, error) {
type ConnectStatusIngest (line 93) | type ConnectStatusIngest struct
type ConnectStatusIntercept (line 99) | type ConnectStatusIntercept struct
constant multiDaemonFlag (line 105) | multiDaemonFlag = "multi-daemon"
constant jsonFlag (line 106) | jsonFlag = "json"
function statusCmd (line 109) | func statusCmd() *cobra.Command {
function run (line 126) | func run(cmd *cobra.Command, _ []string) error {
function setUserDaemonStatus (line 240) | func setUserDaemonStatus(ctx context.Context, userD daemon.UserClient, d...
function getStatusInfo (line 305) | func getStatusInfo(ctx context.Context, di *daemon.Info) (*StatusInfo, e...
function printPortMappings (line 492) | func printPortMappings(kvf *ioutil.KeyValueFormatter, pms []string) {
function printDNS (line 504) | func printDNS(kvf *ioutil.KeyValueFormatter, d *client.DNSSnake) {
function printRouting (line 531) | func printRouting(kvf *ioutil.KeyValueFormatter, r *client.RoutingSnake) {
FILE: pkg/client/cli/cmd/telepresence.go
function Telepresence (line 32) | func Telepresence(ctx context.Context, args []string) *cobra.Command {
function TelepresenceDaemon (line 66) | func TelepresenceDaemon(ctx context.Context, args []string) *cobra.Comma...
function setContext (line 83) | func setContext(cmd *cobra.Command, ctx context.Context) {
function AddSubCommands (line 93) | func AddSubCommands(cmd *cobra.Command, markdown bool) {
function RunSubcommands (line 116) | func RunSubcommands(cmd *cobra.Command, args []string) error {
function OnlySubcommands (line 135) | func OnlySubcommands(cmd *cobra.Command, args []string) error {
function WithSubCommands (line 152) | func WithSubCommands(ctx context.Context) context.Context {
function WithDaemonSubCommands (line 183) | func WithDaemonSubCommands(ctx context.Context) context.Context {
type subCommandsKey (line 187) | type subCommandsKey struct
function MergeSubCommands (line 189) | func MergeSubCommands(ctx context.Context, commands ...*cobra.Command) c...
function getSubCommands (line 198) | func getSubCommands(cmd *cobra.Command) []*cobra.Command {
function mergeCommands (line 207) | func mergeCommands(a, b []*cobra.Command) []*cobra.Command {
function argsCheck (line 220) | func argsCheck(f cobra.PositionalArgs) cobra.PositionalArgs {
function autocompleteContext (line 229) | func autocompleteContext(cmd *cobra.Command, _ []string, toComplete stri...
type versionFile (line 247) | type versionFile struct
function ensureCacheVersion (line 251) | func ensureCacheVersion(cmd *cobra.Command, _ []string) error {
FILE: pkg/client/cli/cmd/uninstall.go
constant allAgentsFlag (line 20) | allAgentsFlag = "all-agents"
type uninstallCommand (line 22) | type uninstallCommand struct
method args (line 48) | func (u *uninstallCommand) args(_ *cobra.Command, args []string) error {
method run (line 60) | func (u *uninstallCommand) run(cmd *cobra.Command, args []string) error {
function uninstall (line 27) | func uninstall() *cobra.Command {
function validWorkloads (line 82) | func validWorkloads(cmd *cobra.Command, args []string, toComplete string...
FILE: pkg/client/cli/cmd/usage.go
constant helpPlain (line 21) | helpPlain = `Telepresence can connect to a cluster and route all outboun...
constant helpMarkdown (line 41) | helpMarkdown = `Telepresence can connect to a cluster and route all outb...
constant usagePlain (line 64) | usagePlain = `Usage:
constant usageMarkdown (line 122) | usageMarkdown = `### Usage:
function flagEqual (line 195) | func flagEqual(a, b *pflag.Flag) bool {
function localFlags (line 205) | func localFlags(cmd *cobra.Command, exclude ...*pflag.FlagSet) []*pflag....
function kubeFlags (line 222) | func kubeFlags() *pflag.FlagSet {
function hasKubeFlags (line 231) | func hasKubeFlags(cmd *cobra.Command) bool {
function commandLink (line 242) | func commandLink(cmd *cobra.Command) string {
function addUsageTemplate (line 246) | func addUsageTemplate(cmd *cobra.Command, markdown bool) {
FILE: pkg/client/cli/cmd/version.go
function versionCmd (line 26) | func versionCmd() *cobra.Command {
function addDaemonVersions (line 41) | func addDaemonVersions(ctx context.Context, kvf *ioutil.KeyValueFormatte...
function printVersion (line 87) | func printVersion(cmd *cobra.Command, _ []string) error {
function daemonVersion (line 124) | func daemonVersion(ctx context.Context) (*common.VersionInfo, error) {
function managerVersion (line 132) | func managerVersion(ctx context.Context) (*common.VersionInfo, error) {
function trafficAgentFQN (line 147) | func trafficAgentFQN(ctx context.Context) (*manager.AgentImageFQN, error) {
FILE: pkg/client/cli/cmd/wiretap.go
function wiretapCmd (line 10) | func wiretapCmd() *cobra.Command {
FILE: pkg/client/cli/connect/connector.go
function maybeComposeDown (line 55) | func maybeComposeDown(ctx context.Context, info *daemon.Info) {
function findHostConnectorInfo (line 73) | func findHostConnectorInfo(ctx context.Context) (*daemon.Info, error) {
function quitHostConnector (line 87) | func quitHostConnector(ctx context.Context) {
function quitDockerDaemons (line 125) | func quitDockerDaemons(ctx context.Context) {
function EnsureUserDaemon (line 151) | func EnsureUserDaemon(ctx context.Context, required bool) (rc context.Co...
function EnsureSession (line 179) | func EnsureSession(ctx context.Context, useLine string, required bool) (...
function ResolveLocalReroute (line 222) | func ResolveLocalReroute(ctx context.Context, ds *daemon.Session, pm str...
function ResolveRemoteReroute (line 246) | func ResolveRemoteReroute(ctx context.Context, ds *daemon.Session, pm st...
function resolveHostPort (line 270) | func resolveHostPort(ctx context.Context, ds *daemon.Session, proto type...
function ExistingDaemon (line 296) | func ExistingDaemon(ctx context.Context, info *daemon.Info) (context.Con...
function Quit (line 312) | func Quit(ctx context.Context) {
function Disconnect (line 321) | func Disconnect(ctx context.Context) {
function RunConnect (line 348) | func RunConnect(cmd *cobra.Command, args []string) error {
function DiscoverDaemon (line 364) | func DiscoverDaemon(ctx context.Context, match *regexp.Regexp, daemonID ...
function launchDockerDaemon (line 380) | func launchDockerDaemon(ctx context.Context, daemonID *daemon.Identifier...
function launchHostDaemon (line 419) | func launchHostDaemon(ctx context.Context, daemonID *daemon.Identifier, ...
function findOrLaunchConnectorDaemon (line 467) | func findOrLaunchConnectorDaemon(ctx context.Context, daemonID *daemon.I...
function getConnectorVersion (line 515) | func getConnectorVersion(ctx context.Context, cc connector.ConnectorClie...
function newUserDaemon (line 530) | func newUserDaemon(ctx context.Context, conn *grpc.ClientConn, info *dae...
function ensureDaemonVersion (line 544) | func ensureDaemonVersion(ctx context.Context) error {
function warnMngrVersion (line 550) | func warnMngrVersion(ctx context.Context, ci *connector.ConnectInfo) err...
function connectResult (line 588) | func connectResult(ctx context.Context, ci *connector.ConnectInfo, withP...
function connectSession (line 599) | func connectSession(ctx context.Context, useLine string, request *daemon...
function createTelerouteNetwork (line 659) | func createTelerouteNetwork(ctx context.Context, info *daemon.Info) error {
function maybeDeleteNetwork (line 691) | func maybeDeleteNetwork(ctx context.Context, info *daemon.Info) {
FILE: pkg/client/cli/connect/daemon.go
function launchDaemon (line 23) | func launchDaemon(ctx context.Context, cr *daemon.Request) (info *daemon...
function EnsureRootDaemonRunning (line 64) | func EnsureRootDaemonRunning(ctx context.Context) error {
function mkdir (line 99) | func mkdir(dirType, path string) error {
function ensureAppUserCacheDirs (line 106) | func ensureAppUserCacheDirs(ctx context.Context) error {
function ensureAppUserConfigDir (line 117) | func ensureAppUserConfigDir(ctx context.Context) error {
FILE: pkg/client/cli/connect/init_command.go
function InitProgressWriter (line 19) | func InitProgressWriter(cmd *cobra.Command) {
function InitCommand (line 37) | func InitCommand(cmd *cobra.Command) (err error) {
function GetOptionalSession (line 93) | func GetOptionalSession(cmd *cobra.Command) (context.Context, *daemon.Se...
FILE: pkg/client/cli/connect/version_check.go
function versionCheck (line 19) | func versionCheck(ctx context.Context, daemonBinary string) error {
FILE: pkg/client/cli/daemon/dial.go
constant InfoFileName (line 10) | InfoFileName = "daemon.json"
function DialRootDaemon (line 16) | func DialRootDaemon(ctx context.Context, waitForConnect bool) (conn *grp...
function DialUserDaemon (line 23) | func DialUserDaemon(ctx context.Context, waitForConnect bool) (conn *grp...
FILE: pkg/client/cli/daemon/identifier.go
type Identifier (line 10) | type Identifier struct
method String (line 40) | func (id *Identifier) String() string {
method InfoFileName (line 44) | func (id *Identifier) InfoFileName() string {
method ContainerName (line 51) | func (id *Identifier) ContainerName() string {
function NewIdentifier (line 17) | func NewIdentifier(name, contextName, namespace string, containerized bo...
function IdentifierFromFlags (line 57) | func IdentifierFromFlags(ctx context.Context, name string, flagMap map[s...
FILE: pkg/client/cli/daemon/identifier_test.go
function TestDaemonInfoFileName (line 10) | func TestDaemonInfoFileName(t *testing.T) {
function TestSafeContainerName (line 31) | func TestSafeContainerName(t *testing.T) {
FILE: pkg/client/cli/daemon/info.go
type RootInfo (line 29) | type RootInfo struct
type Info (line 33) | type Info struct
method DaemonID (line 50) | func (info *Info) DaemonID() *Identifier {
method InDocker (line 54) | func (info *Info) InDocker() bool {
method SetConnectionInfo (line 58) | func (info *Info) SetConnectionInfo(name string, clusterContext string...
type TCPInfo (line 46) | type TCPInfo interface
constant daemonsDirName (line 65) | daemonsDirName = "userd"
constant rootDaemonsDirName (line 66) | rootDaemonsDirName = "rootd"
constant keepAliveInterval (line 67) | keepAliveInterval = 2 * time.Second
constant maxNoSignOfLife (line 68) | maxNoSignOfLife = 3 * keepAliveInterval
type InfoLoader (line 71) | type InfoLoader struct
function NewUserInfoLoader (line 76) | func NewUserInfoLoader(ctx context.Context) *InfoLoader[Info] {
function NewRootInfoLoader (line 80) | func NewRootInfoLoader(ctx context.Context, managed bool) *InfoLoader[Ro...
function LoadRootServiceInfo (line 88) | func LoadRootServiceInfo(ctx context.Context) (*RootInfo, error) {
method LoadInfo (line 92) | func (il *InfoLoader[T]) LoadInfo(file string) (*T, error) {
method SaveInfo (line 117) | func (il *InfoLoader[T]) SaveInfo(object *T, file string) error {
method DeleteInfo (line 121) | func (il *InfoLoader[T]) DeleteInfo(file string) error {
method InfoExists (line 125) | func (il *InfoLoader[T]) InfoExists(file string) (bool, error) {
method WatchInfos (line 139) | func (il *InfoLoader[T]) WatchInfos(onChange func(context.Context) error...
method WaitUntilAllVanishes (line 143) | func (il *InfoLoader[T]) WaitUntilAllVanishes(ttw time.Duration) error {
method DeleteAllInfos (line 155) | func (il *InfoLoader[T]) DeleteAllInfos() error {
method LoadInfos (line 166) | func (il *InfoLoader[T]) LoadInfos() ([]*T, error) {
method DialDaemon (line 181) | func (il *InfoLoader[T]) DialDaemon(ctx context.Context, waitForConnect ...
function dialDaemon (line 221) | func dialDaemon(ctx context.Context, name string, port uint16) (conn *gr...
method infoFiles (line 231) | func (il *InfoLoader[T]) infoFiles() ([]fs.DirEntry, error) {
method deleteIfStale (line 257) | func (il *InfoLoader[T]) deleteIfStale(name string, fi fs.FileInfo) error {
function infoName (line 270) | func infoName[T TCPInfo](info *T) string {
type InfoMatchError (line 277) | type InfoMatchError
method Error (line 279) | func (i InfoMatchError) Error() string {
type MultipleDaemonsError (line 283) | type MultipleDaemonsError
method Error (line 285) | func (m MultipleDaemonsError) Error() string {
method LoadMatchingInfo (line 307) | func (il *InfoLoader[T]) LoadMatchingInfo(match *regexp.Regexp) (*T, err...
method CancelWhenRmFromCache (line 336) | func (il *InfoLoader[T]) CancelWhenRmFromCache(cancel context.CancelFunc...
method KeepInfoAlive (line 357) | func (il *InfoLoader[T]) KeepInfoAlive(file string) error {
FILE: pkg/client/cli/daemon/request.go
type Request (line 34) | type Request struct
method Commit (line 196) | func (cr *Request) Commit(ctx context.Context) (context.Context, error) {
method addKubeconfigEnv (line 314) | func (cr *Request) addKubeconfigEnv() {
method setGlobalConnectFlags (line 334) | func (cr *Request) setGlobalConnectFlags(cmd *cobra.Command) error {
method Clone (line 352) | func (cr *Request) Clone() *Request {
type CobraRequest (line 72) | type CobraRequest struct
method CommitFlags (line 157) | func (cr *CobraRequest) CommitFlags(cmd *cobra.Command) error {
method GetAllNamespaces (line 425) | func (cr *CobraRequest) GetAllNamespaces(cmd *cobra.Command) ([]string...
method autocompleteNamespace (line 449) | func (cr *CobraRequest) autocompleteNamespace(cmd *cobra.Command, _ []...
method autocompleteNamespaces (line 458) | func (cr *CobraRequest) autocompleteNamespaces(cmd *cobra.Command, _ [...
method autocompleteNamespaceFunc (line 485) | func (cr *CobraRequest) autocompleteNamespaceFunc(cmd *cobra.Command, ...
method autocompleteCluster (line 498) | func (cr *CobraRequest) autocompleteCluster(cmd *cobra.Command, _ []st...
method GetConfig (line 516) | func (cr *CobraRequest) GetConfig(cmd *cobra.Command) (*api.Config, er...
function InitRequest (line 81) | func InitRequest(cmd *cobra.Command) *CobraRequest {
type requestKey (line 155) | type requestKey struct
type prefixViaWL (line 225) | type prefixViaWL struct
function parseProxyVias (line 231) | func parseProxyVias(proxyVia []string) ([]*daemon.SubnetViaWorkload, err...
function parseSubnetViaWorkload (line 291) | func parseSubnetViaWorkload(dps string) (prefixViaWL, error) {
function GetRequest (line 367) | func GetRequest(ctx context.Context) *Request {
function MustGetRequest (line 374) | func MustGetRequest(ctx context.Context) *Request {
function WithDefaultRequest (line 382) | func WithDefaultRequest(cmd *cobra.Command) (context.Context, error) {
function WithRequest (line 402) | func WithRequest(ctx context.Context, cr *Request) context.Context {
function NewDefaultRequest (line 406) | func NewDefaultRequest() *Request {
function GetKubeStartingConfig (line 417) | func GetKubeStartingConfig(cmd *cobra.Command) (*api.Config, error) {
FILE: pkg/client/cli/daemon/request_test.go
function Test_parseSubnetViaWorkload (line 11) | func Test_parseSubnetViaWorkload(t *testing.T) {
function Test_parseProxyVias (line 102) | func Test_parseProxyVias(t *testing.T) {
FILE: pkg/client/cli/daemon/userd.go
type UserClient (line 30) | type UserClient interface
type userClient (line 46) | type userClient struct
method Close (line 109) | func (u *userClient) Close() error {
method Conn (line 113) | func (u *userClient) Conn() *grpc.ClientConn {
method DaemonInfo (line 117) | func (u *userClient) DaemonInfo() *Info {
method Containerized (line 121) | func (u *userClient) Containerized() bool {
method DaemonID (line 125) | func (u *userClient) DaemonID() *Identifier {
method Executable (line 129) | func (u *userClient) Executable() string {
method Lookup (line 133) | func (u *userClient) Lookup(ctx context.Context, name string) (addr ne...
method Name (line 145) | func (u *userClient) Name() string {
method Semver (line 149) | func (u *userClient) Semver() semver.Version {
method DaemonPort (line 153) | func (u *userClient) DaemonPort() int {
method SetConnectionInfo (line 165) | func (u *userClient) SetConnectionInfo(name string, clusterContext str...
method AddHandler (line 169) | func (u *userClient) AddHandler(ctx context.Context, id string, cmd *e...
function NewUserClient (line 57) | func NewUserClient(conn *grpc.ClientConn, info *Info, version semver.Ver...
type Session (line 61) | type Session struct
method GetAgentConfig (line 195) | func (s *Session) GetAgentConfig(ctx context.Context, workload string)...
method GetRootClientConfig (line 203) | func (s *Session) GetRootClientConfig() (client.Config, error) {
type userDaemonKey (line 67) | type userDaemonKey struct
function GetUserClient (line 69) | func GetUserClient(ctx context.Context) UserClient {
function MustGetUserClient (line 76) | func MustGetUserClient(ctx context.Context) UserClient {
function WithUserClient (line 84) | func WithUserClient(ctx context.Context, ud UserClient) context.Context {
type sessionKey (line 88) | type sessionKey struct
function GetSession (line 90) | func GetSession(ctx context.Context) *Session {
function MustGetSession (line 97) | func MustGetSession(ctx context.Context) *Session {
function WithSession (line 105) | func WithSession(ctx context.Context, s *Session) context.Context {
function GetRootClientConfig (line 207) | func GetRootClientConfig(ds *daemon.DaemonStatus) (client.Config, error) {
function GetCommandKubeConfig (line 216) | func GetCommandKubeConfig(cmd *cobra.Command) (*k8s.Kubeconfig, error) {
FILE: pkg/client/cli/docker/auto_complete.go
function AutocompleteRun (line 19) | func AutocompleteRun(cmd *cobra.Command, args []string, toComplete strin...
FILE: pkg/client/cli/docker/compose/config.go
constant extensionKey (line 35) | extensionKey = "x-tele"
type parentConfig (line 38) | type parentConfig struct
method toProjectOptions (line 83) | func (pc *parentConfig) toProjectOptions(po ...cli.ProjectOptionsFn) (...
method addComposeFlags (line 117) | func (pc *parentConfig) addComposeFlags(cmd *cobra.Command) {
type config (line 55) | type config struct
method subCommand (line 134) | func (c *config) subCommand(subCmd *types.CommandInfo) *cobra.Command {
method detached (line 170) | func (c *config) detached() bool {
method appendFlags (line 177) | func (c *config) appendFlags(flags *pflag.FlagSet, opts []string) []st...
method run (line 205) | func (c *config) run(cmd *cobra.Command) (err error) {
method connect (line 307) | func (c *config) connect(ctx context.Context, es map[string]serviceExt...
method loadProject (line 331) | func (c *config) loadProject(ctx context.Context) (*transformer, error) {
method dispatchToCompose (line 365) | func (c *config) dispatchToCompose(ctx context.Context, name string) e...
method getConnectionConfig (line 374) | func (c *config) getConnectionConfig(name string) (*connectionConfig, ...
method getMountPort (line 393) | func (c *config) getMountPort(e mountsExtension) (uint16, error) {
function GenerateSubCommands (line 61) | func GenerateSubCommands(cmd *cobra.Command) []*cobra.Command {
function init (line 110) | func init() {
function loadExistingProject (line 415) | func loadExistingProject(ctx context.Context, pwd, path string) (*compos...
FILE: pkg/client/cli/docker/compose/connection.go
type connectionConfig (line 20) | type connectionConfig struct
method Connect (line 60) | func (cc *connectionConfig) Connect(ctx context.Context, es map[string...
method resolveProxies (line 132) | func (cc *connectionConfig) resolveProxies(ctx context.Context, ds *da...
type connection (line 30) | type connection struct
method disconnect (line 151) | func (c *connection) disconnect() {
function composePortString (line 38) | func composePortString(p *compose.ServicePortConfig) string {
function composePortTarget (line 54) | func composePortTarget(p *compose.ServicePortConfig) types.PortAndProto {
function addProxyReroutes (line 157) | func addProxyReroutes(e servicePortExtension, cr *daemon.Request) error {
function addProxyLocalReroutes (line 166) | func addProxyLocalReroutes(e servicePortExtension, cr *daemon.Request) {
function addProxyRemoteReroutes (line 181) | func addProxyRemoteReroutes(e servicePortExtension, cr *daemon.Request) ...
FILE: pkg/client/cli/docker/compose/engagement.go
type engagement (line 25) | type engagement struct
method assignEnvAndCreateMounts (line 43) | func (a *engagement) assignEnvAndCreateMounts(remoteEnv map[string]str...
method maybeAddConnection (line 66) | func (a *engagement) maybeAddConnection(s *compose.ServiceConfig) bool {
method engageService (line 104) | func (a *engagement) engageService(s *compose.ServiceConfig) {
method engageProxyDependents (line 133) | func (a *engagement) engageProxyDependents(p *compose.Project, n strin...
method engageProject (line 168) | func (a *engagement) engageProject(p *compose.Project) {
function createEngagement (line 33) | func createEngagement(ud daemon.UserClient, e serviceExtension, sftpPort...
constant connectionAnnotationPrefix (line 62) | connectionAnnotationPrefix = "telepresence.io/connection-"
constant mountPortAnnotation (line 63) | mountPortAnnotation = "telepresence.io/mount-port"
function createVolumes (line 186) | func createVolumes(
function createVolume (line 229) | func createVolume(ctx context.Context, pluginName string, hostPort netip...
FILE: pkg/client/cli/docker/compose/extension.go
type serviceExtension (line 22) | type serviceExtension interface
type mountsExtension (line 54) | type mountsExtension interface
type workloadExtension (line 60) | type workloadExtension interface
type servicePortExtension (line 69) | type servicePortExtension interface
method parseServiceExtension (line 74) | func (c *config) parseServiceExtension(composeService *compose.ServiceCo...
type extension (line 117) | type extension struct
method init (line 124) | func (e *extension) init(_ *config, et types.EngagementType, composeSe...
method name (line 130) | func (e *extension) name() string {
method engagementType (line 134) | func (e *extension) engagementType() types.EngagementType {
method connectionName (line 138) | func (e *extension) connectionName() string {
method composeService (line 143) | func (e *extension) composeService() *compose.ServiceConfig {
method connection (line 147) | func (e *extension) connection() *connection {
method engaged (line 151) | func (e *extension) engaged() (*engagement, error) {
method needsVolumes (line 155) | func (e *extension) needsVolumes() bool {
method setConnection (line 159) | func (e *extension) setConnection(c *connection) {
method activate (line 163) | func (e *extension) activate(*transformer) (*engagement, error) {
method deactivate (line 167) | func (e *extension) deactivate() error {
type proxyExtension (line 171) | type proxyExtension struct
method init (line 177) | func (e *proxyExtension) init(c *config, et types.EngagementType, comp...
method activate (line 184) | func (e *proxyExtension) activate(*transformer) (*engagement, error) {
method name (line 189) | func (e *proxyExtension) name() string {
method servicePorts (line 194) | func (e *proxyExtension) servicePorts() []types.PortMapping {
type engageExtension (line 198) | type engageExtension struct
method init (line 204) | func (e *engageExtension) init(c *config, et types.EngagementType, com...
method name (line 213) | func (e *engageExtension) name() string {
method workload (line 218) | func (e *engageExtension) workload() string {
method needsVolumes (line 222) | func (e *engageExtension) needsVolumes() bool {
method desiredRemoteMounts (line 226) | func (e *engageExtension) desiredRemoteMounts(remoteMounts types.Mount...
type httpFilterExtension (line 255) | type httpFilterExtension struct
method amendInterceptSpec (line 265) | func (e *httpFilterExtension) amendInterceptSpec(spec *manager.Interce...
method servicePorts (line 283) | func (e *httpFilterExtension) servicePorts() []types.PortMapping {
type interceptExtension (line 287) | type interceptExtension struct
method deactivate (line 294) | func (e *interceptExtension) deactivate() error {
method init (line 298) | func (e *interceptExtension) init(c *config, et types.EngagementType, ...
method workload (line 306) | func (e *interceptExtension) workload() string {
method activate (line 310) | func (e *interceptExtension) activate(t *transformer) (*engagement, er...
method engaged (line 314) | func (e *interceptExtension) engaged() (*engagement, error) {
method service (line 318) | func (e *interceptExtension) service() string {
method toPod (line 322) | func (e *interceptExtension) toPod() []types.PortAndProto {
method createInterceptRequest (line 326) | func (e *interceptExtension) createInterceptRequest(localMountPort uin...
type ingestExtension (line 340) | type ingestExtension struct
method activate (line 346) | func (e *ingestExtension) activate(t *transformer) (*engagement, error) {
method container (line 385) | func (e *ingestExtension) container() string {
method deactivate (line 389) | func (e *ingestExtension) deactivate() error {
method engaged (line 409) | func (e *ingestExtension) engaged() (*engagement, error) {
method toPod (line 414) | func (e *ingestExtension) toPod() []types.PortAndProto {
type replaceExtension (line 418) | type replaceExtension struct
method activate (line 431) | func (e *replaceExtension) activate(t *transformer) (*engagement, erro...
method deactivate (line 435) | func (e *replaceExtension) deactivate() error {
method engaged (line 439) | func (e *replaceExtension) engaged() (*engagement, error) {
method container (line 443) | func (e *replaceExtension) container() string {
method containerPorts (line 447) | func (e *replaceExtension) containerPorts() []types.PortMapping {
method toPod (line 451) | func (e *replaceExtension) toPod() []types.PortAndProto {
method createInterceptRequest (line 491) | func (e *replaceExtension) createInterceptRequest(localMountPort uint1...
type wiretapExtension (line 455) | type wiretapExtension struct
method activate (line 462) | func (e *wiretapExtension) activate(t *transformer) (*engagement, erro...
method deactivate (line 466) | func (e *wiretapExtension) deactivate() error {
method engaged (line 470) | func (e *wiretapExtension) engaged() (*engagement, error) {
method service (line 474) | func (e *wiretapExtension) service() string {
method createInterceptRequest (line 478) | func (e *wiretapExtension) createInterceptRequest(localMountPort uint1...
function addPortsSpec (line 512) | func addPortsSpec(spec *manager.InterceptSpec, ports []types.PortMapping...
function createInterceptRequest (line 536) | func createInterceptRequest(e workloadExtension, localMountPort uint16) ...
function activateIntercept (line 550) | func activateIntercept(e workloadExtension, t *transformer) (*engagement...
function deactivateIntercept (line 583) | func deactivateIntercept(e workloadExtension) error {
FILE: pkg/client/cli/docker/compose/extension_test.go
function TestAmendInterceptSpec_MechanismSetToHTTP (line 13) | func TestAmendInterceptSpec_MechanismSetToHTTP(t *testing.T) {
function TestAmendInterceptSpec_HeaderFiltersPopulated (line 77) | func TestAmendInterceptSpec_HeaderFiltersPopulated(t *testing.T) {
function TestAmendInterceptSpec_NoPorts_ReturnsError (line 90) | func TestAmendInterceptSpec_NoPorts_ReturnsError(t *testing.T) {
FILE: pkg/client/cli/docker/compose/toplevelextension.go
type volumeMountPolicy (line 11) | type volumeMountPolicy struct
method Matches (line 17) | func (v *volumeMountPolicy) Matches(volumeName string) bool {
type topLevelExtension (line 21) | type topLevelExtension struct
method parse (line 26) | func (tl *topLevelExtension) parse(v any) error {
FILE: pkg/client/cli/docker/compose/transform.go
type transformer (line 28) | type transformer struct
method addEngagement (line 59) | func (t *transformer) addEngagement(engagement *engagement) {
method createProject (line 63) | func (t *transformer) createProject(cmdName, composeFile string) ([]st...
method marshalYAML (line 91) | func (t *transformer) marshalYAML() ([]byte, error) {
method engage (line 95) | func (t *transformer) engage(ctx context.Context, e serviceExtension, ...
method disengage (line 113) | func (t *transformer) disengage(ctx context.Context) {
method runCommand (line 128) | func (t *transformer) runCommand(ctx context.Context, name string) err...
method runCompose (line 193) | func (t *transformer) runCompose(ctx context.Context, name, composeFil...
method runAttachedUp (line 203) | func (t *transformer) runAttachedUp(parentCtx context.Context, compose...
method serviceExtensions (line 238) | func (t *transformer) serviceExtensions() (ses map[string]serviceExten...
method volumes (line 242) | func (t *transformer) volumes() *xsync.Map[string, *compose.VolumeConf...
method withProfiles (line 246) | func (t *transformer) withProfiles(profiles []string) error {
method applyEngagements (line 255) | func (t *transformer) applyEngagements() error {
method ensureTopLevelExtension (line 304) | func (t *transformer) ensureTopLevelExtension(p *compose.Project) error {
method connections (line 326) | func (t *transformer) connections() []*connection {
method createConfigFile (line 341) | func (t *transformer) createConfigFile(ctx context.Context, canCreate,...
function newTransformer (line 37) | func newTransformer(config *config, p *compose.Project) (tr *transformer...
FILE: pkg/client/cli/docker/flags.go
type Flags (line 16) | type Flags struct
method AddFlags (line 29) | func (f *Flags) AddFlags(flagSet *pflag.FlagSet, what string) {
method Validate (line 48) | func (f *Flags) Validate(args []string) error {
method PullOrBuildImage (line 100) | func (f *Flags) PullOrBuildImage(ctx context.Context) error {
method GetContainerNameAndArgs (line 123) | func (f *Flags) GetContainerNameAndArgs(defaultContainerName string) (...
method AdjustImageIndex (line 136) | func (f *Flags) AdjustImageIndex(adjust int) {
function firstArg (line 160) | func firstArg(args []string) (string, int) {
FILE: pkg/client/cli/docker/published_ports.go
type PublishedPort (line 10) | type PublishedPort struct
method writeTo (line 66) | func (c PublishedPort) writeTo(sb *strings.Builder) {
method String (line 81) | func (c PublishedPort) String() string {
function parsePort (line 16) | func parsePort(s string) (uint16, error) {
function parsePublishedPort (line 24) | func parsePublishedPort(pp string) (PublishedPort, error) {
function writePort (line 62) | func writePort(sb *strings.Builder, port uint16) {
type PublishedPorts (line 87) | type PublishedPorts
method String (line 89) | func (p *PublishedPorts) String() string {
method Set (line 103) | func (p *PublishedPorts) Set(s string) error {
method Type (line 107) | func (p *PublishedPorts) Type() string {
method Append (line 111) | func (p *PublishedPorts) Append(s string) error {
method Replace (line 119) | func (p *PublishedPorts) Replace(vals []string) error {
method GetSlice (line 132) | func (p *PublishedPorts) GetSlice() []string {
FILE: pkg/client/cli/docker/run_flags.go
type Volume (line 10) | type Volume struct
method String (line 16) | func (v *Volume) String() string {
type Mount (line 29) | type Mount struct
method String (line 41) | func (m *Mount) String() string {
type Network (line 36) | type Network struct
type RunFlags (line 60) | type RunFlags struct
function ParseRunFlags (line 66) | func ParseRunFlags(args []string) (*RunFlags, []string, error) {
FILE: pkg/client/cli/docker/runner.go
type Runner (line 33) | type Runner struct
method Run (line 41) | func (s *Runner) Run(ctx context.Context, waitMessage string, args ......
method adjustMounts (line 113) | func (s *Runner) adjustMounts(ctx context.Context, runFlags *RunFlags,...
method start (line 153) | func (s *Runner) start(ctx context.Context, envFile string, runFlags *...
type waiter (line 230) | type waiter struct
method wait (line 245) | func (w *waiter) wait(ctx context.Context) error {
function EnsureStopContainer (line 278) | func EnsureStopContainer(ctx context.Context, name, containerID string, ...
FILE: pkg/client/cli/env/flags.go
type Flags (line 7) | type Flags struct
method AddFlags (line 13) | func (f *Flags) AddFlags(flagSet *pflag.FlagSet) {
method MaybeWrite (line 22) | func (f *Flags) MaybeWrite(env map[string]string) error {
FILE: pkg/client/cli/env/syntax.go
type Syntax (line 19) | type Syntax
method Set (line 55) | func (e *Syntax) Set(n string) error {
method String (line 65) | func (e Syntax) String() string {
method Type (line 73) | func (e Syntax) Type() string {
method writeFile (line 78) | func (e Syntax) writeFile(fileName string, env map[string]string) error {
method WriteToFileAndClose (line 93) | func (e Syntax) WriteToFileAndClose(file *os.File, env map[string]stri...
method WriteEntry (line 130) | func (e Syntax) WriteEntry(k, v string) (r string, err error) {
constant SyntaxDocker (line 22) | SyntaxDocker Syntax = iota
constant SyntaxCompose (line 23) | SyntaxCompose
constant SyntaxSh (line 24) | SyntaxSh
constant SyntaxShExport (line 25) | SyntaxShExport
constant SyntaxCsh (line 26) | SyntaxCsh
constant SyntaxCshExport (line 27) | SyntaxCshExport
constant SyntaxPS (line 28) | SyntaxPS
constant SyntaxPSExport (line 29) | SyntaxPSExport
constant SyntaxCmd (line 30) | SyntaxCmd
constant SyntaxJSON (line 31) | SyntaxJSON
function SyntaxUsage (line 47) | func SyntaxUsage() string {
function quotePS (line 166) | func quotePS(s string) string {
function quoteCompose (line 183) | func quoteCompose(s string) string {
FILE: pkg/client/cli/env/syntax_test.go
function TestSyntax_WriteEntry (line 9) | func TestSyntax_WriteEntry(t *testing.T) {
FILE: pkg/client/cli/flags/addunique.go
function AddUnique (line 9) | func AddUnique(dst *pflag.FlagSet, src *pflag.FlagSet) (err error) {
FILE: pkg/client/cli/flags/context.go
type flagSetsKey (line 9) | type flagSetsKey struct
function WithFlagSets (line 11) | func WithFlagSets(ctx context.Context, flagSets ...*pflag.FlagSet) conte...
function GetFlagSets (line 18) | func GetFlagSets(ctx context.Context) []*pflag.FlagSet {
FILE: pkg/client/cli/flags/deprecation.go
function DeprecationIfChanged (line 14) | func DeprecationIfChanged(cmd *cobra.Command, flagName, alternative stri...
FILE: pkg/client/cli/flags/map.go
function Map (line 10) | func Map(flags *pflag.FlagSet) map[string]string {
FILE: pkg/client/cli/flags/unparsed.go
function GetUnparsedValue (line 13) | func GetUnparsedValue(longForm string, shortForm byte, isBool bool, args...
function GetUnparsedValues (line 20) | func GetUnparsedValues(longForm string, shortForm byte, args []string) (...
function ConsumeUnparsedValue (line 40) | func ConsumeUnparsedValue(longForm string, shortForm byte, isBool bool, ...
function GetUnparsedBoolean (line 133) | func GetUnparsedBoolean(args []string, flag string) (bool, bool, error) {
function HasOption (line 145) | func HasOption(longForm string, shortForm byte, args []string) bool {
FILE: pkg/client/cli/flags/unparsed_test.go
function TestConsumeUnparsedFlagValue (line 9) | func TestConsumeUnparsedFlagValue(t *testing.T) {
function TestGetUnparsedFlagBoolean (line 196) | func TestGetUnparsedFlagBoolean(t *testing.T) {
FILE: pkg/client/cli/flags/zerovalue.go
function IsZeroValue (line 4) | func IsZeroValue(str string) bool {
FILE: pkg/client/cli/global/flags.go
constant FlagConfig (line 18) | FlagConfig = "config"
constant FlagContext (line 19) | FlagContext = "context"
constant FlagDocker (line 20) | FlagDocker = "docker"
constant FlagNoReport (line 21) | FlagNoReport = "no-report"
constant FlagOutput (line 22) | FlagOutput = "output"
constant FlagProgress (line 23) | FlagProgress = "progress"
constant FlagUse (line 24) | FlagUse = "use"
function replaceHomeDir (line 29) | func replaceHomeDir(ctx context.Context, dir string) string {
function Flags (line 37) | func Flags(ctx context.Context, hasKubeFlags, markdown bool) *pflag.Flag...
function SetProgressQuiet (line 61) | func SetProgressQuiet(cmd *cobra.Command) {
function InitConfig (line 67) | func InitConfig(cmd *cobra.Command) error {
FILE: pkg/client/cli/helm/chart.go
function loadCoreChart (line 25) | func loadCoreChart(version semver.Version) (*chart.Chart, error) {
function newDefaultRegistryClient (line 33) | func newDefaultRegistryClient(ctx context.Context) (*registry.Client, er...
function withDownloadedChart (line 40) | func withDownloadedChart(ctx context.Context, helmConfig *action.Configu...
function pullCoreChart (line 68) | func pullCoreChart(ctx context.Context, helmConfig *action.Configuration...
function coalesceValues (line 82) | func coalesceValues(ctx context.Context, req *Request) (map[string]any, ...
function loadOrPullChart (line 105) | func loadOrPullChart(ctx context.Context, helmConfig *action.Configurati...
FILE: pkg/client/cli/helm/install.go
constant helmDriver (line 33) | helmDriver = "secrets"
constant trafficManagerReleaseName (line 34) | trafficManagerReleaseName = agentconfig.ManagerAppName
type RequestType (line 39) | type RequestType
constant Install (line 42) | Install RequestType = iota
constant Upgrade (line 43) | Upgrade
constant Uninstall (line 44) | Uninstall
constant Lint (line 45) | Lint
type Request (line 48) | type Request struct
method Run (line 60) | func (hr *Request) Run(ctx context.Context, cr *connector.ConnectReque...
function getHelmConfig (line 132) | func getHelmConfig(ctx context.Context, clientGetter genericclioptions.R...
function GetValues (line 144) | func GetValues(ctx context.Context, req *Request) map[string]any {
function timedRun (line 191) | func timedRun(ctx context.Context, run func(time.Duration) error) error {
function installNew (line 212) | func installNew(
function upgradeExisting (line 237) | func upgradeExisting(
function uninstallExisting (line 262) | func uninstallExisting(ctx context.Context, helmConfig *action.Configura...
function isInstalled (line 276) | func isInstalled(
function EnsureTrafficManager (line 322) | func EnsureTrafficManager(ctx context.Context, clientGetter genericcliop...
function ensureIsInstalled (line 327) | func ensureIsInstalled(
function DeleteTrafficManager (line 394) | func DeleteTrafficManager(
function ensureIsDeleted (line 404) | func ensureIsDeleted(
function getTrafficManagerVersion (line 436) | func getTrafficManagerVersion(values map[string]any) (semver.Version, er...
FILE: pkg/client/cli/helm/lint.go
function lint (line 19) | func lint(ctx context.Context, clientGetter genericclioptions.RESTClient...
function runLint (line 59) | func runLint(path, namespace string, vals map[string]any, req *Request) ...
FILE: pkg/client/cli/helm/release.go
function getHelmRelease (line 13) | func getHelmRelease(ctx context.Context, releaseName string, helmConfig ...
function releaseVer (line 59) | func releaseVer(rel *release.Release) string {
FILE: pkg/client/cli/ingest/command.go
type Command (line 20) | type Command struct
method AddFlags (line 32) | func (c *Command) AddFlags(cmd *cobra.Command) {
method Validate (line 49) | func (c *Command) Validate(cmd *cobra.Command, positional []string) er...
method Run (line 65) | func (c *Command) Run(cmd *cobra.Command, positional []string) error {
function AutocompleteContainer (line 77) | func AutocompleteContainer(cmd *cobra.Command, args []string, _ string) ...
FILE: pkg/client/cli/ingest/info.go
type Info (line 14) | type Info struct
method String (line 41) | func (ii *Info) String() string {
method WriteTo (line 47) | func (ii *Info) WriteTo(w io.Writer) (int64, error) {
function NewInfo (line 23) | func NewInfo(ctx context.Context, ii *rpc.IngestInfo, mountError error) ...
FILE: pkg/client/cli/ingest/state.go
type State (line 26) | type State interface
type state (line 32) | type state struct
method SetSelf (line 54) | func (s *state) SetSelf(self State) {
method CreateRequest (line 58) | func (s *state) CreateRequest() (*rpc.IngestRequest, error) {
method RunAndLeave (line 78) | func (s *state) RunAndLeave() bool {
method Run (line 82) | func (s *state) Run(ctx context.Context) error {
method create (line 109) | func (s *state) create(ctx context.Context) (acquired bool, err error) {
method leave (line 170) | func (s *state) leave(ctx context.Context) error {
method runCommand (line 191) | func (s *state) runCommand(ctx context.Context) error {
function NewState (line 42) | func NewState(
FILE: pkg/client/cli/intercept/command.go
type Command (line 34) | type Command struct
method UsesHTTPMechanism (line 73) | func (c *Command) UsesHTTPMechanism() bool {
method AddInterceptFlags (line 119) | func (c *Command) AddInterceptFlags(cmd *cobra.Command) {
method AddReplaceFlags (line 193) | func (c *Command) AddReplaceFlags(cmd *cobra.Command) {
method Validate (line 224) | func (c *Command) Validate(cmd *cobra.Command, positional []string) er...
method ValidateReplace (line 302) | func (c *Command) ValidateReplace(cmd *cobra.Command, positional []str...
method Run (line 333) | func (c *Command) Run(cmd *cobra.Command, positional []string) error {
method RunReplace (line 341) | func (c *Command) RunReplace(cmd *cobra.Command, positional []string) ...
method validatedRun (line 349) | func (c *Command) validatedRun(cmd *cobra.Command) error {
function parseKeyValue (line 87) | func parseKeyValue(kv string) (string, string, error) {
function tryParseHeaderWithSeparator (line 104) | func tryParseHeaderWithSeparator(header, separator string) (string, stri...
function autocompleteService (line 359) | func autocompleteService(cmd *cobra.Command, args []string, toComplete s...
function ValidArgs (line 405) | func ValidArgs(cmd *cobra.Command, args []string, toComplete string) ([]...
function BuildPathFilters (line 451) | func BuildPathFilters(equals, prefixes, regexps []string) []string {
FILE: pkg/client/cli/intercept/command_test.go
function TestCommand_Validate_HTTPIntercepts (line 15) | func TestCommand_Validate_HTTPIntercepts(t *testing.T) {
function TestCommand_UsesHTTPMechanism (line 127) | func TestCommand_UsesHTTPMechanism(t *testing.T) {
function TestParseHTTPHeader (line 184) | func TestParseHTTPHeader(t *testing.T) {
function TestCommand_HeaderParsing (line 278) | func TestCommand_HeaderParsing(t *testing.T) {
function TestCommand_UDPHTTPValidation (line 329) | func TestCommand_UDPHTTPValidation(t *testing.T) {
FILE: pkg/client/cli/intercept/describe_intercepts.go
function DescribeIntercepts (line 12) | func DescribeIntercepts(ctx context.Context, iis []*manager.InterceptInf...
function describeIntercept (line 58) | func describeIntercept(ctx context.Context, ii *manager.InterceptInfo, v...
function describeIngest (line 64) | func describeIngest(ctx context.Context, ig *rpc.IngestInfo, volumeMount...
FILE: pkg/client/cli/intercept/info.go
type Ingress (line 22) | type Ingress struct
type Info (line 29) | type Info struct
method String (line 112) | func (ii *Info) String() string {
method WriteTo (line 118) | func (ii *Info) WriteTo(w io.Writer) (int64, error) {
function NewInfo (line 57) | func NewInfo(ctx context.Context, ii *manager.InterceptInfo, ro bool, mo...
FILE: pkg/client/cli/intercept/info_test.go
function TestInfo_HTTPFilterDisplay (line 13) | func TestInfo_HTTPFilterDisplay(t *testing.T) {
function TestNewInfo_HTTPFilterPopulation (line 161) | func TestNewInfo_HTTPFilterPopulation(t *testing.T) {
function TestInfo_WriteTo_HTTPFilterFormatting (line 246) | func TestInfo_WriteTo_HTTPFilterFormatting(t *testing.T) {
FILE: pkg/client/cli/intercept/state.go
type State (line 30) | type State interface
type state (line 37) | type state struct
method SetSelf (line 63) | func (s *state) SetSelf(self State) {
method CreateRequest (line 79) | func (s *state) CreateRequest(ctx context.Context) (*connector.CreateI...
method Name (line 154) | func (s *state) Name() string {
method RunAndLeave (line 158) | func (s *state) RunAndLeave() bool {
method Run (line 162) | func (s *state) Run(ctx context.Context) (*Info, error) {
method what (line 204) | func (s *state) what() string {
method create (line 214) | func (s *state) create(ctx context.Context) (acquired bool, err error) {
method leave (line 271) | func (s *state) leave(ctx context.Context) error {
method runCommand (line 299) | func (s *state) runCommand(ctx context.Context) error {
function NewState (line 51) | func NewState(
function keyValueMap (line 67) | func keyValueMap(keyValueStrings []string) (m map[string]string) {
function parsePort (line 333) | func parsePort(portSpec string, dockerRun, containerized bool) (local ui...
FILE: pkg/client/cli/main.go
function InitContext (line 23) | func InitContext(ctx context.Context) context.Context {
function Main (line 56) | func Main(ctx context.Context, args []string) {
function summarizeLogs (line 106) | func summarizeLogs(ctx context.Context, cmd *cobra.Command) bool {
FILE: pkg/client/cli/mount/flags.go
type Flags (line 23) | type Flags struct
method AddFlags (line 30) | func (f *Flags) AddFlags(flagSet *pflag.FlagSet, forceReadOnly bool) {
method Validate (line 43) | func (f *Flags) Validate(cmd *cobra.Command) error {
method ValidateConnected (line 70) | func (f *Flags) ValidateConnected(ctx context.Context) (err error) {
function checkCapability (line 115) | func checkCapability(ctx context.Context) error {
FILE: pkg/client/cli/mount/info.go
type Info (line 11) | type Info struct
function NewInfo (line 21) | func NewInfo(ctx context.Context, env map[string]string, ftpPort, sftpPo...
FILE: pkg/client/cli/mount/prepare_unix.go
function prepare (line 13) | func prepare(ctx context.Context, cwd string, mountPoint string) (string...
FILE: pkg/client/cli/mount/prepare_windows.go
function prepare (line 13) | func prepare(_ context.Context, _ string, mountPoint string) (string, er...
FILE: pkg/client/cli/output/output.go
function Out (line 24) | func Out(ctx context.Context) io.Writer {
function Err (line 34) | func Err(ctx context.Context) io.Writer {
function Info (line 45) | func Info(ctx context.Context) io.Writer {
function Object (line 63) | func Object(ctx context.Context, obj any, override bool) {
function DefaultYAML (line 92) | func DefaultYAML(cmd *cobra.Command, _ []string) error {
function Execute (line 116) | func Execute(cmd *cobra.Command) (*cobra.Command, bool, error) {
function SetFormat (line 177) | func SetFormat(cmd *cobra.Command, _ []string) error {
function WantsFormatted (line 202) | func WantsFormatted(cmd *cobra.Command) bool {
function WantsStream (line 208) | func WantsStream(cmd *cobra.Command) bool {
function validateFlag (line 213) | func validateFlag(cmd *cobra.Command) (format, error) {
type format (line 233) | type format
type key (line 234) | type key struct
type output (line 235) | type output struct
method Write (line 257) | func (o *output) Write(data []byte) (int, error) {
type object (line 242) | type object struct
method hasCmdOnly (line 264) | func (o *object) hasCmdOnly() bool {
constant formatDefault (line 251) | formatDefault = format(iota)
constant formatJSON (line 252) | formatJSON
constant formatYAML (line 253) | formatYAML
constant formatJSONStream (line 254) | formatJSONStream
FILE: pkg/client/cli/output/output_test.go
function TestWithOutput (line 19) | func TestWithOutput(t *testing.T) {
FILE: pkg/client/cli/progress/colors.go
type noColor (line 23) | type noColor struct
method With (line 25) | func (a noColor) With(_ ...aec.ANSI) aec.ANSI {
method Apply (line 29) | func (noColor) Apply(s string) string {
method String (line 33) | func (noColor) String() string {
FILE: pkg/client/cli/progress/event.go
type EventStatus (line 32) | type EventStatus
method color (line 42) | func (s EventStatus) color() aec.ANSI {
method MarshalJSONTo (line 57) | func (s EventStatus) MarshalJSONTo(out *jsontext.Encoder) error {
method String (line 61) | func (s EventStatus) String() string {
constant EventStatusWorking (line 35) | EventStatusWorking EventStatus = iota
constant EventStatusDone (line 36) | EventStatusDone
constant EventStatusInfo (line 37) | EventStatusInfo
constant EventStatusWarning (line 38) | EventStatusWarning
constant EventStatusError (line 39) | EventStatusError
type Event (line 77) | type Event struct
method WithText (line 159) | func (e *Event) WithText(msg string) *Event {
method AddChild (line 164) | func (e *Event) AddChild(status EventStatus, text, statusText string) ...
method PlainAlways (line 172) | func (e *Event) PlainAlways() *Event {
method Pump (line 177) | func (e *Event) Pump(ctx context.Context, status EventStatus) io.Writer {
method stop (line 199) | func (e *Event) stop() {
method child (line 206) | func (e *Event) child(id string) *Event {
method merge (line 215) | func (e *Event) merge(o *Event) {
method Spinner (line 296) | func (e *Event) Spinner() string {
function ErrorMessageEvent (line 93) | func ErrorMessageEvent(id string, msg string) *Event {
function WarningMessageEvent (line 98) | func WarningMessageEvent(id string, msg string) *Event {
function InfoMessageEvent (line 103) | func InfoMessageEvent(id string, msg string) *Event {
function StartingEvent (line 108) | func StartingEvent(id string) *Event {
function StartedEvent (line 113) | func StartedEvent(id string) *Event {
function StoppedEvent (line 118) | func StoppedEvent(id string) *Event {
function BuildingEvent (line 123) | func BuildingEvent(id string) *Event {
function BuiltEvent (line 128) | func BuiltEvent(id string) *Event {
function WorkingEvent (line 133) | func WorkingEvent(id, verb string) *Event {
function DoneEvent (line 138) | func DoneEvent(id, verb string) *Event {
function NewEvent (line 142) | func NewEvent(id string, status EventStatus, statusText string) *Event {
constant spinnerDone (line 291) | spinnerDone = "✔"
constant spinnerWarning (line 292) | spinnerWarning = "!"
constant spinnerError (line 293) | spinnerError = "✘"
FILE: pkg/client/cli/progress/json.go
type jsonWriter (line 27) | type jsonWriter struct
method Start (line 31) | func (p *jsonWriter) Start(context.Context, string) {
method IsNoOp (line 34) | func (p *jsonWriter) IsNoOp() bool {
method write (line 38) | func (p *jsonWriter) write(e *Event) {
method Write (line 45) | func (p *jsonWriter) Write(events ...*Event) {
method TailMsgf (line 55) | func (p *jsonWriter) TailMsgf(msg string, args ...any) {
method Stop (line 62) | func (p *jsonWriter) Stop() {
method TriggerRefresh (line 65) | func (p *jsonWriter) TriggerRefresh() {
type tailMsg (line 51) | type tailMsg struct
FILE: pkg/client/cli/progress/noop.go
type noopWriter (line 23) | type noopWriter struct
method Start (line 25) | func (p noopWriter) Start(context.Context, string) {
method IsNoOp (line 28) | func (p noopWriter) IsNoOp() bool {
method Write (line 32) | func (p noopWriter) Write(...*Event) {
method TailMsgf (line 35) | func (p noopWriter) TailMsgf(_ string, _ ...any) {
method Stop (line 38) | func (p noopWriter) Stop() {
method TriggerRefresh (line 41) | func (p noopWriter) TriggerRefresh() {
FILE: pkg/client/cli/progress/plain.go
type plainWriter (line 27) | type plainWriter struct
method IsNoOp (line 32) | func (p plainWriter) IsNoOp() bool {
method Start (line 36) | func (p plainWriter) Start(context.Context, string) {
method Stop (line 39) | func (p plainWriter) Stop() {
method Write (line 42) | func (p plainWriter) Write(events ...*Event) {
method TailMsgf (line 59) | func (p plainWriter) TailMsgf(msg string, args ...any) {
method TriggerRefresh (line 63) | func (p plainWriter) TriggerRefresh() {
FILE: pkg/client/cli/progress/quiet.go
type quiet (line 21) | type quiet struct
method Start (line 23) | func (q quiet) Start(context.Context, string) {
method IsNoOp (line 26) | func (q quiet) IsNoOp() bool {
method Stop (line 30) | func (q quiet) Stop() {
method Write (line 33) | func (q quiet) Write(...*Event) {
method TailMsgf (line 36) | func (q quiet) TailMsgf(_ string, _ ...any) {
method TriggerRefresh (line 39) | func (q quiet) TriggerRefresh() {
FILE: pkg/client/cli/progress/spinner.go
type spinner (line 24) | type spinner struct
method String (line 51) | func (s *spinner) String() string {
method Stop (line 64) | func (s *spinner) Stop() {
method Restart (line 68) | func (s *spinner) Restart() {
function newSpinner (line 32) | func newSpinner() *spinner {
FILE: pkg/client/cli/progress/tty.go
type ttyWriter (line 36) | type ttyWriter struct
method Start (line 60) | func (w *ttyWriter) Start(ctx context.Context, progressTitle string) {
method IsNoOp (line 86) | func (w *ttyWriter) IsNoOp() bool {
method Stop (line 90) | func (w *ttyWriter) Stop() {
method event (line 97) | func (w *ttyWriter) event(e *Event) {
method Write (line 107) | func (w *ttyWriter) Write(events ...*Event) {
method TriggerRefresh (line 116) | func (w *ttyWriter) TriggerRefresh() {
method print (line 120) | func (w *ttyWriter) print() {
method lineText (line 206) | func (w *ttyWriter) lineText(event *Event, withID bool, terminalWidth,...
function newTTYWriter (line 50) | func newTTYWriter(out io.Writer) Writer {
function writePad (line 317) | func writePad(bld *strings.Builder, padLen int) {
function numDone (line 323) | func numDone(events map[string]*Event) int {
FILE: pkg/client/cli/progress/tty_test.go
function TestLineText (line 28) | func TestLineText(t *testing.T) {
function TestEventTruncate (line 92) | func TestEventTruncate(t *testing.T) {
function TestErrorEventWrap (line 117) | func TestErrorEventWrap(t *testing.T) {
function TestLineTextSingleEvent (line 137) | func TestLineTextSingleEvent(t *testing.T) {
function TestErrorEvent (line 158) | func TestErrorEvent(t *testing.T) {
function TestWarningEvent (line 193) | func TestWarningEvent(t *testing.T) {
function tty (line 228) | func tty() *ttyWriter {
FILE: pkg/client/cli/progress/writer.go
type Writer (line 30) | type Writer interface
type writerKey (line 48) | type writerKey struct
function WithContextWriter (line 51) | func WithContextWriter(ctx context.Context, writer Writer) context.Conte...
function ContextWriter (line 56) | func ContextWriter(ctx context.Context) Writer {
type eventIdKey (line 64) | type eventIdKey struct
function WithEventId (line 66) | func WithEventId(ctx context.Context, id string) context.Context {
function EventId (line 74) | func EventId(ctx context.Context) string {
function IsNoOp (line 82) | func IsNoOp(ctx context.Context) bool {
function Start (line 86) | func Start(ctx context.Context, title string) {
function Stop (line 92) | func Stop(ctx context.Context) {
function Working (line 96) | func Working(ctx context.Context, args ...any) *Event {
function Workingf (line 100) | func Workingf(ctx context.Context, format string, args ...any) *Event {
function Done (line 104) | func Done(ctx context.Context, args ...any) *Event {
function Donef (line 108) | func Donef(ctx context.Context, format string, args ...any) *Event {
function PrintDone (line 114) | func PrintDone(ctx context.Context, args ...any) *Event {
function PrintDonef (line 120) | func PrintDonef(ctx context.Context, format string, args ...any) *Event {
function Info (line 124) | func Info(ctx context.Context, args ...any) *Event {
function Infof (line 128) | func Infof(ctx context.Context, format string, args ...any) *Event {
function Error (line 132) | func Error(ctx context.Context, args ...any) *Event {
function Errorf (line 136) | func Errorf(ctx context.Context, format string, args ...any) *Event {
function Warning (line 140) | func Warning(ctx context.Context, args ...any) *Event {
function Warningf (line 144) | func Warningf(ctx context.Context, format string, args ...any) *Event {
function write (line 148) | func write(ctx context.Context, status EventStatus, plain bool, args []a...
function writef (line 155) | func writef(ctx context.Context, status EventStatus, plain bool, format ...
function Write (line 162) | func Write(ctx context.Context, events ...*Event) {
function MaybeWriteError (line 166) | func MaybeWriteError(ctx context.Context, err error) error {
type Mode (line 174) | type Mode
constant ModeAuto (line 178) | ModeAuto = Mode("auto")
constant ModeTTY (line 180) | ModeTTY = Mode("tty")
constant ModePlain (line 182) | ModePlain = Mode("plain")
constant ModeQuiet (line 184) | ModeQuiet = Mode("quiet")
constant ModeJSON (line 186) | ModeJSON = Mode("json")
function NewWriter (line 190) | func NewWriter(out, err io.Writer, mode Mode) Writer {
FILE: pkg/client/cmd_error.go
function RunError (line 11) | func RunError(err error) error {
FILE: pkg/client/config.go
type DefaultsAware (line 34) | type DefaultsAware interface
function jsonName (line 41) | func jsonName(f reflect.StructField) string {
function mapWithoutDefaults (line 58) | func mapWithoutDefaults[T DefaultsAware](sourceStruct T) map[string]any {
function mergeNonDefaults (line 75) | func mergeNonDefaults[T DefaultsAware](targetStruct T, sourceStruct T) {
function isDefault (line 91) | func isDefault[T DefaultsAware](sourceStruct T) bool {
constant ConfigFile (line 95) | ConfigFile = "config.yml"
type Config (line 97) | type Config interface
type config (line 118) | type config struct
method OSSpecific (line 132) | func (c *config) OSSpecific() *OSSpecificConfig {
method Base (line 136) | func (c *config) Base() *config {
method Timeouts (line 140) | func (c *config) Timeouts() *Timeouts {
method LogLevels (line 144) | func (c *config) LogLevels() *LogLevels {
method Images (line 148) | func (c *config) Images() *Images {
method Grpc (line 152) | func (c *config) Grpc() *Grpc {
method Intercept (line 156) | func (c *config) Intercept() *Intercept {
method Cluster (line 160) | func (c *config) Cluster() *Cluster {
method Docker (line 164) | func (c *config) Docker() *Docker {
method DNS (line 168) | func (c *config) DNS() *DNS {
method Routing (line 172) | func (c *config) Routing() *Routing {
method Helm (line 176) | func (c *config) Helm() *Helm {
method MarshalYAML (line 180) | func (c *config) MarshalYAML() ([]byte, error) {
method DestructiveMerge (line 240) | func (c *config) DestructiveMerge(lc Config) {
method Merge (line 254) | func (c *config) Merge(lc Config) Config {
method String (line 261) | func (c *config) String() string {
function UnmarshalJSONConfig (line 188) | func UnmarshalJSONConfig(data []byte, rejectUnknown bool) (Config, error) {
function ParseConfigYAML (line 196) | func ParseConfigYAML(ctx context.Context, path string, data []byte) (Con...
function WatchConfig (line 268) | func WatchConfig(c context.Context, onReload func(context.Context) error...
type Timeouts (line 317) | type Timeouts struct
method Get (line 395) | func (t *Timeouts) Get(timeoutID TimeoutID) time.Duration {
method TimeoutContext (line 434) | func (t *Timeouts) TimeoutContext(ctx context.Context, timeoutID Timeo...
method defaults (line 539) | func (t *Timeouts) defaults() DefaultsAware {
method merge (line 544) | func (t *Timeouts) merge(o *Timeouts) {
method IsZero (line 552) | func (t *Timeouts) IsZero() bool {
method MarshalJSONTo (line 556) | func (t *Timeouts) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 560) | func (t *Timeouts) UnmarshalJSONFrom(in *jsontext.Decoder) error {
type TimeoutID (line 336) | type TimeoutID
constant TimeoutClusterConnect (line 340) | TimeoutClusterConnect TimeoutID = iota
constant TimeoutConnectivityCheck (line 343) | TimeoutConnectivityCheck
constant TimeoutEndpointDial (line 346) | TimeoutEndpointDial
constant TimeoutHelm (line 349) | TimeoutHelm
constant TimeoutIntercept (line 352) | TimeoutIntercept
constant TimeoutProxyDial (line 355) | TimeoutProxyDial
constant TimeoutRoundtripLatency (line 358) | TimeoutRoundtripLatency
constant TimeoutTrafficManagerAPI (line 361) | TimeoutTrafficManagerAPI
constant TimeoutTrafficManagerConnect (line 364) | TimeoutTrafficManagerConnect
constant TimeoutFtpReadWrite (line 367) | TimeoutFtpReadWrite
constant TimeoutFtpShutdown (line 370) | TimeoutFtpShutdown
constant TimeoutContainerShutdown (line 373) | TimeoutContainerShutdown
type timeoutContext (line 376) | type timeoutContext struct
method Err (line 382) | func (ctx *timeoutContext) Err() error {
type timeoutError (line 444) | type timeoutError struct
method Error (line 451) | func (e timeoutError) Error() string {
method Unwrap (line 497) | func (e timeoutError) Unwrap() error {
function CheckTimeout (line 501) | func CheckTimeout(ctx context.Context, err error) error {
constant defaultTimeoutsClusterConnect (line 509) | defaultTimeoutsClusterConnect = 20 * time.Second
constant defaultTimeoutsConnectivityCheck (line 510) | defaultTimeoutsConnectivityCheck = 500 * time.Millisecond
constant defaultTimeoutsEndpointDial (line 511) | defaultTimeoutsEndpointDial = 3 * time.Second
constant defaultTimeoutsHelm (line 512) | defaultTimeoutsHelm = 30 * time.Second
constant defaultTimeoutsIntercept (line 513) | defaultTimeoutsIntercept = 30 * time.Second
constant defaultTimeoutsProxyDial (line 514) | defaultTimeoutsProxyDial = 5 * time.Second
constant defaultTimeoutsRoundtripLatency (line 515) | defaultTimeoutsRoundtripLatency = 2 * time.Second
constant defaultTimeoutsTrafficManagerAPI (line 516) | defaultTimeoutsTrafficManagerAPI = 15 * time.Second
constant defaultTimeoutsTrafficManagerConnect (line 517) | defaultTimeoutsTrafficManagerConnect = 60 * time.Second
constant defaultTimeoutsFtpReadWrite (line 518) | defaultTimeoutsFtpReadWrite = 1 * time.Minute
constant defaultTimeoutsFtpShutdown (line 519) | defaultTimeoutsFtpShutdown = 2 * time.Minute
constant defaultTimeoutsContainerShutdown (line 520) | defaultTimeoutsContainerShutdown = 0
constant maxTimeoutsConnectivityCheck (line 521) | maxTimeoutsConnectivityCheck = 5 * time.Second
constant defaultLogLevelsCLI (line 570) | defaultLogLevelsCLI = slog.LevelInfo
constant defaultLogLevelsKubeAuthDaemon (line 571) | defaultLogLevelsKubeAuthDaemon = slog.LevelInfo
constant defaultLogLevelsUserDaemon (line 572) | defaultLogLevelsUserDaemon = slog.LevelInfo
constant defaultLogLevelsRootDaemon (line 573) | defaultLogLevelsRootDaemon = slog.LevelInfo
type LogLevels (line 583) | type LogLevels struct
method defaults (line 590) | func (ll *LogLevels) defaults() DefaultsAware {
method merge (line 595) | func (ll *LogLevels) merge(o *LogLevels) {
method IsZero (line 600) | func (ll *LogLevels) IsZero() bool {
method MarshalJSONTo (line 604) | func (ll *LogLevels) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 608) | func (ll *LogLevels) UnmarshalJSONFrom(in *jsontext.Decoder) error {
type Images (line 617) | type Images struct
method defaults (line 632) | func (img *Images) defaults() DefaultsAware {
method merge (line 637) | func (img *Images) merge(o *Images) {
method IsZero (line 642) | func (img *Images) IsZero() bool {
method MarshalJSONTo (line 646) | func (img *Images) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 650) | func (img *Images) UnmarshalJSONFrom(in *jsontext.Decoder) error {
method Registry (line 659) | func (img *Images) Registry(c context.Context) string {
method WebhookRegistry (line 669) | func (img *Images) WebhookRegistry(_ context.Context) string {
method AgentImage (line 673) | func (img *Images) AgentImage(c context.Context) string {
method ClientImage (line 680) | func (img *Images) ClientImage(c context.Context) string {
constant defaultImagesRegistry (line 625) | defaultImagesRegistry = "ghcr.io/telepresenceio"
type Grpc (line 687) | type Grpc struct
method defaults (line 718) | func (g *Grpc) defaults() DefaultsAware {
method merge (line 723) | func (g *Grpc) merge(o *Grpc) {
method IsZero (line 728) | func (g *Grpc) IsZero() bool {
method MarshalJSONTo (line 732) | func (g *Grpc) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 736) | func (g *Grpc) UnmarshalJSONFrom(in *jsontext.Decoder) error {
method MaxReceiveSize (line 745) | func (g *Grpc) MaxReceiveSize() int64 {
type DockerImage (line 758) | type DockerImage struct
type Intercept (line 766) | type Intercept struct
method defaults (line 773) | func (ic *Intercept) defaults() DefaultsAware {
method merge (line 778) | func (ic *Intercept) merge(o *Intercept) {
method IsZero (line 783) | func (ic *Intercept) IsZero() bool {
method MarshalJSONTo (line 787) | func (ic *Intercept) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 791) | func (ic *Intercept) UnmarshalJSONFrom(in *jsontext.Decoder) error {
type Cluster (line 800) | type Cluster struct
method defaults (line 819) | func (cc *Cluster) defaults() DefaultsAware {
method merge (line 824) | func (cc *Cluster) merge(o *Cluster) {
method IsZero (line 829) | func (cc *Cluster) IsZero() bool {
method MarshalJSONTo (line 833) | func (cc *Cluster) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 837) | func (cc *Cluster) UnmarshalJSONFrom(in *jsontext.Decoder) error {
constant defaultDefaultManagerNamespace (line 812) | defaultDefaultManagerNamespace = ""
type Telemount (line 846) | type Telemount
method defaults (line 856) | func (tm *Telemount) defaults() DefaultsAware {
method IsZero (line 860) | func (tm *Telemount) IsZero() bool {
method MarshalJSONTo (line 864) | func (tm *Telemount) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 868) | func (tm *Telemount) UnmarshalJSONFrom(in *jsontext.Decoder) error {
type Teleroute (line 877) | type Teleroute
method defaults (line 887) | func (tr *Teleroute) defaults() DefaultsAware {
method IsZero (line 891) | func (tr *Teleroute) IsZero() bool {
method MarshalJSONTo (line 895) | func (tr *Teleroute) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 899) | func (tr *Teleroute) UnmarshalJSONFrom(in *jsontext.Decoder) error {
type Docker (line 908) | type Docker struct
method defaults (line 933) | func (d *Docker) defaults() DefaultsAware {
method merge (line 938) | func (d *Docker) merge(o *Docker) {
method IsZero (line 943) | func (d *Docker) IsZero() bool {
method MarshalJSONTo (line 947) | func (d *Docker) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 951) | func (d *Docker) UnmarshalJSONFrom(in *jsontext.Decoder) error {
constant DefaultHostGateway (line 919) | DefaultHostGateway = "host.docker.internal"
constant defaultEnableIPv4 (line 920) | defaultEnableIPv4 = true
constant defaultEnableIPv6 (line 921) | defaultEnableIPv6 = true
type Helm (line 960) | type Helm struct
method defaults (line 970) | func (d *Helm) defaults() DefaultsAware {
method merge (line 975) | func (d *Helm) merge(o *Helm) {
method IsZero (line 980) | func (d *Helm) IsZero() bool {
method MarshalJSONTo (line 984) | func (d *Helm) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 988) | func (d *Helm) UnmarshalJSONFrom(in *jsontext.Decoder) error {
constant defaultChartURL (line 964) | defaultChartURL = "oci://ghcr.io/telepresenceio/telepresence-oss"
type Routing (line 997) | type Routing struct
method defaults (line 1024) | func (r *Routing) defaults() DefaultsAware {
method merge (line 1028) | func (r *Routing) merge(o *Routing) {
method IsZero (line 1059) | func (r *Routing) IsZero() bool {
method MarshalJSONTo (line 1063) | func (r *Routing) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 1067) | func (r *Routing) UnmarshalJSONFrom(in *jsontext.Decoder) error {
method ToSnake (line 1367) | func (r *Routing) ToSnake() *RoutingSnake {
constant defaultAutoResolveConflicts (line 1017) | defaultAutoResolveConflicts = true
type configKey (line 1141) | type configKey struct
function WithConfig (line 1144) | func WithConfig(ctx context.Context, cfg Config) context.Context {
function GetConfig (line 1149) | func GetConfig(ctx context.Context) Config {
function ReplaceConfig (line 1159) | func ReplaceConfig(ctx context.Context, cfg Config) bool {
type configFileKey (line 1167) | type configFileKey struct
function WithConfigFile (line 1170) | func WithConfigFile(ctx context.Context, configFile string) context.Cont...
function GetConfigFile (line 1175) | func GetConfigFile(c context.Context) string {
function GetDefaultConfig (line 1183) | func GetDefaultConfig() Config {
function getDefaultConfig (line 1202) | func getDefaultConfig() *config {
function LoadConfig (line 1210) | func LoadConfig(c context.Context) (cfg Config, err error) {
type RoutingSnake (line 1229) | type RoutingSnake struct
type DNSMapping (line 1241) | type DNSMapping struct
type DNSMappings (line 1246) | type DNSMappings
method FromRPC (line 1248) | func (d *DNSMappings) FromRPC(rpcMappings []*daemon.DNSMapping) {
method ToRPC (line 1258) | func (d DNSMappings) ToRPC() []*daemon.DNSMapping {
type DNS (line 1269) | type DNS struct
method Equal (line 1076) | func (d *DNS) Equal(o *DNS) bool {
method defaults (line 1102) | func (d *DNS) defaults() DefaultsAware {
method merge (line 1107) | func (d *DNS) merge(o *DNS) {
method IsZero (line 1112) | func (d *DNS) IsZero() bool {
method MarshalJSONTo (line 1116) | func (d *DNS) MarshalJSONTo(out *jsontext.Encoder) error {
method UnmarshalJSONFrom (line 1120) | func (d *DNS) UnmarshalJSONFrom(in *jsontext.Decoder) error {
method ToRPC (line 1310) | func (d *DNS) ToRPC() *daemon.DNSConfig {
method ToSnake (line 1338) | func (d *DNS) ToSnake() *DNSSnake {
type DNSSnake (line 1297) | type DNSSnake struct
function MappingsFromRPC (line 1353) | func MappingsFromRPC(mappings []*daemon.DNSMapping) DNSMappings {
type SessionConfig (line 1379) | type SessionConfig struct
method UnmarshalJSON (line 1385) | func (sc *SessionConfig) UnmarshalJSON(data []byte) error {
FILE: pkg/client/config_darwin.go
constant defaultAddHostGateway (line 3) | defaultAddHostGateway = false
FILE: pkg/client/config_linux.go
constant defaultAddHostGateway (line 3) | defaultAddHostGateway = true
FILE: pkg/client/config_test.go
function TestGetConfig (line 21) | func TestGetConfig(t *testing.T) {
function Test_ConfigMarshalYAML (line 71) | func Test_ConfigMarshalYAML(t *testing.T) {
function Test_ConfigMarshalYAMLDefaults (line 97) | func Test_ConfigMarshalYAMLDefaults(t *testing.T) {
function Test_ConfigUnmarshalYAMLEmpty (line 103) | func Test_ConfigUnmarshalYAMLEmpty(t *testing.T) {
function Test_ConfigUnmarshalYAMLBooleanTrueDefault (line 109) | func Test_ConfigUnmarshalYAMLBooleanTrueDefault(t *testing.T) {
function Test_ConfigUnmarshalYAMLBooleanTrueDefaultFalse (line 118) | func Test_ConfigUnmarshalYAMLBooleanTrueDefaultFalse(t *testing.T) {
function Test_ConfigUnmarshalYAMLEmptyParent (line 127) | func Test_ConfigUnmarshalYAMLEmptyParent(t *testing.T) {
function Test_ConfigMarshalYAMLDefaultsNotEmitted (line 135) | func Test_ConfigMarshalYAMLDefaultsNotEmitted(t *testing.T) {
function Test_ConfigUnmarshalUnsupported (line 145) | func Test_ConfigUnmarshalUnsupported(t *testing.T) {
FILE: pkg/client/config_unix.go
type OSSpecificConfig (line 10) | type OSSpecificConfig struct
method Merge (line 16) | func (c *OSSpecificConfig) Merge(o *OSSpecificConfig) {
function GetDefaultOSSpecificConfig (line 12) | func GetDefaultOSSpecificConfig() OSSpecificConfig {
FILE: pkg/client/config_util.go
function ReloadLogLevel (line 12) | func ReloadLogLevel(c context.Context) {
FILE: pkg/client/config_windows.go
constant defaultAddHostGateway (line 5) | defaultAddHostGateway = false
type OSSpecificConfig (line 7) | type OSSpecificConfig struct
method Merge (line 20) | func (c *OSSpecificConfig) Merge(o *OSSpecificConfig) {
function GetDefaultOSSpecificConfig (line 11) | func GetDefaultOSSpecificConfig() OSSpecificConfig {
type GSCStrategy (line 24) | type GSCStrategy
constant defaultDNSWithFallback (line 27) | defaultDNSWithFallback = true
type Network (line 34) | type Network struct
method merge (line 38) | func (n *Network) merge(o *Network) {
method IsZero (line 44) | func (n *Network) IsZero() bool {
FILE: pkg/client/const.go
constant APIVersion (line 16) | APIVersion = 3
constant UserDaemonName (line 17) | UserDaemonName = "userd"
constant RootDaemonName (line 18) | RootDaemonName = "rootd"
constant KubeAuthDaemonName (line 19) | KubeAuthDaemonName = "kubeauthd"
function DisplayVersion (line 23) | func DisplayVersion() string {
function GetExe (line 28) | func GetExe(ctx context.Context) string {
function isDaemonName (line 37) | func isDaemonName(name string) bool {
function IsDaemon (line 46) | func IsDaemon() bool {
constant Tel2SubDomain (line 67) | Tel2SubDomain = "tel2-search"
FILE: pkg/client/docker/container.go
constant Exe (line 24) | Exe = "docker"
function Start (line 26) | func Start(ctx context.Context, daemonInContainer bool, args ...string) ...
function StopContainer (line 85) | func StopContainer(ctx context.Context, nameOrID string) error {
FILE: pkg/client/docker/context.go
type clientKey (line 14) | type clientKey struct
type clientHandle (line 16) | type clientHandle struct
method getClient (line 21) | func (h *clientHandle) getClient(ctx context.Context) (*client.Client,...
function EnableClient (line 43) | func EnableClient(ctx context.Context) context.Context {
function GetClient (line 50) | func GetClient(ctx context.Context) (*client.Client, error) {
FILE: pkg/client/docker/daemon.go
constant telepresenceImage (line 51) | telepresenceImage = "telepresence"
constant TpCache (line 52) | TpCache = "/root/.cache/telepresence"
constant DockerTpConfig (line 53) | DockerTpConfig = "/root/.config/telepresence"
constant DockerTpLog (line 54) | DockerTpLog = "/root/.cache/telepresence/logs"
function ClientImage (line 61) | func ClientImage(ctx context.Context) string {
function DaemonOptions (line 72) | func DaemonOptions(ctx context.Context, daemonID *daemon.Identifier, dae...
function DaemonArgs (line 115) | func DaemonArgs(ctx context.Context, daemonID *daemon.Identifier) []stri...
function ConnectDaemon (line 128) | func ConnectDaemon(ctx context.Context, info *daemon.Info) (conn *grpc.C...
function daemonAddr (line 138) | func daemonAddr(ipv6 bool) netip.Addr {
constant kubeAuthPortFile (line 146) | kubeAuthPortFile = client.KubeAuthDaemonName + ".port"
type ContainerInfo (line 149) | type ContainerInfo struct
function GetDaemonContainerNetworkInfo (line 160) | func GetDaemonContainerNetworkInfo(ctx context.Context) (dns netip.Addr,...
function GetContainerInfo (line 198) | func GetContainerInfo(ctx context.Context, cid string, network string) (...
function UseIPv6 (line 249) | func UseIPv6(ctx context.Context) (bool, error) {
function readPortFile (line 265) | func readPortFile(ctx context.Context, portFile string, configFiles []st...
function startAuthenticatorService (line 284) | func startAuthenticatorService(ctx context.Context, portFile string, kub...
function ensureAuthenticatorService (line 317) | func ensureAuthenticatorService(ctx context.Context, kubeFlags map[strin...
function enableK8SAuthenticator (line 337) | func enableK8SAuthenticator(ctx context.Context, daemonID *daemon.Identi...
function handleLocalK8s (line 385) | func handleLocalK8s(ctx context.Context, daemonID *daemon.Identifier, co...
function LaunchDaemon (line 449) | func LaunchDaemon(ctx context.Context, daemonID *daemon.Identifier) (inf...
function containerPort (line 513) | func containerPort(addrPort netip.AddrPort, ns *container.NetworkSetting...
function runningContainers (line 556) | func runningContainers(ctx context.Context, cli dockerClient.APIClient) ...
function endpointAddr (line 576) | func endpointAddr(cn *network.EndpointResource, isIPv6 bool) (addr netip...
function localAddr (line 591) | func localAddr(ctx context.Context, cli dockerClient.APIClient, cnID, nw...
function findNetworkSettingsForHostPort (line 603) | func findNetworkSettingsForHostPort(cns []*container.InspectResponse, ho...
type containerFilter (line 614) | type containerFilter
function detectControlPlane (line 629) | func detectControlPlane(ctx context.Context, cli dockerClient.APIClient,...
function tryLaunch (line 680) | func tryLaunch(ctx context.Context, daemonID *daemon.Identifier, port ui...
function WaitForExit (line 724) | func WaitForExit(ctx context.Context, cli *dockerClient.Client, id strin...
function appendOSSpecificContainerOpts (line 744) | func appendOSSpecificContainerOpts(ctx context.Context, opts []string) (...
FILE: pkg/client/docker/daemon_test.go
function TestSafeContainerName (line 9) | func TestSafeContainerName(t *testing.T) {
FILE: pkg/client/docker/image.go
function BuildImage (line 17) | func BuildImage(ctx context.Context, context string, buildArgs []string)...
function PullImage (line 48) | func PullImage(ctx context.Context, image string) error {
FILE: pkg/client/docker/kubeauth/cmd.go
constant PortFileStaleTime (line 33) | PortFileStaleTime = 3 * time.Second
constant logfileFlag (line 34) | logfileFlag = "logfile"
type authService (line 37) | type authService struct
method run (line 66) | func (as *authService) run(cmd *cobra.Command, _ []string) error {
method internalRun (line 70) | func (as *authService) internalRun(ctx context.Context, flags *pflag.F...
method ClientConfig (line 123) | func (as *authService) ClientConfig() (clientcmd.ClientConfig, error) {
method keepPortFileAlive (line 127) | func (as *authService) keepPortFileAlive(ctx context.Context) error {
method watchFiles (line 151) | func (as *authService) watchFiles(ctx context.Context) error {
type PortFile (line 44) | type PortFile struct
function Command (line 49) | func Command(ctx context.Context) *cobra.Command {
FILE: pkg/client/docker/plugin.go
constant pluginTypeVolume (line 26) | pluginTypeVolume = "volume"
constant pluginTypeNetwork (line 27) | pluginTypeNetwork = "network"
function EnsureVolumePlugin (line 32) | func EnsureVolumePlugin(ctx context.Context) (string, error) {
function EnsureNetworkPlugin (line 39) | func EnsureNetworkPlugin(ctx context.Context) (string, error) {
function NetworkPluginName (line 44) | func NetworkPluginName(ctx context.Context) string {
function ensurePlugin (line 49) | func ensurePlugin(ctx context.Context, pluginType string, cfg *client.Do...
function pluginName (line 69) | func pluginName(tm *client.DockerImage) string {
function latestPluginName (line 73) | func latestPluginName(ctx context.Context, cfg *client.DockerImage, plug...
function installPlugin (line 85) | func installPlugin(ctx context.Context, pluginName string) error {
type pluginInfo (line 95) | type pluginInfo struct
constant pluginInfoMaxAge (line 100) | pluginInfoMaxAge = 24 * time.Hour
function latestPluginVersion (line 104) | func latestPluginVersion(ctx context.Context, pluginName, pluginType str...
type imgResult (line 129) | type imgResult struct
type repsResponse (line 132) | type repsResponse struct
function getLatestPluginVersion (line 136) | func getLatestPluginVersion(ctx context.Context, pluginName string, cfg ...
FILE: pkg/client/docker/teleroute/network.go
constant daemonLabel (line 21) | daemonLabel = "telepresence.io/teleroute/daemon"
function CreateNetwork (line 23) | func CreateNetwork(ctx context.Context, info *daemon.Info, cli *dockerCl...
function IsTelerouteNetwork (line 74) | func IsTelerouteNetwork(ctx context.Context, cli *dockerClient.Client, n...
function NetworkGC (line 87) | func NetworkGC(ctx context.Context, cli *dockerClient.Client) error {
function RemoveNetwork (line 113) | func RemoveNetwork(ctx context.Context, cli *dockerClient.Client, name s...
function ReconnectNetwork (line 136) | func ReconnectNetwork(ctx context.Context, cli *dockerClient.Client, nam...
FILE: pkg/client/docker/teleroute/server.go
type Server (line 5) | type Server interface
FILE: pkg/client/docker/teleroute/server_linux.go
constant bridgeName (line 31) | bridgeName = "br-daemon"
type linkNotFoundError (line 33) | type linkNotFoundError struct
method Error (line 38) | func (e linkNotFoundError) Error() string {
method Unwrap (line 42) | func (e linkNotFoundError) Unwrap() error {
type endpoint (line 46) | type endpoint struct
type server (line 53) | type server struct
method DaemonAddresses (line 83) | func (ts *server) DaemonAddresses() []netip.Addr {
method Connect (line 94) | func (ts *server) Connect(cr *rpc.ConnectRequest, connectServer grpc.S...
method CreateEndpoint (line 117) | func (ts *server) CreateEndpoint(ctx context.Context, request *rpc.Cre...
method Join (line 125) | func (ts *server) Join(ctx context.Context, request *rpc.EndpointIdent...
method createAddressEndpoint (line 137) | func (ts *server) createAddressEndpoint(ctx context.Context) ([2]netli...
method createEndpoint (line 173) | func (ts *server) createEndpoint(ctx context.Context, request *rpc.Cre...
method isIPv6 (line 267) | func (ts *server) isIPv6() bool {
method join (line 279) | func (ts *server) join(ctx context.Context, request *rpc.EndpointIdent...
method Leave (line 330) | func (ts *server) Leave(_ context.Context, request *rpc.EndpointIdenti...
method RemoveEndpoint (line 338) | func (ts *server) RemoveEndpoint(_ context.Context, request *rpc.Endpo...
method bridge (line 346) | func (ts *server) bridge() (netlink.Link, error) {
method serve (line 354) | func (ts *server) serve(ctx context.Context) error {
function StartServer (line 70) | func StartServer(g log.Group, tap *vif.TunnelingDevice, routesCh <-chan ...
function addrFromRaw (line 162) | func addrFromRaw(raw []byte) (netip.Addr, error) {
type responseStringer (line 214) | type responseStringer struct
method String (line 244) | func (r responseStringer) String() string {
function writeRawIP (line 218) | func writeRawIP(raw []byte, w *strings.Builder) {
function writeRawPrefix (line 231) | func writeRawPrefix(raw []byte, w *strings.Builder) {
constant nameRndSize (line 401) | nameRndSize = 7
function generateInterfaceName (line 407) | func generateInterfaceName() string {
function createVethPair (line 413) | func createVethPair(ctx context.Context) (pair [2]netlink.Link, err erro...
FILE: pkg/client/docker/teleroute/server_other.go
function StartServer (line 14) | func StartServer(g log.Group, tap *vif.TunnelingDevice, routesCh <-chan ...
FILE: pkg/client/docker/volume.go
function CreateVolumes (line 24) | func CreateVolumes(
function RemoveVolumes (line 64) | func RemoveVolumes(ctx context.Context, vols []string) {
function VolumeDriverOpts (line 72) | func VolumeDriverOpts(ctx context.Context, pluginName string, hostPort n...
function parsePluginSemver (line 91) | func parsePluginSemver(name string) *semver.Version {
function createVolume (line 101) | func createVolume(ctx context.Context, pluginName string, hostPort netip...
function removeVolume (line 120) | func removeVolume(ctx context.Context, volume string) error {
FILE: pkg/client/docker/volume_test.go
function Test_getLatestPluginVersion (line 13) | func Test_getLatestPluginVersion(t *testing.T) {
FILE: pkg/client/ensured_state.go
type Prolog (line 10) | type Prolog
type Action (line 11) | type Action
function WithEnsuredState (line 16) | func WithEnsuredState(ctx context.Context, prolog Prolog, action, epilog...
FILE: pkg/client/envconfig.go
type Env (line 9) | type Env struct
type envKey (line 26) | type envKey struct
function WithEnv (line 29) | func WithEnv(ctx context.Context, env *Env) context.Context {
function GetEnv (line 33) | func GetEnv(ctx context.Context) *Env {
function LoadEnv (line 41) | func LoadEnv() (Env, error) {
function LoadEnvWith (line 45) | func LoadEnvWith(environment map[string]string) (Env, error) {
FILE: pkg/client/envconfig_unix.go
type OSSpecificEnv (line 5) | type OSSpecificEnv struct
FILE: pkg/client/envconfig_windows.go
type OSSpecificEnv (line 3) | type OSSpecificEnv struct
FILE: pkg/client/install_id.go
function InstallID (line 16) | func InstallID(ctx context.Context) (string, error) {
FILE: pkg/client/k8s/cani.go
function CanPortForward (line 13) | func CanPortForward(ctx context.Context, namespace string) bool {
FILE: pkg/client/k8s/cluster.go
constant supportedKubeAPIVersion (line 35) | supportedKubeAPIVersion = "1.17.0"
constant defaultManagerNamespace (line 36) | defaultManagerNamespace = "ambassador"
type NamespaceListener (line 39) | type NamespaceListener
type Cluster (line 42) | type Cluster struct
method ActualNamespace (line 59) | func (kc *Cluster) ActualNamespace(namespace string) string {
method check (line 70) | func (kc *Cluster) check(c context.Context) error {
method CheckTrafficManagerService (line 102) | func (kc *Cluster) CheckTrafficManagerService(ctx context.Context, nam...
method namespaceAccessible (line 122) | func (kc *Cluster) namespaceAccessible(namespace string) (exists bool) {
method determineTrafficManagerNamespace (line 230) | func (kc *Cluster) determineTrafficManagerNamespace() (string, error) {
method GetCurrentNamespaces (line 256) | func (kc *Cluster) GetCurrentNamespaces(forClientAccess bool) []string {
method GetManagerInstallId (line 275) | func (kc *Cluster) GetManagerInstallId() string {
method StartNamespaceWatcher (line 310) | func (kc *Cluster) StartNamespaceWatcher() {
Condensed preview — 862 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,662K chars).
[
{
"path": ".dockerignore",
"chars": 159,
"preview": ".circleci/\n.idea/\n.git/\nbuild-aux/\nbuild-output/\n!build-output/version.txt\n!build-output/helm-version.txt\nintegration_te"
},
{
"path": ".editorconfig",
"chars": 348,
"preview": "root = true\n\n[*]\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.go]\nin"
},
{
"path": ".gitattributes",
"chars": 79,
"preview": "# Always check out with LF so that golangci-lint doesn't break\n*.go text eol=lf"
},
{
"path": ".github/FUNDING.yml",
"chars": 855,
"preview": "# These are supported funding model platforms\n\ngithub: [thallgren]\npatreon: # Replace with a single Patreon username\nope"
},
{
"path": ".github/ISSUE_TEMPLATE/Bug_report.md",
"chars": 1314,
"preview": "---\r\nname: Bug report\r\nabout: Create a report to help us improve Telepresence\r\n\r\n---\r\n\r\n**Describe the bug**\r\nA clear an"
},
{
"path": ".github/ISSUE_TEMPLATE/Feature_request.md",
"chars": 817,
"preview": "---\r\nname: Feature request\r\nabout: Suggest an idea for Telepresence\r\n\r\n---\r\n\r\n**Please describe your use case / problem."
},
{
"path": ".github/actions/install-dependencies/action.yaml",
"chars": 2721,
"preview": "name: \"Install dependencies\"\ndescription: \"Install dependencies required by the runner\"\nruns:\n using: composite\n steps"
},
{
"path": ".github/actions/upload-logs/action.yaml",
"chars": 994,
"preview": "name: \"Upload logs\"\ndescription: \"Upload logs from the test run\"\nruns:\n using: composite\n steps:\n - run: |\n "
},
{
"path": ".github/pull_request_template.md",
"chars": 774,
"preview": "## Description\n\nA few sentences describing the overall goals of the pull request's commits.\n\n## Checklist\n\n<!--\n Please"
},
{
"path": ".github/workflows/dev.yaml",
"chars": 4187,
"preview": "name: \"Integration Tests\"\non:\n pull_request:\n types:\n - labeled\n\npermissions:\n contents: read\n pull-requests:"
},
{
"path": ".github/workflows/go-dependency-submission.yaml",
"chars": 713,
"preview": "name: Go Dependency Submission\non:\n push:\n branches:\n - release/v2\n\n# The API requires write permission on the "
},
{
"path": ".github/workflows/image-scan.yaml",
"chars": 1169,
"preview": "name: image-scan\non:\n push:\n branches:\n - release/v2\n pull_request:\njobs:\n trivy-container-scan:\n runs-on:"
},
{
"path": ".github/workflows/licenses.yaml",
"chars": 2195,
"preview": "name: \"License verification\"\non:\n pull_request:\n workflow_dispatch:\njobs:\n dependency_info_linux:\n name: \"Linux: V"
},
{
"path": ".github/workflows/release-teleroute.yaml",
"chars": 760,
"preview": "on:\n push:\n tags:\n # These aren't regexps. They are \"Workflow Filter patterns\"\n - teleroute-[0-9]+.[0-9]+."
},
{
"path": ".github/workflows/release.yaml",
"chars": 16668,
"preview": "name: Releases\n\non:\n push:\n tags:\n # These aren't regexps. They are \"Workflow Filter patterns\"\n - v[0-9]+."
},
{
"path": ".github/workflows/stale.yaml",
"chars": 953,
"preview": "name: 'Close stale issues and PR'\non:\n schedule:\n - cron: '12 10 * * *'\n\njobs:\n stale:\n runs-on: ubuntu-latest\n "
},
{
"path": ".github/workflows/unit_tests.yaml",
"chars": 1175,
"preview": "name: \"Build and Unit test\"\non:\n pull_request:\nenv:\n HOMEBREW_NO_INSTALL_FROM_API:\njobs:\n unit:\n strategy:\n f"
},
{
"path": ".gitignore",
"chars": 844,
"preview": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n\n# Test binary, built with `go test -c`\n*.test\n\n# Ou"
},
{
"path": ".golangci.yml",
"chars": 4203,
"preview": "version: \"2\"\nrun:\n build-tags:\n - citest\n modules-download-mode: readonly\nlinters:\n enable:\n - asasalint\n - "
},
{
"path": ".mailmap",
"chars": 1077,
"preview": "Alex Gervais <alex@datawire.io> alex <alex@datawire.io>\nAlex Gervais <alex@datawire.io> "
},
{
"path": ".protolint.yaml",
"chars": 182,
"preview": "lint:\n # Which rules to enable/disable.\n rules:\n remove:\n - ENUM_FIELD_NAMES_PREFIX\n # Settings for those rul"
},
{
"path": "CHANGELOG.OLD.md",
"chars": 72610,
"preview": "# Changelog\n\n### 2.13.3 (May 25, 2023)\n\n- Feature: Add `.Values.hooks.curl.imagePullSecrets` and `.Values.hooks.curl.ima"
},
{
"path": "CHANGELOG.yml",
"chars": 145145,
"preview": "# The YAML in this file should contain:\n#\n# items: An array of releases with the following attributes:\n# - version: "
},
{
"path": "CLAUDE.md",
"chars": 17079,
"preview": "# CLAUDE.md\n\nThis file provides guidance for contributors and AI assistants working with this repository.\n\n## Project Ov"
},
{
"path": "CODE-OF-CONDUCT.md",
"chars": 252,
"preview": "# Code of Conduct\n\nWe follow the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md)"
},
{
"path": "CODEOWNERS",
"chars": 99,
"preview": "# Default codeowners for the telepresenceio/telepresence repository\n* @telepresenceio/telepresence\n"
},
{
"path": "DEPENDENCIES.md",
"chars": 26804,
"preview": "The Go module \"github.com/telepresenceio/telepresence/v2\" incorporates the\nfollowing Free and Open Source software:\n\n "
},
{
"path": "DEPENDENCY_LICENSES.md",
"chars": 547,
"preview": "Telepresence CLI incorporates Free and Open Source software under the following licenses:\n\n* [2-clause BSD license](http"
},
{
"path": "GOVERNANCE-maintainer.md",
"chars": 8548,
"preview": "# Telepresence Project Governance\n\nThe goal of the Telepresence project is to accelerate the \"developer inner loop\" for "
},
{
"path": "LICENSE",
"chars": 11358,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MAINTAINERS.md",
"chars": 1229,
"preview": "# Telepresence Maintainers\n\n[GOVERNANCE.md](GOVERNANCE.md) describes governance guidelines and\nmaintainer responsibiliti"
},
{
"path": "Makefile",
"chars": 1337,
"preview": "# Copyright 2020-2021 Datawire. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "README.md",
"chars": 2253,
"preview": "# Telepresence: Fast, Local Development for Kubernetes\n\n[<img src=\"https://raw.githubusercontent.com/telepresenceio/tele"
},
{
"path": "SECURITY.md",
"chars": 942,
"preview": "# Security Policy\n\n## Supported Versions\n\nSecurity updates will be provided for the latest 2.x release.\n\n\n### How do we "
},
{
"path": "build-aux/INSTALLERS.md",
"chars": 6343,
"preview": "# Telepresence Installers Specification\n\nThis document describes the platform-specific installers that bundle Telepresen"
},
{
"path": "build-aux/admission_controller_tls/main.go",
"chars": 4788,
"preview": "package main\n\nimport (\n\t\"bytes\"\n\tcryptorand \"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/sha1\"\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix"
},
{
"path": "build-aux/docker/images/Dockerfile.client",
"chars": 1848,
"preview": "# syntax = docker/dockerfile:1.3\n\n# Copyright 2020-2022 Datawire. All rights reserved.\n#\n# Licensed under the Apache Lic"
},
{
"path": "build-aux/docker/images/Dockerfile.routecontroller",
"chars": 1347,
"preview": "# syntax = docker/dockerfile:1.3\n\n# Copyright 2024 Datawire. All rights reserved.\n#\n# Licensed under the Apache License,"
},
{
"path": "build-aux/docker/images/Dockerfile.traffic",
"chars": 1719,
"preview": "# syntax = docker/dockerfile:1.3\n\n# Copyright 2020-2022 Datawire. All rights reserved.\n#\n# Licensed under the Apache Lic"
},
{
"path": "build-aux/docker/images/Dockerfile.winbuild",
"chars": 644,
"preview": "FROM golang:1.19.4\n\n\nRUN apt-get update && \\\n apt-get install -y \\\n apt-transport-https \\\n ca-c"
},
{
"path": "build-aux/genversion/main.go",
"chars": 5410,
"preview": "// Copyright 2021 Datawire. All rights reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n/"
},
{
"path": "build-aux/image-importer.yaml",
"chars": 882,
"preview": "apiVersion: apps/v1\nkind: Deployment\nmetadata:\n creationTimestamp: null\n labels:\n app: image-importer\n name: image"
},
{
"path": "build-aux/main.mk",
"chars": 21231,
"preview": "# Copyright 2020-2021 Datawire. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "build-aux/maintenance.mk",
"chars": 268,
"preview": "\n\nupdate-dependencies: $(dir $(shell find . -name go.mod))\n\tfor dir in $?; do\\\n \t\t(cd $$dir && \\\n \t\t (go get -u ./... &&"
},
{
"path": "build-aux/pkg-installer/Distribution.xml",
"chars": 1266,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<installer-script minSpecVersion=\"1\" forVolumeCalculation=\"any\" authoringTool=\"co"
},
{
"path": "build-aux/pkg-installer/build-pkg.sh",
"chars": 6168,
"preview": "#!/usr/bin/env bash\nset -e\n\n# Validate that VERSION is set and a valid SemVer\n[[ -z \"${VERSION}\" ]] && { echo \"Error: VE"
},
{
"path": "build-aux/pkg-installer/io.telepresence.rootd.plist",
"chars": 1191,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "build-aux/pkg-installer/postinstall",
"chars": 666,
"preview": "#!/bin/bash\nset -e\n\nmkdir -p \"/Library/Application Support/telepresence\"\nmkdir -p \"/Library/Caches/telepresence\"\ntouch \""
},
{
"path": "build-aux/pkg-installer/syslog.conf",
"chars": 207,
"preview": "# /etc/newsyslog.d/telepresence-rootd.conf\n# Rotate telepresence-rootd.log daily, keep 7 days, compress, restart daemon\n"
},
{
"path": "build-aux/pkg-installer/telepresence-rootd",
"chars": 621,
"preview": "#!/bin/bash\nACTION=\"$1\"\nif [[ \"$ACTION\" != \"start\" && \"$ACTION\" != \"stop\" && \"$ACTION\" != \"restart\" ]]; then\n echo \"U"
},
{
"path": "build-aux/pkg-installer/uninstall",
"chars": 422,
"preview": "#!/usr/bin/env bash\necho \"Uninstalling Telepresence...\"\nsudo /bin/launchctl unload -w /Library/LaunchDaemons/io.telepres"
},
{
"path": "build-aux/pkg-installer/welcome.rtf",
"chars": 986,
"preview": "{\\rtf1\\ansi\\ansicpg1252\\cocoartf2822\n\\cocoatextscaling0\\cocoaplatform0{\\fonttbl\\f0\\fswiss\\fcharset0 Helvetica-Bold;\\f1\\f"
},
{
"path": "build-aux/prelude.mk",
"chars": 2160,
"preview": "# Copyright 2020-2021 Datawire. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "build-aux/systemd-installer/.gitignore",
"chars": 10,
"preview": "nfpm.yaml\n"
},
{
"path": "build-aux/systemd-installer/build-packages.sh",
"chars": 3062,
"preview": "#!/bin/bash\nset -e\n\n# Build .deb and .rpm packages using nfpm\n\n# Validate required environment variables\n[[ -z \"${VERSIO"
},
{
"path": "build-aux/systemd-installer/config.yml",
"chars": 143,
"preview": "# Telepresence root daemon configuration\n# See https://www.telepresence.io/docs/reference/config for all options\n\nlogLev"
},
{
"path": "build-aux/systemd-installer/nfpm.yaml.in",
"chars": 1563,
"preview": "# nfpm configuration for building .deb and .rpm packages\n# Documentation: https://nfpm.goreleaser.com/configuration/\n\nna"
},
{
"path": "build-aux/systemd-installer/postinstall.sh",
"chars": 780,
"preview": "#!/bin/bash\nset -e\n\n# Create required directories\nmkdir -p /var/cache/telepresence/rootd\nmkdir -p /etc/telepresence\nchmo"
},
{
"path": "build-aux/systemd-installer/postremove.sh",
"chars": 319,
"preview": "#!/bin/bash\nset -e\n\n# Reload systemd to forget about the removed service\nsystemctl daemon-reload || true\n\necho \"\"\necho \""
},
{
"path": "build-aux/systemd-installer/preremove.sh",
"chars": 443,
"preview": "#!/bin/bash\nset -e\n\n# Stop the service if running\nif systemctl is-active --quiet telepresence-rootd.service 2>/dev/null;"
},
{
"path": "build-aux/systemd-installer/telepresence-rootd.service",
"chars": 1198,
"preview": "[Unit]\nDescription=Telepresence root daemon (rootd)\nDocumentation=https://telepresence.io/\nAfter=network.target\n\n[Servic"
},
{
"path": "build-aux/systemd-installer/uninstall.sh",
"chars": 1085,
"preview": "#!/bin/bash\nset -e\n\necho \"Uninstalling Telepresence...\"\n\n# Stop and disable the service\nif systemctl is-active --quiet t"
},
{
"path": "build-aux/tools.mk",
"chars": 5748,
"preview": "# Copyright 2020-2021 Datawire. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\")"
},
{
"path": "build-aux/unparsable-packages.yaml",
"chars": 136,
"preview": "# Packages whose licenses cannot be auto-detected by go-mkopensource.\n# Format: package-import-path: [list of SPDX licen"
},
{
"path": "build-aux/winmake.bat",
"chars": 1878,
"preview": "echo off\nsetlocal\nmkdir .wintools\nmkdir .gocache\n\nif \"%TELEPRESENCE_REGISTRY%\" == \"\" (\n echo \"Please define a %%TELEP"
},
{
"path": "build-aux/wix-installer/Dialogs_en-us.wxl",
"chars": 756,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<WixLocalization xmlns=\"http://wixtoolset.org/schemas/v4/wxl\" Culture=\"en-US\" Cod"
},
{
"path": "build-aux/wix-installer/MainPackage.wxs",
"chars": 9102,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\"\n xmlns:ui=\"http://wixtoolset"
},
{
"path": "build-aux/wix-installer/Makefile",
"chars": 5953,
"preview": "# Makefile — complete Telepresence Windows installer\n# Run: make bundle → produces TelepresenceInstall.exe\n# "
},
{
"path": "build-aux/wix-installer/Telepresence.wxs",
"chars": 1496,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Wix xmlns=\"http://wixtoolset.org/schemas/v4/wxs\" xmlns:bal=\"http://wixtoolset.or"
},
{
"path": "build-aux/wix-installer/config.yml",
"chars": 0,
"preview": ""
},
{
"path": "build-aux/wix-installer/tpwrapper.go",
"chars": 3227,
"preview": "//go:build windows\npackage main\n\nimport (\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\n\t\"golang.org/x/sys/windows/"
},
{
"path": "build-aux/wix-installer/txt2rtf.ps1",
"chars": 418,
"preview": "param(\n [Parameter(Mandatory)][string]$InputFile,\n [Parameter(Mandatory)][string]$OutputFile\n)\n\nAdd-Type -Assembly"
},
{
"path": "charts/chart.go",
"chars": 5047,
"preview": "package charts\n\nimport (\n\t\"archive/tar\"\n\t\"compress/gzip\"\n\t\"embed\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"sort\"\n\t\"strings\"\n\n\t\""
},
{
"path": "charts/telepresence-oss/.helmignore",
"chars": 349,
"preview": "# Patterns to ignore when building packages.\n# This supports shell glob matching, relative path matching, and\n# negation"
},
{
"path": "charts/telepresence-oss/Chart.yaml",
"chars": 771,
"preview": "apiVersion: v2\nname: telepresence-oss\ndescription: A chart for deploying the server-side components of Telepresence\ntype"
},
{
"path": "charts/telepresence-oss/README.md",
"chars": 32700,
"preview": "# Telepresence\n\n[Telepresence](https://telepresence.io/) is a tool\nthat allows for local development of microservices ru"
},
{
"path": "charts/telepresence-oss/templates/NOTES.txt",
"chars": 845,
"preview": "--------------------------------------------------------------------------------\nCongratulations!\n\n\nYou have successfull"
},
{
"path": "charts/telepresence-oss/templates/_helpers.tpl",
"chars": 7780,
"preview": "{{/*\nExpand the name of the chart.\n*/}}\n{{- define \"telepresence.name\" -}}\n{{- default .Chart.Name .Values.nameOverride "
},
{
"path": "charts/telepresence-oss/templates/agentInjectorWebhook.yaml",
"chars": 6219,
"preview": "{{- if and (not (and .Values.rbac .Values.rbac.only)) .Values.agentInjector.enabled }}\n{{- $namespaceSelector := mustFro"
},
{
"path": "charts/telepresence-oss/templates/certificate.yaml",
"chars": 549,
"preview": "{{- if and (eq .Values.agentInjector.certificate.method \"certmanager\") .Values.agentInjector.enabled }}\napiVersion: cert"
},
{
"path": "charts/telepresence-oss/templates/clientRbac/cluster-scope.yaml",
"chars": 974,
"preview": "{{- /*\nThese are the cluster-wide rbac roles + bindings that will be used by users\nwho want to use telepresence once its"
},
{
"path": "charts/telepresence-oss/templates/clientRbac/connect.yaml",
"chars": 1068,
"preview": "{{- with .Values.clientRbac }}\n{{- if .create }}\n{{- /*\nClient must have the following RBAC in the traffic-manager.names"
},
{
"path": "charts/telepresence-oss/templates/clientRbac/namespace-scope.yaml",
"chars": 2246,
"preview": "{{- /*\nThese are the namespace-scoped rbac roles + bindings that will be used by users\nwho want to use telepresence once"
},
{
"path": "charts/telepresence-oss/templates/deployment.yaml",
"chars": 11682,
"preview": "{{- with .Values }}\n{{- if not (and .rbac .rbac.only) }}\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: {{ inclu"
},
{
"path": "charts/telepresence-oss/templates/issuer.yaml",
"chars": 327,
"preview": "{{- if and (eq .Values.agentInjector.certificate.method \"certmanager\") .Values.agentInjector.enabled }}\napiVersion: cert"
},
{
"path": "charts/telepresence-oss/templates/pre-delete-hook.yaml",
"chars": 2870,
"preview": "{{- if and (not (and .Values.rbac .Values.rbac.only)) .Values.agentInjector.enabled }}\napiVersion: batch/v1\nkind: Job\nme"
},
{
"path": "charts/telepresence-oss/templates/routecontroller-daemonset.yaml",
"chars": 1573,
"preview": "{{- $localCluster := or (eq .Values.image.registry \"local\") (hasPrefix \"localhost:\" .Values.image.registry) }}\n{{- $rcEn"
},
{
"path": "charts/telepresence-oss/templates/routecontroller-rbac.yaml",
"chars": 1229,
"preview": "{{- $localCluster := or (eq .Values.image.registry \"local\") (hasPrefix \"localhost:\" .Values.image.registry) }}\n{{- $rcEn"
},
{
"path": "charts/telepresence-oss/templates/service.yaml",
"chars": 1344,
"preview": "{{- with .Values }}\n{{- if not (and .rbac .rbac.only) }}\napiVersion: v1\nkind: Service\nmetadata:\n name: {{ include \"traf"
},
{
"path": "charts/telepresence-oss/templates/tests/test-connection.yaml",
"chars": 712,
"preview": "{{- if not (and .Values.rbac .Values.rbac.only) }}\napiVersion: v1\nkind: Pod\nmetadata:\n name: \"{{ include \"traffic-manag"
},
{
"path": "charts/telepresence-oss/templates/trafficManager-configmap.yaml",
"chars": 616,
"preview": "apiVersion: v1\nkind: ConfigMap\nmetadata:\n name: {{ include \"traffic-manager.name\" $ }}\n namespace: {{ include \"traffic"
},
{
"path": "charts/telepresence-oss/templates/trafficManagerRbac/cluster-scope.yaml",
"chars": 2081,
"preview": "{{- with .Values }}\n{{- if and .managerRbac.create (not (include \"traffic-manager.namespaced\" $)) }}\n{{- /*\nThis file co"
},
{
"path": "charts/telepresence-oss/templates/trafficManagerRbac/namespace-scope.yaml",
"chars": 4467,
"preview": "{{- if .Values.managerRbac.create }}\n{{- /*\nThis file contains the various namespace-scoped roles + bindings that the tr"
},
{
"path": "charts/telepresence-oss/templates/trafficManagerRbac/service-account.yaml",
"chars": 332,
"preview": "{{- if .Values.managerRbac.create }}\n{{- /* This file contains the serviceAccount used for the traffic-manager deploymen"
},
{
"path": "charts/telepresence-oss/templates/trafficManagerRbac/webhook-secret.yaml",
"chars": 935,
"preview": "{{- if and (not (eq .Values.agentInjector.certificate.accessMethod \"mount\")) .Values.agentInjector.enabled }}\napiVersion"
},
{
"path": "charts/telepresence-oss/values.schema.yaml",
"chars": 23309,
"preview": "$schema: https://json-schema.org/draft/2020-12/schema#\n$id: https://github.com/telepresenceio/telepresence-oss.schema.js"
},
{
"path": "charts/telepresence-oss/values.yaml",
"chars": 8404,
"preview": "################################################################################\n## Deployment Configuration\n###########"
},
{
"path": "cmd/cobraparser/LICENSE",
"chars": 11358,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "cmd/cobraparser/README.md",
"chars": 724,
"preview": "# Cobra Help Output Parser\n\n## Parser\nThe `cobraparser` is a tool to parse the output produced by the `spf13.CobraComman"
},
{
"path": "cmd/cobraparser/generate/generate.go",
"chars": 3965,
"preview": "package generate\n\nimport (\n\t\"fmt\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n\n\t\"github.com/docker/docker/opts\"\n\t\"github.com/spf13/pfl"
},
{
"path": "cmd/cobraparser/go.mod",
"chars": 524,
"preview": "module github.com/telepresenceio/telepresence/cmd/cobraparser/v2\n\ngo 1.24\n\nrequire (\n\tgithub.com/docker/docker v28.5.2+i"
},
{
"path": "cmd/cobraparser/go.sum",
"chars": 1756,
"preview": "github.com/docker/docker v28.5.2+incompatible h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=\ngithub.com/docker/docker v"
},
{
"path": "cmd/cobraparser/main.go",
"chars": 958,
"preview": "//go:build go1.24\n\npackage main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\n\t\"github.com/spf13/pflag\"\n\n\t\"github.com/"
},
{
"path": "cmd/cobraparser/types/commandinfo.go",
"chars": 7511,
"preview": "package types\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"regexp\"\n\t\"strconv\"\n\t\"strings\"\n\t\"time\"\n)\n\n// CommandInfo descr"
},
{
"path": "cmd/routecontroller/main.go",
"chars": 4921,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"net\"\n\t\"os\"\n\t\"strings\"\n\n\t\"github.com/coreos/go-iptables/iptables\"\n\tmeta \"k8s.i"
},
{
"path": "cmd/teleroute/.gitignore",
"chars": 4,
"preview": "rpc/"
},
{
"path": "cmd/teleroute/DEVELOPING.md",
"chars": 776,
"preview": "# Docker network plugin for Telepresence\n\n## Debugging\n\nStart by configuring telepresence to not check for the latest ve"
},
{
"path": "cmd/teleroute/Dockerfile",
"chars": 473,
"preview": "FROM --platform=$BUILDPLATFORM golang:alpine AS builder\n\nRUN apk add --no-cache --virtual .build-deps gcc libc-dev\nWORKD"
},
{
"path": "cmd/teleroute/Makefile",
"chars": 3459,
"preview": "# Avoid potential confusion about what shell to use\nSHELL := /bin/bash\n\n# Delete implicit rules not used here (clutters "
},
{
"path": "cmd/teleroute/config.json",
"chars": 544,
"preview": "{\n \"description\": \"Docker network plugin for Telepresence\",\n \"documentation\": \"https://docs.docker.com/engine/extend/p"
},
{
"path": "cmd/teleroute/driver/driver.go",
"chars": 2835,
"preview": "package driver\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/docker/go-plugins-helpers/network\"\n\t\"github.com/puzpuzpuz/xsync"
},
{
"path": "cmd/teleroute/driver/network.go",
"chars": 8051,
"preview": "package driver\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/netip\"\n\t\"strconv\"\n\t\"time\"\n\n\t\"github.com/cenkalti/backof"
},
{
"path": "cmd/teleroute/driver/options.go",
"chars": 1254,
"preview": "package driver\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net/netip\"\n\t\"strconv\"\n)\n\ntype options struct {\n\t// host IP on the default br"
},
{
"path": "cmd/teleroute/go.mod",
"chars": 887,
"preview": "module github.com/telepresenceio/telepresence/cmd/teleroute\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/cenkalti/backoff/v4 v4.3.0"
},
{
"path": "cmd/teleroute/go.sum",
"chars": 4726,
"preview": "github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=\ngithub.com/Microsoft/go-winio v0.6."
},
{
"path": "cmd/teleroute/main.go",
"chars": 1977,
"preview": "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"log/slog\"\n\t\"os\"\n\t\"os/signal\"\n\t\"path/filepath\"\n\t\"strconv\"\n\t\"syscall\"\n\n\t\"github"
},
{
"path": "docs/CONTRIBUTING.md",
"chars": 944,
"preview": "# Telepresence Documentation\n\nThis folder contains the Telepresence documentation in a format suitable for a versioned f"
},
{
"path": "docs/README.md",
"chars": 8297,
"preview": "---\ndescription: Main menu when using plain markdown. Excluded when generating the website\n---\n# <img src=\"images/logo.p"
},
{
"path": "docs/common/quantity.md",
"chars": 298,
"preview": "---\ntitle: Quantity\n---\nQuantity is measured in bytes. You can express it as a plain integer or as a fixed-point number "
},
{
"path": "docs/community.md",
"chars": 473,
"preview": "---\ntitle: Community\nhide_table_of_contents: true\n---\n\n# Community\n\n## Contributor's guide\nPlease review our [contributo"
},
{
"path": "docs/compare/mirrord.md",
"chars": 6327,
"preview": "---\ntitle: \"Telepresence vs mirrord\"\nhide_table_of_contents: true\n---\n\n## Telepresence\n\nTelepresence is a very feature r"
},
{
"path": "docs/concepts/devloop.md",
"chars": 5338,
"preview": "---\ntitle: The developer experience and the inner dev loop\nhide_table_of_contents: true\n---\n\n# The developer experience "
},
{
"path": "docs/concepts/faster.md",
"chars": 3244,
"preview": "---\ntitle: \"Making the remote local: Faster feedback, collaboration and debugging\"\nhide_table_of_contents: true\n---\n\n---"
},
{
"path": "docs/concepts/intercepts.md",
"chars": 1750,
"preview": "---\ntitle: \"Intercepts\"\ndescription: \"Short demonstration of global intercepts\"\nhide_table_of_contents: true\n---\n\nimport"
},
{
"path": "docs/doc-links.yml",
"chars": 11188,
"preview": "- title: Quick start\n link: quick-start\n- title: Install Telepresence\n items:\n - title: Install Client\n link: "
},
{
"path": "docs/faqs.md",
"chars": 7810,
"preview": "---\ntitle: FAQs\ndescription: \"Learn how Telepresence helps with fast development and debugging in your Kubernetes cluste"
},
{
"path": "docs/helm/values.schema.json",
"chars": 19887,
"preview": "{\"$defs\":{\"affinity\":{\"$ref\":\"#/definitions/io.k8s.api.core.v1.Affinity\"},\"duration\":{\"pattern\":\"^[+-]?(\\\\d+(\\\\.\\\\d+)?(h"
},
{
"path": "docs/howtos/cluster-in-vm.md",
"chars": 7746,
"preview": "---\ntitle: Host a cluster in Docker or a VM\ndescription: Use Telepresence to engage with services in a cluster running i"
},
{
"path": "docs/howtos/docker-compose.md",
"chars": 16210,
"preview": "---\ntitle: \"Using Telepresence with Docker Compose\"\nhide_table_of_contents: true\n---\n# Telepresence Docker Compose Exten"
},
{
"path": "docs/howtos/docker.md",
"chars": 5154,
"preview": "---\ntitle: \"Using Telepresence with Docker\"\nhide_table_of_contents: true\n---\n# Telepresence with Docker\n\n## Why?\n\nIt can"
},
{
"path": "docs/howtos/engage.md",
"chars": 17185,
"preview": "---\ntitle: Code and debug an application locally\ndescription: Start using Telepresence in your own environment. Follow t"
},
{
"path": "docs/howtos/large-clusters.md",
"chars": 3334,
"preview": "---\ntitle: Work with large clusters\ndescription: Use Telepresence to intercept services in clusters with a large number "
},
{
"path": "docs/howtos/mtls.md",
"chars": 6333,
"preview": "---\ntitle: Intercepting Applications Using TLS/mTLS\ndescription: How to perform HTTP-filtered intercepts with encrypted "
},
{
"path": "docs/install/client.md",
"chars": 11434,
"preview": "---\ntitle: Install client\nhide_table_of_contents: true\n---\n\n\nimport Platform from '@site/src/components/Platform';\n\n# Cl"
},
{
"path": "docs/install/cloud.md",
"chars": 3053,
"preview": "---\ntitle: Cloud Provider Prerequisites\nhide_table_of_contents: true\n---\n\n# Provider Prerequisites for Traffic Manager\n\n"
},
{
"path": "docs/install/manager.md",
"chars": 9550,
"preview": "---\ntitle: Install Traffic Manager\nhide_table_of_contents: true\n---\n\n# Install/Uninstall the Traffic Manager\n\nTelepresen"
},
{
"path": "docs/install/upgrade.md",
"chars": 3333,
"preview": "---\ntitle: Upgrade client\ndescription: \"How to upgrade your installation of Telepresence and install previous versions.\""
},
{
"path": "docs/licenses.md",
"chars": 547,
"preview": "Telepresence CLI incorporates Free and Open Source software under the following licenses:\n\n* [2-clause BSD license](http"
},
{
"path": "docs/quick-start.md",
"chars": 1278,
"preview": "---\ntitle: Quick start\ndescription: \"Start using Telepresence in your own environment. Follow these steps to intercept y"
},
{
"path": "docs/redirects.yml",
"chars": 32,
"preview": "- {from: \"\", to: \"quick-start\"}\n"
},
{
"path": "docs/reference/architecture.md",
"chars": 2404,
"preview": "---\ntitle: Architecture\ndescription: How Telepresence works to intercept traffic from your Kubernetes cluster to code ru"
},
{
"path": "docs/reference/cli/telepresence.md",
"chars": 3741,
"preview": "---\ntitle: telepresence\ndescription: Connect your workstation to a Kubernetes cluster\nhide_table_of_contents: true\n---\n\n"
},
{
"path": "docs/reference/cli/telepresence_completion.md",
"chars": 2024,
"preview": "---\ntitle: telepresence completion\ndescription: Generate a shell completion script\nhide_table_of_contents: true\n---\n\nGen"
},
{
"path": "docs/reference/cli/telepresence_compose.md",
"chars": 4111,
"preview": "---\ntitle: telepresence compose\ndescription: Define and run multi-container applications with Telepresence and Docker\nhi"
},
{
"path": "docs/reference/cli/telepresence_compose_attach.md",
"chars": 1600,
"preview": "---\ntitle: telepresence compose attach\ndescription: Attach local standard input, output, and error streams to a service'"
},
{
"path": "docs/reference/cli/telepresence_compose_bridge.md",
"chars": 1199,
"preview": "---\ntitle: telepresence compose bridge\ndescription: Convert compose files into another model\nhide_table_of_contents: tru"
},
{
"path": "docs/reference/cli/telepresence_compose_build.md",
"chars": 2097,
"preview": "---\ntitle: telepresence compose build\ndescription: Build or rebuild services\nhide_table_of_contents: true\n---\n\nBuild or "
},
{
"path": "docs/reference/cli/telepresence_compose_commit.md",
"chars": 1591,
"preview": "---\ntitle: telepresence compose commit\ndescription: Create a new image from a service container's changes\nhide_table_of_"
},
{
"path": "docs/reference/cli/telepresence_compose_config.md",
"chars": 2602,
"preview": "---\ntitle: telepresence compose config\ndescription: Parse, resolve and render compose file in canonical format\nhide_tabl"
},
{
"path": "docs/reference/cli/telepresence_compose_cp.md",
"chars": 1486,
"preview": "---\ntitle: telepresence compose cp\ndescription: docker compose cp [OPTIONS] SRC_PATH|- SERVICE:DEST_PATH\nhide_table_of_c"
},
{
"path": "docs/reference/cli/telepresence_compose_create.md",
"chars": 2053,
"preview": "---\ntitle: telepresence compose create\ndescription: Creates containers for a service\nhide_table_of_contents: true\n---\n\nC"
},
{
"path": "docs/reference/cli/telepresence_compose_down.md",
"chars": 1647,
"preview": "---\ntitle: telepresence compose down\ndescription: Stop and remove containers, networks\nhide_table_of_contents: true\n---\n"
},
{
"path": "docs/reference/cli/telepresence_compose_events.md",
"chars": 1384,
"preview": "---\ntitle: telepresence compose events\ndescription: Receive real time events from containers\nhide_table_of_contents: tru"
},
{
"path": "docs/reference/cli/telepresence_compose_exec.md",
"chars": 1707,
"preview": "---\ntitle: telepresence compose exec\ndescription: Execute a command in a running container\nhide_table_of_contents: true\n"
},
{
"path": "docs/reference/cli/telepresence_compose_export.md",
"chars": 1370,
"preview": "---\ntitle: telepresence compose export\ndescription: Export a service container's filesystem as a tar archive\nhide_table_"
},
{
"path": "docs/reference/cli/telepresence_compose_images.md",
"chars": 1337,
"preview": "---\ntitle: telepresence compose images\ndescription: List images used by the created containers\nhide_table_of_contents: t"
},
{
"path": "docs/reference/cli/telepresence_compose_kill.md",
"chars": 1357,
"preview": "---\ntitle: telepresence compose kill\ndescription: Force stop service containers\nhide_table_of_contents: true\n---\n\nForce "
},
{
"path": "docs/reference/cli/telepresence_compose_logs.md",
"chars": 1780,
"preview": "---\ntitle: telepresence compose logs\ndescription: View output from containers\nhide_table_of_contents: true\n---\n\nView out"
},
{
"path": "docs/reference/cli/telepresence_compose_ls.md",
"chars": 1430,
"preview": "---\ntitle: telepresence compose ls\ndescription: List running compose projects\nhide_table_of_contents: true\n---\n\nList run"
},
{
"path": "docs/reference/cli/telepresence_compose_pause.md",
"chars": 1143,
"preview": "---\ntitle: telepresence compose pause\ndescription: Pause services\nhide_table_of_contents: true\n---\n\nPause services\n\n### "
},
{
"path": "docs/reference/cli/telepresence_compose_port.md",
"chars": 1349,
"preview": "---\ntitle: telepresence compose port\ndescription: Print the public port for a port binding\nhide_table_of_contents: true\n"
},
{
"path": "docs/reference/cli/telepresence_compose_ps.md",
"chars": 2156,
"preview": "---\ntitle: telepresence compose ps\ndescription: List containers\nhide_table_of_contents: true\n---\n\nList containers\n\n### U"
},
{
"path": "docs/reference/cli/telepresence_compose_publish.md",
"chars": 1608,
"preview": "---\ntitle: telepresence compose publish\ndescription: Publish compose application\nhide_table_of_contents: true\n---\n\nPubli"
},
{
"path": "docs/reference/cli/telepresence_compose_pull.md",
"chars": 1536,
"preview": "---\ntitle: telepresence compose pull\ndescription: Pull service images\nhide_table_of_contents: true\n---\n\nPull service ima"
},
{
"path": "docs/reference/cli/telepresence_compose_push.md",
"chars": 1393,
"preview": "---\ntitle: telepresence compose push\ndescription: Push service images\nhide_table_of_contents: true\n---\n\nPush service ima"
},
{
"path": "docs/reference/cli/telepresence_compose_restart.md",
"chars": 1289,
"preview": "---\ntitle: telepresence compose restart\ndescription: Restart service containers\nhide_table_of_contents: true\n---\n\nRestar"
},
{
"path": "docs/reference/cli/telepresence_compose_rm.md",
"chars": 1355,
"preview": "---\ntitle: telepresence compose rm\ndescription: Removes stopped service containers\nhide_table_of_contents: true\n---\n\nRem"
},
{
"path": "docs/reference/cli/telepresence_compose_run.md",
"chars": 3109,
"preview": "---\ntitle: telepresence compose run\ndescription: Run a one-off command on a service\nhide_table_of_contents: true\n---\n\nRu"
},
{
"path": "docs/reference/cli/telepresence_compose_scale.md",
"chars": 1188,
"preview": "---\ntitle: telepresence compose scale\ndescription: Scale services\nhide_table_of_contents: true\n---\n\nScale services\n\n### "
},
{
"path": "docs/reference/cli/telepresence_compose_start.md",
"chars": 1334,
"preview": "---\ntitle: telepresence compose start\ndescription: Start services\nhide_table_of_contents: true\n---\n\nStart services\n\n### "
},
{
"path": "docs/reference/cli/telepresence_compose_stats.md",
"chars": 1877,
"preview": "---\ntitle: telepresence compose stats\ndescription: Display a live stream of container(s) resource usage statistics\nhide_"
},
{
"path": "docs/reference/cli/telepresence_compose_stop.md",
"chars": 1196,
"preview": "---\ntitle: telepresence compose stop\ndescription: Stop services\nhide_table_of_contents: true\n---\n\nStop services\n\n### Usa"
},
{
"path": "docs/reference/cli/telepresence_compose_top.md",
"chars": 1165,
"preview": "---\ntitle: telepresence compose top\ndescription: Display the running processes\nhide_table_of_contents: true\n---\n\nDisplay"
},
{
"path": "docs/reference/cli/telepresence_compose_unpause.md",
"chars": 1155,
"preview": "---\ntitle: telepresence compose unpause\ndescription: Unpause services\nhide_table_of_contents: true\n---\n\nUnpause services"
},
{
"path": "docs/reference/cli/telepresence_compose_up.md",
"chars": 4123,
"preview": "---\ntitle: telepresence compose up\ndescription: Create and start containers\nhide_table_of_contents: true\n---\n\nCreate and"
},
{
"path": "docs/reference/cli/telepresence_compose_version.md",
"chars": 1354,
"preview": "---\ntitle: telepresence compose version\ndescription: Show the Docker Compose version information\nhide_table_of_contents:"
},
{
"path": "docs/reference/cli/telepresence_compose_volumes.md",
"chars": 1654,
"preview": "---\ntitle: telepresence compose volumes\ndescription: List volumes\nhide_table_of_contents: true\n---\n\nList volumes\n\n### Us"
},
{
"path": "docs/reference/cli/telepresence_compose_wait.md",
"chars": 1296,
"preview": "---\ntitle: telepresence compose wait\ndescription: Block until containers of all (or specified) services stop.\nhide_table"
},
{
"path": "docs/reference/cli/telepresence_compose_watch.md",
"chars": 1448,
"preview": "---\ntitle: telepresence compose watch\ndescription: Watch build context for service and rebuild/refresh containers when f"
},
{
"path": "docs/reference/cli/telepresence_config.md",
"chars": 988,
"preview": "---\ntitle: telepresence config\ndescription: Telepresence configuration commands\nhide_table_of_contents: true\n---\n\nTelepr"
},
{
"path": "docs/reference/cli/telepresence_config_view.md",
"chars": 820,
"preview": "---\ntitle: telepresence config view\ndescription: View current Telepresence configuration\nhide_table_of_contents: true\n--"
},
{
"path": "docs/reference/cli/telepresence_connect.md",
"chars": 4962,
"preview": "---\ntitle: telepresence connect\ndescription: Connect to a cluster\nhide_table_of_contents: true\n---\n\nConnect to a cluster"
},
{
"path": "docs/reference/cli/telepresence_curl.md",
"chars": 704,
"preview": "---\ntitle: telepresence curl\ndescription: curl with daemon network\nhide_table_of_contents: true\n---\n\ncurl with daemon ne"
},
{
"path": "docs/reference/cli/telepresence_docker-run.md",
"chars": 734,
"preview": "---\ntitle: telepresence docker-run\ndescription: Docker run with daemon network\nhide_table_of_contents: true\n---\n\nDocker "
},
{
"path": "docs/reference/cli/telepresence_gather-logs.md",
"chars": 2555,
"preview": "---\ntitle: telepresence gather-logs\ndescription: Gather logs from traffic-manager, traffic-agent, user and root daemons,"
},
{
"path": "docs/reference/cli/telepresence_genyaml.md",
"chars": 2246,
"preview": "---\ntitle: telepresence genyaml\ndescription: Generate YAML for use in kubernetes manifests.\nhide_table_of_contents: true"
},
{
"path": "docs/reference/cli/telepresence_genyaml_annotations.md",
"chars": 1143,
"preview": "---\ntitle: telepresence genyaml annotations\ndescription: Generate YAML for the pod template metadata annotations.\nhide_t"
},
{
"path": "docs/reference/cli/telepresence_genyaml_config.md",
"chars": 4147,
"preview": "---\ntitle: telepresence genyaml config\ndescription: Generate YAML for the agent's entry in the telepresence-agents confi"
},
{
"path": "docs/reference/cli/telepresence_genyaml_container.md",
"chars": 3459,
"preview": "---\ntitle: telepresence genyaml container\ndescription: Generate YAML for the traffic-agent container.\nhide_table_of_cont"
},
{
"path": "docs/reference/cli/telepresence_genyaml_initcontainer.md",
"chars": 3310,
"preview": "---\ntitle: telepresence genyaml initcontainer\ndescription: Generate YAML for the traffic-agent init container.\nhide_tabl"
},
{
"path": "docs/reference/cli/telepresence_genyaml_volume.md",
"chars": 3441,
"preview": "---\ntitle: telepresence genyaml volume\ndescription: Generate YAML for the traffic-agent volume.\nhide_table_of_contents: "
},
{
"path": "docs/reference/cli/telepresence_helm.md",
"chars": 1352,
"preview": "---\ntitle: telepresence helm\ndescription: Helm commands using the embedded Telepresence Helm chart.\nhide_table_of_conten"
},
{
"path": "docs/reference/cli/telepresence_helm_install.md",
"chars": 6047,
"preview": "---\ntitle: telepresence helm install\ndescription: Install telepresence traffic manager\nhide_table_of_contents: true\n---\n"
},
{
"path": "docs/reference/cli/telepresence_helm_lint.md",
"chars": 5849,
"preview": "---\ntitle: telepresence helm lint\ndescription: Verify the embedded telepresence Helm chart\nhide_table_of_contents: true\n"
},
{
"path": "docs/reference/cli/telepresence_helm_uninstall.md",
"chars": 5063,
"preview": "---\ntitle: telepresence helm uninstall\ndescription: Uninstall telepresence traffic manager\nhide_table_of_contents: true\n"
},
{
"path": "docs/reference/cli/telepresence_helm_upgrade.md",
"chars": 6290,
"preview": "---\ntitle: telepresence helm upgrade\ndescription: Upgrade telepresence traffic manager\nhide_table_of_contents: true\n---\n"
},
{
"path": "docs/reference/cli/telepresence_helm_version.md",
"chars": 755,
"preview": "---\ntitle: telepresence helm version\ndescription: Print the version of the Helm client\nhide_table_of_contents: true\n---\n"
},
{
"path": "docs/reference/cli/telepresence_ingest.md",
"chars": 3159,
"preview": "---\ntitle: telepresence ingest\ndescription: Ingest a container\nhide_table_of_contents: true\n---\n\nIngest a container\n\n###"
},
{
"path": "docs/reference/cli/telepresence_intercept.md",
"chars": 5683,
"preview": "---\ntitle: telepresence intercept\ndescription: Intercept a service\nhide_table_of_contents: true\n---\n\nIntercept a service"
},
{
"path": "docs/reference/cli/telepresence_leave.md",
"chars": 794,
"preview": "---\ntitle: telepresence leave\ndescription: Remove existing intercept\nhide_table_of_contents: true\n---\n\nRemove existing i"
}
]
// ... and 662 more files (download for full content)
About this extraction
This page contains the full source code of the telepresenceio/telepresence GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 862 files (4.1 MB), approximately 1.1M tokens, and a symbol index with 5614 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.