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  }