github.com/sacloud/libsacloud/v2@v2.32.3/internal/define/enhanced_database.go (about)

     1  // Copyright 2016-2022 The Libsacloud Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package define
    16  
    17  import (
    18  	"net/http"
    19  
    20  	"github.com/sacloud/libsacloud/v2/internal/define/names"
    21  	"github.com/sacloud/libsacloud/v2/internal/define/ops"
    22  	"github.com/sacloud/libsacloud/v2/internal/dsl"
    23  	"github.com/sacloud/libsacloud/v2/internal/dsl/meta"
    24  	"github.com/sacloud/libsacloud/v2/sacloud/naked"
    25  )
    26  
    27  const (
    28  	enhancedDatabaseAPIName     = "EnhancedDB"
    29  	enhancedDatabaseAPIPathName = "commonserviceitem"
    30  )
    31  
    32  var enhancedDatabaseAPI = &dsl.Resource{
    33  	Name:       enhancedDatabaseAPIName,
    34  	PathName:   enhancedDatabaseAPIPathName,
    35  	PathSuffix: dsl.CloudAPISuffix,
    36  	IsGlobal:   true,
    37  	Operations: dsl.Operations{
    38  		// find
    39  		ops.FindCommonServiceItem(enhancedDatabaseAPIName, enhancedDatabaseNakedType, findParameter, enhancedDatabaseView),
    40  
    41  		// create
    42  		ops.CreateCommonServiceItem(enhancedDatabaseAPIName, enhancedDatabaseNakedType, enhancedDatabaseCreateParam, enhancedDatabaseView),
    43  
    44  		// read
    45  		ops.ReadCommonServiceItem(enhancedDatabaseAPIName, enhancedDatabaseNakedType, enhancedDatabaseView),
    46  
    47  		// update
    48  		ops.UpdateCommonServiceItem(enhancedDatabaseAPIName, enhancedDatabaseNakedType, enhancedDatabaseUpdateParam, enhancedDatabaseView),
    49  
    50  		// delete
    51  		ops.Delete(enhancedDatabaseAPIName),
    52  
    53  		// Set Password
    54  		{
    55  			ResourceName: enhancedDatabaseAPIName,
    56  			Name:         "SetPassword",
    57  			PathFormat:   dsl.IDAndSuffixPathFormat("enhanceddb/set-password"),
    58  			Method:       http.MethodPut,
    59  			RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{
    60  				Type: enhancedDatabaseUserNakedType,
    61  				Name: "CommonServiceItem",
    62  			}),
    63  			Arguments: dsl.Arguments{
    64  				dsl.ArgumentID,
    65  				dsl.MappableArgument("param", enhancedDatabaseSetPasswordParam, "CommonServiceItem"),
    66  			},
    67  		},
    68  	},
    69  }
    70  
    71  var (
    72  	enhancedDatabaseNakedType     = meta.Static(naked.EnhancedDB{})
    73  	enhancedDatabaseUserNakedType = meta.Static(naked.EnhancedDBPasswordSettings{})
    74  
    75  	enhancedDatabaseView = &dsl.Model{
    76  		Name:      enhancedDatabaseAPIName,
    77  		NakedType: enhancedDatabaseNakedType,
    78  		Fields: []*dsl.FieldDesc{
    79  			fields.ID(),
    80  			fields.Name(),
    81  			fields.Description(),
    82  			fields.Tags(),
    83  			fields.Availability(),
    84  			fields.IconID(),
    85  			fields.CreatedAt(),
    86  			fields.ModifiedAt(),
    87  
    88  			// settings
    89  			fields.SettingsHash(),
    90  			fields.EnhancedDBMaxConnections(),
    91  
    92  			// status
    93  			fields.EnhancedDBDatabaseName(),
    94  			fields.EnhancedDBDatabaseType(),
    95  			fields.EnhancedDBDatabaseRegion(),
    96  			fields.EnhancedDBDatabaseHostName(),
    97  			fields.EnhancedDBDatabasePort(),
    98  		},
    99  	}
   100  
   101  	enhancedDatabaseCreateParam = &dsl.Model{
   102  		Name:      names.CreateParameterName(enhancedDatabaseAPIName),
   103  		NakedType: enhancedDatabaseNakedType,
   104  		ConstFields: []*dsl.ConstFieldDesc{
   105  			{
   106  				Name: "Class",
   107  				Type: meta.TypeString,
   108  				Tags: &dsl.FieldTags{
   109  					MapConv: "Provider.Class",
   110  				},
   111  				Value: `"enhanceddb"`,
   112  			},
   113  			{
   114  				Name: "Region",
   115  				Type: meta.TypeString,
   116  				Tags: &dsl.FieldTags{
   117  					MapConv: "Status.Region",
   118  				},
   119  				Value: `"is1"`,
   120  			},
   121  			{
   122  				Name: "DatabaseType",
   123  				Type: meta.TypeString,
   124  				Tags: &dsl.FieldTags{
   125  					MapConv: "Status.DatabaseType",
   126  				},
   127  				Value: `"tidb"`,
   128  			},
   129  			{
   130  				Name: "MaxConnections",
   131  				Type: meta.TypeInt,
   132  				Tags: &dsl.FieldTags{
   133  					MapConv: "Settings.EnhancedDB.MaxConnections",
   134  				},
   135  				Value: `50`,
   136  			},
   137  		},
   138  		Fields: []*dsl.FieldDesc{
   139  			// common fields
   140  			fields.Name(),
   141  			fields.Description(),
   142  			fields.Tags(),
   143  			fields.IconID(),
   144  
   145  			// settings
   146  			fields.EnhancedDBDatabaseName(),
   147  		},
   148  	}
   149  
   150  	enhancedDatabaseUpdateParam = &dsl.Model{
   151  		Name:      names.UpdateParameterName(enhancedDatabaseAPIName),
   152  		NakedType: enhancedDatabaseNakedType,
   153  		ConstFields: []*dsl.ConstFieldDesc{
   154  			{
   155  				Name: "MaxConnections",
   156  				Type: meta.TypeInt,
   157  				Tags: &dsl.FieldTags{
   158  					MapConv: "Settings.EnhancedDB.MaxConnections",
   159  				},
   160  				Value: `50`,
   161  			},
   162  		},
   163  		Fields: []*dsl.FieldDesc{
   164  			// common fields
   165  			fields.Name(),
   166  			fields.Description(),
   167  			fields.Tags(),
   168  			fields.IconID(),
   169  
   170  			// settings hash
   171  			fields.SettingsHash(),
   172  		},
   173  	}
   174  
   175  	enhancedDatabaseSetPasswordParam = &dsl.Model{
   176  		Name:      enhancedDatabaseAPIName + "SetPasswordRequest",
   177  		NakedType: meta.Static(naked.EnhancedDBPasswordSetting{}),
   178  		Fields: []*dsl.FieldDesc{
   179  			{
   180  				Name: "Password",
   181  				Type: meta.TypeString,
   182  				Tags: &dsl.FieldTags{
   183  					MapConv: "EnhancedDB.Password",
   184  				},
   185  			},
   186  		},
   187  	}
   188  )