github.com/sacloud/iaas-api-go@v1.12.0/internal/define/container_registry.go (about)

     1  // Copyright 2022-2023 The sacloud/iaas-api-go 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/iaas-api-go/internal/define/names"
    21  	"github.com/sacloud/iaas-api-go/internal/define/ops"
    22  	"github.com/sacloud/iaas-api-go/internal/dsl"
    23  	"github.com/sacloud/iaas-api-go/internal/dsl/meta"
    24  	"github.com/sacloud/iaas-api-go/naked"
    25  	"github.com/sacloud/iaas-api-go/types"
    26  )
    27  
    28  const (
    29  	containerRegistryAPIName     = "ContainerRegistry"
    30  	containerRegistryAPIPathName = "commonserviceitem"
    31  )
    32  
    33  var containerRegistryAPI = &dsl.Resource{
    34  	Name:       containerRegistryAPIName,
    35  	PathName:   containerRegistryAPIPathName,
    36  	PathSuffix: dsl.CloudAPISuffix,
    37  	IsGlobal:   true,
    38  	Operations: dsl.Operations{
    39  		// find
    40  		ops.FindCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, findParameter, containerRegistryView),
    41  
    42  		// create
    43  		ops.CreateCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, containerRegistryCreateParam, containerRegistryView),
    44  
    45  		// read
    46  		ops.ReadCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, containerRegistryView),
    47  
    48  		// update
    49  		ops.UpdateCommonServiceItem(containerRegistryAPIName, containerRegistryNakedType, containerRegistryUpdateParam, containerRegistryView),
    50  		// updateSettings
    51  		ops.UpdateCommonServiceItemSettings(containerRegistryAPIName, containerRegistryUpdateSettingsNakedType, containerRegistryUpdateSettingsParam, containerRegistryView),
    52  
    53  		// delete
    54  		ops.Delete(containerRegistryAPIName),
    55  
    56  		// list users
    57  		{
    58  			ResourceName: containerRegistryAPIName,
    59  			Name:         "ListUsers",
    60  			PathFormat:   dsl.IDAndSuffixPathFormat("containerregistry/users"),
    61  			Method:       http.MethodGet,
    62  			Arguments: dsl.Arguments{
    63  				dsl.ArgumentID,
    64  			},
    65  			ResponseEnvelope: dsl.ResponseEnvelope(&dsl.EnvelopePayloadDesc{
    66  				Type: meta.Static(naked.ContainerRegistryUsers{}),
    67  				Name: containerRegistryAPIName,
    68  			}),
    69  			Results: dsl.Results{
    70  				{
    71  					SourceField: containerRegistryAPIName,
    72  					DestField:   containerRegistryUserListView.Name,
    73  					Model:       containerRegistryUserListView,
    74  				},
    75  			},
    76  		},
    77  		// Add User
    78  		{
    79  			ResourceName: containerRegistryAPIName,
    80  			Name:         "AddUser",
    81  			PathFormat:   dsl.IDAndSuffixPathFormat("containerregistry/users"),
    82  			Method:       http.MethodPost,
    83  			RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{
    84  				Type: containerRegistryUserNakedType,
    85  				Name: containerRegistryAPIName,
    86  			}),
    87  			Arguments: dsl.Arguments{
    88  				dsl.ArgumentID,
    89  				dsl.MappableArgument("param", containerRegistryUserCreateParam, containerRegistryAPIName),
    90  			},
    91  		},
    92  		// Update User
    93  		{
    94  			ResourceName: containerRegistryAPIName,
    95  			Name:         "UpdateUser",
    96  			PathFormat:   dsl.IDAndSuffixPathFormat("containerregistry/users/{{.username}}"),
    97  			Method:       http.MethodPut,
    98  			RequestEnvelope: dsl.RequestEnvelope(&dsl.EnvelopePayloadDesc{
    99  				Type: containerRegistryUserNakedType,
   100  				Name: containerRegistryAPIName,
   101  			}),
   102  			Arguments: dsl.Arguments{
   103  				dsl.ArgumentID,
   104  				&dsl.Argument{
   105  					Name: "username",
   106  					Type: meta.TypeString,
   107  				},
   108  				dsl.MappableArgument("param", containerRegistryUserUpdateParam, containerRegistryAPIName),
   109  			},
   110  		},
   111  		// delete certificates
   112  		{
   113  			ResourceName: containerRegistryAPIName,
   114  			Name:         "DeleteUser",
   115  			PathFormat:   dsl.IDAndSuffixPathFormat("containerregistry/users/{{.username}}"),
   116  			Method:       http.MethodDelete,
   117  			Arguments: dsl.Arguments{
   118  				dsl.ArgumentID,
   119  				&dsl.Argument{
   120  					Name: "username",
   121  					Type: meta.TypeString,
   122  				},
   123  			},
   124  		},
   125  	},
   126  }
   127  
   128  var (
   129  	containerRegistryNakedType               = meta.Static(naked.ContainerRegistry{})
   130  	containerRegistryUpdateSettingsNakedType = meta.Static(naked.ContainerRegistrySettingsUpdate{})
   131  	containerRegistryUserNakedType           = meta.Static(naked.ContainerRegistryUser{})
   132  
   133  	containerRegistryView = &dsl.Model{
   134  		Name:      containerRegistryAPIName,
   135  		NakedType: containerRegistryNakedType,
   136  		Fields: []*dsl.FieldDesc{
   137  			fields.ID(),
   138  			fields.Name(),
   139  			fields.Description(),
   140  			fields.Tags(),
   141  			fields.Availability(),
   142  			fields.IconID(),
   143  			fields.CreatedAt(),
   144  			fields.ModifiedAt(),
   145  
   146  			// settings
   147  			fields.ContainerRegistryAccessLevel(),
   148  			fields.ContainerRegistryVirtualDomain(),
   149  			fields.SettingsHash(),
   150  
   151  			// status
   152  			fields.ContainerRegistrySubDomainLabel(),
   153  			fields.ContainerRegistryFQDN(),
   154  		},
   155  	}
   156  
   157  	containerRegistryCreateParam = &dsl.Model{
   158  		Name:      names.CreateParameterName(containerRegistryAPIName),
   159  		NakedType: containerRegistryNakedType,
   160  		ConstFields: []*dsl.ConstFieldDesc{
   161  			{
   162  				Name: "Class",
   163  				Type: meta.TypeString,
   164  				Tags: &dsl.FieldTags{
   165  					MapConv: "Provider.Class",
   166  				},
   167  				Value: `"containerregistry"`,
   168  			},
   169  		},
   170  		Fields: []*dsl.FieldDesc{
   171  			// common fields
   172  			fields.Name(),
   173  			fields.Description(),
   174  			fields.Tags(),
   175  			fields.IconID(),
   176  
   177  			// settings
   178  			fields.ContainerRegistryAccessLevel(),
   179  			fields.ContainerRegistryVirtualDomain(),
   180  			// status
   181  			fields.ContainerRegistrySubDomainLabel(),
   182  		},
   183  	}
   184  
   185  	containerRegistryUpdateParam = &dsl.Model{
   186  		Name:      names.UpdateParameterName(containerRegistryAPIName),
   187  		NakedType: containerRegistryNakedType,
   188  		Fields: []*dsl.FieldDesc{
   189  			// common fields
   190  			fields.Name(),
   191  			fields.Description(),
   192  			fields.Tags(),
   193  			fields.IconID(),
   194  
   195  			// settings
   196  			fields.ContainerRegistryAccessLevel(),
   197  			fields.ContainerRegistryVirtualDomain(),
   198  			// settings hash
   199  			fields.SettingsHash(),
   200  		},
   201  	}
   202  
   203  	containerRegistryUpdateSettingsParam = &dsl.Model{
   204  		Name:      names.UpdateSettingsParameterName(containerRegistryAPIName),
   205  		NakedType: containerRegistryNakedType,
   206  		Fields: []*dsl.FieldDesc{
   207  			// settings
   208  			fields.ContainerRegistryAccessLevel(),
   209  			fields.ContainerRegistryVirtualDomain(),
   210  			// settings hash
   211  			fields.SettingsHash(),
   212  		},
   213  	}
   214  
   215  	containerRegistryUserListView = &dsl.Model{
   216  		Name:      containerRegistryAPIName + "Users",
   217  		NakedType: meta.Static(naked.ContainerRegistryUsers{}),
   218  		Fields: []*dsl.FieldDesc{
   219  			{
   220  				Name: "Users",
   221  				Type: &dsl.Model{
   222  					Name:      containerRegistryAPIName + "User",
   223  					NakedType: meta.Static(naked.ContainerRegistryUser{}),
   224  					IsArray:   true,
   225  					Fields: []*dsl.FieldDesc{
   226  						fields.Def("UserName", meta.TypeString),
   227  						fields.Def("Permission", meta.Static(types.EContainerRegistryPermission(""))),
   228  					},
   229  				},
   230  			},
   231  		},
   232  	}
   233  	containerRegistryUserCreateParam = &dsl.Model{
   234  		Name:      names.CreateParameterName(containerRegistryAPIName + "User"),
   235  		NakedType: meta.Static(naked.ContainerRegistryUser{}),
   236  		Fields: []*dsl.FieldDesc{
   237  			fields.Def("UserName", meta.TypeString),
   238  			fields.Def("Password", meta.TypeString),
   239  			fields.Def("Permission", meta.Static(types.EContainerRegistryPermission(""))),
   240  		},
   241  	}
   242  	containerRegistryUserUpdateParam = &dsl.Model{
   243  		Name:      names.UpdateParameterName(containerRegistryAPIName + "User"),
   244  		NakedType: meta.Static(naked.ContainerRegistryUser{}),
   245  		Fields: []*dsl.FieldDesc{
   246  			fields.Def("Password", meta.TypeString),
   247  			fields.Def("Permission", meta.Static(types.EContainerRegistryPermission(""))),
   248  		},
   249  	}
   250  )