Skip to content

Feature: add "docker context edit" function #1622

Description

@thaJeztah

This is just a quick thought, but thought I'd write it down.

The next version of the docker cli adds a new docker context subcommand (#1501). With this subcommand, I can import, create, update, and export contexts.

The current set of options per context is limited, but may be extended in future (see
#1621 for a proposal).

Updating, or creating a context works for the current set of options, but likely doesn't scale well if there's many new options are to be added; at some point, people will have to resort to scripts to update, or create a context (docker context update --docker foo=bar,bar=baz --kubernetes foo=bar,bar=baz).

As an alternative, users can edit the files in the context storage directly, but this may not be desirable;

cd$(docker context inspect --format='{{.Storage.MetadataPath}}' mycontext)
vi meta.json

In addition, json works great for automation, and to serialize as a string, but does not allow comments, nor may it be very user-friendly to work with.

Proposal

Introduce a docker context edit subcommand.

The docker context edit command, using a similar approach as git commit, which (I think) works something like this;

  • export the context to a temporary file (e.g. ~/.docker/context/CONTEXT_EDIT)
    • this file could be in JSON format (but pretty-printed), or
    • or use a user-friendly format (TOML?)
    • if we pick TOML or YAML, we can present an anotated version of the context
  • open the file in the default editor
  • when saving the file, the context is validated and updated; the temporary file is removed
  • when exiting the editor without saving, the update is aborted (Aborting update.)
  • if validation fails, the update is aborted as well.
docker context edit mycontext

Opens an editor with the context in pretty-print;

{
"Name": "mycontext",
"Metadata": {
"Description": "this is my context"
},
"Endpoints": {
"docker": {
"Host": "unix:///var/run/docker.sock",
"SkipTLSVerify": false
}
}
}

Or, in an annotated TOML format;

# Editing context "mycontext". Lines starting with '#' will be ignored,# and exiting your editor without saving aborts the update.# This is the name of the context. Changing the name will create a # copy of the existing context under the new name.Name = "mycontext"
[Metadata]
# Description of this context.Description = "this is my context"
[Endpoints]
# Configuration for the Docker endpoint of this context
[docker]
# Address of the host of this endpoint.## Valid schemes are:# unix:///path/to/socket# tcp://host.example.com:1234# ssl://server1.cloud.example.com# ssl://user@server1.cloud.example.comHost="unix:///var/run/docker.sock"# Skip TLS verification (default: false)# Disable TLS verification for testing purposes, or when using# self-signed certificates.# SkipTLSVerify = true

After editing the file, and saving it:

succesfully updated "mycontext"

When trying to update a context while another context is already in progress, an error is shown:

docker context edit mycontext
Error: another edit is already in progress. Finish the existing edit, or abort using "docker context edit --abort"

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions