github.com/opensearch-project/opensearch-go/v2@v2.3.0/opensearchapi/api.indices.put_alias.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  //
     3  // The OpenSearch Contributors require contributions made to
     4  // this file be licensed under the Apache-2.0 license or a
     5  // compatible open source license.
     6  //
     7  // Modifications Copyright OpenSearch Contributors. See
     8  // GitHub history for details.
     9  
    10  // Licensed to Elasticsearch B.V. under one or more contributor
    11  // license agreements. See the NOTICE file distributed with
    12  // this work for additional information regarding copyright
    13  // ownership. Elasticsearch B.V. licenses this file to you under
    14  // the Apache License, Version 2.0 (the "License"); you may
    15  // not use this file except in compliance with the License.
    16  // You may obtain a copy of the License at
    17  //
    18  //    http://www.apache.org/licenses/LICENSE-2.0
    19  //
    20  // Unless required by applicable law or agreed to in writing,
    21  // software distributed under the License is distributed on an
    22  // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    23  // KIND, either express or implied.  See the License for the
    24  // specific language governing permissions and limitations
    25  // under the License.
    26  
    27  package opensearchapi
    28  
    29  import (
    30  	"context"
    31  	"io"
    32  	"net/http"
    33  	"strings"
    34  	"time"
    35  )
    36  
    37  func newIndicesPutAliasFunc(t Transport) IndicesPutAlias {
    38  	return func(index []string, name string, o ...func(*IndicesPutAliasRequest)) (*Response, error) {
    39  		var r = IndicesPutAliasRequest{Index: index, Name: name}
    40  		for _, f := range o {
    41  			f(&r)
    42  		}
    43  		return r.Do(r.ctx, t)
    44  	}
    45  }
    46  
    47  // ----- API Definition -------------------------------------------------------
    48  
    49  // IndicesPutAlias creates or updates an alias.
    50  //
    51  //
    52  type IndicesPutAlias func(index []string, name string, o ...func(*IndicesPutAliasRequest)) (*Response, error)
    53  
    54  // IndicesPutAliasRequest configures the Indices Put Alias API request.
    55  //
    56  type IndicesPutAliasRequest struct {
    57  	Index []string
    58  
    59  	Body io.Reader
    60  
    61  	Name string
    62  
    63  	MasterTimeout         time.Duration
    64  	ClusterManagerTimeout time.Duration
    65  	Timeout               time.Duration
    66  
    67  	Pretty     bool
    68  	Human      bool
    69  	ErrorTrace bool
    70  	FilterPath []string
    71  
    72  	Header http.Header
    73  
    74  	ctx context.Context
    75  }
    76  
    77  // Do executes the request and returns response or error.
    78  //
    79  func (r IndicesPutAliasRequest) Do(ctx context.Context, transport Transport) (*Response, error) {
    80  	var (
    81  		method string
    82  		path   strings.Builder
    83  		params map[string]string
    84  	)
    85  
    86  	method = "PUT"
    87  
    88  	path.Grow(1 + len(strings.Join(r.Index, ",")) + 1 + len("_aliases") + 1 + len(r.Name))
    89  	path.WriteString("/")
    90  	path.WriteString(strings.Join(r.Index, ","))
    91  	path.WriteString("/")
    92  	path.WriteString("_aliases")
    93  	path.WriteString("/")
    94  	path.WriteString(r.Name)
    95  
    96  	params = make(map[string]string)
    97  
    98  	if r.MasterTimeout != 0 {
    99  		params["master_timeout"] = formatDuration(r.MasterTimeout)
   100  	}
   101  
   102  	if r.ClusterManagerTimeout != 0 {
   103  		params["cluster_manager_timeout"] = formatDuration(r.ClusterManagerTimeout)
   104  	}
   105  
   106  	if r.Timeout != 0 {
   107  		params["timeout"] = formatDuration(r.Timeout)
   108  	}
   109  
   110  	if r.Pretty {
   111  		params["pretty"] = "true"
   112  	}
   113  
   114  	if r.Human {
   115  		params["human"] = "true"
   116  	}
   117  
   118  	if r.ErrorTrace {
   119  		params["error_trace"] = "true"
   120  	}
   121  
   122  	if len(r.FilterPath) > 0 {
   123  		params["filter_path"] = strings.Join(r.FilterPath, ",")
   124  	}
   125  
   126  	req, err := newRequest(method, path.String(), r.Body)
   127  	if err != nil {
   128  		return nil, err
   129  	}
   130  
   131  	if len(params) > 0 {
   132  		q := req.URL.Query()
   133  		for k, v := range params {
   134  			q.Set(k, v)
   135  		}
   136  		req.URL.RawQuery = q.Encode()
   137  	}
   138  
   139  	if r.Body != nil {
   140  		req.Header[headerContentType] = headerContentTypeJSON
   141  	}
   142  
   143  	if len(r.Header) > 0 {
   144  		if len(req.Header) == 0 {
   145  			req.Header = r.Header
   146  		} else {
   147  			for k, vv := range r.Header {
   148  				for _, v := range vv {
   149  					req.Header.Add(k, v)
   150  				}
   151  			}
   152  		}
   153  	}
   154  
   155  	if ctx != nil {
   156  		req = req.WithContext(ctx)
   157  	}
   158  
   159  	res, err := transport.Perform(req)
   160  	if err != nil {
   161  		return nil, err
   162  	}
   163  
   164  	response := Response{
   165  		StatusCode: res.StatusCode,
   166  		Body:       res.Body,
   167  		Header:     res.Header,
   168  	}
   169  
   170  	return &response, nil
   171  }
   172  
   173  // WithContext sets the request context.
   174  //
   175  func (f IndicesPutAlias) WithContext(v context.Context) func(*IndicesPutAliasRequest) {
   176  	return func(r *IndicesPutAliasRequest) {
   177  		r.ctx = v
   178  	}
   179  }
   180  
   181  // WithBody - The settings for the alias, such as `routing` or `filter`.
   182  //
   183  func (f IndicesPutAlias) WithBody(v io.Reader) func(*IndicesPutAliasRequest) {
   184  	return func(r *IndicesPutAliasRequest) {
   185  		r.Body = v
   186  	}
   187  }
   188  
   189  // WithMasterTimeout - explicit operation timeout for connection to cluster-manager node.
   190  //
   191  // Deprecated: To promote inclusive language, use WithClusterManagerTimeout instead.
   192  //
   193  func (f IndicesPutAlias) WithMasterTimeout(v time.Duration) func(*IndicesPutAliasRequest) {
   194  	return func(r *IndicesPutAliasRequest) {
   195  		r.MasterTimeout = v
   196  	}
   197  }
   198  
   199  // WithClusterManagerTimeout - explicit operation timeout for connection to cluster-manager node.
   200  //
   201  func (f IndicesPutAlias) WithClusterManagerTimeout(v time.Duration) func(*IndicesPutAliasRequest) {
   202  	return func(r *IndicesPutAliasRequest) {
   203  		r.ClusterManagerTimeout = v
   204  	}
   205  }
   206  
   207  // WithTimeout - explicit timestamp for the document.
   208  //
   209  func (f IndicesPutAlias) WithTimeout(v time.Duration) func(*IndicesPutAliasRequest) {
   210  	return func(r *IndicesPutAliasRequest) {
   211  		r.Timeout = v
   212  	}
   213  }
   214  
   215  // WithPretty makes the response body pretty-printed.
   216  //
   217  func (f IndicesPutAlias) WithPretty() func(*IndicesPutAliasRequest) {
   218  	return func(r *IndicesPutAliasRequest) {
   219  		r.Pretty = true
   220  	}
   221  }
   222  
   223  // WithHuman makes statistical values human-readable.
   224  //
   225  func (f IndicesPutAlias) WithHuman() func(*IndicesPutAliasRequest) {
   226  	return func(r *IndicesPutAliasRequest) {
   227  		r.Human = true
   228  	}
   229  }
   230  
   231  // WithErrorTrace includes the stack trace for errors in the response body.
   232  //
   233  func (f IndicesPutAlias) WithErrorTrace() func(*IndicesPutAliasRequest) {
   234  	return func(r *IndicesPutAliasRequest) {
   235  		r.ErrorTrace = true
   236  	}
   237  }
   238  
   239  // WithFilterPath filters the properties of the response body.
   240  //
   241  func (f IndicesPutAlias) WithFilterPath(v ...string) func(*IndicesPutAliasRequest) {
   242  	return func(r *IndicesPutAliasRequest) {
   243  		r.FilterPath = v
   244  	}
   245  }
   246  
   247  // WithHeader adds the headers to the HTTP request.
   248  //
   249  func (f IndicesPutAlias) WithHeader(h map[string]string) func(*IndicesPutAliasRequest) {
   250  	return func(r *IndicesPutAliasRequest) {
   251  		if r.Header == nil {
   252  			r.Header = make(http.Header)
   253  		}
   254  		for k, v := range h {
   255  			r.Header.Add(k, v)
   256  		}
   257  	}
   258  }
   259  
   260  // WithOpaqueID adds the X-Opaque-Id header to the HTTP request.
   261  //
   262  func (f IndicesPutAlias) WithOpaqueID(s string) func(*IndicesPutAliasRequest) {
   263  	return func(r *IndicesPutAliasRequest) {
   264  		if r.Header == nil {
   265  			r.Header = make(http.Header)
   266  		}
   267  		r.Header.Set("X-Opaque-Id", s)
   268  	}
   269  }