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  }