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.com
  Host="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"

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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