Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
13 changes: 13 additions & 0 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions Gopkg.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,7 @@ required = [ "k8s.io/code-generator/cmd/client-gen", "k8s.io/gengo/types" ]
[[constraint]]
name = "github.com/spf13/cobra"
version = "v0.0.3"

[[constraint]]
name = "github.com/openshift/api"
branch = "master"
39 changes: 39 additions & 0 deletions cmd/image.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package main

import (
"flag"
"fmt"

"github.com/golang/glog"
"github.com/spf13/cobra"

"github.com/openshift/cluster-version-operator/pkg/cvo"
)

var (
imageCmd = &cobra.Command{
Use: "image",
Short: "Returns image for requested short-name from UpdatePayload",
Long: "",
Example: "%[1] image <short-name>",
Copy link

@yifan-gu yifan-gu Sep 20, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the %[1] print the parent command?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the %[1] print the parent command?

No, will fix that in follow up PR.

Run: runImageCmd,
}
)

func init() {
rootCmd.AddCommand(imageCmd)
}

func runImageCmd(cmd *cobra.Command, args []string) {
flag.Set("logtostderr", "true")
flag.Parse()

if len(args) == 0 {
glog.Fatalf("missing command line argument short-name")
}
image, err := cvo.ImageForShortName(args[0])
if err != nil {
glog.Fatalf("error: %v", err)
}
fmt.Printf(image)
}
27 changes: 27 additions & 0 deletions lib/resourceread/image.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package resourceread

import (
imagev1 "github.com/openshift/api/image/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/runtime/serializer"
)

var (
imageScheme = runtime.NewScheme()
imageCodecs = serializer.NewCodecFactory(imageScheme)
)

func init() {
if err := imagev1.AddToScheme(imageScheme); err != nil {
panic(err)
}
}

// ReadImageStreamV1OrDie reads imagestream object from bytes. Panics on error.
func ReadImageStreamV1OrDie(objBytes []byte) *imagev1.ImageStream {
requiredObj, err := runtime.Decode(imageCodecs.UniversalDecoder(imagev1.SchemeGroupVersion), objBytes)
if err != nil {
panic(err)
}
return requiredObj.(*imagev1.ImageStream)
}
2 changes: 1 addition & 1 deletion pkg/cvo/cvo.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ func (optr *Operator) sync(key string) error {
if err != nil {
return err
}
payload, err := optr.loadUpdatePayload(payloadDir)
payload, err := loadUpdatePayload(payloadDir)
if err != nil {
return err
}
Expand Down
23 changes: 23 additions & 0 deletions pkg/cvo/image.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package cvo

import "fmt"

// ImageForShortName returns the image using the updatepayload embedded in
// the Operator.
func ImageForShortName(name string) (string, error) {
up, err := loadUpdatePayload(defaultUpdatePayloadDir)
if err != nil {
return "", fmt.Errorf("error loading update payload from %q: %v", defaultUpdatePayloadDir, err)
}

for _, tag := range up.imageRef.Spec.Tags {
if tag.Name == name {
// we found the short name in ImageStream
if tag.From != nil && tag.From.Kind == "DockerImage" {
return tag.From.Name, nil
}
}
}

return "", fmt.Errorf("error: Unknown name requested, could not find %s in UpdatePayload", name)
}
12 changes: 10 additions & 2 deletions pkg/cvo/updatepayload.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"os"
"path/filepath"

imagev1 "github.com/openshift/api/image/v1"
batchv1 "k8s.io/api/batch/v1"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
Expand All @@ -16,13 +17,14 @@ import (
"github.com/golang/glog"
"github.com/openshift/cluster-version-operator/lib"
"github.com/openshift/cluster-version-operator/lib/resourcebuilder"
"github.com/openshift/cluster-version-operator/lib/resourceread"
cvv1 "github.com/openshift/cluster-version-operator/pkg/apis/clusterversion.openshift.io/v1"
)

type updatePayload struct {
// XXX: cincinatti.json struct

// XXX: image-references
imageRef *imagev1.ImageStream

manifests []lib.Manifest
}
Expand All @@ -35,7 +37,7 @@ const (
imageReferencesFile = "image-references"
)

func (optr *Operator) loadUpdatePayload(dir string) (*updatePayload, error) {
func loadUpdatePayload(dir string) (*updatePayload, error) {
glog.V(4).Info("Loading updatepayload from %q", dir)
if err := validateUpdatePayload(dir); err != nil {
return nil, err
Expand All @@ -45,6 +47,11 @@ func (optr *Operator) loadUpdatePayload(dir string) (*updatePayload, error) {
cjf := filepath.Join(dir, cincinnatiJSONFile)
// XXX: load imageReferencesFile
irf := filepath.Join(dir, imageReferencesFile)
imageRefData, err := ioutil.ReadFile(irf)
if err != nil {
return nil, err
}
imageRef := resourceread.ReadImageStreamV1OrDie(imageRefData)

var mfs []string
skipFiles := sets.NewString(cjf, irf)
Expand All @@ -69,6 +76,7 @@ func (optr *Operator) loadUpdatePayload(dir string) (*updatePayload, error) {
}

return &updatePayload{
imageRef: imageRef,
manifests: manifests,
}, nil
}
Expand Down
201 changes: 201 additions & 0 deletions vendor/github.com/openshift/api/LICENSE

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading