github.com/IBM-Blockchain/fabric-operator@v1.0.4/api/v1beta1/ibppeer.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 "strings" 23 24 config "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/peer/config/v1" 25 v2config "github.com/IBM-Blockchain/fabric-operator/pkg/initializer/peer/config/v2" 26 "github.com/IBM-Blockchain/fabric-operator/pkg/util/image" 27 "github.com/IBM-Blockchain/fabric-operator/version" 28 corev1 "k8s.io/api/core/v1" 29 ) 30 31 // +kubebuilder:object:generate=false 32 33 type CoreConfig interface { 34 UsingPKCS11() bool 35 } 36 37 func (s *IBPPeer) ResetRestart() { 38 s.Spec.Action.Restart = false 39 } 40 41 func (s *IBPPeer) ResetEcertReenroll() { 42 s.Spec.Action.Reenroll.Ecert = false 43 s.Spec.Action.Reenroll.EcertNewKey = false 44 } 45 46 func (s *IBPPeer) ResetTLSReenroll() { 47 s.Spec.Action.Reenroll.TLSCert = false 48 s.Spec.Action.Reenroll.TLSCertNewKey = false 49 } 50 51 func (s *IBPPeer) ResetEcertEnroll() { 52 s.Spec.Action.Enroll.Ecert = false 53 } 54 55 func (s *IBPPeer) ResetTLSEnroll() { 56 s.Spec.Action.Enroll.TLSCert = false 57 } 58 59 func (s *IBPPeer) ResetUpgradeDBs() { 60 s.Spec.Action.UpgradeDBs = false 61 } 62 63 func (p *IBPPeer) ClientAuthCryptoSet() bool { 64 secret := p.Spec.Secret 65 if secret != nil { 66 if secret.MSP != nil && secret.MSP.ClientAuth != nil { 67 return true 68 } 69 if secret.Enrollment != nil && secret.Enrollment.ClientAuth != nil { 70 return true 71 } 72 } 73 74 return false 75 } 76 77 func (p *IBPPeer) UsingHSMProxy() bool { 78 if p.Spec.HSM != nil && p.Spec.HSM.PKCS11Endpoint != "" { 79 return true 80 } 81 return false 82 } 83 84 func (p *IBPPeer) UsingHSMImage() bool { 85 if p.Spec.Images != nil && p.Spec.Images.HSMImage != "" { 86 return true 87 } 88 return false 89 } 90 91 func (p *IBPPeer) UsingCCLauncherImage() bool { 92 if p.Spec.Images != nil && p.Spec.Images.CCLauncherImage != "" { 93 return true 94 } 95 96 return false 97 } 98 99 func (p *IBPPeer) EnrollerImage() string { 100 return image.Format(p.Spec.Images.EnrollerImage, p.Spec.Images.EnrollerTag) 101 } 102 103 func (s *IBPPeer) GetConfigOverride() (interface{}, error) { 104 switch version.GetMajorReleaseVersion(s.Spec.FabricVersion) { 105 case version.V2: 106 if s.Spec.ConfigOverride == nil { 107 return &v2config.Core{}, nil 108 } 109 110 configOverride, err := v2config.ReadFrom(&s.Spec.ConfigOverride.Raw) 111 if err != nil { 112 return nil, err 113 } 114 return configOverride, nil 115 case version.V1: 116 fallthrough 117 default: 118 if s.Spec.ConfigOverride == nil { 119 return &config.Core{}, nil 120 } 121 122 configOverride, err := config.ReadFrom(&s.Spec.ConfigOverride.Raw) 123 if err != nil { 124 return nil, err 125 } 126 return configOverride, nil 127 } 128 } 129 130 func (s *IBPPeer) IsHSMEnabled() bool { 131 configOverride, err := s.GetConfigOverride() 132 if err != nil { 133 return false 134 } 135 136 return configOverride.(CoreConfig).UsingPKCS11() 137 } 138 139 func (s *IBPPeer) UsingCouchDB() bool { 140 if strings.ToLower(s.Spec.StateDb) == "couchdb" { 141 return true 142 } 143 144 return false 145 } 146 147 func (s *IBPPeer) GetPullSecrets() []corev1.LocalObjectReference { 148 pullSecrets := []corev1.LocalObjectReference{} 149 for _, ps := range s.Spec.ImagePullSecrets { 150 pullSecrets = append(pullSecrets, corev1.LocalObjectReference{Name: ps}) 151 } 152 return pullSecrets 153 } 154 155 func (s *IBPPeer) GetRegistryURL() string { 156 return s.Spec.RegistryURL 157 } 158 159 func (s *IBPPeer) GetArch() []string { 160 return s.Spec.Arch 161 } 162 163 // GetFabricVersion returns fabric version from CR spec 164 func (s *IBPPeer) GetFabricVersion() string { 165 return s.Spec.FabricVersion 166 } 167 168 // SetFabricVersion sets fabric version on spec 169 func (s *IBPPeer) SetFabricVersion(version string) { 170 s.Spec.FabricVersion = version 171 } 172 173 // ImagesSet returns true if the spec has images defined 174 func (s *IBPPeer) ImagesSet() bool { 175 return s.Spec.Images != nil 176 } 177 178 // GetResource returns resources defined in spec for request component, if no resources 179 // defined returns blank but initialized instance of resources 180 func (s *IBPPeer) GetResource(comp Component) corev1.ResourceRequirements { 181 if s.Spec.Resources != nil { 182 switch comp { 183 case INIT: 184 if s.Spec.Resources.Init != nil { 185 return *s.Spec.Resources.Init 186 } 187 case PEER: 188 if s.Spec.Resources.Peer != nil { 189 return *s.Spec.Resources.Peer 190 } 191 case GRPCPROXY: 192 if s.Spec.Resources.GRPCProxy != nil { 193 return *s.Spec.Resources.GRPCProxy 194 } 195 case FLUENTD: 196 if s.Spec.Resources.FluentD != nil { 197 return *s.Spec.Resources.FluentD 198 } 199 case DIND: 200 if s.Spec.Resources.DinD != nil { 201 return *s.Spec.Resources.DinD 202 } 203 case COUCHDB: 204 if s.Spec.Resources.CouchDB != nil { 205 return *s.Spec.Resources.CouchDB 206 } 207 case CCLAUNCHER: 208 if s.Spec.Resources.CCLauncher != nil { 209 return *s.Spec.Resources.CCLauncher 210 } 211 case ENROLLER: 212 if s.Spec.Resources.Enroller != nil { 213 return *s.Spec.Resources.Enroller 214 } 215 case HSMDAEMON: 216 if s.Spec.Resources.HSMDaemon != nil { 217 return *s.Spec.Resources.HSMDaemon 218 } 219 } 220 } 221 222 return corev1.ResourceRequirements{} 223 } 224 225 // PVCName returns pvc name associated with instance 226 func (s *IBPPeer) PVCName() string { 227 name := s.Name + "-pvc" 228 if s.Spec.CustomNames.PVC.Peer != "" { 229 name = s.Spec.CustomNames.PVC.Peer 230 } 231 return name 232 } 233 234 func (s *IBPPeer) GetMSPID() string { 235 return s.Spec.MSPID 236 } 237 238 func (s *IBPPeerSpec) NodeOUDisabled() bool { 239 if s.DisableNodeOU != nil { 240 return *s.DisableNodeOU 241 } 242 243 return false 244 } 245 246 func (s *IBPPeerSpec) HSMSet() bool { 247 if s.HSM != nil && s.HSM.PKCS11Endpoint != "" { 248 return true 249 } 250 251 return false 252 } 253 254 func (s *IBPPeerSpec) DomainSet() bool { 255 if s.Domain != "" { 256 return true 257 } 258 259 return false 260 } 261 262 func (s *IBPPeerSpec) UsingLevelDB() bool { 263 if strings.ToLower(s.StateDb) == "leveldb" { 264 return true 265 } 266 267 return false 268 } 269 270 func (s *IBPPeerSpec) GetNumSecondsWarningPeriod() int64 { 271 daysToSecondsConversion := int64(24 * 60 * 60) 272 if s.NumSecondsWarningPeriod == 0 { 273 // Default to the equivalent of 30 days 274 return 30 * daysToSecondsConversion 275 } 276 return s.NumSecondsWarningPeriod 277 } 278 279 func (p *IBPPeerStatus) HasType() bool { 280 if p.CRStatus.Type != "" { 281 return true 282 } 283 return false 284 } 285 286 func (i *PeerImages) Override(requested *PeerImages, registryURL string, arch string) { 287 if requested == nil { 288 requested = &PeerImages{} 289 } 290 291 // Images 292 i.PeerInitImage = image.GetImage(registryURL, i.PeerInitImage, requested.PeerInitImage) 293 i.PeerImage = image.GetImage(registryURL, i.PeerImage, requested.PeerImage) 294 i.CouchDBImage = image.GetImage(registryURL, i.CouchDBImage, requested.CouchDBImage) 295 i.DindImage = image.GetImage(registryURL, i.DindImage, requested.DindImage) 296 i.GRPCWebImage = image.GetImage(registryURL, i.GRPCWebImage, requested.GRPCWebImage) 297 i.FluentdImage = image.GetImage(registryURL, i.FluentdImage, requested.FluentdImage) 298 i.CCLauncherImage = image.GetImage(registryURL, i.CCLauncherImage, requested.CCLauncherImage) 299 i.FileTransferImage = image.GetImage(registryURL, i.FileTransferImage, requested.FileTransferImage) 300 i.BuilderImage = image.GetImage(registryURL, i.BuilderImage, requested.BuilderImage) 301 i.GoEnvImage = image.GetImage(registryURL, i.GoEnvImage, requested.GoEnvImage) 302 i.JavaEnvImage = image.GetImage(registryURL, i.JavaEnvImage, requested.JavaEnvImage) 303 i.NodeEnvImage = image.GetImage(registryURL, i.NodeEnvImage, requested.NodeEnvImage) 304 i.HSMImage = image.GetImage(registryURL, i.HSMImage, requested.HSMImage) 305 i.EnrollerImage = image.GetImage(registryURL, i.EnrollerImage, requested.EnrollerImage) 306 307 // Tags 308 i.PeerInitTag = image.GetTag(arch, i.PeerInitTag, requested.PeerInitTag) 309 i.PeerTag = image.GetTag(arch, i.PeerTag, requested.PeerTag) 310 i.CouchDBTag = image.GetTag(arch, i.CouchDBTag, requested.CouchDBTag) 311 i.DindTag = image.GetTag(arch, i.DindTag, requested.DindTag) 312 i.GRPCWebTag = image.GetTag(arch, i.GRPCWebTag, requested.GRPCWebTag) 313 i.FluentdTag = image.GetTag(arch, i.FluentdTag, requested.FluentdTag) 314 i.CCLauncherTag = image.GetTag(arch, i.CCLauncherTag, requested.CCLauncherTag) 315 i.FileTransferTag = image.GetTag(arch, i.FileTransferTag, requested.FileTransferTag) 316 i.BuilderTag = image.GetTag(arch, i.BuilderTag, requested.BuilderTag) 317 i.GoEnvTag = image.GetTag(arch, i.GoEnvTag, requested.GoEnvTag) 318 i.JavaEnvTag = image.GetTag(arch, i.JavaEnvTag, requested.JavaEnvTag) 319 i.NodeEnvTag = image.GetTag(arch, i.NodeEnvTag, requested.NodeEnvTag) 320 i.HSMTag = image.GetTag(arch, i.HSMTag, requested.HSMTag) 321 i.EnrollerTag = image.GetTag(arch, i.EnrollerTag, requested.EnrollerTag) 322 } 323 324 func init() { 325 SchemeBuilder.Register(&IBPPeer{}, &IBPPeerList{}) 326 }