Skip to content
This repository was archived by the owner on Nov 1, 2022. It is now read-only.

Make auto-release commits and events more accurate #1036

Merged
merged 4 commits into from
Apr 5, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Include specs from resources in release calc'n
This commit adds an interface `resource.Workload`, and implements it
for the "pod controller" resources. This makes it possible to
calculate based on the images used in the resources, rather than those
used in the cluster (without implementing exactly that, yet).
  • Loading branch information
squaremo committed Apr 4, 2018
commit 621a49210a3c41534ed00f9530026c3010876779
17 changes: 17 additions & 0 deletions cluster/kubernetes/resource/cronjob.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,22 @@
package resource

import (
"github.com/weaveworks/flux/resource"
)

type CronJob struct {
baseObject
Spec CronJobSpec
}

type CronJobSpec struct {
JobTemplate struct {
Spec struct {
Template PodTemplate
}
}
}

func (c CronJob) Containers() []resource.Container {
return c.Spec.JobTemplate.Spec.Template.Containers()
}
8 changes: 8 additions & 0 deletions cluster/kubernetes/resource/daemonset.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package resource

import (
"github.com/weaveworks/flux/resource"
)

type DaemonSet struct {
baseObject
Spec DaemonSetSpec
Expand All @@ -8,3 +12,7 @@ type DaemonSet struct {
type DaemonSetSpec struct {
Template PodTemplate
}

func (ds DaemonSet) Containers() []resource.Container {
return ds.Spec.Template.Containers()
}
8 changes: 8 additions & 0 deletions cluster/kubernetes/resource/deployment.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package resource

import (
"github.com/weaveworks/flux/resource"
)

type Deployment struct {
baseObject
Spec DeploymentSpec
Expand All @@ -9,3 +13,7 @@ type DeploymentSpec struct {
Replicas int
Template PodTemplate
}

func (d Deployment) Containers() []resource.Container {
return d.Spec.Template.Containers()
}
15 changes: 15 additions & 0 deletions cluster/kubernetes/resource/spec.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package resource

import (
"github.com/weaveworks/flux/image"
"github.com/weaveworks/flux/resource"
)

// Types that daemonsets, deployments, and other things have in
// common.

Expand All @@ -13,6 +18,16 @@ type PodTemplate struct {
Spec PodSpec
}

func (t PodTemplate) Containers() []resource.Container {
var result []resource.Container
for _, c := range t.Spec.Containers {
// FIXME(michael): account for possible errors here
im, _ := image.ParseRef(c.Image)
result = append(result, resource.Container{Name: c.Name, Image: im})
}
return result
}

type PodSpec struct {
ImagePullSecrets []struct{ Name string }
Volumes []Volume
Expand Down
8 changes: 8 additions & 0 deletions cluster/kubernetes/resource/statefulset.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package resource

import (
"github.com/weaveworks/flux/resource"
)

type StatefulSet struct {
baseObject
Spec StatefulSetSpec
Expand All @@ -9,3 +13,7 @@ type StatefulSetSpec struct {
Replicas int
Template PodTemplate
}

func (ss StatefulSet) Containers() []resource.Container {
return ss.Spec.Template.Containers()
}
1 change: 1 addition & 0 deletions cluster/manifests.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
type Manifests interface {
// Given a directory with manifest files, find which files define
// which services.
// FIXME(michael): remove when redundant
FindDefinedServices(path string) (map[flux.ResourceID][]string, error)
// Update the definitions in a manifests bytes according to the
// spec given.
Expand Down
29 changes: 12 additions & 17 deletions release/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import (
"fmt"
"io/ioutil"
"os"
"strings"
"path/filepath"

"github.com/weaveworks/flux"
"github.com/weaveworks/flux/cluster"
"github.com/weaveworks/flux/git"
"github.com/weaveworks/flux/policy"
"github.com/weaveworks/flux/registry"
"github.com/weaveworks/flux/resource"
"github.com/weaveworks/flux/update"
)

Expand Down Expand Up @@ -63,7 +64,7 @@ func (rc *ReleaseContext) WriteUpdates(updates []*update.ControllerUpdate) error
func (rc *ReleaseContext) SelectServices(results update.Result, prefilters, postfilters []update.ControllerFilter) ([]*update.ControllerUpdate, error) {

// Start with all the controllers that are defined in the repo.
allDefined, err := rc.FindDefinedServices()
allDefined, err := rc.WorkloadsForUpdate()
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -118,27 +119,21 @@ func (rc *ReleaseContext) SelectServices(results update.Result, prefilters, post
return filteredUpdates, nil
}

func (rc *ReleaseContext) FindDefinedServices() (map[flux.ResourceID]*update.ControllerUpdate, error) {
services, err := rc.manifests.FindDefinedServices(rc.repo.ManifestDir())
func (rc *ReleaseContext) WorkloadsForUpdate() (map[flux.ResourceID]*update.ControllerUpdate, error) {
resources, err := rc.manifests.LoadManifests(rc.repo.Dir(), rc.repo.ManifestDir())
if err != nil {
return nil, err
}

var defined = map[flux.ResourceID]*update.ControllerUpdate{}
for id, paths := range services {
switch len(paths) {
case 1:
def, err := ioutil.ReadFile(paths[0])
if err != nil {
return nil, err
}
defined[id] = &update.ControllerUpdate{
ResourceID: id,
ManifestPath: paths[0],
ManifestBytes: def,
for _, res := range resources {
if wl, ok := res.(resource.Workload); ok {
defined[res.ResourceID()] = &update.ControllerUpdate{
ResourceID: res.ResourceID(),
Resource: wl,
ManifestPath: filepath.Join(rc.repo.Dir(), res.Source()),
ManifestBytes: res.Bytes(),
}
default:
return nil, fmt.Errorf("multiple resource files found for service %s: %s", id, strings.Join(paths, ", "))
}
}
return defined, nil
Expand Down
5 changes: 5 additions & 0 deletions resource/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,8 @@ type Container struct {
Name string
Image image.Ref
}

type Workload interface {
Resource
Containers() []Container
}
2 changes: 2 additions & 0 deletions update/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ package update
import (
"github.com/weaveworks/flux"
"github.com/weaveworks/flux/cluster"
"github.com/weaveworks/flux/resource"
)

type ControllerUpdate struct {
ResourceID flux.ResourceID
Controller cluster.Controller
Resource resource.Workload
ManifestPath string
ManifestBytes []byte
Updates []ContainerUpdate
Expand Down