MCPcopy Index your code
hub / github.com/coder/coder / createTailnet

Method createTailnet

agent/agent.go:1723–1884  ·  view source on GitHub ↗
(
	ctx context.Context,
	agentID uuid.UUID,
	derpMap *tailcfg.DERPMap,
	derpForceWebSockets, disableDirectConnections bool,
	keySeed int64,
)

Source from the content-addressed store, hash-verified

1721}
1722
1723func (a *agent) createTailnet(
1724 ctx context.Context,
1725 agentID uuid.UUID,
1726 derpMap *tailcfg.DERPMap,
1727 derpForceWebSockets, disableDirectConnections bool,
1728 keySeed int64,
1729) (_ *tailnet.Conn, err error) {
1730 // Inject `CODER_AGENT_HEADER` into the DERP header.
1731 var header http.Header
1732 if client, ok := a.client.(*agentsdk.Client); ok {
1733 if headerTransport, ok := client.SDK.HTTPClient.Transport.(*codersdk.HeaderTransport); ok {
1734 header = headerTransport.Header
1735 }
1736 }
1737 network, err := tailnet.NewConn(&tailnet.Options{
1738 ID: agentID,
1739 Addresses: a.wireguardAddresses(agentID),
1740 DERPMap: derpMap,
1741 DERPForceWebSockets: derpForceWebSockets,
1742 DERPHeader: &header,
1743 DERPTLSConfig: a.derpTLSConfig,
1744 Logger: a.logger.Named("net.tailnet"),
1745 ListenPort: a.tailnetListenPort,
1746 BlockEndpoints: disableDirectConnections,
1747 })
1748 if err != nil {
1749 return nil, xerrors.Errorf("create tailnet: %w", err)
1750 }
1751 defer func() {
1752 if err != nil {
1753 network.Close()
1754 }
1755 }()
1756
1757 if err := a.sshServer.UpdateHostSigner(keySeed); err != nil {
1758 return nil, xerrors.Errorf("update host signer: %w", err)
1759 }
1760
1761 for _, port := range []int{workspacesdk.AgentSSHPort, workspacesdk.AgentStandardSSHPort} {
1762 sshListener, err := network.Listen("tcp", ":"+strconv.Itoa(port))
1763 if err != nil {
1764 return nil, xerrors.Errorf("listen on the ssh port (%v): %w", port, err)
1765 }
1766 // nolint:revive // We do want to run the deferred functions when createTailnet returns.
1767 defer func() {
1768 if err != nil {
1769 _ = sshListener.Close()
1770 }
1771 }()
1772 if err = a.trackGoroutine(func() {
1773 _ = a.sshServer.Serve(sshListener)
1774 }); err != nil {
1775 return nil, err
1776 }
1777 }
1778
1779 reconnectingPTYListener, err := network.Listen("tcp", ":"+strconv.Itoa(workspacesdk.AgentReconnectingPTYPort))
1780 if err != nil {

Callers 1

createOrUpdateNetworkMethod · 0.95

Calls 15

wireguardAddressesMethod · 0.95
CloseMethod · 0.95
ListenMethod · 0.95
trackGoroutineMethod · 0.95
ServeMethod · 0.95
isClosedMethod · 0.95
apiHandlerMethod · 0.95
CloseMethod · 0.95
NewConnFunction · 0.92
NamedMethod · 0.80
UpdateHostSignerMethod · 0.80
ErrMethod · 0.80

Tested by

no test coverage detected