mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-11-04 10:01:05 +01:00 
			
		
		
		
	Merge branch 'main' into remove-buf-installation
This commit is contained in:
		
						commit
						613dc61339
					
				
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/bug_report.md
									
									
									
									
										vendored
									
									
								
							@ -6,6 +6,8 @@ labels: ["bug"]
 | 
			
		||||
assignees: ""
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<!-- Headscale is a multinational community across the globe. Our common language is English. Please consider raising the bug report in this language. -->
 | 
			
		||||
 | 
			
		||||
**Bug description**
 | 
			
		||||
 | 
			
		||||
<!-- A clear and concise description of what the bug is. Describe the expected bahavior
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/config.yml
									
									
									
									
										vendored
									
									
								
							@ -7,5 +7,5 @@ contact_links:
 | 
			
		||||
    url: "https://github.com/juanfont/headscale/blob/main/docs"
 | 
			
		||||
    about: "Find documentation about how to configure and run headscale."
 | 
			
		||||
  - name: "headscale Discord community"
 | 
			
		||||
    url: "https://discord.com/invite/XcQxk2VHjx"
 | 
			
		||||
    url: "https://discord.gg/xGj2TuqyxY"
 | 
			
		||||
    about: "Please ask and answer questions about usage of headscale here."
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/feature_request.md
									
									
									
									
										vendored
									
									
								
							@ -6,6 +6,8 @@ labels: ["enhancement"]
 | 
			
		||||
assignees: ""
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<!-- Headscale is a multinational community across the globe. Our common language is English. Please consider raising the feature request in this language. -->
 | 
			
		||||
 | 
			
		||||
**Feature request**
 | 
			
		||||
 | 
			
		||||
<!-- A clear and precise description of what new or changed feature you want. -->
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										2
									
								
								.github/ISSUE_TEMPLATE/other_issue.md
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/ISSUE_TEMPLATE/other_issue.md
									
									
									
									
										vendored
									
									
								
							@ -6,6 +6,8 @@ labels: ["bug"]
 | 
			
		||||
assignees: ""
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<!-- Headscale is a multinational community across the globe. Our common language is English. Please consider raising the issue in this language. -->
 | 
			
		||||
 | 
			
		||||
<!-- If you have a question, please consider using our Discord for asking questions -->
 | 
			
		||||
 | 
			
		||||
**Issue description**
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -27,3 +27,7 @@ derp.yaml
 | 
			
		||||
.idea
 | 
			
		||||
 | 
			
		||||
test_output/ 
 | 
			
		||||
 | 
			
		||||
# Nix and direnv
 | 
			
		||||
.direnv/
 | 
			
		||||
result
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,9 @@
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
- Headscale fails to serve if the ACL policy file cannot be parsed [#537](https://github.com/juanfont/headscale/pull/537)
 | 
			
		||||
- Fix labels cardinality error when registering unknown pre-auth key [#519](https://github.com/juanfont/headscale/pull/519)
 | 
			
		||||
- Fix send on closed channel crash in polling [#542](https://github.com/juanfont/headscale/pull/542)
 | 
			
		||||
 | 
			
		||||
## 0.15.0 (2022-03-20)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							@ -1,5 +1,5 @@
 | 
			
		||||
# Calculate version
 | 
			
		||||
version = $(shell ./scripts/version-at-commit.sh)
 | 
			
		||||
version = $(git describe --always --tags --dirty)
 | 
			
		||||
 | 
			
		||||
rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ PROTO_SOURCES = $(call rwildcard,,*.proto)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
build:
 | 
			
		||||
	GGO_ENABLED=0 go build -ldflags "-s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=$(version)" cmd/headscale/headscale.go
 | 
			
		||||
	CGO_ENABLED=0 go build -trimpath -buildmode=pie -mod=readonly -ldflags "-s -w -X github.com/juanfont/headscale/cmd/headscale/cli.Version=$(version)" cmd/headscale/headscale.go
 | 
			
		||||
 | 
			
		||||
dev: lint test build
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										47
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								README.md
									
									
									
									
									
								
							@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
An open source, self-hosted implementation of the Tailscale control server.
 | 
			
		||||
 | 
			
		||||
Join our [Discord](https://discord.gg/XcQxk2VHjx) server for a chat.
 | 
			
		||||
Join our [Discord](https://discord.gg/c84AZQhmpx) server for a chat.
 | 
			
		||||
 | 
			
		||||
**Note:** Always select the same GitHub tag as the released version you use
 | 
			
		||||
to ensure you have the correct example configuration and documentation.
 | 
			
		||||
@ -206,6 +206,13 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Alessandro (Ale) Segala</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/reynico>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/715768?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Nico/>
 | 
			
		||||
            <br />
 | 
			
		||||
            <sub style="font-size:14px"><b>Nico</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/unreality>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/352522?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=unreality/>
 | 
			
		||||
@ -214,10 +221,10 @@ make build
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/reynico>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/715768?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Nico/>
 | 
			
		||||
        <a href=https://github.com/mpldr>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/33086936?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Moritz Poldrack/>
 | 
			
		||||
            <br />
 | 
			
		||||
            <sub style="font-size:14px"><b>Nico</b></sub>
 | 
			
		||||
            <sub style="font-size:14px"><b>Moritz Poldrack</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
@ -227,6 +234,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Niek van der Maas</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/negbie>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/20154956?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Eugen Biegler/>
 | 
			
		||||
@ -234,8 +243,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Eugen Biegler</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/qbit>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/68368?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Aaron Bieber/>
 | 
			
		||||
@ -271,6 +278,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Michael G.</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/ptman>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/24669?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Paul Tötterman/>
 | 
			
		||||
@ -278,8 +287,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Paul Tötterman</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/artemklevtsov>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/603798?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Artem Klevtsov/>
 | 
			
		||||
@ -315,6 +322,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>lachy2849</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/t56k>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/12165422?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=thomas/>
 | 
			
		||||
@ -322,8 +331,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>thomas</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/aberoham>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/586805?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Abraham Ingersoll/>
 | 
			
		||||
@ -359,6 +366,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b> Carson Yang</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/fkr>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/51063?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Felix Kronlage-Dammers/>
 | 
			
		||||
@ -366,8 +375,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Felix Kronlage-Dammers</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/felixonmars>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/1006477?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Felix Yan/>
 | 
			
		||||
@ -403,6 +410,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Pierre Carru</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/rcursaru>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/16259641?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=rcursaru/>
 | 
			
		||||
@ -410,8 +419,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>rcursaru</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/renovate-bot>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/25180681?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=WhiteSource Renovate/>
 | 
			
		||||
@ -447,6 +454,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Teteros</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/gitter-badger>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/8518239?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=The Gitter Badger/>
 | 
			
		||||
@ -454,8 +463,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>The Gitter Badger</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/tianon>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/161631?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Tianon Gravi/>
 | 
			
		||||
@ -491,6 +498,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>ZiYuan</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/bravechamp>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/48980452?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=bravechamp/>
 | 
			
		||||
@ -498,8 +507,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>bravechamp</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/derelm>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/465155?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=derelm/>
 | 
			
		||||
@ -535,6 +542,8 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>pernila</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/Wakeful-Cloud>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/38930607?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Wakeful-Cloud/>
 | 
			
		||||
@ -542,8 +551,6 @@ make build
 | 
			
		||||
            <sub style="font-size:14px"><b>Wakeful-Cloud</b></sub>
 | 
			
		||||
        </a>
 | 
			
		||||
    </td>
 | 
			
		||||
</tr>
 | 
			
		||||
<tr>
 | 
			
		||||
    <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0">
 | 
			
		||||
        <a href=https://github.com/xpzouying>
 | 
			
		||||
            <img src=https://avatars.githubusercontent.com/u/3946563?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=zy/>
 | 
			
		||||
 | 
			
		||||
@ -408,7 +408,7 @@ func getHeadscaleApp() (*headscale.Headscale, error) {
 | 
			
		||||
		aclPath := absPath(viper.GetString("acl_policy_path"))
 | 
			
		||||
		err = app.LoadACLPolicy(aclPath)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Error().
 | 
			
		||||
			log.Fatal().
 | 
			
		||||
				Str("path", aclPath).
 | 
			
		||||
				Err(err).
 | 
			
		||||
				Msg("Could not load the ACL policy")
 | 
			
		||||
 | 
			
		||||
@ -3,7 +3,7 @@
 | 
			
		||||
This page contains the official and community contributed documentation for `headscale`.
 | 
			
		||||
 | 
			
		||||
If you are having trouble with following the documentation or get unexpected results,
 | 
			
		||||
please ask on [Discord](https://discord.gg/XcQxk2VHjx) instead of opening an Issue.
 | 
			
		||||
please ask on [Discord](https://discord.gg/c84AZQhmpx) instead of opening an Issue.
 | 
			
		||||
 | 
			
		||||
## Official documentation
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -30,6 +30,14 @@ mkdir -p /etc/headscale
 | 
			
		||||
 | 
			
		||||
# Directory for Database, and other variable data (like certificates)
 | 
			
		||||
mkdir -p /var/lib/headscale
 | 
			
		||||
# or if you create a headscale user:
 | 
			
		||||
useradd \
 | 
			
		||||
	--create-home \
 | 
			
		||||
	--home-dir /var/lib/headscale/ \
 | 
			
		||||
	--system \
 | 
			
		||||
	--user-group \
 | 
			
		||||
	--shell /usr/bin/nologin \
 | 
			
		||||
	headscale
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
4. Create an empty SQLite database:
 | 
			
		||||
@ -50,7 +58,7 @@ from the [headscale repository](../)
 | 
			
		||||
6. Start the headscale server:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
  headscale serve
 | 
			
		||||
headscale serve
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
This command will start `headscale` in the current terminal session.
 | 
			
		||||
@ -150,7 +158,7 @@ or run all headscale commands as the headscale user:
 | 
			
		||||
su - headscale
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
2. In `/etc/headscale/config.yaml`, override the default `headscale` unix socket with a SystemD friendly path:
 | 
			
		||||
2. In `/etc/headscale/config.yaml`, override the default `headscale` unix socket with path that is writable by the `headscale` user or group:
 | 
			
		||||
 | 
			
		||||
```yaml
 | 
			
		||||
unix_socket: /var/run/headscale/headscale.sock
 | 
			
		||||
@ -165,8 +173,7 @@ systemctl daemon-reload
 | 
			
		||||
4. Enable and start the new `headscale` service:
 | 
			
		||||
 | 
			
		||||
```shell
 | 
			
		||||
systemctl enable headscale
 | 
			
		||||
systemctl start headscale
 | 
			
		||||
systemctl enable --now headscale
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
5. Verify the headscale service:
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										68
									
								
								poll.go
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								poll.go
									
									
									
									
									
								
							@ -175,32 +175,13 @@ func (h *Headscale) PollNetMapHandler(ctx *gin.Context) {
 | 
			
		||||
		Str("machine", machine.Name).
 | 
			
		||||
		Msg("Loading or creating update channel")
 | 
			
		||||
 | 
			
		||||
	// TODO: could probably remove all that duplication once generics land.
 | 
			
		||||
	closeChanWithLog := func(channel interface{}, name string) {
 | 
			
		||||
		log.Trace().
 | 
			
		||||
			Str("handler", "PollNetMap").
 | 
			
		||||
			Str("machine", machine.Name).
 | 
			
		||||
			Str("channel", "Done").
 | 
			
		||||
			Msg(fmt.Sprintf("Closing %s channel", name))
 | 
			
		||||
 | 
			
		||||
		switch c := channel.(type) {
 | 
			
		||||
		case (chan struct{}):
 | 
			
		||||
			close(c)
 | 
			
		||||
 | 
			
		||||
		case (chan []byte):
 | 
			
		||||
			close(c)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	const chanSize = 8
 | 
			
		||||
	updateChan := make(chan struct{}, chanSize)
 | 
			
		||||
	defer closeChanWithLog(updateChan, "updateChan")
 | 
			
		||||
 | 
			
		||||
	pollDataChan := make(chan []byte, chanSize)
 | 
			
		||||
	defer closeChanWithLog(pollDataChan, "pollDataChan")
 | 
			
		||||
	defer closeChanWithLog(pollDataChan, machine.Name, "pollDataChan")
 | 
			
		||||
 | 
			
		||||
	keepAliveChan := make(chan []byte)
 | 
			
		||||
	defer closeChanWithLog(keepAliveChan, "keepAliveChan")
 | 
			
		||||
 | 
			
		||||
	if req.OmitPeers && !req.Stream {
 | 
			
		||||
		log.Info().
 | 
			
		||||
@ -273,7 +254,27 @@ func (h *Headscale) PollNetMapStream(
 | 
			
		||||
	updateChan chan struct{},
 | 
			
		||||
) {
 | 
			
		||||
	{
 | 
			
		||||
		ctx, cancel := context.WithCancel(ctx.Request.Context())
 | 
			
		||||
		machine, err := h.GetMachineByMachineKey(machineKey)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			if errors.Is(err, gorm.ErrRecordNotFound) {
 | 
			
		||||
				log.Warn().
 | 
			
		||||
					Str("handler", "PollNetMap").
 | 
			
		||||
					Msgf("Ignoring request, cannot find machine with key %s", machineKey.String())
 | 
			
		||||
				ctx.String(http.StatusUnauthorized, "")
 | 
			
		||||
 | 
			
		||||
				return
 | 
			
		||||
			}
 | 
			
		||||
			log.Error().
 | 
			
		||||
				Str("handler", "PollNetMap").
 | 
			
		||||
				Msgf("Failed to fetch machine from the database with Machine key: %s", machineKey.String())
 | 
			
		||||
			ctx.String(http.StatusInternalServerError, "")
 | 
			
		||||
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ctx := context.WithValue(ctx.Request.Context(), "machineName", machine.Name)
 | 
			
		||||
 | 
			
		||||
		ctx, cancel := context.WithCancel(ctx)
 | 
			
		||||
		defer cancel()
 | 
			
		||||
 | 
			
		||||
		go h.scheduledPollWorker(
 | 
			
		||||
@ -564,8 +565,8 @@ func (h *Headscale) PollNetMapStream(
 | 
			
		||||
 | 
			
		||||
func (h *Headscale) scheduledPollWorker(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	updateChan chan<- struct{},
 | 
			
		||||
	keepAliveChan chan<- []byte,
 | 
			
		||||
	updateChan chan struct{},
 | 
			
		||||
	keepAliveChan chan []byte,
 | 
			
		||||
	machineKey key.MachinePublic,
 | 
			
		||||
	mapRequest tailcfg.MapRequest,
 | 
			
		||||
	machine *Machine,
 | 
			
		||||
@ -573,6 +574,17 @@ func (h *Headscale) scheduledPollWorker(
 | 
			
		||||
	keepAliveTicker := time.NewTicker(keepAliveInterval)
 | 
			
		||||
	updateCheckerTicker := time.NewTicker(updateCheckInterval)
 | 
			
		||||
 | 
			
		||||
	defer closeChanWithLog(
 | 
			
		||||
		updateChan,
 | 
			
		||||
		fmt.Sprint(ctx.Value("machineName")),
 | 
			
		||||
		"updateChan",
 | 
			
		||||
	)
 | 
			
		||||
	defer closeChanWithLog(
 | 
			
		||||
		keepAliveChan,
 | 
			
		||||
		fmt.Sprint(ctx.Value("machineName")),
 | 
			
		||||
		"updateChan",
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case <-ctx.Done():
 | 
			
		||||
@ -606,3 +618,13 @@ func (h *Headscale) scheduledPollWorker(
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func closeChanWithLog[C chan []byte | chan struct{}](channel C, machine, name string) {
 | 
			
		||||
	log.Trace().
 | 
			
		||||
		Str("handler", "PollNetMap").
 | 
			
		||||
		Str("machine", machine).
 | 
			
		||||
		Str("channel", "Done").
 | 
			
		||||
		Msg(fmt.Sprintf("Closing %s channel", name))
 | 
			
		||||
 | 
			
		||||
	close(channel)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1,39 +0,0 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
set -e -o pipefail
 | 
			
		||||
commit="$1"
 | 
			
		||||
versionglob="v[0-9].[0-9]*.[0-9]*"
 | 
			
		||||
devsuffix=".dev"
 | 
			
		||||
if [ -z "$commit" ]; then
 | 
			
		||||
  commit=`git log -n1 --first-parent "--format=format:%h"`
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# automatically assign version
 | 
			
		||||
#
 | 
			
		||||
# handles the following cases:
 | 
			
		||||
#
 | 
			
		||||
# 0. no tags on the repository. Print "dev".
 | 
			
		||||
#
 | 
			
		||||
# 1. no local modifications and commit is directly tagged. Print tag.
 | 
			
		||||
#
 | 
			
		||||
# 2. no local modifications and commit is not tagged. Take greatest version tag in repo X.Y.Z and assign X.Y.(Z+1). Print that + $devsuffix + $timestamp.
 | 
			
		||||
#
 | 
			
		||||
# 3. local modifications. Print "dev".
 | 
			
		||||
 | 
			
		||||
tags=$(git tag)
 | 
			
		||||
if [[ -z "$tags" ]]; then
 | 
			
		||||
  echo "dev"
 | 
			
		||||
elif `git diff --quiet 2>/dev/null`; then
 | 
			
		||||
  tagged=$(git tag --points-at "$commit")
 | 
			
		||||
  if [[ -n "$tagged" ]] ; then
 | 
			
		||||
    echo $tagged
 | 
			
		||||
  else
 | 
			
		||||
    nearest_tag=$(git describe --tags --abbrev=0 --match "$versionglob" "$commit")
 | 
			
		||||
    v=$(echo $nearest_tag | perl -pe 's/(\d+)$/$1+1/e')
 | 
			
		||||
    isodate=$(TZ=UTC git log -n1 --format=%cd --date=iso "$commit")
 | 
			
		||||
    ts=$(TZ=UTC date --date="$isodate" "+%Y%m%d%H%M%S")
 | 
			
		||||
    echo "${v}${devsuffix}${ts}"
 | 
			
		||||
  fi
 | 
			
		||||
else
 | 
			
		||||
  echo "dev"
 | 
			
		||||
fi
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user