-
Notifications
You must be signed in to change notification settings - Fork 479
/
namespace.go
98 lines (81 loc) · 1.98 KB
/
namespace.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package models
import (
"time"
osproject_v1 "github.com/openshift/api/project/v1"
core_v1 "k8s.io/api/core/v1"
)
// A Namespace provide a scope for names
// This type is used to describe a set of objects.
//
// swagger:model namespace
type Namespace struct {
// The id of the namespace.
//
// example: istio-system
// required: true
Name string `json:"name"`
// Creation date of the namespace.
// There is no need to export this through the API. So, this is
// set to be ignored by JSON package.
//
// required: true
CreationTimestamp time.Time `json:"-"`
}
type Namespaces []Namespace
type NamespaceNames []string
func CastNamespaceCollection(ns []core_v1.Namespace) []Namespace {
namespaces := make([]Namespace, len(ns))
for i, item := range ns {
namespaces[i] = CastNamespace(item)
}
return namespaces
}
func CastNamespace(ns core_v1.Namespace) Namespace {
namespace := Namespace{}
namespace.Name = ns.Name
namespace.CreationTimestamp = ns.CreationTimestamp.Time
return namespace
}
func CastProjectCollection(ps []osproject_v1.Project) []Namespace {
namespaces := make([]Namespace, len(ps))
for i, project := range ps {
namespaces[i] = CastProject(project)
}
return namespaces
}
func CastProject(p osproject_v1.Project) Namespace {
namespace := Namespace{}
namespace.Name = p.Name
namespace.CreationTimestamp = p.CreationTimestamp.Time
return namespace
}
func (nss Namespaces) Includes(namespace string) bool {
for _, ns := range nss {
if ns.Name == namespace {
return true
}
}
return false
}
func (nss Namespaces) GetNames() []string {
names := make([]string, len(nss))
for _, ns := range nss {
names = append(names, ns.Name)
}
return names
}
func (nsn NamespaceNames) Includes(namespace string) bool {
for _, ns := range nsn {
if ns == namespace {
return true
}
}
return false
}
func (a NamespaceNames) IsSubsetOf(b NamespaceNames) bool {
isSubset := true
for _, n := range b {
isSubset = isSubset && b.Includes(n)
}
return isSubset
}