github.com/verrazzano/verrazzano@v1.7.1/tools/psr/backend/pkg/opensearch/update.go (about) 1 // Copyright (c) 2022, 2023, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package opensearch 5 6 import ( 7 vmov1 "github.com/verrazzano/verrazzano-monitoring-operator/pkg/apis/vmcontroller/v1" 8 vzapi "github.com/verrazzano/verrazzano/platform-operator/apis/verrazzano/v1alpha1" 9 "github.com/verrazzano/verrazzano/platform-operator/controllers/verrazzano/component/common" 10 "github.com/verrazzano/verrazzano/tests/e2e/pkg" 11 corev1 "k8s.io/api/core/v1" 12 "k8s.io/apimachinery/pkg/api/resource" 13 ) 14 15 type CRModifier interface { 16 ModifyCR(cr *vzapi.Verrazzano) 17 } 18 19 type OpensearchCleanUpModifier struct { 20 } 21 22 type OpensearchAllNodeRolesModifier struct { 23 NodeReplicas int32 24 } 25 26 func (u OpensearchCleanUpModifier) ModifyCR(cr *vzapi.Verrazzano) { 27 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 28 } 29 30 type OpensearchMasterNodeGroupModifier struct { 31 NodeReplicas int32 32 NodeMemory string 33 NodeStorage string 34 } 35 36 type OpensearchIngestNodeGroupModifier struct { 37 NodeReplicas int32 38 NodeMemory string 39 NodeStorage string 40 } 41 42 type OpensearchDataNodeGroupModifier struct { 43 NodeReplicas int32 44 NodeStorage string 45 NodeMemory string 46 } 47 48 type OpensearchDuplicateNodeGroupModifier struct { 49 Name string 50 } 51 52 func (u OpensearchMasterNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 53 if cr.Spec.Components.Elasticsearch == nil { 54 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 55 } 56 cr.Spec.Components.Elasticsearch.Nodes = []vzapi.OpenSearchNode{} 57 cr.Spec.Components.Elasticsearch.Nodes = 58 append(cr.Spec.Components.Elasticsearch.Nodes, 59 vzapi.OpenSearchNode{ 60 Name: string(vmov1.MasterRole), 61 Replicas: &u.NodeReplicas, 62 Roles: []vmov1.NodeRole{vmov1.MasterRole}, 63 Resources: newResources(u.NodeMemory), 64 Storage: newNodeStorage(u.NodeStorage), 65 }, 66 vzapi.OpenSearchNode{ 67 Name: "es-master", 68 Replicas: common.Int32Ptr(0), 69 Roles: []vmov1.NodeRole{vmov1.MasterRole}, 70 }, 71 ) 72 } 73 74 func (u OpensearchIngestNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 75 if cr.Spec.Components.Elasticsearch == nil { 76 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 77 } 78 cr.Spec.Components.Elasticsearch.Nodes = []vzapi.OpenSearchNode{} 79 cr.Spec.Components.Elasticsearch.Nodes = 80 append(cr.Spec.Components.Elasticsearch.Nodes, 81 vzapi.OpenSearchNode{ 82 Name: string(vmov1.IngestRole), 83 Replicas: &u.NodeReplicas, 84 Roles: []vmov1.NodeRole{vmov1.MasterRole, vmov1.IngestRole}, 85 Storage: newNodeStorage(u.NodeStorage), 86 Resources: newResources(u.NodeMemory), 87 }, 88 ) 89 } 90 91 func (u OpensearchDataNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 92 if cr.Spec.Components.Elasticsearch == nil { 93 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 94 } 95 cr.Spec.Components.Elasticsearch.Nodes = []vzapi.OpenSearchNode{} 96 cr.Spec.Components.Elasticsearch.Nodes = 97 append(cr.Spec.Components.Elasticsearch.Nodes, 98 vzapi.OpenSearchNode{ 99 Name: string(vmov1.DataRole), 100 Replicas: &u.NodeReplicas, 101 Roles: []vmov1.NodeRole{vmov1.MasterRole, vmov1.DataRole}, 102 Storage: newNodeStorage(u.NodeStorage), 103 Resources: newResources(u.NodeMemory), 104 }, 105 ) 106 } 107 108 func (u OpensearchDuplicateNodeGroupModifier) ModifyCR(cr *vzapi.Verrazzano) { 109 if cr.Spec.Components.Elasticsearch == nil { 110 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 111 } 112 arg := vzapi.InstallArgs{ 113 Name: "nodes.master.replicas", 114 Value: "1", 115 } 116 cr.Spec.Components.Elasticsearch.ESInstallArgs = []vzapi.InstallArgs{ 117 arg, 118 arg, 119 } 120 } 121 122 func (u OpensearchAllNodeRolesModifier) ModifyCR(cr *vzapi.Verrazzano) { 123 cr.Spec.Components.Elasticsearch = &vzapi.ElasticsearchComponent{} 124 cr.Spec.Components.Elasticsearch.Nodes = []vzapi.OpenSearchNode{} 125 cr.Spec.Components.Elasticsearch.Nodes = 126 append(cr.Spec.Components.Elasticsearch.Nodes, 127 vzapi.OpenSearchNode{ 128 Name: string(vmov1.MasterRole), 129 Replicas: &u.NodeReplicas, 130 Roles: []vmov1.NodeRole{vmov1.MasterRole, vmov1.DataRole, vmov1.IngestRole}, 131 Storage: newNodeStorage("2Gi"), 132 Resources: newResources("512Mi"), 133 }, 134 ) 135 } 136 func newNodeStorage(size string) *vzapi.OpenSearchNodeStorage { 137 storage := new(vzapi.OpenSearchNodeStorage) 138 storage.Size = size 139 return storage 140 } 141 142 func newResources(requestMemory string) *corev1.ResourceRequirements { 143 memoryReq, err := resource.ParseQuantity(requestMemory) 144 if err != nil { 145 pkg.Log(pkg.Error, err.Error()) 146 return nil 147 } 148 resourceRequirements := new(corev1.ResourceRequirements) 149 resourceRequirements.Requests = make(corev1.ResourceList) 150 resourceRequirements.Requests[corev1.ResourceMemory] = memoryReq 151 return resourceRequirements 152 }