/
sshkeys.go
90 lines (73 loc) · 3.01 KB
/
sshkeys.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
/*
Copyright 2020 The Kubermatic Kubernetes Platform contributors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package v1
import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
)
const (
// SSHKeyResourceName represents "Resource" defined in Kubernetes.
SSHKeyResourceName = "usersshkeys"
// SSHKeyKind represents "Kind" defined in Kubernetes.
SSHKeyKind = "UserSSHKey"
)
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:object:generate=true
// +kubebuilder:object:root=true
// +kubebuilder:printcolumn:JSONPath=".spec.name",name="HumanReadableName",type="string"
// +kubebuilder:printcolumn:JSONPath=".spec.owner",name="Owner",type="string"
// +kubebuilder:printcolumn:JSONPath=".spec.project",name="Project",type="string"
// +kubebuilder:printcolumn:JSONPath=".spec.fingerprint",name="Fingerprint",type="string"
// +kubebuilder:printcolumn:JSONPath=".metadata.creationTimestamp",name="Age",type="date"
// UserSSHKey specifies a users UserSSHKey.
type UserSSHKey struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`
Spec SSHKeySpec `json:"spec,omitempty"`
}
type SSHKeySpec struct {
// Name is the human readable name for this SSH key.
Name string `json:"name"`
// Owner is the name of the User object that owns this SSH key.
// Deprecated: This field is not used anymore.
// +optional
Owner string `json:"owner,omitempty"`
// Project is the name of the Project object that this SSH key belongs to.
// This field is immutable.
Project string `json:"project"`
// Clusters is the list of cluster names that this SSH key is assigned to.
Clusters []string `json:"clusters"`
// Fingerprint is calculated server-side based on the supplied public key
// and doesn't need to be set by clients.
// +optional
Fingerprint string `json:"fingerprint"`
// PublicKey is the SSH public key.
PublicKey string `json:"publicKey"`
}
func (sk *UserSSHKey) IsUsedByCluster(clustername string) bool {
return sets.New(sk.Spec.Clusters...).Has(clustername)
}
func (sk *UserSSHKey) RemoveFromCluster(clustername string) {
sk.Spec.Clusters = sets.List(sets.New(sk.Spec.Clusters...).Delete(clustername))
}
func (sk *UserSSHKey) AddToCluster(clustername string) {
sk.Spec.Clusters = sets.List(sets.New(sk.Spec.Clusters...).Insert(clustername))
}
// +kubebuilder:object:generate=true
// +kubebuilder:object:root=true
// UserSSHKeyList specifies a users UserSSHKey.
type UserSSHKeyList struct {
metav1.TypeMeta `json:",inline"`
metav1.ListMeta `json:"metadata,omitempty"`
Items []UserSSHKey `json:"items"`
}