| package client | |
| import ( | |
| "context" | |
| "net/url" | |
| "strings" | |
| cerrdefs "github.com/containerd/errdefs" | |
| ) | |
| // ContainerRenameOptions represents the options for renaming a container. | |
| type ContainerRenameOptions struct { | |
| NewName string | |
| } | |
| // ContainerRenameResult represents the result of a container rename operation. | |
| type ContainerRenameResult struct { | |
| // This struct can be expanded in the future if needed | |
| } | |
| // ContainerRename changes the name of a given container. | |
| func (cli *Client) ContainerRename(ctx context.Context, containerID string, options ContainerRenameOptions) (ContainerRenameResult, error) { | |
| containerID, err := trimID("container", containerID) | |
| if err != nil { | |
| return ContainerRenameResult{}, err | |
| } | |
| options.NewName = strings.TrimSpace(options.NewName) | |
| if options.NewName == "" || strings.TrimPrefix(options.NewName, "/") == "" { | |
| // daemons before v29.0 did not handle the canonical name ("/") well | |
| // let's be nice and validate it here before sending | |
| return ContainerRenameResult{}, cerrdefs.ErrInvalidArgument.WithMessage("new name cannot be blank") | |
| } | |
| query := url.Values{} | |
| query.Set("name", options.NewName) | |
| resp, err := cli.post(ctx, "/containers/"+containerID+"/rename", query, nil, nil) | |
| defer ensureReaderClosed(resp) | |
| return ContainerRenameResult{}, err | |
| } |