-
Notifications
You must be signed in to change notification settings - Fork 22
/
issuerkey.go
149 lines (124 loc) · 3.55 KB
/
issuerkey.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/*
* SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors
*
* SPDX-License-Identifier: Apache-2.0
*/
package utils
import (
"fmt"
"github.com/gardener/controller-manager-library/pkg/resources"
)
// Cluster is an enum for default and target cluster
type Cluster int
const (
// ClusterDefault is the default cluster
ClusterDefault Cluster = iota
// ClusterTarget is the target cluster
ClusterTarget
)
// IssuerKey provides cluster, name and namespace of an issuer
type IssuerKey struct {
cluster Cluster
namespace string
name string
}
// NewIssuerKey creates key for an issuer.
// namespace is ignored for default cluster
func NewIssuerKey(cluster Cluster, namespace, name string) IssuerKey {
if cluster == ClusterDefault {
namespace = ""
}
return IssuerKey{cluster: cluster, namespace: namespace, name: name}
}
// NewDefaultClusterIssuerKey creates key for an issuer on the default cluster
func NewDefaultClusterIssuerKey(name string) IssuerKey {
return IssuerKey{cluster: ClusterDefault, name: name}
}
// Name returns the issuer name
func (k IssuerKey) Name() string {
return k.name
}
// Namespace returns the issuer namespace (namespace is empty if it is on default cluster)
func (k IssuerKey) Namespace() string {
return k.namespace
}
// NamespaceOrDefault returns the issuer namespace or the given default if it is on default cluster
func (k IssuerKey) NamespaceOrDefault(def string) string {
if k.cluster == ClusterDefault {
return def
}
return k.namespace
}
// Cluster returns the issuer cluster
func (k IssuerKey) Cluster() Cluster {
return k.cluster
}
// ClusterName returns the cluster name
func (k IssuerKey) ClusterName() string {
switch k.cluster {
case ClusterDefault:
return "default"
case ClusterTarget:
return "target"
}
return ""
}
// String returns the string representation
func (k IssuerKey) String() string {
if k.cluster == ClusterDefault {
return k.name
}
return fmt.Sprintf("target:%s/%s", k.namespace, k.name)
}
// ObjectName returns the object name for the issuer key.
// If it is on the default cluster, the given namespace is used.
func (k IssuerKey) ObjectName(def string) resources.ObjectName {
return resources.NewObjectName(k.NamespaceOrDefault(def), k.name)
}
/////////////////////////////////////////////////////////////////////
// IssuerKeySet is a set of IssuerKeys
type IssuerKeySet map[IssuerKey]struct{}
// NewIssuerKeySet creates a new set
func NewIssuerKeySet(keys ...IssuerKey) IssuerKeySet {
set := IssuerKeySet{}
if len(keys) > 0 {
set.Add(keys...)
}
return set
}
// Add adds keys to the set
func (s IssuerKeySet) Add(keys ...IssuerKey) {
for _, key := range keys {
s[key] = struct{}{}
}
}
// Remove removes a key from the set
func (s IssuerKeySet) Remove(key IssuerKey) {
delete(s, key)
}
// Contains checks if set contains the key
func (s IssuerKeySet) Contains(key IssuerKey) bool {
_, ok := s[key]
return ok
}
// Copy creates a copy of the set
func (s IssuerKeySet) Copy() IssuerKeySet {
set := IssuerKeySet{}
for key := range s {
set[key] = struct{}{}
}
return set
}
/////////////////////////////////////////////////////////////////////
// IssuerSecretKey is the key for an issuer secret
type IssuerSecretKey struct {
IssuerKey
}
// NewIssuerSecretKey creates key for an issuer secret.
// namespace is ignored for default cluster
func NewIssuerSecretKey(cluster Cluster, namespace, name string) IssuerSecretKey {
if cluster == ClusterDefault {
namespace = ""
}
return IssuerSecretKey{IssuerKey{cluster: cluster, namespace: namespace, name: name}}
}