Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposal investigation in Docker Machine Github #5

Closed
clintkitson opened this issue Aug 23, 2015 · 2 comments
Closed

Proposal investigation in Docker Machine Github #5

clintkitson opened this issue Aug 23, 2015 · 2 comments
Assignees

Comments

@clintkitson
Copy link
Contributor

No description provided.

@clintkitson clintkitson added this to the Docker and Storage Scheduling - Discovery and Design milestone Aug 23, 2015
@kacole2
Copy link

kacole2 commented Aug 26, 2015

i've looked through the repo issues and am currently drafting a proposal. @clintonskitson let me know what you think of this so far

Proposal: Docker Machine Extensibility for Docker Engine Plugins

Docker Machine Extensions

Abstract

Docker Machine gets you a "docker ready" host, but what about everything else that integrates with Docker Engine? Docker Engine 1.8 released the pluggable architecture for 3rd party network and storage extensions. However, most of these require some installation process that must be done after the host is provisioned. The Docker Machine Extensibility feature is an interface for specifying the installation of Docker Engine Plugins to install during the host deployment.

Motivation

Docker machine could be a replacement for Chef/Puppet/Ansible/Salt but lacks some of the ability to have a completely configured "docker ready" host. As more extensions for Storage, Networking, Security, (insert more here) become available, many users will want those installed during the Docker Machine provisioning/configuration process.

Interface

After reading #1626 it seems that everyone is looking for a standardized interface for building drivers. The same would go for the extensions.
The interface would need:

  • a variable passed in for the type of OS being provisioned because extensions may have different installations based on the OS.
  • a JSON/YML input with a variadic function (view implementation to know more)

Implementation

This is a proposal. Please discuss...
After the interface is setup I envision this taking a command from docker-machine create with a flag called --extension. The user would specify a YAML or JSON file that would allow multiple key value stores to be used. This is useful because:

  • multiple extensions can be addressed in a single file
  • each extension can be given any parameters or environment variables needed for unattended installations
  • the YAML or JSON file can be from a local file or network resource for consistent provisioning

docker-machine create --provider virtualbox --extension something.yml

---
  rexray: 
    AWS_SECRET_KEY: "gerkjgnkjnrg"
    AWS_SHARED_KEY: "egnrogne"
  weave: 
    whatever: "is needed"

or
docker-machine create --provider virtualbox --extension something.json

{
    "rexray": {
        "AWS_SECRET_KEY": "gerkjgnkjnrg",
        "AWS_SHARED_KEY": "egnrogne"
    },
    "weave": {
        whatever is needs
    }
}

The extension files will be in libmachine/extensions. The interface will be in extensions.go and each extension will need it's own .go file that corresponds with the title in the YML/JSON file. That file specifies the installation process using the provisioner.SSHCommand method.

Possible Issues

  • Extensions will always be changing based on the type (network vs storage vs security) but hoping that the use of key:value pairs will allow each type of extension to act independently.
  • I've only used 1 storage extension (rexray] and know the installation process for this particular Go binary. There is a knowledge gap with my experience using Weave, Flocker, etc that I would need to rely on someone else to help me make sure I have the interface setup correctly.

Other

I'm looking for more input on the architecture but I want to start building this functionality for the first PR. Let me know your thoughts

@kacole2
Copy link

kacole2 commented Aug 26, 2015

It's out there. #1765. will use another issue to track changes as received.

@kacole2 kacole2 closed this as completed Aug 26, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants