/
createorder.go
39 lines (31 loc) · 1.51 KB
/
createorder.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package clienthelper
// Copyright (c) Microsoft Corporation.
// Licensed under the Apache License 2.0.
import (
"reflect"
securityv1 "github.com/openshift/api/security/v1"
corev1 "k8s.io/api/core/v1"
rbacv1 "k8s.io/api/rbac/v1"
extensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
kruntime "k8s.io/apimachinery/pkg/runtime"
)
// rather than list every object, just list the ones whose creation really has
// to be brought forward
var createOrderMap = map[reflect.Type]int{
// non-namespaced resources
reflect.TypeOf(&extensionsv1.CustomResourceDefinition{}): -9, // before custom resources
reflect.TypeOf(&rbacv1.ClusterRole{}): -7, // before workload resources
reflect.TypeOf(&rbacv1.ClusterRoleBinding{}): -6, // before workload resources
reflect.TypeOf(&securityv1.SecurityContextConstraints{}): -5, // before workload resources
reflect.TypeOf(&corev1.Namespace{}): -4, // before namespaced resources
// namespaced resources
reflect.TypeOf(&corev1.ConfigMap{}): -3, // before workload resources
reflect.TypeOf(&corev1.Secret{}): -2, // before workload resources
reflect.TypeOf(&corev1.ServiceAccount{}): -1, // before workload resources
// everything else defaults to 0
}
// createOrder is to be used in a sort.Slice() comparison. It is to help make
// sure that resources are created in an order that causes a reliable startup.
func createOrder(i, j kruntime.Object) bool {
return createOrderMap[reflect.TypeOf(i)] < createOrderMap[reflect.TypeOf(j)]
}