mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Merge branch 'main' into suggest-english
This commit is contained in:
		
						commit
						dd3f24b83f
					
				
							
								
								
									
										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" |     url: "https://github.com/juanfont/headscale/blob/main/docs" | ||||||
|     about: "Find documentation about how to configure and run headscale." |     about: "Find documentation about how to configure and run headscale." | ||||||
|   - name: "headscale Discord community" |   - 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." |     about: "Please ask and answer questions about usage of headscale here." | ||||||
|  | |||||||
| @ -4,7 +4,9 @@ | |||||||
| 
 | 
 | ||||||
| ### Changes | ### 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 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) | ## 0.15.0 (2022-03-20) | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @ -1,5 +1,5 @@ | |||||||
| # Calculate version
 | # 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)) | rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)) | ||||||
| 
 | 
 | ||||||
| @ -10,7 +10,7 @@ PROTO_SOURCES = $(call rwildcard,,*.proto) | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| build: | 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 | dev: lint test build | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										52
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								README.md
									
									
									
									
									
								
							| @ -4,7 +4,7 @@ | |||||||
| 
 | 
 | ||||||
| An open source, self-hosted implementation of the Tailscale control server. | 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/xGj2TuqyxY) server for a chat. | ||||||
| 
 | 
 | ||||||
| **Note:** Always select the same GitHub tag as the released version you use | **Note:** Always select the same GitHub tag as the released version you use | ||||||
| to ensure you have the correct example configuration and documentation. | to ensure you have the correct example configuration and documentation. | ||||||
| @ -280,6 +280,13 @@ make build | |||||||
|     </td> |     </td> | ||||||
| </tr> | </tr> | ||||||
| <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/> | ||||||
|  |             <br /> | ||||||
|  |             <sub style="font-size:14px"><b>Artem Klevtsov</b></sub> | ||||||
|  |         </a> | ||||||
|  |     </td> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/cmars> |         <a href=https://github.com/cmars> | ||||||
|             <img src=https://avatars.githubusercontent.com/u/23741?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Casey Marshall/> |             <img src=https://avatars.githubusercontent.com/u/23741?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Casey Marshall/> | ||||||
| @ -315,6 +322,8 @@ make build | |||||||
|             <sub style="font-size:14px"><b>thomas</b></sub> |             <sub style="font-size:14px"><b>thomas</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/aberoham> |         <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/> |             <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/> | ||||||
| @ -322,8 +331,6 @@ make build | |||||||
|             <sub style="font-size:14px"><b>Abraham Ingersoll</b></sub> |             <sub style="font-size:14px"><b>Abraham Ingersoll</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
| </tr> |  | ||||||
| <tr> |  | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/aofei> |         <a href=https://github.com/aofei> | ||||||
|             <img src=https://avatars.githubusercontent.com/u/5037285?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Aofei Sheng/> |             <img src=https://avatars.githubusercontent.com/u/5037285?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Aofei Sheng/> | ||||||
| @ -331,13 +338,6 @@ make build | |||||||
|             <sub style="font-size:14px"><b>Aofei Sheng</b></sub> |             <sub style="font-size:14px"><b>Aofei Sheng</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|     <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/> |  | ||||||
|             <br /> |  | ||||||
|             <sub style="font-size:14px"><b>Artem Klevtsov</b></sub> |  | ||||||
|         </a> |  | ||||||
|     </td> |  | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/awoimbee> |         <a href=https://github.com/awoimbee> | ||||||
|             <img src=https://avatars.githubusercontent.com/u/22431493?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Arthur Woimbée/> |             <img src=https://avatars.githubusercontent.com/u/22431493?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Arthur Woimbée/> | ||||||
| @ -352,6 +352,13 @@ make build | |||||||
|             <sub style="font-size:14px"><b>Bryan Stenson</b></sub> |             <sub style="font-size:14px"><b>Bryan Stenson</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|  |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|  |         <a href=https://github.com/yangchuansheng> | ||||||
|  |             <img src=https://avatars.githubusercontent.com/u/15308462?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt= Carson Yang/> | ||||||
|  |             <br /> | ||||||
|  |             <sub style="font-size:14px"><b> Carson Yang</b></sub> | ||||||
|  |         </a> | ||||||
|  |     </td> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/fkr> |         <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/> |             <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/> | ||||||
| @ -359,6 +366,8 @@ make build | |||||||
|             <sub style="font-size:14px"><b>Felix Kronlage-Dammers</b></sub> |             <sub style="font-size:14px"><b>Felix Kronlage-Dammers</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/felixonmars> |         <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/> |             <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/> | ||||||
| @ -366,8 +375,6 @@ make build | |||||||
|             <sub style="font-size:14px"><b>Felix Yan</b></sub> |             <sub style="font-size:14px"><b>Felix Yan</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
| </tr> |  | ||||||
| <tr> |  | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/JJGadgets> |         <a href=https://github.com/JJGadgets> | ||||||
|             <img src=https://avatars.githubusercontent.com/u/5709019?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=JJGadgets/> |             <img src=https://avatars.githubusercontent.com/u/5709019?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=JJGadgets/> | ||||||
| @ -403,6 +410,8 @@ make build | |||||||
|             <sub style="font-size:14px"><b>rcursaru</b></sub> |             <sub style="font-size:14px"><b>rcursaru</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/renovate-bot> |         <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/> |             <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/> | ||||||
| @ -410,8 +419,6 @@ make build | |||||||
|             <sub style="font-size:14px"><b>WhiteSource Renovate</b></sub> |             <sub style="font-size:14px"><b>WhiteSource Renovate</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
| </tr> |  | ||||||
| <tr> |  | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/ryanfowler> |         <a href=https://github.com/ryanfowler> | ||||||
|             <img src=https://avatars.githubusercontent.com/u/2668821?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Ryan Fowler/> |             <img src=https://avatars.githubusercontent.com/u/2668821?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Ryan Fowler/> | ||||||
| @ -447,6 +454,8 @@ make build | |||||||
|             <sub style="font-size:14px"><b>The Gitter Badger</b></sub> |             <sub style="font-size:14px"><b>The Gitter Badger</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/tianon> |         <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/> |             <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/> | ||||||
| @ -454,8 +463,6 @@ make build | |||||||
|             <sub style="font-size:14px"><b>Tianon Gravi</b></sub> |             <sub style="font-size:14px"><b>Tianon Gravi</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
| </tr> |  | ||||||
| <tr> |  | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/woudsma> |         <a href=https://github.com/woudsma> | ||||||
|             <img src=https://avatars.githubusercontent.com/u/6162978?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Tjerk Woudsma/> |             <img src=https://avatars.githubusercontent.com/u/6162978?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=Tjerk Woudsma/> | ||||||
| @ -491,6 +498,8 @@ make build | |||||||
|             <sub style="font-size:14px"><b>bravechamp</b></sub> |             <sub style="font-size:14px"><b>bravechamp</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/derelm> |         <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/> |             <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/> | ||||||
| @ -498,8 +507,13 @@ make build | |||||||
|             <sub style="font-size:14px"><b>derelm</b></sub> |             <sub style="font-size:14px"><b>derelm</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
| </tr> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
| <tr> |         <a href=https://github.com/nning> | ||||||
|  |             <img src=https://avatars.githubusercontent.com/u/557430?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=henning mueller/> | ||||||
|  |             <br /> | ||||||
|  |             <sub style="font-size:14px"><b>henning mueller</b></sub> | ||||||
|  |         </a> | ||||||
|  |     </td> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/ignoramous> |         <a href=https://github.com/ignoramous> | ||||||
|             <img src=https://avatars.githubusercontent.com/u/852289?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=ignoramous/> |             <img src=https://avatars.githubusercontent.com/u/852289?v=4 width="100;"  style="border-radius:50%;align-items:center;justify-content:center;overflow:hidden;padding-top:10px" alt=ignoramous/> | ||||||
| @ -528,6 +542,8 @@ make build | |||||||
|             <sub style="font-size:14px"><b>Wakeful-Cloud</b></sub> |             <sub style="font-size:14px"><b>Wakeful-Cloud</b></sub> | ||||||
|         </a> |         </a> | ||||||
|     </td> |     </td> | ||||||
|  | </tr> | ||||||
|  | <tr> | ||||||
|     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> |     <td align="center" style="word-wrap: break-word; width: 150.0; height: 150.0"> | ||||||
|         <a href=https://github.com/xpzouying> |         <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/> |             <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/> | ||||||
|  | |||||||
| @ -23,7 +23,7 @@ func init() { | |||||||
| 	apiKeysCmd.AddCommand(listAPIKeys) | 	apiKeysCmd.AddCommand(listAPIKeys) | ||||||
| 
 | 
 | ||||||
| 	createAPIKeyCmd.Flags(). | 	createAPIKeyCmd.Flags(). | ||||||
| 		DurationP("expiration", "e", DefaultAPIKeyExpiry, "Human-readable expiration of the key (30m, 24h, 365d...)") | 		DurationP("expiration", "e", DefaultAPIKeyExpiry, "Human-readable expiration of the key (e.g. 30m, 24h)") | ||||||
| 
 | 
 | ||||||
| 	apiKeysCmd.AddCommand(createAPIKeyCmd) | 	apiKeysCmd.AddCommand(createAPIKeyCmd) | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -31,7 +31,7 @@ func init() { | |||||||
| 	createPreAuthKeyCmd.PersistentFlags(). | 	createPreAuthKeyCmd.PersistentFlags(). | ||||||
| 		Bool("ephemeral", false, "Preauthkey for ephemeral nodes") | 		Bool("ephemeral", false, "Preauthkey for ephemeral nodes") | ||||||
| 	createPreAuthKeyCmd.Flags(). | 	createPreAuthKeyCmd.Flags(). | ||||||
| 		DurationP("expiration", "e", DefaultPreAuthKeyExpiry, "Human-readable expiration of the key (30m, 24h, 365d...)") | 		DurationP("expiration", "e", DefaultPreAuthKeyExpiry, "Human-readable expiration of the key (e.g. 30m, 24h)") | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| var preauthkeysCmd = &cobra.Command{ | var preauthkeysCmd = &cobra.Command{ | ||||||
|  | |||||||
| @ -408,7 +408,7 @@ func getHeadscaleApp() (*headscale.Headscale, error) { | |||||||
| 		aclPath := absPath(viper.GetString("acl_policy_path")) | 		aclPath := absPath(viper.GetString("acl_policy_path")) | ||||||
| 		err = app.LoadACLPolicy(aclPath) | 		err = app.LoadACLPolicy(aclPath) | ||||||
| 		if err != nil { | 		if err != nil { | ||||||
| 			log.Error(). | 			log.Fatal(). | ||||||
| 				Str("path", aclPath). | 				Str("path", aclPath). | ||||||
| 				Err(err). | 				Err(err). | ||||||
| 				Msg("Could not load the ACL policy") | 				Msg("Could not load the ACL policy") | ||||||
|  | |||||||
| @ -12,4 +12,4 @@ regions: | |||||||
|         ipv6: "2604:a880:400:d1::828:b001" |         ipv6: "2604:a880:400:d1::828:b001" | ||||||
|         stunport: 0 |         stunport: 0 | ||||||
|         stunonly: false |         stunonly: false | ||||||
|         derptestport: 0 |         derpport: 0 | ||||||
|  | |||||||
| @ -178,7 +178,7 @@ systemctl status headscale | |||||||
| Verify `headscale` is available: | Verify `headscale` is available: | ||||||
| 
 | 
 | ||||||
| ```shell | ```shell | ||||||
| curl http://127.0.0.1:8080/metrics | curl http://127.0.0.1:9090/metrics | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| `headscale` will now run in the background and start at boot. | `headscale` will now run in the background and start at boot. | ||||||
|  | |||||||
							
								
								
									
										68
									
								
								poll.go
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								poll.go
									
									
									
									
									
								
							| @ -175,32 +175,13 @@ func (h *Headscale) PollNetMapHandler(ctx *gin.Context) { | |||||||
| 		Str("machine", machine.Name). | 		Str("machine", machine.Name). | ||||||
| 		Msg("Loading or creating update channel") | 		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 | 	const chanSize = 8 | ||||||
| 	updateChan := make(chan struct{}, chanSize) | 	updateChan := make(chan struct{}, chanSize) | ||||||
| 	defer closeChanWithLog(updateChan, "updateChan") |  | ||||||
| 
 | 
 | ||||||
| 	pollDataChan := make(chan []byte, chanSize) | 	pollDataChan := make(chan []byte, chanSize) | ||||||
| 	defer closeChanWithLog(pollDataChan, "pollDataChan") | 	defer closeChanWithLog(pollDataChan, machine.Name, "pollDataChan") | ||||||
| 
 | 
 | ||||||
| 	keepAliveChan := make(chan []byte) | 	keepAliveChan := make(chan []byte) | ||||||
| 	defer closeChanWithLog(keepAliveChan, "keepAliveChan") |  | ||||||
| 
 | 
 | ||||||
| 	if req.OmitPeers && !req.Stream { | 	if req.OmitPeers && !req.Stream { | ||||||
| 		log.Info(). | 		log.Info(). | ||||||
| @ -273,7 +254,27 @@ func (h *Headscale) PollNetMapStream( | |||||||
| 	updateChan chan struct{}, | 	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() | 		defer cancel() | ||||||
| 
 | 
 | ||||||
| 		go h.scheduledPollWorker( | 		go h.scheduledPollWorker( | ||||||
| @ -564,8 +565,8 @@ func (h *Headscale) PollNetMapStream( | |||||||
| 
 | 
 | ||||||
| func (h *Headscale) scheduledPollWorker( | func (h *Headscale) scheduledPollWorker( | ||||||
| 	ctx context.Context, | 	ctx context.Context, | ||||||
| 	updateChan chan<- struct{}, | 	updateChan chan struct{}, | ||||||
| 	keepAliveChan chan<- []byte, | 	keepAliveChan chan []byte, | ||||||
| 	machineKey key.MachinePublic, | 	machineKey key.MachinePublic, | ||||||
| 	mapRequest tailcfg.MapRequest, | 	mapRequest tailcfg.MapRequest, | ||||||
| 	machine *Machine, | 	machine *Machine, | ||||||
| @ -573,6 +574,17 @@ func (h *Headscale) scheduledPollWorker( | |||||||
| 	keepAliveTicker := time.NewTicker(keepAliveInterval) | 	keepAliveTicker := time.NewTicker(keepAliveInterval) | ||||||
| 	updateCheckerTicker := time.NewTicker(updateCheckInterval) | 	updateCheckerTicker := time.NewTicker(updateCheckInterval) | ||||||
| 
 | 
 | ||||||
|  | 	defer closeChanWithLog( | ||||||
|  | 		updateChan, | ||||||
|  | 		fmt.Sprint(ctx.Value("machineName")), | ||||||
|  | 		"updateChan", | ||||||
|  | 	) | ||||||
|  | 	defer closeChanWithLog( | ||||||
|  | 		keepAliveChan, | ||||||
|  | 		fmt.Sprint(ctx.Value("machineName")), | ||||||
|  | 		"updateChan", | ||||||
|  | 	) | ||||||
|  | 
 | ||||||
| 	for { | 	for { | ||||||
| 		select { | 		select { | ||||||
| 		case <-ctx.Done(): | 		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…
	
		Reference in New Issue
	
	Block a user