|  |  |  | @ -1,5 +1,10 @@ | 
			
		
	
		
			
				
					|  |  |  |  | package cluster | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | import ( | 
			
		
	
		
			
				
					|  |  |  |  | 	"bytes" | 
			
		
	
		
			
				
					|  |  |  |  | 	"path/filepath" | 
			
		
	
		
			
				
					|  |  |  |  | ) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | var ( | 
			
		
	
		
			
				
					|  |  |  |  | 	_ MachineIterator = (*Region)(nil) | 
			
		
	
		
			
				
					|  |  |  |  | 	_ ZoneIterator    = (*Region)(nil) | 
			
		
	
	
		
			
				
					|  |  |  | @ -134,3 +139,61 @@ func (m *Cluster) getRegion(name string) (*Region, bool) { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	return nil, false | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // SyncRegions writes to the file system the regions this [Zone]
 | 
			
		
	
		
			
				
					|  |  |  |  | // belongs to.
 | 
			
		
	
		
			
				
					|  |  |  |  | func (z *Zone) SyncRegions() error { | 
			
		
	
		
			
				
					|  |  |  |  | 	err := z.syncZoneRegions() | 
			
		
	
		
			
				
					|  |  |  |  | 	if err == nil { | 
			
		
	
		
			
				
					|  |  |  |  | 		z.ForEachMachine(func(p *Machine) bool { | 
			
		
	
		
			
				
					|  |  |  |  | 			if p.IsActive() { | 
			
		
	
		
			
				
					|  |  |  |  | 				err = p.RemoveFile("region") | 
			
		
	
		
			
				
					|  |  |  |  | 			} else { | 
			
		
	
		
			
				
					|  |  |  |  | 				err = p.WriteStringFile("none\n", "region") | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 			return err != nil | 
			
		
	
		
			
				
					|  |  |  |  | 		}) | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	return err | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | func (z *Zone) syncZoneRegions() error { | 
			
		
	
		
			
				
					|  |  |  |  | 	name := filepath.Join(z.Name, "regions") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if len(z.Regions) > 0 { | 
			
		
	
		
			
				
					|  |  |  |  | 		var buf bytes.Buffer | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		for _, s := range z.Regions { | 
			
		
	
		
			
				
					|  |  |  |  | 			_, _ = buf.WriteString(s) | 
			
		
	
		
			
				
					|  |  |  |  | 			_, _ = buf.WriteRune('\n') | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		return z.zones.WriteStringFile(buf.String(), name) | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	return z.zones.RemoveFile(name) | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | // SyncRegions writes to the file system the regions covered
 | 
			
		
	
		
			
				
					|  |  |  |  | // by this meta-region
 | 
			
		
	
		
			
				
					|  |  |  |  | func (r *Region) SyncRegions() error { | 
			
		
	
		
			
				
					|  |  |  |  | 	name := filepath.Join(r.Name, "regions") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	if len(r.Regions) > 0 { | 
			
		
	
		
			
				
					|  |  |  |  | 		var buf bytes.Buffer | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		for _, s := range r.Regions { | 
			
		
	
		
			
				
					|  |  |  |  | 			_, _ = buf.WriteString(s) | 
			
		
	
		
			
				
					|  |  |  |  | 			_, _ = buf.WriteRune('\n') | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		if err := r.m.MkdirAll(r.Name); err != nil { | 
			
		
	
		
			
				
					|  |  |  |  | 			return err | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		return r.m.WriteStringFile(buf.String(), name) | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	return r.m.RemoveFile(name) | 
			
		
	
		
			
				
					|  |  |  |  | } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |