package instancectl import ( "path" "strings" "github.com/carlosframework/platform/internal/provision" "github.com/carlosframework/platform/internal/registry" ) func BoundClaimUnitControlGroup(host, unit string) string { return path.Join(parentSlices, SliceName(host), unit) } func (u ClaimUnits) Placement(host string) (string, string, error) { if !provision.ValidHostShape(host) { return "", "", ErrClaimUnit } if u.BoundHost == "" && u.BoundUnit == "" { return UnitName(RoleRun, host), ClaimUnitControlGroup(host), nil } if u.BoundHost != host || !ValidBoundClaimUnit(u.BoundUnit) { return "", "", ErrClaimUnit } return u.BoundUnit, BoundClaimUnitControlGroup(host, u.BoundUnit), nil } func ValidBoundClaimUnit(unit string) bool { return registry.ValidUnitName(unit) && strings.HasSuffix(unit, ".service") && !strings.HasPrefix(unit, "-") && !strings.HasSuffix(unit, "@.service") && !strings.HasPrefix(unit, "carlos-instance") && !strings.ContainsAny(unit, "%\\ \t\n\r\x00/") }