github.com/IBM-Blockchain/fabric-operator@v1.0.4/pkg/offering/common/override.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 common
    20  
    21  import (
    22  	corev1 "k8s.io/api/core/v1"
    23  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    24  )
    25  
    26  func GetNodeSelectorTerms(arch []string, zone, region string) []corev1.NodeSelectorTerm {
    27  	nodeSelectorTerms := []corev1.NodeSelectorTerm{
    28  		corev1.NodeSelectorTerm{
    29  			MatchExpressions: []corev1.NodeSelectorRequirement{},
    30  		},
    31  		corev1.NodeSelectorTerm{
    32  			MatchExpressions: []corev1.NodeSelectorRequirement{},
    33  		},
    34  	}
    35  
    36  	AddArchSelector(arch, &nodeSelectorTerms)
    37  	AddZoneSelector(zone, &nodeSelectorTerms)
    38  	AddRegionSelector(region, &nodeSelectorTerms)
    39  
    40  	return nodeSelectorTerms
    41  }
    42  
    43  func AddArchSelector(arch []string, nodeSelectorTerms *[]corev1.NodeSelectorTerm) {
    44  	if len(arch) != 0 {
    45  		archNode := corev1.NodeSelectorRequirement{
    46  			Key:      "kubernetes.io/arch",
    47  			Operator: corev1.NodeSelectorOpIn,
    48  			Values:   arch,
    49  		}
    50  		(*nodeSelectorTerms)[0].MatchExpressions = append((*nodeSelectorTerms)[0].MatchExpressions, archNode)
    51  	}
    52  }
    53  
    54  func AddZoneSelector(zone string, nodeSelectorTerms *[]corev1.NodeSelectorTerm) {
    55  	zoneNode := corev1.NodeSelectorRequirement{
    56  		Key:      "topology.kubernetes.io/zone",
    57  		Operator: corev1.NodeSelectorOpIn,
    58  	}
    59  	zoneNodeOld := corev1.NodeSelectorRequirement{
    60  		Key:      "failure-domain.beta.kubernetes.io/zone",
    61  		Operator: corev1.NodeSelectorOpIn,
    62  	}
    63  	if zone != "" {
    64  		zoneNode.Values = []string{zone}
    65  		zoneNodeOld.Values = []string{zone}
    66  		(*nodeSelectorTerms)[0].MatchExpressions = append((*nodeSelectorTerms)[0].MatchExpressions, zoneNode)
    67  		(*nodeSelectorTerms)[1].MatchExpressions = append((*nodeSelectorTerms)[1].MatchExpressions, zoneNodeOld)
    68  	}
    69  }
    70  
    71  func AddRegionSelector(region string, nodeSelectorTerms *[]corev1.NodeSelectorTerm) {
    72  	regionNode := corev1.NodeSelectorRequirement{
    73  		Key:      "topology.kubernetes.io/region",
    74  		Operator: corev1.NodeSelectorOpIn,
    75  	}
    76  	regionNodeOld := corev1.NodeSelectorRequirement{
    77  		Key:      "failure-domain.beta.kubernetes.io/region",
    78  		Operator: corev1.NodeSelectorOpIn,
    79  	}
    80  	if region != "" {
    81  		regionNode.Values = []string{region}
    82  		regionNodeOld.Values = []string{region}
    83  		(*nodeSelectorTerms)[0].MatchExpressions = append((*nodeSelectorTerms)[0].MatchExpressions, regionNode)
    84  		(*nodeSelectorTerms)[1].MatchExpressions = append((*nodeSelectorTerms)[1].MatchExpressions, regionNodeOld)
    85  	}
    86  }
    87  
    88  func GetPodAntiAffinity(orgName string) *corev1.PodAntiAffinity {
    89  	return &corev1.PodAntiAffinity{
    90  		PreferredDuringSchedulingIgnoredDuringExecution: []corev1.WeightedPodAffinityTerm{
    91  			corev1.WeightedPodAffinityTerm{
    92  				Weight: 100,
    93  				PodAffinityTerm: corev1.PodAffinityTerm{
    94  					LabelSelector: &metav1.LabelSelector{
    95  						MatchExpressions: []metav1.LabelSelectorRequirement{
    96  							metav1.LabelSelectorRequirement{
    97  								Key:      "orgname",
    98  								Operator: metav1.LabelSelectorOpIn,
    99  								Values:   []string{orgName},
   100  							},
   101  						},
   102  					},
   103  					TopologyKey: "kubernetes.io/hostname",
   104  				},
   105  			},
   106  		},
   107  	}
   108  }