73392060ab238febdbe1e9f983f8534d3498d4fd
[oom/platform/cert-service.git] / certServiceK8sExternalProvider / src / cmpv2api / cmpv2_issuer_crd_schema.go
1 /*
2  * ============LICENSE_START=======================================================
3  * oom-certservice-k8s-external-provider
4  * ================================================================================
5  * Copyright (c) 2019 Smallstep Labs, Inc.
6  * Modifications copyright (C) 2020 Nokia. All rights reserved.
7  * ================================================================================
8  * This source code was copied from the following git repository:
9  * https://github.com/smallstep/step-issuer
10  * The source code was modified for usage in the ONAP project.
11  * ================================================================================
12  * Licensed under the Apache License, Version 2.0 (the "License");
13  * you may not use this file except in compliance with the License.
14  * You may obtain a copy of the License at
15  *
16  *      http://www.apache.org/licenses/LICENSE-2.0
17  *
18  * Unless required by applicable law or agreed to in writing, software
19  * distributed under the License is distributed on an "AS IS" BASIS,
20  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  * See the License for the specific language governing permissions and
22  * limitations under the License.
23  * ============LICENSE_END=========================================================
24  */
25
26 package cmpv2api
27
28 import (
29         metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
30 )
31
32 func init() {
33         SchemeBuilder.Register(&CMPv2Issuer{}, &CMPv2IssuerList{})
34 }
35
36 // CMPv2IssuerSpec defines the desired state of CMPv2Issuer
37 type CMPv2IssuerSpec struct {
38         // URL is the base URL for the CertService certificates instance.
39         URL string `json:"url"`
40         // Path to health check endpoint.
41         HealthEndpoint string `json:"healthEndpoint"`
42         // Path to certificate signing endpoint.
43         CertEndpoint string `json:"certEndpoint"`
44         // CaName is the name of the external CA server
45         CaName string `json:"caName"`
46         // KeyRef is a reference to a Secret containing the provisioner
47         CertSecretRef SecretKeySelector `json:"certSecretRef"`
48 }
49
50 // CMPv2IssuerStatus defines the observed state of CMPv2Issuer
51 type CMPv2IssuerStatus struct {
52
53         // +optional
54         Conditions []CMPv2IssuerCondition `json:"conditions,omitempty"`
55 }
56
57 type CMPv2Issuer struct {
58         metav1.TypeMeta   `json:",inline"`
59         metav1.ObjectMeta `json:"metadata,omitempty"`
60
61         Spec   CMPv2IssuerSpec   `json:"spec,omitempty"`
62         Status CMPv2IssuerStatus `json:"status,omitempty"`
63 }
64
65 // +kubebuilder:object:root=true
66
67 // CMPv2IssuerList contains a list of CMPv2Issuer
68 type CMPv2IssuerList struct {
69         metav1.TypeMeta `json:",inline"`
70         metav1.ListMeta `json:"metadata,omitempty"`
71         Items           []CMPv2Issuer `json:"items"`
72 }
73
74 // SecretKeySelector contains the reference to a secret.
75 type SecretKeySelector struct {
76         // The name of the secret in the pod's namespace to select from.
77         Name string `json:"name"`
78
79         // The key of the secret to select private key from. Must be a valid secret key.
80         KeyRef string `json:"keyRef,omitempty"`
81         // The key of the secret to select cert from. Must be a valid secret key.
82         CertRef string `json:"certRef,omitempty"`
83         // The key of the secret to select cacert from. Must be a valid secret key.
84         CacertRef string `json:"cacertRef,omitempty"`
85 }
86
87 // ConditionType represents a CMPv2Issuer condition type.
88 // +kubebuilder:validation:Enum=Ready
89 type ConditionType string
90
91 const (
92         // ConditionReady indicates that a CMPv2Issuer is ready for use.
93         ConditionReady ConditionType = "Ready"
94 )
95
96 // ConditionStatus represents a condition's status.
97 // +kubebuilder:validation:Enum=True;False;Unknown
98 type ConditionStatus string
99
100 // These are valid condition statuses. "ConditionTrue" means a resource is in
101 // the condition; "ConditionFalse" means a resource is not in the condition;
102 // "ConditionUnknown" means kubernetes can't decide if a resource is in the
103 // condition or not. In the future, we could add other intermediate
104 // conditions, e.g. ConditionDegraded.
105 const (
106         // ConditionTrue represents the fact that a given condition is true
107         ConditionTrue ConditionStatus = "True"
108
109         // ConditionFalse represents the fact that a given condition is false
110         ConditionFalse ConditionStatus = "False"
111
112         // ConditionUnknown represents the fact that a given condition is unknown
113         ConditionUnknown ConditionStatus = "Unknown"
114 )
115
116 // CMPv2IssuerCondition contains condition information for the CertService issuer.
117 type CMPv2IssuerCondition struct {
118         // Type of the condition, currently ('Ready').
119         Type ConditionType `json:"type"`
120
121         // Status of the condition, one of ('True', 'False', 'Unknown').
122         // +kubebuilder:validation:Enum=True;False;Unknown
123         Status ConditionStatus `json:"status"`
124
125         // LastTransitionTime is the timestamp corresponding to the last status
126         // change of this condition.
127         // +optional
128         LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"`
129
130         // Reason is a brief machine readable explanation for the condition's last
131         // transition.
132         // +optional
133         Reason string `json:"reason,omitempty"`
134
135         // Message is a human readable description of the details of the last
136         // transition, complementing reason.
137         // +optional
138         Message string `json:"message,omitempty"`
139 }