github.com/IBM-Blockchain/fabric-operator@v1.0.4/api/v1beta1/ibporderer.go (about) 1 /* 2 * Copyright contributors to the Hyperledger Fabric Operator project 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at: 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package v1beta1 20 21 import ( 22 config "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/orderer/config/v1" 23 v2config "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/orderer/config/v2" 24 v24config "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/orderer/config/v24" 25 "github.com/IBM-Blockchain/fabric-operator/pkg/util/image" 26 "github.com/IBM-Blockchain/fabric-operator/version" 27 corev1 "k8s.io/api/core/v1" 28 ) 29 30 // +kubebuilder:object:generate=false 31 type OrdererConfig interface { 32 UsingPKCS11() bool 33 } 34 35 func (s *IBPOrderer) ResetRestart() { 36 s.Spec.Action.Restart = false 37 } 38 39 func (s *IBPOrderer) ResetEcertReenroll() { 40 s.Spec.Action.Reenroll.Ecert = false 41 s.Spec.Action.Reenroll.EcertNewKey = false 42 } 43 44 func (s *IBPOrderer) ResetTLSReenroll() { 45 s.Spec.Action.Reenroll.TLSCert = false 46 s.Spec.Action.Reenroll.TLSCertNewKey = false 47 } 48 49 func (s *IBPOrderer) ResetEcertEnroll() { 50 s.Spec.Action.Enroll.Ecert = false 51 } 52 53 func (s *IBPOrderer) ResetTLSEnroll() { 54 s.Spec.Action.Enroll.TLSCert = false 55 } 56 57 func (o *IBPOrderer) IsHSMEnabled() bool { 58 ordererConfig, err := o.GetConfigOverride() 59 if err != nil { 60 return false 61 } 62 63 return ordererConfig.(OrdererConfig).UsingPKCS11() 64 } 65 66 func (o *IBPOrderer) ClientAuthCryptoSet() bool { 67 secret := o.Spec.Secret 68 if secret != nil { 69 if secret.MSP != nil && secret.MSP.ClientAuth != nil { 70 return true 71 } 72 if secret.Enrollment != nil && secret.Enrollment.ClientAuth != nil { 73 return true 74 } 75 } 76 77 return false 78 } 79 80 func (o *IBPOrderer) UsingHSMProxy() bool { 81 if o.Spec.HSM != nil && o.Spec.HSM.PKCS11Endpoint != "" { 82 return true 83 } 84 return false 85 } 86 87 func (o *IBPOrderer) GetConfigOverride() (interface{}, error) { 88 switch version.GetMajorReleaseVersion(o.Spec.FabricVersion) { 89 case version.V2: 90 currentVer := version.String(o.Spec.FabricVersion) 91 if currentVer.EqualWithoutTag(version.V2_4_1) || currentVer.GreaterThan(version.V2_4_1) { 92 if o.Spec.ConfigOverride == nil { 93 return &v24config.Orderer{}, nil 94 } 95 96 configOverride, err := v24config.ReadFrom(&o.Spec.ConfigOverride.Raw) 97 if err != nil { 98 return nil, err 99 } 100 return configOverride, nil 101 } else { 102 if o.Spec.ConfigOverride == nil { 103 return &v2config.Orderer{}, nil 104 } 105 106 configOverride, err := v2config.ReadFrom(&o.Spec.ConfigOverride.Raw) 107 if err != nil { 108 return nil, err 109 } 110 return configOverride, nil 111 } 112 113 case version.V1: 114 fallthrough 115 default: 116 if o.Spec.ConfigOverride == nil { 117 return &config.Orderer{}, nil 118 } 119 120 configOverride, err := config.ReadFrom(&o.Spec.ConfigOverride.Raw) 121 if err != nil { 122 return nil, err 123 } 124 return configOverride, nil 125 } 126 } 127 128 func (o *IBPOrderer) UsingHSMImage() bool { 129 if o.Spec.Images != nil && o.Spec.Images.HSMImage != "" { 130 return true 131 } 132 return false 133 } 134 135 func (o *IBPOrderer) EnrollerImage() string { 136 return image.Format(o.Spec.Images.EnrollerImage, o.Spec.Images.EnrollerTag) 137 } 138 139 func (s *IBPOrderer) GetPullSecrets() []corev1.LocalObjectReference { 140 pullSecrets := []corev1.LocalObjectReference{} 141 for _, ps := range s.Spec.ImagePullSecrets { 142 pullSecrets = append(pullSecrets, corev1.LocalObjectReference{Name: ps}) 143 } 144 return pullSecrets 145 } 146 147 func (s *IBPOrderer) GetRegistryURL() string { 148 return s.Spec.RegistryURL 149 } 150 151 func (s *IBPOrderer) GetArch() []string { 152 return s.Spec.Arch 153 } 154 155 // GetFabricVersion returns fabric version from CR spec 156 func (s *IBPOrderer) GetFabricVersion() string { 157 return s.Spec.FabricVersion 158 } 159 160 // SetFabricVersion sets fabric version on spec 161 func (s *IBPOrderer) SetFabricVersion(version string) { 162 s.Spec.FabricVersion = version 163 } 164 165 // ImagesSet returns true if the spec has images defined 166 func (s *IBPOrderer) ImagesSet() bool { 167 return s.Spec.Images != nil 168 } 169 170 // GetResource returns resources defined in spec for request component, if no resources 171 // defined returns blank but initialized instance of resources 172 func (s *IBPOrderer) GetResource(comp Component) corev1.ResourceRequirements { 173 if s.Spec.Resources != nil { 174 switch comp { 175 case INIT: 176 if s.Spec.Resources.Init != nil { 177 return *s.Spec.Resources.Init 178 } 179 case ORDERER: 180 if s.Spec.Resources.Orderer != nil { 181 return *s.Spec.Resources.Orderer 182 } 183 case GRPCPROXY: 184 if s.Spec.Resources.GRPCProxy != nil { 185 return *s.Spec.Resources.GRPCProxy 186 } 187 case ENROLLER: 188 if s.Spec.Resources.Enroller != nil { 189 return *s.Spec.Resources.Enroller 190 } 191 case HSMDAEMON: 192 if s.Spec.Resources.HSMDaemon != nil { 193 return *s.Spec.Resources.HSMDaemon 194 } 195 } 196 } 197 198 return corev1.ResourceRequirements{} 199 } 200 201 // PVCName returns pvc name associated with instance 202 func (s *IBPOrderer) PVCName() string { 203 name := s.Name + "-pvc" 204 if s.Spec.CustomNames.PVC.Orderer != "" { 205 name = s.Spec.CustomNames.PVC.Orderer 206 } 207 return name 208 } 209 210 func (s *IBPOrderer) GetMSPID() string { 211 return s.Spec.MSPID 212 } 213 214 func (s *IBPOrdererSpec) NodeOUDisabled() bool { 215 if s.DisableNodeOU != nil { 216 return *s.DisableNodeOU 217 } 218 219 return false 220 } 221 222 func (s *IBPOrdererSpec) HSMSet() bool { 223 if s.HSM != nil && s.HSM.PKCS11Endpoint != "" { 224 return true 225 } 226 227 return false 228 } 229 230 func (s *IBPOrdererSpec) DomainSet() bool { 231 if s.Domain != "" { 232 return true 233 } 234 235 return false 236 } 237 238 func (s *IBPOrdererSpec) IsPrecreateOrderer() bool { 239 return s.IsPrecreate != nil && *s.IsPrecreate 240 } 241 242 func (s *IBPOrdererSpec) IsUsingChannelLess() bool { 243 return s.UseChannelLess != nil && *s.UseChannelLess 244 } 245 246 func (s *IBPOrdererSpec) GetNumSecondsWarningPeriod() int64 { 247 daysToSecondsConversion := int64(24 * 60 * 60) 248 if s.NumSecondsWarningPeriod == 0 { 249 // Default to the equivalent of 30 days 250 return 30 * daysToSecondsConversion 251 } 252 return s.NumSecondsWarningPeriod 253 } 254 255 func (i *OrdererImages) Override(requested *OrdererImages, registryURL string, arch string) { 256 if requested == nil { 257 requested = &OrdererImages{} 258 } 259 260 // Images 261 i.GRPCWebImage = image.GetImage(registryURL, i.GRPCWebImage, requested.GRPCWebImage) 262 i.OrdererInitImage = image.GetImage(registryURL, i.OrdererInitImage, requested.OrdererInitImage) 263 i.OrdererImage = image.GetImage(registryURL, i.OrdererImage, requested.OrdererImage) 264 i.HSMImage = image.GetImage(registryURL, i.HSMImage, requested.HSMImage) 265 i.EnrollerImage = image.GetImage(registryURL, i.EnrollerImage, requested.EnrollerImage) 266 267 // Tags 268 i.GRPCWebTag = image.GetTag(arch, i.GRPCWebTag, requested.GRPCWebTag) 269 i.OrdererInitTag = image.GetTag(arch, i.OrdererInitTag, requested.OrdererInitTag) 270 i.OrdererTag = image.GetTag(arch, i.OrdererTag, requested.OrdererTag) 271 i.HSMTag = image.GetTag(arch, i.HSMTag, requested.HSMTag) 272 i.EnrollerTag = image.GetTag(arch, i.EnrollerTag, requested.EnrollerTag) 273 } 274 275 func init() { 276 SchemeBuilder.Register(&IBPOrderer{}, &IBPOrdererList{}) 277 } 278 279 func (o *IBPOrdererStatus) HasType() bool { 280 if o.CRStatus.Type != "" { 281 return true 282 } 283 return false 284 }