mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Added DB SharedNode model to support sharing nodes
This commit is contained in:
		
							parent
							
								
									39c661d408
								
							
						
					
					
						commit
						1ecd0d7ca4
					
				
							
								
								
									
										5
									
								
								db.go
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								db.go
									
									
									
									
									
								
							| @ -44,6 +44,11 @@ func (h *Headscale) initDB() error { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = db.AutoMigrate(&SharedNode{}) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	err = h.setValue("db_version", dbVersion) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
							
								
								
									
										37
									
								
								sharing_nodes.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								sharing_nodes.go
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | ||||
| package headscale | ||||
| 
 | ||||
| import "gorm.io/gorm" | ||||
| 
 | ||||
| const errorSameNamespace = Error("Destination namespace same as origin") | ||||
| const errorNodeAlreadyShared = Error("Node already shared to this namespace") | ||||
| 
 | ||||
| // Sharing is a join table to support sharing nodes between namespaces
 | ||||
| type SharedNode struct { | ||||
| 	gorm.Model | ||||
| 	MachineID   uint64 | ||||
| 	Machine     Machine | ||||
| 	NamespaceID uint | ||||
| 	Namespace   Namespace | ||||
| } | ||||
| 
 | ||||
| // ShareNodeInNamespace adds a machine as a shared node to a namespace
 | ||||
| func (h *Headscale) ShareNodeInNamespace(m *Machine, ns *Namespace) error { | ||||
| 	if m.NamespaceID == ns.ID { | ||||
| 		return errorSameNamespace | ||||
| 	} | ||||
| 
 | ||||
| 	sn := SharedNode{} | ||||
| 	if err := h.db.Where("machine_id = ? AND namespace_id", m.ID, ns.ID).First(&sn).Error; err == nil { | ||||
| 		return errorNodeAlreadyShared | ||||
| 	} | ||||
| 
 | ||||
| 	sn = SharedNode{ | ||||
| 		MachineID:   m.ID, | ||||
| 		Machine:     *m, | ||||
| 		NamespaceID: ns.ID, | ||||
| 		Namespace:   *ns, | ||||
| 	} | ||||
| 	h.db.Save(&sn) | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user