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
46 changes: 46 additions & 0 deletions pkg/cmd/cli/describe/describer.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ import (
kctl "github.com/GoogleCloudPlatform/kubernetes/pkg/kubectl"
"github.com/GoogleCloudPlatform/kubernetes/pkg/runtime"
"github.com/GoogleCloudPlatform/kubernetes/pkg/util"
"github.com/docker/docker/pkg/parsers"

authorizationapi "github.com/openshift/origin/pkg/authorization/api"
buildapi "github.com/openshift/origin/pkg/build/api"
"github.com/openshift/origin/pkg/client"
imageapi "github.com/openshift/origin/pkg/image/api"
templateapi "github.com/openshift/origin/pkg/template/api"
)

Expand All @@ -35,6 +37,10 @@ func DescriberFor(kind string, c *client.Client, kclient kclient.Interface, host
return &ImageDescriber{c}, true
case "ImageRepository":
return &ImageRepositoryDescriber{c}, true
case "ImageRepositoryTag":
return &ImageRepositoryTagDescriber{c}, true
case "ImageStreamImage":
return &ImageStreamImageDescriber{c}, true
case "Route":
return &RouteDescriber{c}, true
case "Project":
Expand Down Expand Up @@ -230,13 +236,53 @@ func (d *ImageDescriber) Describe(namespace, name string) (string, error) {
return "", err
}

return describeImage(image)
}

func describeImage(image *imageapi.Image) (string, error) {
return tabbedString(func(out *tabwriter.Writer) error {
formatMeta(out, image.ObjectMeta)
formatString(out, "Docker Image", image.DockerImageReference)
return nil
})
}

// ImageRepositoryTagDescriber generates information about a ImageRepositoryTag (Image).
type ImageRepositoryTagDescriber struct {
client.Interface
}

func (d *ImageRepositoryTagDescriber) Describe(namespace, name string) (string, error) {
c := d.ImageRepositoryTags(namespace)
repo, tag := parsers.ParseRepositoryTag(name)
if tag == "" {
// TODO use repo's preferred default, when that's coded
tag = "latest"
}
image, err := c.Get(repo, tag)
if err != nil {
return "", err
}

return describeImage(image)
}

// ImageStreamImageDescriber generates information about a ImageStreamImage (Image).
type ImageStreamImageDescriber struct {
client.Interface
}

func (d *ImageStreamImageDescriber) Describe(namespace, name string) (string, error) {
c := d.ImageStreamImages(namespace)
repo, id := parsers.ParseRepositoryTag(name)
image, err := c.Get(repo, id)
if err != nil {
return "", err
}

return describeImage(image)
}

// ImageRepositoryDescriber generates information about a ImageRepository
type ImageRepositoryDescriber struct {
client.Interface
Expand Down
5 changes: 4 additions & 1 deletion pkg/cmd/cli/describe/describer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ func TestDescribeFor(t *testing.T) {
c := &client.Client{}
testTypesList := []string{
"Build", "BuildConfig", "BuildLog", "Deployment", "DeploymentConfig",
"Image", "ImageRepository", "Route", "Project",
"Image", "ImageRepository", "ImageRepositoryTag", "ImageStreamImage",
"Route", "Project",
}
for _, o := range testTypesList {
_, ok := DescriberFor(o, c, &kclient.Fake{}, "")
Expand All @@ -47,6 +48,8 @@ func TestDescribers(t *testing.T) {
&DeploymentDescriber{c},
&ImageDescriber{c},
&ImageRepositoryDescriber{c},
&ImageRepositoryTagDescriber{c},
&ImageStreamImageDescriber{c},
&RouteDescriber{c},
&ProjectDescriber{c},
&PolicyDescriber{c},
Expand Down
2 changes: 2 additions & 0 deletions pkg/image/api/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ func init() {
&ImageRepository{},
&ImageRepositoryList{},
&ImageRepositoryMapping{},
&ImageRepositoryTag{},
&ImageStreamImage{},
&DockerImage{},
)
}
Expand Down
10 changes: 10 additions & 0 deletions pkg/image/api/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,16 @@ type Image struct {
DockerImageManifest string `json:"rawManifest,omitempty"`
}

// ImageRepositoryTag exists to allow calls to `osc get imageRepositoryTag ...` to function.
type ImageRepositoryTag struct {
Image
}

// ImageStreamImage exists to allow calls to `osc get imageStreamImage ...` to function.
type ImageStreamImage struct {
Image
}

// ImageRepositoryList is a list of ImageRepository objects.
type ImageRepositoryList struct {
kapi.TypeMeta `json:",inline"`
Expand Down
2 changes: 2 additions & 0 deletions pkg/image/api/v1beta1/register.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ func init() {
&ImageRepository{},
&ImageRepositoryList{},
&ImageRepositoryMapping{},
&ImageRepositoryTag{},
&ImageStreamImage{},
)
}

Expand Down
10 changes: 10 additions & 0 deletions pkg/image/api/v1beta1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ type Image struct {
DockerImageManifest string `json:"dockerImageManifest,omitempty"`
}

// ImageRepositoryTag exists to allow calls to `osc get imageRepositoryTag ...` to function.
type ImageRepositoryTag struct {
Image
}

// ImageStreamImage exists to allow calls to `osc get imageStreamImage ...` to function.
type ImageStreamImage struct {
Image
}

// ImageRepositoryList is a list of ImageRepository objects.
type ImageRepositoryList struct {
kapi.TypeMeta `json:",inline"`
Expand Down