diff --git a/core/installer/namespace.go b/core/installer/namespace.go
index 87cd8c4..0acc608 100644
--- a/core/installer/namespace.go
+++ b/core/installer/namespace.go
@@ -5,6 +5,43 @@
 	"fmt"
 )
 
+type SuffixGenerator interface {
+	Generate() (string, error)
+}
+
+type emptySuffixGenerator struct {
+}
+
+func NewEmptySuffixGenerator() SuffixGenerator {
+	return &emptySuffixGenerator{}
+}
+
+func (g *emptySuffixGenerator) Generate() (string, error) {
+	return "", nil
+}
+
+type fixedLengthRandomSuffixGenerator struct {
+	len int
+}
+
+func NewFixedLengthRandomSuffixGenerator(len int) SuffixGenerator {
+	return &fixedLengthRandomSuffixGenerator{len}
+}
+
+var letters = []rune("abcdefghijklmnopqrstuvwxyz")
+
+func (g *fixedLengthRandomSuffixGenerator) Generate() (string, error) {
+	r := make([]byte, g.len)
+	if _, err := rand.Read(r); err != nil {
+		return "", err
+	}
+	ret := make([]rune, g.len)
+	for i, v := range r {
+		ret[i] += letters[v%26]
+	}
+	return fmt.Sprintf("-%s", string(ret)), nil
+}
+
 type NamespaceGenerator interface {
 	Generate(name string) (string, error)
 }
@@ -20,45 +57,3 @@
 func (g *prefixGenerator) Generate(name string) (string, error) {
 	return g.prefix + name, nil
 }
-
-type randomSuffixGenerator struct {
-	len int
-}
-
-func NewRandomSuffixGenerator(len int) NamespaceGenerator {
-	return &randomSuffixGenerator{len}
-}
-
-var letters = []rune("abcdefghijklmnopqrstuvwxyz")
-
-func (g randomSuffixGenerator) Generate(name string) (string, error) {
-	r := make([]byte, g.len)
-	if _, err := rand.Read(r); err != nil {
-		return "", err
-	}
-	ret := make([]rune, g.len)
-	for i, v := range r {
-		ret[i] += letters[v%26]
-	}
-	return fmt.Sprintf("%s-%s", name, string(ret)), nil
-}
-
-type combineGenerator struct {
-	ns []NamespaceGenerator
-}
-
-func NewCombine(ns ...NamespaceGenerator) NamespaceGenerator {
-	return &combineGenerator{ns}
-}
-
-func (g *combineGenerator) Generate(name string) (string, error) {
-	cur := name
-	var err error
-	for _, i := range g.ns {
-		cur, err = i.Generate(cur)
-		if err != nil {
-			return "", err
-		}
-	}
-	return cur, nil
-}
