grim/convey

fe6910f8166f
Parents 556f474dec15
Children 37db7a19923f
Only create a docker network when we have a run task
  • +2 -1
    ChangeLog
  • +42 -15
    plans/plans.go
  • --- a/ChangeLog Fri Aug 02 00:18:58 2019 -0500
    +++ b/ChangeLog Fri Aug 02 01:41:21 2019 -0500
    @@ -27,7 +27,8 @@
    necessary. PR #40 (Steve Wills)
    * Deleted all existing images.
    * Deprecated docker/import and docker/export and replaced them with
    - * convey/import and convey/export.
    + convey/import and convey/export.
    + * Only create a network if we have a run task.
    0.13.1: 20180114
    * Write warning, error, and fatal log messages to stderr. Fixed #156
    --- a/plans/plans.go Fri Aug 02 00:18:58 2019 -0500
    +++ b/plans/plans.go Fri Aug 02 01:41:21 2019 -0500
    @@ -27,6 +27,7 @@
    "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/runtime"
    "bitbucket.org/rw_grim/convey/stages"
    "bitbucket.org/rw_grim/convey/tasks"
    @@ -43,42 +44,68 @@
    Environment yaml.StringOrSlice `yaml:"environment"`
    Stages []stages.Stage `yaml:"stages"`
    Merge bool `yaml:"merge"`
    +
    + logger *log.Entry
    +}
    +
    +func (p *Plan) haveRunTask(taskMap map[string]tasks.Task) bool {
    + for _, stage := range p.Stages {
    + for _, taskName := range stage.Tasks {
    + task := taskMap[taskName]
    + if _, isRun := task.(*docker.Run); isRun {
    + return true
    + }
    + }
    + }
    +
    + return false
    }
    -func (p *Plan) setup(logger *log.Entry, rt *runtime.Runtime) error {
    +func (p *Plan) setup(rt *runtime.Runtime, taskMap map[string]tasks.Task) error {
    + if p.haveRunTask(taskMap) {
    + network, err := p.createNetwork(rt)
    + if err != nil {
    + p.logger.Fatal("failed to create network")
    +
    + return err
    + }
    +
    + rt.State.Network = network
    + p.logger.Infof("created network %s", rt.State.Network.Name())
    + }
    +
    + return nil
    +}
    +
    +func (p *Plan) createNetwork(rt *runtime.Runtime) (network.Network, error) {
    // create the network
    - logger.Info("creating network...")
    + p.logger.Info("creating network...")
    network, err := docker.NewNetwork(rt)
    if err != nil {
    - logger.Fatal("failed to create network")
    -
    - return err
    + return nil, err
    }
    - rt.State.Network = network
    - logger.Infof("created network %s", rt.State.Network.Name())
    -
    rt.Cleanup(func(logger *log.Entry) {
    - logger.Infof("removing network %s", rt.State.Network.Name())
    + p.logger.Infof("removing network %s", rt.State.Network.Name())
    if netErr := rt.State.Network.Destroy(); netErr != nil {
    - logger.Fatalf("failed to remove network %s: %s", rt.State.Network.Name(), netErr)
    + p.logger.Fatalf("failed to remove network %s: %s", rt.State.Network.Name(), netErr)
    } else {
    - logger.Infof("removed network %s", rt.State.Network.Name())
    + p.logger.Infof("removed network %s", rt.State.Network.Name())
    }
    })
    - return nil
    + return network, nil
    }
    // Execute runs the plan.
    func (p *Plan) Execute(path string, tasks map[string]tasks.Task, env *environment.Environment, rt *runtime.Runtime) error {
    planEnv := env.Copy().Merge(rt.Environment).MergeSlice(p.Environment)
    - logger := logging.NewAdapter(path)
    + p.logger = logging.NewAdapter(path)
    - if err := p.setup(logger, rt); err != nil {
    + if err := p.setup(rt, tasks); err != nil {
    return err
    }
    @@ -104,7 +131,7 @@
    elapsed := time.Since(start)
    rt.State.PlanTimeout -= elapsed
    - logger.Debugf("remaining plantime: %s", rt.State.PlanTimeout)
    + p.logger.Debugf("remaining plantime: %s", rt.State.PlanTimeout)
    stageLogger.Infof("stage finished [%s]", elapsed.Round(10*time.Millisecond))
    }