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  }