grim/convey

Parents bd8085fe9a80
Children 312d8085d3f8
Move Network to an interface and create a docker.Network which does our docker network stuff. Refs #120
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/docker/network.go Tue Sep 12 21:13:14 2017 -0500
@@ -0,0 +1,71 @@
+/*
+ * Convey
+ * Copyright 2016-2017 Gary Kramlich <grim@reaperworld.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package docker
+
+import (
+ "github.com/aphistic/gomol"
+ "github.com/satori/go.uuid"
+
+ "bitbucket.org/rw_grim/convey/logging"
+ "bitbucket.org/rw_grim/convey/state"
+)
+
+type Network struct {
+ name string
+
+ logger *gomol.LogAdapter
+ state *state.State
+}
+
+const (
+ createTemplate = `network create {{.Name}}`
+ destroyTemplate = `network rm {{.Name}}`
+)
+
+func NewNetwork(st *state.State) (*Network, error) {
+ network := &Network{
+ name: uuid.NewV4().String(),
+ logger: logging.NewAdapter("network"),
+ state: st,
+ }
+
+ params := map[string]interface{}{
+ "Name": network.name,
+ }
+
+ _, _, err := DockerOutput("create network", createTemplate, params, st)
+ if err != nil {
+ return nil, err
+ }
+
+ network.logger.Debugf("created network: %#v", network.name)
+
+ return network, nil
+}
+
+func (network *Network) Name() string {
+ return network.name
+}
+
+func (network *Network) Destroy() error {
+ params := map[string]interface{}{
+ "Name": network.name,
+ }
+
+ return Docker("remove network", destroyTemplate, params, network.state)
+}
--- a/docker/run.go Tue Sep 12 20:34:11 2017 -0500
+++ b/docker/run.go Tue Sep 12 21:13:14 2017 -0500
@@ -187,7 +187,7 @@
"Image": environment.Mapper(r.Image, fullEnv),
"Labels": environment.SliceMapper(r.Labels, fullEnv),
"Memory": st.Memory,
- "Network": st.Network.Name,
+ "Network": st.Network.Name(),
"ScriptFile": scriptFile,
"SSHAgent": st.EnableSSHAgent,
"SSHAuthSock": os.Getenv("SSH_AUTH_SOCK"),
--- a/network/network.go Tue Sep 12 20:34:11 2017 -0500
+++ b/network/network.go Tue Sep 12 21:13:14 2017 -0500
@@ -17,51 +17,7 @@
*/
package network
-import (
- "time"
-
- "github.com/aphistic/gomol"
- "github.com/satori/go.uuid"
-
- "bitbucket.org/rw_grim/convey/command"
- "bitbucket.org/rw_grim/convey/logging"
-)
-
-type Network struct {
- Name string
-
- logger *gomol.LogAdapter
+type Network interface {
+ Name() string
+ Destroy() error
}
-
-const (
- createTemplate = `docker network create {{.Name}}`
- destroyTemplate = `docker network rm {{.Name}}`
-)
-
-func Create() (*Network, error) {
- network := &Network{
- Name: uuid.NewV4().String(),
- logger: logging.NewAdapter("network"),
- }
-
- params := map[string]interface{}{
- "Name": network.Name,
- }
-
- _, _, err := command.RunOutput("create network", createTemplate, params, time.Minute)
- if err != nil {
- return nil, err
- }
-
- network.logger.Debugf("created network: %#v", network.Name)
-
- return network, nil
-}
-
-func (network *Network) Destroy() error {
- params := map[string]interface{}{
- "Name": network.Name,
- }
-
- return command.Run("remove network", destroyTemplate, params, time.Minute)
-}
--- a/plans/plans.go Tue Sep 12 20:34:11 2017 -0500
+++ b/plans/plans.go Tue Sep 12 21:13:14 2017 -0500
@@ -25,7 +25,6 @@
"bitbucket.org/rw_grim/convey/docker"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/logging"
- "bitbucket.org/rw_grim/convey/network"
"bitbucket.org/rw_grim/convey/stages"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -41,14 +40,14 @@
func (p *Plan) setup(logger *gomol.LogAdapter, st *state.State) error {
// create the network
logger.Info("creating network...")
- network, err := network.Create()
+ network, err := docker.NewNetwork(st)
if err != nil {
logger.Fatal("failed to create network")
return err
}
st.Network = network
- logger.Infof("created network %s", st.Network.Name)
+ logger.Infof("created network %s", st.Network.Name())
// create the workspace
logger.Info("creating workspace...")
@@ -85,11 +84,11 @@
}
// remove the network
- logger.Infof("removing network %s", st.Network.Name)
+ logger.Infof("removing network %s", st.Network.Name())
if err := st.Network.Destroy(); err != nil {
- logger.Fatalf("failed to remove network %s", st.Network.Name)
+ logger.Fatalf("failed to remove network %s", st.Network.Name())
} else {
- logger.Infof("removed network %s", st.Network.Name)
+ logger.Infof("removed network %s", st.Network.Name())
}
}
--- a/state/state.go Tue Sep 12 20:34:11 2017 -0500
+++ b/state/state.go Tue Sep 12 21:13:14 2017 -0500
@@ -27,7 +27,7 @@
)
type State struct {
- Network *network.Network
+ Network network.Network
Workspace *workspace.Workspace
KeepWorkspace bool