forked from openshift/origin
/
deploymentconfig_expansion.go
82 lines (68 loc) · 2.72 KB
/
deploymentconfig_expansion.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package internalversion
import (
"fmt"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/kubernetes/pkg/api/v1"
apps "github.com/openshift/origin/pkg/apps/apis/apps"
imageapi "github.com/openshift/origin/pkg/image/apis/image"
)
// DeploymentConfigListerExpansion allows custom methods to be added to
// DeploymentConfigLister.
type DeploymentConfigListerExpansion interface {
GetConfigForController(rc *v1.ReplicationController) (*apps.DeploymentConfig, error)
GetConfigsForImageStream(stream *imageapi.ImageStream) ([]*apps.DeploymentConfig, error)
}
// DeploymentConfigNamespaceListerExpansion allows custom methods to be added to
// DeploymentConfigNamespaceLister.
type DeploymentConfigNamespaceListerExpansion interface{}
// GetConfigForController returns the managing deployment config for the provided replication controller.
func (s *deploymentConfigLister) GetConfigForController(rc *v1.ReplicationController) (*apps.DeploymentConfig, error) {
dcName := rc.Annotations[apps.DeploymentConfigAnnotation]
obj, exists, err := s.indexer.GetByKey(rc.Namespace + "/" + dcName)
if err != nil {
return nil, err
}
if !exists {
return nil, errors.NewNotFound(apps.Resource("deploymentconfig"), dcName)
}
return obj.(*apps.DeploymentConfig), nil
}
// GetConfigsForImageStream returns all the deployment configs that point to the provided image stream
// by searching through using the ImageStreamReferenceIndex (deployment configs are indexed in the cache
// by namespace and by image stream references).
func (s *deploymentConfigLister) GetConfigsForImageStream(stream *imageapi.ImageStream) ([]*apps.DeploymentConfig, error) {
items, err := s.indexer.ByIndex(ImageStreamReferenceIndex, stream.Namespace+"/"+stream.Name)
if err != nil {
return nil, err
}
var configs []*apps.DeploymentConfig
for _, obj := range items {
config := obj.(*apps.DeploymentConfig)
configs = append(configs, config)
}
return configs, nil
}
const (
ImageStreamReferenceIndex = "imagestreamref"
)
// ImageStreamReferenceIndexFunc is a default index function that indexes based on image stream references.
func ImageStreamReferenceIndexFunc(obj interface{}) ([]string, error) {
switch t := obj.(type) {
case *apps.DeploymentConfig:
var keys []string
for _, trigger := range t.Spec.Triggers {
if trigger.Type != apps.DeploymentTriggerOnImageChange {
continue
}
params := trigger.ImageChangeParams
name, _, _ := imageapi.SplitImageStreamTag(params.From.Name)
keys = append(keys, params.From.Namespace+"/"+name)
}
if len(keys) == 0 {
// Return an empty key for configs that don't hold object references.
keys = append(keys, "")
}
return keys, nil
}
return nil, fmt.Errorf("image stream reference index not implemented for %#v", obj)
}