| ... | ... |
@@ -316,8 +316,10 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag |
| 316 | 316 |
actions = appendIf(actions, action{"CONNECT", itemPath + "/{path:*}", nameParams, namer}, isConnecter && connectSubpath)
|
| 317 | 317 |
|
| 318 | 318 |
// list across namespace. |
| 319 |
+ // TODO: more strongly type whether a resource allows these actions on "all namespaces" (bulk delete) |
|
| 319 | 320 |
namer = scopeNaming{scope, a.group.Linker, gpath.Join(a.prefix, itemPath), true}
|
| 320 | 321 |
actions = appendIf(actions, action{"LIST", resource, params, namer}, isLister)
|
| 322 |
+ actions = appendIf(actions, action{"POST", resource, params, namer}, isCreater)
|
|
| 321 | 323 |
actions = appendIf(actions, action{"WATCHLIST", "watch/" + resource, params, namer}, allowWatchList)
|
| 322 | 324 |
|
| 323 | 325 |
} else {
|
| ... | ... |
@@ -685,7 +685,7 @@ func (m *Master) api_v1beta3() *apiserver.APIGroupVersion {
|
| 685 | 685 |
func (m *Master) api_v1() *apiserver.APIGroupVersion {
|
| 686 | 686 |
storage := make(map[string]rest.Storage) |
| 687 | 687 |
for k, v := range m.storage {
|
| 688 |
- if k == "minions" {
|
|
| 688 |
+ if k == "minions" || k == "minions/status" {
|
|
| 689 | 689 |
continue |
| 690 | 690 |
} |
| 691 | 691 |
storage[strings.ToLower(k)] = v |
| ... | ... |
@@ -311,63 +311,18 @@ osc create -f examples/image-streams/image-streams-centos7.json |
| 311 | 311 |
[ -n "$(osc get imageStreams mongodb -t "{{.status.dockerImageRepository}}")" ]
|
| 312 | 312 |
osc delete imageStreams ruby |
| 313 | 313 |
osc delete imageStreams nodejs |
| 314 |
-osc delete imageStreams wildfly |
|
| 315 |
-osc delete imageStreams mysql |
|
| 314 |
+#osc delete imageStreams wildfly |
|
| 315 |
+#osc delete imageStreams mysql |
|
| 316 | 316 |
osc delete imageStreams postgresql |
| 317 | 317 |
osc delete imageStreams mongodb |
| 318 | 318 |
[ -z "$(osc get imageStreams ruby -t "{{.status.dockerImageRepository}}")" ]
|
| 319 | 319 |
[ -z "$(osc get imageStreams nodejs -t "{{.status.dockerImageRepository}}")" ]
|
| 320 |
-[ -z "$(osc get imageStreams wildfly -t "{{.status.dockerImageRepository}}")" ]
|
|
| 321 |
-[ -z "$(osc get imageStreams mysql -t "{{.status.dockerImageRepository}}")" ]
|
|
| 322 | 320 |
[ -z "$(osc get imageStreams postgresql -t "{{.status.dockerImageRepository}}")" ]
|
| 323 | 321 |
[ -z "$(osc get imageStreams mongodb -t "{{.status.dockerImageRepository}}")" ]
|
| 322 |
+wait_for_command 'osc get imagestreamTags mysql:latest' "${TIME_MIN}"
|
|
| 323 |
+[ -n "$(osc get imagestreams mysql -t "{{ index .metadata.annotations \"openshift.io/image.dockerRepositoryCheck\"}}")" ]
|
|
| 324 | 324 |
echo "imageStreams: ok" |
| 325 | 325 |
|
| 326 |
-osc create -f test/integration/fixtures/test-image-stream.json |
|
| 327 |
-osc create -f test/integration/fixtures/test-image-stream-mapping.json |
|
| 328 |
-osc get images |
|
| 329 |
-osc get imageStreams |
|
| 330 |
-osc get imageStreamTag test:sometag |
|
| 331 |
-osc get imageStreamImage test@sha256:4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125 |
|
| 332 |
-osc delete imageStreams test |
|
| 333 |
-echo "imageStreamMappings: ok" |
|
| 334 |
- |
|
| 335 |
-osc get imageRepositories |
|
| 336 |
-osc create -f test/integration/fixtures/test-image-repository.json |
|
| 337 |
-[ -n "$(osc get imageRepositories test -t "{{.status.dockerImageRepository}}")" ]
|
|
| 338 |
-osc delete imageRepositories test |
|
| 339 |
-osc create -f examples/image-repositories/image-repositories.json |
|
| 340 |
-[ -n "$(osc get imageRepositories ruby-20-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 341 |
-[ -n "$(osc get imageRepositories nodejs-010-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 342 |
-[ -n "$(osc get imageRepositories wildfly-8-centos -t "{{.status.dockerImageRepository}}")" ]
|
|
| 343 |
-[ -n "$(osc get imageRepositories mysql-55-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 344 |
-[ -n "$(osc get imageRepositories postgresql-92-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 345 |
-[ -n "$(osc get imageRepositories mongodb-24-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 346 |
-osc delete imageRepositories ruby-20-centos7 |
|
| 347 |
-osc delete imageRepositories nodejs-010-centos7 |
|
| 348 |
-osc delete imageRepositories mysql-55-centos7 |
|
| 349 |
-osc delete imageRepositories postgresql-92-centos7 |
|
| 350 |
-osc delete imageRepositories mongodb-24-centos7 |
|
| 351 |
-[ -z "$(osc get imageRepositories ruby-20-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 352 |
-[ -z "$(osc get imageRepositories nodejs-010-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 353 |
-[ -z "$(osc get imageRepositories mysql-55-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 354 |
-[ -z "$(osc get imageRepositories postgresql-92-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 355 |
-[ -z "$(osc get imageRepositories mongodb-24-centos7 -t "{{.status.dockerImageRepository}}")" ]
|
|
| 356 |
-# don't delete wildfly-8-centos |
|
| 357 |
-osc create -f - << EOF |
|
| 358 |
-{"apiVersion": "v1beta1","dockerImageRepository": "openshift/mysql-55-centos7","kind": "ImageRepository","metadata": {"name": "mysql"}}
|
|
| 359 |
-EOF |
|
| 360 |
-echo "imageRepositories: ok" |
|
| 361 |
- |
|
| 362 |
-osc create -f test/integration/fixtures/test-image-repository.json |
|
| 363 |
-osc create -f test/integration/fixtures/test-image-repository-mapping.json |
|
| 364 |
-osc get images |
|
| 365 |
-osc get imageRepositories |
|
| 366 |
-osc get imageRepositoryTag test:sometag |
|
| 367 |
-osc delete imageRepositories test |
|
| 368 |
-echo "imageRepositoryMappings: ok" |
|
| 369 |
- |
|
| 370 |
-[ -n "$(osc get imageRepositories mysql -t "{{ index .metadata.annotations \"openshift.io/image.dockerRepositoryCheck\"}}")" ]
|
|
| 371 | 326 |
[ "$(osc new-app library/php mysql -o yaml | grep 3306)" ] |
| 372 | 327 |
# verify we can generate a Docker image based component "mongodb" directly |
| 373 | 328 |
[ ! "$(osc new-app unknownhubimage -o yaml)" ] |
| ... | ... |
@@ -436,8 +391,8 @@ osc get buildConfigs |
| 436 | 436 |
osc get bc |
| 437 | 437 |
osc get builds |
| 438 | 438 |
|
| 439 |
-[[ $(osc describe buildConfigs ruby-sample-build | grep --text "Webhook Github" | grep -F "${API_SCHEME}://${API_HOST}:${API_PORT}/osapi/v1beta1/buildConfigHooks/ruby-sample-build/secret101/github") ]]
|
|
| 440 |
-[[ $(osc describe buildConfigs ruby-sample-build | grep --text "Webhook Generic" | grep -F "${API_SCHEME}://${API_HOST}:${API_PORT}/osapi/v1beta1/buildConfigHooks/ruby-sample-build/secret101/generic") ]]
|
|
| 439 |
+[[ $(osc describe buildConfigs ruby-sample-build --api-version=v1beta1 | grep --text "Webhook Github" | grep -F "${API_SCHEME}://${API_HOST}:${API_PORT}/osapi/v1beta1/buildConfigHooks/ruby-sample-build/secret101/github") ]]
|
|
| 440 |
+[[ $(osc describe buildConfigs ruby-sample-build --api-version=v1beta1 | grep --text "Webhook Generic" | grep -F "${API_SCHEME}://${API_HOST}:${API_PORT}/osapi/v1beta1/buildConfigHooks/ruby-sample-build/secret101/generic") ]]
|
|
| 441 | 441 |
osc start-build --list-webhooks='all' ruby-sample-build |
| 442 | 442 |
[[ $(osc start-build --list-webhooks='all' ruby-sample-build | grep --text "generic") ]] |
| 443 | 443 |
[[ $(osc start-build --list-webhooks='all' ruby-sample-build | grep --text "github") ]] |
| ... | ... |
@@ -507,8 +462,8 @@ osadm registry --create --credentials="${OPENSHIFTCONFIG}"
|
| 507 | 507 |
echo "ex registry: ok" |
| 508 | 508 |
|
| 509 | 509 |
# verify the image repository had its tags populated |
| 510 |
-[ -n "$(osc get imageStreams wildfly-8-centos -t "{{.status.tags.latest}}")" ]
|
|
| 511 |
-[ -n "$(osc get imageStreams wildfly-8-centos -t "{{ index .metadata.annotations \"openshift.io/image.dockerRepositoryCheck\"}}")" ]
|
|
| 510 |
+[ -n "$(osc get imageStreams wildfly -t "{{.status.tags.latest}}")" ]
|
|
| 511 |
+[ -n "$(osc get imageStreams wildfly -t "{{ index .metadata.annotations \"openshift.io/image.dockerRepositoryCheck\"}}")" ]
|
|
| 512 | 512 |
|
| 513 | 513 |
# Test building a dependency tree |
| 514 | 514 |
[ "$(openshift ex build-chain --all -o dot | grep 'graph')" ] |
| ... | ... |
@@ -224,6 +224,9 @@ func ImageStreamTag(g MutableUniqueGraph, namespace, name, tag string) graph.Nod |
| 224 | 224 |
if len(tag) == 0 {
|
| 225 | 225 |
tag = image.DefaultImageTag |
| 226 | 226 |
} |
| 227 |
+ if strings.Contains(name, ":") {
|
|
| 228 |
+ panic(name) |
|
| 229 |
+ } |
|
| 227 | 230 |
uname := UniqueName(fmt.Sprintf("%d|%s/%s:%s", ImageStreamGraphKind, namespace, name, tag))
|
| 228 | 231 |
return EnsureUnique(g, |
| 229 | 232 |
uname, |
| ... | ... |
@@ -272,17 +275,6 @@ func BuildConfig(g MutableUniqueGraph, config *build.BuildConfig) graph.Node {
|
| 272 | 272 |
|
| 273 | 273 |
from := buildutil.GetImageStreamForStrategy(config) |
| 274 | 274 |
if from != nil {
|
| 275 |
- for _, trigger := range config.Triggers {
|
|
| 276 |
- if trigger.ImageChange != nil {
|
|
| 277 |
- if len(from.Name) == 0 || from.Kind != "ImageStreamTag" {
|
|
| 278 |
- continue |
|
| 279 |
- } |
|
| 280 |
- tag := strings.Split(from.Name, ":")[1] |
|
| 281 |
- in := ImageStreamTag(g, defaultNamespace(from.Namespace, config.Namespace), from.Name, tag) |
|
| 282 |
- g.AddEdge(in, node, BuildInputImageGraphEdgeKind) |
|
| 283 |
- } |
|
| 284 |
- } |
|
| 285 |
- |
|
| 286 | 275 |
switch from.Kind {
|
| 287 | 276 |
case "DockerImage": |
| 288 | 277 |
if ref, err := image.ParseDockerImageReference(from.Name); err == nil {
|
| ... | ... |
@@ -291,10 +283,14 @@ func BuildConfig(g MutableUniqueGraph, config *build.BuildConfig) graph.Node {
|
| 291 | 291 |
in := DockerRepository(g, ref.String(), tag) |
| 292 | 292 |
g.AddEdge(in, node, BuildInputImageGraphEdgeKind) |
| 293 | 293 |
} |
| 294 |
- case "ImageStreamTag": |
|
| 295 |
- tag := strings.Split(from.Name, ":")[1] |
|
| 294 |
+ case "ImageStream": |
|
| 295 |
+ tag := image.DefaultImageTag |
|
| 296 | 296 |
in := ImageStreamTag(g, defaultNamespace(from.Namespace, config.Namespace), from.Name, tag) |
| 297 | 297 |
g.AddEdge(in, node, BuildInputImageGraphEdgeKind) |
| 298 |
+ case "ImageStreamTag": |
|
| 299 |
+ name, tag, _ := image.SplitImageStreamTag(from.Name) |
|
| 300 |
+ in := ImageStreamTag(g, defaultNamespace(from.Namespace, config.Namespace), name, tag) |
|
| 301 |
+ g.AddEdge(in, node, BuildInputImageGraphEdgeKind) |
|
| 298 | 302 |
case "ImageStreamImage": |
| 299 | 303 |
glog.V(4).Infof("Ignoring ImageStreamImage reference in buildconfig %s/%s", config.Namespace, config.Name)
|
| 300 | 304 |
} |
| ... | ... |
@@ -19,7 +19,7 @@ import ( |
| 19 | 19 |
) |
| 20 | 20 |
|
| 21 | 21 |
// Version is the string that represents the current external default version. |
| 22 |
-const Version = "v1beta1" |
|
| 22 |
+const Version = "v1beta3" |
|
| 23 | 23 |
|
| 24 | 24 |
// OldestVersion is the string that represents the oldest server version supported, |
| 25 | 25 |
// for client code that wants to hardcode the lowest common denominator. |
| ... | ... |
@@ -107,8 +107,8 @@ func init() {
|
| 107 | 107 |
}, |
| 108 | 108 |
) |
| 109 | 109 |
|
| 110 |
- // list of versions we support on the server |
|
| 111 |
- versions := Versions |
|
| 110 |
+ // list of versions we support on the server, in preferred order |
|
| 111 |
+ versions := []string{"v1beta3", "v1beta1"}
|
|
| 112 | 112 |
|
| 113 | 113 |
// versions that used mixed case URL formats |
| 114 | 114 |
versionMixedCase := map[string]bool{
|
| ... | ... |
@@ -129,6 +129,8 @@ func init() {
|
| 129 | 129 |
"Project": true, |
| 130 | 130 |
"ProjectRequest": true, |
| 131 | 131 |
|
| 132 |
+ "Image": true, |
|
| 133 |
+ |
|
| 132 | 134 |
"User": true, |
| 133 | 135 |
"Identity": true, |
| 134 | 136 |
"UserIdentityMapping": true, |
| ... | ... |
@@ -101,6 +101,12 @@ func fuzzInternalObject(t *testing.T, forVersion string, item runtime.Object, se |
| 101 | 101 |
j.DockerImageReference = specs[c.Intn(len(specs))] |
| 102 | 102 |
if forVersion == "v1beta3" {
|
| 103 | 103 |
j.Tag, j.DockerImageReference = "", "" |
| 104 |
+ if j.To != nil && (len(j.To.Kind) == 0 || j.To.Kind == "ImageStream") {
|
|
| 105 |
+ j.To.Kind = "ImageStream" |
|
| 106 |
+ if len(j.Tag) == 0 {
|
|
| 107 |
+ j.To.Kind = "latest" |
|
| 108 |
+ } |
|
| 109 |
+ } |
|
| 104 | 110 |
} |
| 105 | 111 |
}, |
| 106 | 112 |
func(j *deploy.DeploymentStrategy, c fuzz.Continue) {
|
| ... | ... |
@@ -58,7 +58,7 @@ var ( |
| 58 | 58 |
OAuthGroupName: {"oauthauthorizetokens", "oauthaccesstokens", "oauthclients", "oauthclientauthorizations"},
|
| 59 | 59 |
PolicyOwnerGroupName: {"policies", "policybindings"},
|
| 60 | 60 |
PermissionGrantingGroupName: {"roles", "rolebindings", "resourceaccessreviews", "subjectaccessreviews"},
|
| 61 |
- OpenshiftExposedGroupName: {BuildGroupName, ImageGroupName, DeploymentGroupName, "templates", "templateconfigs", "routes"},
|
|
| 61 |
+ OpenshiftExposedGroupName: {BuildGroupName, ImageGroupName, DeploymentGroupName, "templates", "templateconfigs", "processedtemplates", "routes"},
|
|
| 62 | 62 |
OpenshiftAllGroupName: {OpenshiftExposedGroupName, UserGroupName, OAuthGroupName, PolicyOwnerGroupName, PermissionGrantingGroupName, OpenshiftStatusGroupName, "projects"},
|
| 63 | 63 |
OpenshiftStatusGroupName: {"imagerepositories/status"},
|
| 64 | 64 |
|
| ... | ... |
@@ -2,13 +2,13 @@ package v1beta1 |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 | 4 |
"fmt" |
| 5 |
- "strings" |
|
| 6 | 5 |
|
| 7 | 6 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
| 8 | 7 |
kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta3" |
| 9 | 8 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion" |
| 9 |
+ |
|
| 10 | 10 |
newer "github.com/openshift/origin/pkg/build/api" |
| 11 |
- image "github.com/openshift/origin/pkg/image/api" |
|
| 11 |
+ imageapi "github.com/openshift/origin/pkg/image/api" |
|
| 12 | 12 |
) |
| 13 | 13 |
|
| 14 | 14 |
func init() {
|
| ... | ... |
@@ -70,15 +70,16 @@ func init() {
|
| 70 | 70 |
Kind: in.From.Kind, |
| 71 | 71 |
} |
| 72 | 72 |
case "ImageStreamTag": |
| 73 |
- bits := strings.Split(in.From.Name, ":") |
|
| 73 |
+ name, tag, ok := imageapi.SplitImageStreamTag(in.From.Name) |
|
| 74 |
+ if !ok {
|
|
| 75 |
+ return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.From.Name)
|
|
| 76 |
+ } |
|
| 74 | 77 |
out.From = &kapi.ObjectReference{
|
| 75 |
- Name: bits[0], |
|
| 76 |
- Namespace: in.From.Namespace, |
|
| 77 | 78 |
Kind: "ImageStream", |
| 79 |
+ Namespace: in.From.Namespace, |
|
| 80 |
+ Name: name, |
|
| 78 | 81 |
} |
| 79 |
- if len(bits) > 1 {
|
|
| 80 |
- out.Tag = bits[1] |
|
| 81 |
- } |
|
| 82 |
+ out.Tag = tag |
|
| 82 | 83 |
case "DockerImage": |
| 83 | 84 |
out.Image = in.From.Name |
| 84 | 85 |
out.BuilderImage = in.From.Name |
| ... | ... |
@@ -99,11 +100,7 @@ func init() {
|
| 99 | 99 |
} |
| 100 | 100 |
if len(in.From.Kind) == 0 || in.From.Kind == "ImageStream" || in.From.Kind == "ImageRepository" {
|
| 101 | 101 |
out.From.Kind = "ImageStreamTag" |
| 102 |
- if len(in.Tag) > 0 {
|
|
| 103 |
- out.From.Name = out.From.Name + ":" + in.Tag |
|
| 104 |
- } else {
|
|
| 105 |
- out.From.Name = out.From.Name + ":latest" |
|
| 106 |
- } |
|
| 102 |
+ out.From.Name = imageapi.JoinImageStreamTag(in.From.Name, in.Tag) |
|
| 107 | 103 |
} |
| 108 | 104 |
} |
| 109 | 105 |
if in.Image != "" {
|
| ... | ... |
@@ -133,15 +130,16 @@ func init() {
|
| 133 | 133 |
Kind: in.From.Kind, |
| 134 | 134 |
} |
| 135 | 135 |
case "ImageStreamTag": |
| 136 |
- bits := strings.Split(in.From.Name, ":") |
|
| 136 |
+ name, tag, ok := imageapi.SplitImageStreamTag(in.From.Name) |
|
| 137 |
+ if !ok {
|
|
| 138 |
+ return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.From.Name)
|
|
| 139 |
+ } |
|
| 137 | 140 |
out.From = &kapi.ObjectReference{
|
| 138 |
- Name: bits[0], |
|
| 139 |
- Namespace: in.From.Namespace, |
|
| 140 | 141 |
Kind: "ImageStream", |
| 142 |
+ Namespace: in.From.Namespace, |
|
| 143 |
+ Name: name, |
|
| 141 | 144 |
} |
| 142 |
- if len(bits) > 1 {
|
|
| 143 |
- out.Tag = bits[1] |
|
| 144 |
- } |
|
| 145 |
+ out.Tag = tag |
|
| 145 | 146 |
case "DockerImage": |
| 146 | 147 |
out.Image = in.From.Name |
| 147 | 148 |
out.BaseImage = in.From.Name |
| ... | ... |
@@ -159,11 +157,7 @@ func init() {
|
| 159 | 159 |
} |
| 160 | 160 |
if len(in.From.Kind) == 0 || in.From.Kind == "ImageStream" || in.From.Kind == "ImageRepository" {
|
| 161 | 161 |
out.From.Kind = "ImageStreamTag" |
| 162 |
- if len(in.Tag) > 0 {
|
|
| 163 |
- out.From.Name = out.From.Name + ":" + in.Tag |
|
| 164 |
- } else {
|
|
| 165 |
- out.From.Name = out.From.Name + ":latest" |
|
| 166 |
- } |
|
| 162 |
+ out.From.Name = imageapi.JoinImageStreamTag(in.From.Name, in.Tag) |
|
| 167 | 163 |
} |
| 168 | 164 |
} |
| 169 | 165 |
if in.Image != "" {
|
| ... | ... |
@@ -191,15 +185,16 @@ func init() {
|
| 191 | 191 |
Kind: in.From.Kind, |
| 192 | 192 |
} |
| 193 | 193 |
case "ImageStreamTag": |
| 194 |
- bits := strings.Split(in.From.Name, ":") |
|
| 194 |
+ name, tag, ok := imageapi.SplitImageStreamTag(in.From.Name) |
|
| 195 |
+ if !ok {
|
|
| 196 |
+ return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.From.Name)
|
|
| 197 |
+ } |
|
| 195 | 198 |
out.From = &kapi.ObjectReference{
|
| 196 |
- Name: bits[0], |
|
| 197 |
- Namespace: in.From.Namespace, |
|
| 198 | 199 |
Kind: "ImageStream", |
| 200 |
+ Namespace: in.From.Namespace, |
|
| 201 |
+ Name: name, |
|
| 199 | 202 |
} |
| 200 |
- if len(bits) > 1 {
|
|
| 201 |
- out.Tag = bits[1] |
|
| 202 |
- } |
|
| 203 |
+ out.Tag = tag |
|
| 203 | 204 |
case "DockerImage": |
| 204 | 205 |
out.Image = in.From.Name |
| 205 | 206 |
} |
| ... | ... |
@@ -217,11 +212,7 @@ func init() {
|
| 217 | 217 |
} |
| 218 | 218 |
if len(in.From.Kind) == 0 || in.From.Kind == "ImageStream" || in.From.Kind == "ImageRepository" {
|
| 219 | 219 |
out.From.Kind = "ImageStreamTag" |
| 220 |
- if len(in.Tag) > 0 {
|
|
| 221 |
- out.From.Name = out.From.Name + ":" + in.Tag |
|
| 222 |
- } else {
|
|
| 223 |
- out.From.Name = out.From.Name + ":latest" |
|
| 224 |
- } |
|
| 220 |
+ out.From.Name = imageapi.JoinImageStreamTag(in.From.Name, in.Tag) |
|
| 225 | 221 |
} |
| 226 | 222 |
} |
| 227 | 223 |
if len(in.Image) != 0 {
|
| ... | ... |
@@ -241,7 +232,7 @@ func init() {
|
| 241 | 241 |
out.PushSecretName = in.PushSecretName |
| 242 | 242 |
if len(in.DockerImageReference) > 0 {
|
| 243 | 243 |
out.DockerImageReference = in.DockerImageReference |
| 244 |
- ref, err := image.ParseDockerImageReference(in.DockerImageReference) |
|
| 244 |
+ ref, err := imageapi.ParseDockerImageReference(in.DockerImageReference) |
|
| 245 | 245 |
if err != nil {
|
| 246 | 246 |
return err |
| 247 | 247 |
} |
| ... | ... |
@@ -262,7 +253,7 @@ func init() {
|
| 262 | 262 |
return nil |
| 263 | 263 |
} |
| 264 | 264 |
if len(in.ImageTag) != 0 {
|
| 265 |
- ref, err := image.ParseDockerImageReference(in.ImageTag) |
|
| 265 |
+ ref, err := imageapi.ParseDockerImageReference(in.ImageTag) |
|
| 266 | 266 |
if err != nil {
|
| 267 | 267 |
return err |
| 268 | 268 |
} |
| ... | ... |
@@ -3,14 +3,15 @@ package v1beta3 |
| 3 | 3 |
import ( |
| 4 | 4 |
"fmt" |
| 5 | 5 |
|
| 6 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 6 |
+ kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 7 | 7 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion" |
| 8 | 8 |
|
| 9 | 9 |
newer "github.com/openshift/origin/pkg/build/api" |
| 10 |
+ imageapi "github.com/openshift/origin/pkg/image/api" |
|
| 10 | 11 |
) |
| 11 | 12 |
|
| 12 | 13 |
func init() {
|
| 13 |
- api.Scheme.AddConversionFuncs( |
|
| 14 |
+ kapi.Scheme.AddConversionFuncs( |
|
| 14 | 15 |
func(in *newer.Build, out *Build, s conversion.Scope) error {
|
| 15 | 16 |
if err := s.Convert(&in.ObjectMeta, &out.ObjectMeta, 0); err != nil {
|
| 16 | 17 |
return err |
| ... | ... |
@@ -194,10 +195,29 @@ func init() {
|
| 194 | 194 |
return s.DefaultConvert(in, out, conversion.IgnoreMissingFields) |
| 195 | 195 |
}, |
| 196 | 196 |
func(in *newer.BuildOutput, out *BuildOutput, s conversion.Scope) error {
|
| 197 |
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields) |
|
| 197 |
+ if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
|
| 198 |
+ return err |
|
| 199 |
+ } |
|
| 200 |
+ if in.To != nil && (len(in.To.Kind) == 0 || in.To.Kind == "ImageStream") {
|
|
| 201 |
+ out.To.Kind = "ImageStreamTag" |
|
| 202 |
+ out.To.Name = imageapi.JoinImageStreamTag(in.To.Name, in.Tag) |
|
| 203 |
+ } |
|
| 204 |
+ return nil |
|
| 198 | 205 |
}, |
| 199 | 206 |
func(in *BuildOutput, out *newer.BuildOutput, s conversion.Scope) error {
|
| 200 |
- return s.DefaultConvert(in, out, conversion.IgnoreMissingFields) |
|
| 207 |
+ if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil {
|
|
| 208 |
+ return err |
|
| 209 |
+ } |
|
| 210 |
+ if in.To != nil && in.To.Kind == "ImageStreamTag" {
|
|
| 211 |
+ name, tag, ok := imageapi.SplitImageStreamTag(in.To.Name) |
|
| 212 |
+ if !ok {
|
|
| 213 |
+ return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.To.Name)
|
|
| 214 |
+ } |
|
| 215 |
+ out.To.Kind = "ImageStream" |
|
| 216 |
+ out.To.Name = name |
|
| 217 |
+ out.Tag = tag |
|
| 218 |
+ } |
|
| 219 |
+ return nil |
|
| 201 | 220 |
}, |
| 202 | 221 |
func(in *newer.ImageChangeTrigger, out *ImageChangeTrigger, s conversion.Scope) error {
|
| 203 | 222 |
out.LastTriggeredImageID = in.LastTriggeredImageID |
| ... | ... |
@@ -209,7 +229,7 @@ func init() {
|
| 209 | 209 |
}) |
| 210 | 210 |
|
| 211 | 211 |
// Add field conversion funcs. |
| 212 |
- err := api.Scheme.AddFieldLabelConversionFunc("v1beta3", "Build",
|
|
| 212 |
+ err := kapi.Scheme.AddFieldLabelConversionFunc("v1beta3", "Build",
|
|
| 213 | 213 |
func(label, value string) (string, string, error) {
|
| 214 | 214 |
switch label {
|
| 215 | 215 |
case "name": |
| ... | ... |
@@ -226,7 +246,7 @@ func init() {
|
| 226 | 226 |
// If one of the conversion functions is malformed, detect it immediately. |
| 227 | 227 |
panic(err) |
| 228 | 228 |
} |
| 229 |
- err = api.Scheme.AddFieldLabelConversionFunc("v1beta3", "BuildConfig",
|
|
| 229 |
+ err = kapi.Scheme.AddFieldLabelConversionFunc("v1beta3", "BuildConfig",
|
|
| 230 | 230 |
func(label, value string) (string, string, error) {
|
| 231 | 231 |
switch label {
|
| 232 | 232 |
case "name": |
| ... | ... |
@@ -19,14 +19,10 @@ type Interface interface {
|
| 19 | 19 |
BuildConfigsNamespacer |
| 20 | 20 |
BuildLogsNamespacer |
| 21 | 21 |
ImagesInterfacer |
| 22 |
- ImageRepositoriesNamespacer |
|
| 23 |
- ImageRepositoryMappingsNamespacer |
|
| 24 |
- ImageRepositoryTagsNamespacer |
|
| 25 | 22 |
ImageStreamsNamespacer |
| 26 | 23 |
ImageStreamMappingsNamespacer |
| 27 | 24 |
ImageStreamTagsNamespacer |
| 28 | 25 |
ImageStreamImagesNamespacer |
| 29 |
- DeploymentsNamespacer |
|
| 30 | 26 |
DeploymentConfigsNamespacer |
| 31 | 27 |
RoutesNamespacer |
| 32 | 28 |
IdentitiesInterface |
| ... | ... |
@@ -71,21 +67,6 @@ func (c *Client) Images() ImageInterface {
|
| 71 | 71 |
return newImages(c) |
| 72 | 72 |
} |
| 73 | 73 |
|
| 74 |
-// ImageRepositories provides a REST client for ImageRepository |
|
| 75 |
-func (c *Client) ImageRepositories(namespace string) ImageRepositoryInterface {
|
|
| 76 |
- return newImageRepositories(c, namespace) |
|
| 77 |
-} |
|
| 78 |
- |
|
| 79 |
-// ImageRepositoryMappings provides a REST client for ImageRepositoryMapping |
|
| 80 |
-func (c *Client) ImageRepositoryMappings(namespace string) ImageRepositoryMappingInterface {
|
|
| 81 |
- return newImageRepositoryMappings(c, namespace) |
|
| 82 |
-} |
|
| 83 |
- |
|
| 84 |
-// ImageRepositoryTags provides a REST client for ImageRepositoryTag |
|
| 85 |
-func (c *Client) ImageRepositoryTags(namespace string) ImageRepositoryTagInterface {
|
|
| 86 |
- return newImageRepositoryTags(c, namespace) |
|
| 87 |
-} |
|
| 88 |
- |
|
| 89 | 74 |
// ImageStreams provides a REST client for ImageStream |
| 90 | 75 |
func (c *Client) ImageStreams(namespace string) ImageStreamInterface {
|
| 91 | 76 |
return newImageStreams(c, namespace) |
| ... | ... |
@@ -106,11 +87,6 @@ func (c *Client) ImageStreamImages(namespace string) ImageStreamImageInterface {
|
| 106 | 106 |
return newImageStreamImages(c, namespace) |
| 107 | 107 |
} |
| 108 | 108 |
|
| 109 |
-// Deployments provides a REST client for Deployment |
|
| 110 |
-func (c *Client) Deployments(namespace string) DeploymentInterface {
|
|
| 111 |
- return newDeployments(c, namespace) |
|
| 112 |
-} |
|
| 113 |
- |
|
| 114 | 109 |
// DeploymentConfigs provides a REST client for DeploymentConfig |
| 115 | 110 |
func (c *Client) DeploymentConfigs(namespace string) DeploymentConfigInterface {
|
| 116 | 111 |
return newDeploymentConfigs(c, namespace) |
| 117 | 112 |
deleted file mode 100644 |
| ... | ... |
@@ -1,89 +0,0 @@ |
| 1 |
-package client |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 5 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 6 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/watch" |
|
| 7 |
- |
|
| 8 |
- deployapi "github.com/openshift/origin/pkg/deploy/api" |
|
| 9 |
-) |
|
| 10 |
- |
|
| 11 |
-// DeploymentsNamespacer has methods to work with Deployment resources in a namespace |
|
| 12 |
-type DeploymentsNamespacer interface {
|
|
| 13 |
- Deployments(namespace string) DeploymentInterface |
|
| 14 |
-} |
|
| 15 |
- |
|
| 16 |
-// DeploymentInterface contains methods for working with Deployments |
|
| 17 |
-type DeploymentInterface interface {
|
|
| 18 |
- List(label labels.Selector, field fields.Selector) (*deployapi.DeploymentList, error) |
|
| 19 |
- Get(name string) (*deployapi.Deployment, error) |
|
| 20 |
- Create(deployment *deployapi.Deployment) (*deployapi.Deployment, error) |
|
| 21 |
- Update(deployment *deployapi.Deployment) (*deployapi.Deployment, error) |
|
| 22 |
- Delete(name string) error |
|
| 23 |
- Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) |
|
| 24 |
-} |
|
| 25 |
- |
|
| 26 |
-// deployments implements DeploymentsNamespacer interface |
|
| 27 |
-type deployments struct {
|
|
| 28 |
- r *Client |
|
| 29 |
- ns string |
|
| 30 |
-} |
|
| 31 |
- |
|
| 32 |
-// newDeployments returns a deployments |
|
| 33 |
-func newDeployments(c *Client, namespace string) *deployments {
|
|
| 34 |
- return &deployments{
|
|
| 35 |
- r: c, |
|
| 36 |
- ns: namespace, |
|
| 37 |
- } |
|
| 38 |
-} |
|
| 39 |
- |
|
| 40 |
-// List takes a label and field selector, and returns the list of deployments that match that selectors |
|
| 41 |
-func (c *deployments) List(label labels.Selector, field fields.Selector) (result *deployapi.DeploymentList, err error) {
|
|
| 42 |
- result = &deployapi.DeploymentList{}
|
|
| 43 |
- err = c.r.Get(). |
|
| 44 |
- Namespace(c.ns). |
|
| 45 |
- Resource("deployments").
|
|
| 46 |
- LabelsSelectorParam(label). |
|
| 47 |
- FieldsSelectorParam(field). |
|
| 48 |
- Do(). |
|
| 49 |
- Into(result) |
|
| 50 |
- return |
|
| 51 |
-} |
|
| 52 |
- |
|
| 53 |
-// Get returns information about a particular deployment |
|
| 54 |
-func (c *deployments) Get(name string) (result *deployapi.Deployment, err error) {
|
|
| 55 |
- result = &deployapi.Deployment{}
|
|
| 56 |
- err = c.r.Get().Namespace(c.ns).Resource("deployments").Name(name).Do().Into(result)
|
|
| 57 |
- return |
|
| 58 |
-} |
|
| 59 |
- |
|
| 60 |
-// Create creates a new deployment |
|
| 61 |
-func (c *deployments) Create(deployment *deployapi.Deployment) (result *deployapi.Deployment, err error) {
|
|
| 62 |
- result = &deployapi.Deployment{}
|
|
| 63 |
- err = c.r.Post().Namespace(c.ns).Resource("deployments").Body(deployment).Do().Into(result)
|
|
| 64 |
- return |
|
| 65 |
-} |
|
| 66 |
- |
|
| 67 |
-// Update updates an existing deployment |
|
| 68 |
-func (c *deployments) Update(deployment *deployapi.Deployment) (result *deployapi.Deployment, err error) {
|
|
| 69 |
- result = &deployapi.Deployment{}
|
|
| 70 |
- err = c.r.Put().Namespace(c.ns).Resource("deployments").Name(deployment.Name).Body(deployment).Do().Into(result)
|
|
| 71 |
- return |
|
| 72 |
-} |
|
| 73 |
- |
|
| 74 |
-// Delete deletes an existing replication deployment. |
|
| 75 |
-func (c *deployments) Delete(name string) error {
|
|
| 76 |
- return c.r.Delete().Namespace(c.ns).Resource("deployments").Name(name).Do().Error()
|
|
| 77 |
-} |
|
| 78 |
- |
|
| 79 |
-// Watch returns a watch.Interface that watches the requested deployments. |
|
| 80 |
-func (c *deployments) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
|
| 81 |
- return c.r.Get(). |
|
| 82 |
- Prefix("watch").
|
|
| 83 |
- Namespace(c.ns). |
|
| 84 |
- Resource("deployments").
|
|
| 85 |
- Param("resourceVersion", resourceVersion).
|
|
| 86 |
- LabelsSelectorParam(label). |
|
| 87 |
- FieldsSelectorParam(field). |
|
| 88 |
- Watch() |
|
| 89 |
-} |
| ... | ... |
@@ -44,18 +44,6 @@ func (c *Fake) Images() ImageInterface {
|
| 44 | 44 |
return &FakeImages{Fake: c}
|
| 45 | 45 |
} |
| 46 | 46 |
|
| 47 |
-func (c *Fake) ImageRepositories(namespace string) ImageRepositoryInterface {
|
|
| 48 |
- return &FakeImageRepositories{Fake: c, Namespace: namespace}
|
|
| 49 |
-} |
|
| 50 |
- |
|
| 51 |
-func (c *Fake) ImageRepositoryMappings(namespace string) ImageRepositoryMappingInterface {
|
|
| 52 |
- return &FakeImageRepositoryMappings{Fake: c, Namespace: namespace}
|
|
| 53 |
-} |
|
| 54 |
- |
|
| 55 |
-func (c *Fake) ImageRepositoryTags(namespace string) ImageRepositoryTagInterface {
|
|
| 56 |
- return &FakeImageRepositoryTags{Fake: c, Namespace: namespace}
|
|
| 57 |
-} |
|
| 58 |
- |
|
| 59 | 47 |
func (c *Fake) ImageStreams(namespace string) ImageStreamInterface {
|
| 60 | 48 |
return &FakeImageStreams{Fake: c, Namespace: namespace}
|
| 61 | 49 |
} |
| ... | ... |
@@ -72,10 +60,6 @@ func (c *Fake) ImageStreamImages(namespace string) ImageStreamImageInterface {
|
| 72 | 72 |
return &FakeImageStreamImages{Fake: c, Namespace: namespace}
|
| 73 | 73 |
} |
| 74 | 74 |
|
| 75 |
-func (c *Fake) Deployments(namespace string) DeploymentInterface {
|
|
| 76 |
- return &FakeDeployments{Fake: c, Namespace: namespace}
|
|
| 77 |
-} |
|
| 78 |
- |
|
| 79 | 75 |
func (c *Fake) DeploymentConfigs(namespace string) DeploymentConfigInterface {
|
| 80 | 76 |
return &FakeDeploymentConfigs{Fake: c, Namespace: namespace}
|
| 81 | 77 |
} |
| 82 | 78 |
deleted file mode 100644 |
| ... | ... |
@@ -1,46 +0,0 @@ |
| 1 |
-package client |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 5 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 6 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/watch" |
|
| 7 |
- |
|
| 8 |
- deployapi "github.com/openshift/origin/pkg/deploy/api" |
|
| 9 |
-) |
|
| 10 |
- |
|
| 11 |
-// FakeDeployments implements BuildInterface. Meant to be embedded into a struct to get a default |
|
| 12 |
-// implementation. This makes faking out just the methods you want to test easier. |
|
| 13 |
-type FakeDeployments struct {
|
|
| 14 |
- Fake *Fake |
|
| 15 |
- Namespace string |
|
| 16 |
-} |
|
| 17 |
- |
|
| 18 |
-func (c *FakeDeployments) List(label labels.Selector, field fields.Selector) (*deployapi.DeploymentList, error) {
|
|
| 19 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "list-deployment"}, &deployapi.DeploymentList{})
|
|
| 20 |
- return obj.(*deployapi.DeploymentList), err |
|
| 21 |
-} |
|
| 22 |
- |
|
| 23 |
-func (c *FakeDeployments) Get(name string) (*deployapi.Deployment, error) {
|
|
| 24 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "get-deployment"}, &deployapi.Deployment{})
|
|
| 25 |
- return obj.(*deployapi.Deployment), err |
|
| 26 |
-} |
|
| 27 |
- |
|
| 28 |
-func (c *FakeDeployments) Create(deployment *deployapi.Deployment) (*deployapi.Deployment, error) {
|
|
| 29 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "create-deployment"}, &deployapi.Deployment{})
|
|
| 30 |
- return obj.(*deployapi.Deployment), err |
|
| 31 |
-} |
|
| 32 |
- |
|
| 33 |
-func (c *FakeDeployments) Update(deployment *deployapi.Deployment) (*deployapi.Deployment, error) {
|
|
| 34 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "update-deployment", Value: deployment}, &deployapi.Deployment{})
|
|
| 35 |
- return obj.(*deployapi.Deployment), err |
|
| 36 |
-} |
|
| 37 |
- |
|
| 38 |
-func (c *FakeDeployments) Delete(name string) error {
|
|
| 39 |
- c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-deployment"})
|
|
| 40 |
- return nil |
|
| 41 |
-} |
|
| 42 |
- |
|
| 43 |
-func (c *FakeDeployments) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
|
| 44 |
- c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "watch-deployments"})
|
|
| 45 |
- return nil, nil |
|
| 46 |
-} |
| 47 | 1 |
deleted file mode 100644 |
| ... | ... |
@@ -1,49 +0,0 @@ |
| 1 |
-package client |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 5 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 6 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/watch" |
|
| 7 |
- |
|
| 8 |
- imageapi "github.com/openshift/origin/pkg/image/api" |
|
| 9 |
-) |
|
| 10 |
- |
|
| 11 |
-// FakeImageRepositories implements ImageRepositoryInterface. Meant to be |
|
| 12 |
-// embedded into a struct to get a default implementation. This makes faking |
|
| 13 |
-// out just the methods you want to test easier. |
|
| 14 |
-type FakeImageRepositories struct {
|
|
| 15 |
- Fake *Fake |
|
| 16 |
- Namespace string |
|
| 17 |
-} |
|
| 18 |
- |
|
| 19 |
-var _ ImageRepositoryInterface = &FakeImageRepositories{}
|
|
| 20 |
- |
|
| 21 |
-func (c *FakeImageRepositories) List(label labels.Selector, field fields.Selector) (*imageapi.ImageRepositoryList, error) {
|
|
| 22 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "list-imagerepositories"}, &imageapi.ImageRepositoryList{})
|
|
| 23 |
- return obj.(*imageapi.ImageRepositoryList), err |
|
| 24 |
-} |
|
| 25 |
- |
|
| 26 |
-func (c *FakeImageRepositories) Get(name string) (*imageapi.ImageRepository, error) {
|
|
| 27 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "get-imagerepository", Value: name}, &imageapi.ImageRepository{})
|
|
| 28 |
- return obj.(*imageapi.ImageRepository), err |
|
| 29 |
-} |
|
| 30 |
- |
|
| 31 |
-func (c *FakeImageRepositories) Create(repo *imageapi.ImageRepository) (*imageapi.ImageRepository, error) {
|
|
| 32 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "create-imagerepository"}, &imageapi.ImageRepository{})
|
|
| 33 |
- return obj.(*imageapi.ImageRepository), err |
|
| 34 |
-} |
|
| 35 |
- |
|
| 36 |
-func (c *FakeImageRepositories) Update(repo *imageapi.ImageRepository) (*imageapi.ImageRepository, error) {
|
|
| 37 |
- obj, err := c.Fake.Invokes(FakeAction{Action: "update-imagerepository"}, &imageapi.ImageRepository{})
|
|
| 38 |
- return obj.(*imageapi.ImageRepository), err |
|
| 39 |
-} |
|
| 40 |
- |
|
| 41 |
-func (c *FakeImageRepositories) Delete(name string) error {
|
|
| 42 |
- _, err := c.Fake.Invokes(FakeAction{Action: "delete-imagerepository", Value: name}, &imageapi.ImageRepository{})
|
|
| 43 |
- return err |
|
| 44 |
-} |
|
| 45 |
- |
|
| 46 |
-func (c *FakeImageRepositories) Watch(label labels.Selector, field fields.Selector, resourceVersion string) (watch.Interface, error) {
|
|
| 47 |
- c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "watch-imagerepositories"})
|
|
| 48 |
- return nil, nil |
|
| 49 |
-} |
| 50 | 1 |
deleted file mode 100644 |
| ... | ... |
@@ -1,20 +0,0 @@ |
| 1 |
-package client |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- imageapi "github.com/openshift/origin/pkg/image/api" |
|
| 5 |
-) |
|
| 6 |
- |
|
| 7 |
-// FakeImageRepositories implements ImageRepositoryMappingInterface. Meant to |
|
| 8 |
-// be embedded into a struct to get a default implementation. This makes faking |
|
| 9 |
-// out just the methods you want to test easier. |
|
| 10 |
-type FakeImageRepositoryMappings struct {
|
|
| 11 |
- Fake *Fake |
|
| 12 |
- Namespace string |
|
| 13 |
-} |
|
| 14 |
- |
|
| 15 |
-var _ ImageRepositoryMappingInterface = &FakeImageRepositoryMappings{}
|
|
| 16 |
- |
|
| 17 |
-func (c *FakeImageRepositoryMappings) Create(mapping *imageapi.ImageRepositoryMapping) error {
|
|
| 18 |
- c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "create-imagerepository-mapping"})
|
|
| 19 |
- return nil |
|
| 20 |
-} |
| 21 | 1 |
deleted file mode 100644 |
| ... | ... |
@@ -1,27 +0,0 @@ |
| 1 |
-package client |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- "fmt" |
|
| 5 |
- |
|
| 6 |
- imageapi "github.com/openshift/origin/pkg/image/api" |
|
| 7 |
-) |
|
| 8 |
- |
|
| 9 |
-// FakeImageRepositoryTags implements ImageRepositoryTagInterface. Meant to be |
|
| 10 |
-// embedded into a struct to get a default implementation. This makes faking |
|
| 11 |
-// out just the methods you want to test easier. |
|
| 12 |
-type FakeImageRepositoryTags struct {
|
|
| 13 |
- Fake *Fake |
|
| 14 |
- Namespace string |
|
| 15 |
-} |
|
| 16 |
- |
|
| 17 |
-var _ ImageRepositoryTagInterface = &FakeImageRepositoryTags{}
|
|
| 18 |
- |
|
| 19 |
-func (c *FakeImageRepositoryTags) Get(name, tag string) (result *imageapi.ImageRepositoryTag, err error) {
|
|
| 20 |
- c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "get-imagerepository-tag", Value: fmt.Sprintf("%s:%s", name, tag)})
|
|
| 21 |
- return &imageapi.ImageRepositoryTag{}, nil
|
|
| 22 |
-} |
|
| 23 |
- |
|
| 24 |
-func (c *FakeImageRepositoryTags) Delete(name, tag string) error {
|
|
| 25 |
- c.Fake.Actions = append(c.Fake.Actions, FakeAction{Action: "delete-imagerepository-tag", Value: fmt.Sprintf("%s:%s", name, tag)})
|
|
| 26 |
- return nil |
|
| 27 |
-} |
| ... | ... |
@@ -335,32 +335,3 @@ func (d *LatestDeploymentDescriber) describeDeploymentStatus(deploy *kapi.Replic |
| 335 | 335 |
return fmt.Sprintf("#%s deployment %s %s ago", deploy.Annotations[deployapi.DeploymentVersionAnnotation], strings.ToLower(s), timeAt)
|
| 336 | 336 |
} |
| 337 | 337 |
} |
| 338 |
- |
|
| 339 |
-// DeploymentDescriber generates information about a deployment |
|
| 340 |
-// DEPRECATED. |
|
| 341 |
-type DeploymentDescriber struct {
|
|
| 342 |
- client.Interface |
|
| 343 |
-} |
|
| 344 |
- |
|
| 345 |
-// Describe returns a description of a DeploymentDescriber |
|
| 346 |
-func (d *DeploymentDescriber) Describe(namespace, name string) (string, error) {
|
|
| 347 |
- c := d.Deployments(namespace) |
|
| 348 |
- deployment, err := c.Get(name) |
|
| 349 |
- if err != nil {
|
|
| 350 |
- return "", err |
|
| 351 |
- } |
|
| 352 |
- |
|
| 353 |
- return tabbedString(func(out *tabwriter.Writer) error {
|
|
| 354 |
- formatMeta(out, deployment.ObjectMeta) |
|
| 355 |
- formatString(out, "Status", bold(deployment.Status)) |
|
| 356 |
- formatString(out, "Strategy", deployment.Strategy.Type) |
|
| 357 |
- causes := []string{}
|
|
| 358 |
- if deployment.Details != nil {
|
|
| 359 |
- for _, c := range deployment.Details.Causes {
|
|
| 360 |
- causes = append(causes, string(c.Type)) |
|
| 361 |
- } |
|
| 362 |
- } |
|
| 363 |
- formatString(out, "Causes", strings.Join(causes, ",")) |
|
| 364 |
- return nil |
|
| 365 |
- }) |
|
| 366 |
-} |
| ... | ... |
@@ -37,8 +37,6 @@ func DescriberFor(kind string, c *client.Client, kclient kclient.Interface, host |
| 37 | 37 |
return &BuildConfigDescriber{c, host}, true
|
| 38 | 38 |
case "BuildLog": |
| 39 | 39 |
return &BuildLogDescriber{c}, true
|
| 40 |
- case "Deployment": |
|
| 41 |
- return &DeploymentDescriber{c}, true
|
|
| 42 | 40 |
case "DeploymentConfig": |
| 43 | 41 |
return NewDeploymentConfigDescriber(c, kclient), true |
| 44 | 42 |
case "Identity": |
| ... | ... |
@@ -28,7 +28,7 @@ type describeClient struct {
|
| 28 | 28 |
func TestDescribeFor(t *testing.T) {
|
| 29 | 29 |
c := &client.Client{}
|
| 30 | 30 |
testTypesList := []string{
|
| 31 |
- "Build", "BuildConfig", "BuildLog", "Deployment", "DeploymentConfig", |
|
| 31 |
+ "Build", "BuildConfig", "BuildLog", "DeploymentConfig", |
|
| 32 | 32 |
"Image", "ImageStream", "ImageStreamTag", "ImageStreamImage", |
| 33 | 33 |
"Route", "Project", |
| 34 | 34 |
} |
| ... | ... |
@@ -49,7 +49,6 @@ func TestDescribers(t *testing.T) {
|
| 49 | 49 |
&BuildDescriber{c, fakeKube},
|
| 50 | 50 |
&BuildConfigDescriber{c, ""},
|
| 51 | 51 |
&BuildLogDescriber{c},
|
| 52 |
- &DeploymentDescriber{c},
|
|
| 53 | 52 |
&ImageDescriber{c},
|
| 54 | 53 |
&ImageStreamDescriber{c},
|
| 55 | 54 |
&ImageStreamTagDescriber{c},
|
| ... | ... |
@@ -285,6 +285,8 @@ func describeBuildStatus(build *buildapi.Build, t *util.Time, parentName string) |
| 285 | 285 |
return fmt.Sprintf("build %s succeeded %s ago%s", name, time, revision)
|
| 286 | 286 |
case buildapi.BuildStatusError: |
| 287 | 287 |
return fmt.Sprintf("build %s stopped with an error %s ago%s", name, time, revision)
|
| 288 |
+ case buildapi.BuildStatusFailed: |
|
| 289 |
+ return fmt.Sprintf("build %s failed %s ago%s", name, time, revision)
|
|
| 288 | 290 |
default: |
| 289 | 291 |
status := strings.ToLower(string(build.Status)) |
| 290 | 292 |
return fmt.Sprintf("build %s %s for %s%s", name, status, time, revision)
|
| ... | ... |
@@ -33,6 +33,7 @@ const ( |
| 33 | 33 |
KubeAPIPrefixV1Beta1 = "/api/v1beta1" |
| 34 | 34 |
KubeAPIPrefixV1Beta2 = "/api/v1beta2" |
| 35 | 35 |
KubeAPIPrefixV1Beta3 = "/api/v1beta3" |
| 36 |
+ KubeAPIPrefixV1 = "/api/v1" |
|
| 36 | 37 |
) |
| 37 | 38 |
|
| 38 | 39 |
// TODO: Longer term we should read this from some config store, rather than a flag. |
| ... | ... |
@@ -69,6 +70,8 @@ func (c *MasterConfig) InstallAPI(container *restful.Container) []string {
|
| 69 | 69 |
KubeletClient: kubeletClient, |
| 70 | 70 |
APIPrefix: KubeAPIPrefix, |
| 71 | 71 |
|
| 72 |
+ EnableV1: true, |
|
| 73 |
+ |
|
| 72 | 74 |
Authorizer: c.Authorizer, |
| 73 | 75 |
AdmissionControl: c.AdmissionControl, |
| 74 | 76 |
} |
| ... | ... |
@@ -78,6 +81,7 @@ func (c *MasterConfig) InstallAPI(container *restful.Container) []string {
|
| 78 | 78 |
fmt.Sprintf("Started Kubernetes API at %%s%s", KubeAPIPrefixV1Beta1),
|
| 79 | 79 |
fmt.Sprintf("Started Kubernetes API at %%s%s", KubeAPIPrefixV1Beta3),
|
| 80 | 80 |
fmt.Sprintf("Started Kubernetes API at %%s%s", KubeAPIPrefixV1Beta3),
|
| 81 |
+ fmt.Sprintf("Started Kubernetes API at %%s%s (experimental)", KubeAPIPrefixV1),
|
|
| 81 | 82 |
} |
| 82 | 83 |
} |
| 83 | 84 |
|
| ... | ... |
@@ -121,7 +121,10 @@ const ( |
| 121 | 121 |
swaggerAPIPrefix = "/swaggerapi/" |
| 122 | 122 |
) |
| 123 | 123 |
|
| 124 |
-var excludedV1Beta3Types = util.NewStringSet("templateConfigs", "deployments", "buildLogs")
|
|
| 124 |
+var excludedV1Beta3Types = util.NewStringSet( |
|
| 125 |
+ "templateConfigs", "deployments", "buildLogs", |
|
| 126 |
+ "imageRepositories", "imageRepositories/status", "imageRepositoryMappings", "imageRepositoryTags", |
|
| 127 |
+) |
|
| 125 | 128 |
|
| 126 | 129 |
// APIInstaller installs additional API components into this server |
| 127 | 130 |
type APIInstaller interface {
|
| ... | ... |
@@ -302,61 +305,11 @@ func (c *MasterConfig) InstallProtectedAPI(container *restful.Container) []strin |
| 302 | 302 |
"clusterRoles": clusterRoleStorage, |
| 303 | 303 |
} |
| 304 | 304 |
|
| 305 |
- // for v1beta1, we dual register camelCase and camelcase names |
|
| 306 |
- v1beta1Storage := map[string]rest.Storage{}
|
|
| 307 |
- for k, v := range storage {
|
|
| 308 |
- v1beta1Storage[k] = v |
|
| 309 |
- v1beta1Storage[strings.ToLower(k)] = v |
|
| 310 |
- } |
|
| 311 |
- v1beta3Storage := map[string]rest.Storage{}
|
|
| 312 |
- for k, v := range storage {
|
|
| 313 |
- if excludedV1Beta3Types.Has(k) {
|
|
| 314 |
- continue |
|
| 315 |
- } |
|
| 316 |
- v1beta3Storage[strings.ToLower(k)] = v |
|
| 317 |
- } |
|
| 318 |
- |
|
| 319 |
- version := &apiserver.APIGroupVersion{
|
|
| 320 |
- Root: OpenShiftAPIPrefix, |
|
| 321 |
- Version: OpenShiftAPIV1Beta1, |
|
| 322 |
- |
|
| 323 |
- Storage: v1beta1Storage, |
|
| 324 |
- Codec: v1beta1.Codec, |
|
| 325 |
- |
|
| 326 |
- Mapper: latest.RESTMapper, |
|
| 327 |
- |
|
| 328 |
- Creater: kapi.Scheme, |
|
| 329 |
- Typer: kapi.Scheme, |
|
| 330 |
- Convertor: kapi.Scheme, |
|
| 331 |
- Linker: latest.SelfLinker, |
|
| 332 |
- |
|
| 333 |
- Admit: c.AdmissionControl, |
|
| 334 |
- Context: c.getRequestContextMapper(), |
|
| 335 |
- } |
|
| 336 |
- |
|
| 337 |
- if err := version.InstallREST(container); err != nil {
|
|
| 305 |
+ if err := c.api_v1beta1(storage).InstallREST(container); err != nil {
|
|
| 338 | 306 |
glog.Fatalf("Unable to initialize v1beta1 API: %v", err)
|
| 339 | 307 |
} |
| 340 | 308 |
|
| 341 |
- version3 := &apiserver.APIGroupVersion{
|
|
| 342 |
- Root: OpenShiftAPIPrefix, |
|
| 343 |
- Version: OpenShiftAPIV1Beta3, |
|
| 344 |
- |
|
| 345 |
- Storage: v1beta3Storage, |
|
| 346 |
- Codec: v1beta3.Codec, |
|
| 347 |
- |
|
| 348 |
- Mapper: latest.RESTMapper, |
|
| 349 |
- |
|
| 350 |
- Creater: kapi.Scheme, |
|
| 351 |
- Typer: kapi.Scheme, |
|
| 352 |
- Convertor: kapi.Scheme, |
|
| 353 |
- Linker: latest.SelfLinker, |
|
| 354 |
- |
|
| 355 |
- Admit: c.AdmissionControl, |
|
| 356 |
- Context: c.getRequestContextMapper(), |
|
| 357 |
- } |
|
| 358 |
- |
|
| 359 |
- if err := version3.InstallREST(container); err != nil {
|
|
| 309 |
+ if err := c.api_v1beta3(storage).InstallREST(container); err != nil {
|
|
| 360 | 310 |
/*// TODO: remove this check once v1beta3 is complete |
| 361 | 311 |
if utilerrs.FilterOut(err, func(err error) bool {
|
| 362 | 312 |
return strings.Contains(err.Error(), "is registered for version") |
| ... | ... |
@@ -565,6 +518,52 @@ func (c *MasterConfig) Run(protected []APIInstaller, unprotected []APIInstaller) |
| 565 | 565 |
c.checkProjectRequestTemplate() |
| 566 | 566 |
} |
| 567 | 567 |
|
| 568 |
+func (c *MasterConfig) defaultAPIGroupVersion() *apiserver.APIGroupVersion {
|
|
| 569 |
+ return &apiserver.APIGroupVersion{
|
|
| 570 |
+ Root: OpenShiftAPIPrefix, |
|
| 571 |
+ |
|
| 572 |
+ Mapper: latest.RESTMapper, |
|
| 573 |
+ |
|
| 574 |
+ Creater: kapi.Scheme, |
|
| 575 |
+ Typer: kapi.Scheme, |
|
| 576 |
+ Convertor: kapi.Scheme, |
|
| 577 |
+ Linker: latest.SelfLinker, |
|
| 578 |
+ |
|
| 579 |
+ Admit: c.AdmissionControl, |
|
| 580 |
+ Context: c.getRequestContextMapper(), |
|
| 581 |
+ } |
|
| 582 |
+} |
|
| 583 |
+ |
|
| 584 |
+// api_v1beta1 returns the resources and codec for API version v1beta1. |
|
| 585 |
+func (c *MasterConfig) api_v1beta1(all map[string]rest.Storage) *apiserver.APIGroupVersion {
|
|
| 586 |
+ storage := make(map[string]rest.Storage) |
|
| 587 |
+ for k, v := range all {
|
|
| 588 |
+ storage[strings.ToLower(k)] = v |
|
| 589 |
+ storage[k] = v |
|
| 590 |
+ } |
|
| 591 |
+ version := c.defaultAPIGroupVersion() |
|
| 592 |
+ version.Storage = storage |
|
| 593 |
+ version.Version = OpenShiftAPIV1Beta1 |
|
| 594 |
+ version.Codec = v1beta1.Codec |
|
| 595 |
+ return version |
|
| 596 |
+} |
|
| 597 |
+ |
|
| 598 |
+// api_v1beta3 returns the resources and codec for API version v1beta3. |
|
| 599 |
+func (c *MasterConfig) api_v1beta3(all map[string]rest.Storage) *apiserver.APIGroupVersion {
|
|
| 600 |
+ storage := make(map[string]rest.Storage) |
|
| 601 |
+ for k, v := range all {
|
|
| 602 |
+ if excludedV1Beta3Types.Has(k) {
|
|
| 603 |
+ continue |
|
| 604 |
+ } |
|
| 605 |
+ storage[strings.ToLower(k)] = v |
|
| 606 |
+ } |
|
| 607 |
+ version := c.defaultAPIGroupVersion() |
|
| 608 |
+ version.Storage = storage |
|
| 609 |
+ version.Version = OpenShiftAPIV1Beta3 |
|
| 610 |
+ version.Codec = v1beta3.Codec |
|
| 611 |
+ return version |
|
| 612 |
+} |
|
| 613 |
+ |
|
| 568 | 614 |
// getRequestContextMapper returns a mapper from requests to contexts, initializing it if needed |
| 569 | 615 |
func (c *MasterConfig) getRequestContextMapper() kapi.RequestContextMapper {
|
| 570 | 616 |
if c.RequestContextMapper == nil {
|
| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 | 1 |
package v1beta3 |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 |
+ "fmt" |
|
| 5 |
+ |
|
| 4 | 6 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
| 5 | 7 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/conversion" |
| 6 | 8 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/util" |
| ... | ... |
@@ -160,6 +162,14 @@ func init() {
|
| 160 | 160 |
out.Tag = ref.Tag |
| 161 | 161 |
ref.Tag, ref.ID = "", "" |
| 162 | 162 |
out.RepositoryName = ref.String() |
| 163 |
+ case "ImageStreamTag": |
|
| 164 |
+ name, tag, ok := imageapi.SplitImageStreamTag(in.From.Name) |
|
| 165 |
+ if !ok {
|
|
| 166 |
+ return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.From.Name)
|
|
| 167 |
+ } |
|
| 168 |
+ out.From.Kind = "ImageStream" |
|
| 169 |
+ out.From.Name = name |
|
| 170 |
+ out.Tag = tag |
|
| 163 | 171 |
} |
| 164 | 172 |
return nil |
| 165 | 173 |
}, |
| ... | ... |
@@ -171,6 +181,15 @@ func init() {
|
| 171 | 171 |
if err := s.Convert(&in.From, &out.From, 0); err != nil {
|
| 172 | 172 |
return err |
| 173 | 173 |
} |
| 174 |
+ switch in.From.Kind {
|
|
| 175 |
+ case "ImageStream": |
|
| 176 |
+ out.From.Kind = "ImageStreamTag" |
|
| 177 |
+ tag := in.Tag |
|
| 178 |
+ if len(tag) == 0 {
|
|
| 179 |
+ tag = imageapi.DefaultImageTag |
|
| 180 |
+ } |
|
| 181 |
+ out.From.Name = fmt.Sprintf("%s:%s", in.From.Name, tag)
|
|
| 182 |
+ } |
|
| 174 | 183 |
return nil |
| 175 | 184 |
}, |
| 176 | 185 |
|
| ... | ... |
@@ -183,7 +202,7 @@ func init() {
|
| 183 | 183 |
} |
| 184 | 184 |
out.Tag = ref.Tag |
| 185 | 185 |
ref.Tag, ref.ID = "", "" |
| 186 |
- out.RepositoryName = ref.String() |
|
| 186 |
+ out.RepositoryName = ref.Minimal().String() |
|
| 187 | 187 |
} |
| 188 | 188 |
return nil |
| 189 | 189 |
}, |
| ... | ... |
@@ -195,7 +214,7 @@ func init() {
|
| 195 | 195 |
} |
| 196 | 196 |
ref.Tag = in.Tag |
| 197 | 197 |
out.From.Kind = "DockerImage" |
| 198 |
- out.From.Name = ref.Minimal().String() |
|
| 198 |
+ out.From.Name = ref.String() |
|
| 199 | 199 |
} |
| 200 | 200 |
return nil |
| 201 | 201 |
}, |
| ... | ... |
@@ -2,6 +2,7 @@ package generator |
| 2 | 2 |
|
| 3 | 3 |
import ( |
| 4 | 4 |
"fmt" |
| 5 |
+ "log" |
|
| 5 | 6 |
|
| 6 | 7 |
kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
| 7 | 8 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors" |
| ... | ... |
@@ -61,6 +62,7 @@ func (g *DeploymentConfigGenerator) Generate(ctx kapi.Context, name string) (*de |
| 61 | 61 |
errs = append(errs, fielderrors.NewFieldInvalid(f, params.Tag, fmt.Sprintf("no image recorded for %s/%s:%s", imageStream.Namespace, imageStream.Name, params.Tag)))
|
| 62 | 62 |
continue |
| 63 | 63 |
} |
| 64 |
+ log.Printf("generating %s from image stream %s with latest %s", name, imageStream.Name, latestEvent.DockerImageReference)
|
|
| 64 | 65 |
|
| 65 | 66 |
// Update containers |
| 66 | 67 |
template := config.Template.ControllerTemplate.Template |
| ... | ... |
@@ -128,6 +128,29 @@ func (r DockerImageReference) String() string {
|
| 128 | 128 |
return fmt.Sprintf("%s%s%s%s", registry, r.Namespace, r.Name, ref)
|
| 129 | 129 |
} |
| 130 | 130 |
|
| 131 |
+// SplitImageStreamTag turns the name of an ImageStreamTag into Name and Tag. |
|
| 132 |
+// It returns false if the tag was not properly specified in the name. |
|
| 133 |
+func SplitImageStreamTag(nameAndTag string) (name string, tag string, ok bool) {
|
|
| 134 |
+ parts := strings.SplitN(nameAndTag, ":", 2) |
|
| 135 |
+ name = parts[0] |
|
| 136 |
+ if len(parts) > 1 {
|
|
| 137 |
+ tag = parts[1] |
|
| 138 |
+ } |
|
| 139 |
+ if len(tag) == 0 {
|
|
| 140 |
+ tag = DefaultImageTag |
|
| 141 |
+ } |
|
| 142 |
+ return name, tag, len(parts) == 2 |
|
| 143 |
+} |
|
| 144 |
+ |
|
| 145 |
+// SplitImageStreamTag turns the name of an ImageStreamTag into Name and Tag. |
|
| 146 |
+// It returns false if the tag was not properly specified in the name. |
|
| 147 |
+func JoinImageStreamTag(name, tag string) string {
|
|
| 148 |
+ if len(tag) == 0 {
|
|
| 149 |
+ tag = DefaultImageTag |
|
| 150 |
+ } |
|
| 151 |
+ return fmt.Sprintf("%s:%s", name, tag)
|
|
| 152 |
+} |
|
| 153 |
+ |
|
| 131 | 154 |
// ImageWithMetadata returns a copy of image with the DockerImageMetadata filled in |
| 132 | 155 |
// from the raw DockerImageManifest data stored in the image. |
| 133 | 156 |
func ImageWithMetadata(image Image) (*Image, error) {
|
| ... | ... |
@@ -44,6 +44,9 @@ type lifecycle struct {
|
| 44 | 44 |
// Admit enforces that a namespace must exist in order to associate content with it. |
| 45 | 45 |
// Admit enforces that a namespace that is terminating cannot accept new content being associated with it. |
| 46 | 46 |
func (e *lifecycle) Admit(a admission.Attributes) (err error) {
|
| 47 |
+ if len(a.GetNamespace()) == 0 {
|
|
| 48 |
+ return nil |
|
| 49 |
+ } |
|
| 47 | 50 |
defaultVersion, kind, err := latest.RESTMapper.VersionAndKindForResource(a.GetResource()) |
| 48 | 51 |
if err != nil {
|
| 49 | 52 |
return err |
| ... | ... |
@@ -63,7 +63,7 @@ func TestAdmissionLifecycle(t *testing.T) {
|
| 63 | 63 |
projectcache.FakeProjectCache(mockClient, store, "") |
| 64 | 64 |
handler := &lifecycle{}
|
| 65 | 65 |
build := &buildapi.Build{
|
| 66 |
- ObjectMeta: kapi.ObjectMeta{Name: "buildid"},
|
|
| 66 |
+ ObjectMeta: kapi.ObjectMeta{Name: "buildid", Namespace: "other"},
|
|
| 67 | 67 |
Parameters: buildapi.BuildParameters{
|
| 68 | 68 |
Source: buildapi.BuildSource{
|
| 69 | 69 |
Type: buildapi.BuildSourceGit, |
| ... | ... |
@@ -82,7 +82,7 @@ func TestAdmissionLifecycle(t *testing.T) {
|
| 82 | 82 |
}, |
| 83 | 83 |
Status: buildapi.BuildStatusNew, |
| 84 | 84 |
} |
| 85 |
- err := handler.Admit(admission.NewAttributesRecord(build, "Build", namespaceObj.Namespace, "builds", "CREATE")) |
|
| 85 |
+ err := handler.Admit(admission.NewAttributesRecord(build, "Build", build.Namespace, "builds", "CREATE")) |
|
| 86 | 86 |
if err != nil {
|
| 87 | 87 |
t.Errorf("Unexpected error returned from admission handler: %v", err)
|
| 88 | 88 |
} |
| ... | ... |
@@ -92,19 +92,19 @@ func TestAdmissionLifecycle(t *testing.T) {
|
| 92 | 92 |
store.Add(namespaceObj) |
| 93 | 93 |
|
| 94 | 94 |
// verify create operations in the namespace cause an error |
| 95 |
- err = handler.Admit(admission.NewAttributesRecord(build, "Build", namespaceObj.Namespace, "builds", "CREATE")) |
|
| 95 |
+ err = handler.Admit(admission.NewAttributesRecord(build, "Build", build.Namespace, "builds", "CREATE")) |
|
| 96 | 96 |
if err == nil {
|
| 97 | 97 |
t.Errorf("Expected error rejecting creates in a namespace when it is terminating")
|
| 98 | 98 |
} |
| 99 | 99 |
|
| 100 | 100 |
// verify update operations in the namespace can proceed |
| 101 |
- err = handler.Admit(admission.NewAttributesRecord(build, "Build", namespaceObj.Namespace, "builds", "UPDATE")) |
|
| 101 |
+ err = handler.Admit(admission.NewAttributesRecord(build, "Build", build.Namespace, "builds", "UPDATE")) |
|
| 102 | 102 |
if err != nil {
|
| 103 | 103 |
t.Errorf("Unexpected error returned from admission handler: %v", err)
|
| 104 | 104 |
} |
| 105 | 105 |
|
| 106 | 106 |
// verify delete operations in the namespace can proceed |
| 107 |
- err = handler.Admit(admission.NewAttributesRecord(nil, "Build", namespaceObj.Namespace, "builds", "DELETE")) |
|
| 107 |
+ err = handler.Admit(admission.NewAttributesRecord(nil, "Build", build.Namespace, "builds", "DELETE")) |
|
| 108 | 108 |
if err != nil {
|
| 109 | 109 |
t.Errorf("Unexpected error returned from admission handler: %v", err)
|
| 110 | 110 |
} |
| ... | ... |
@@ -95,10 +95,6 @@ func deleteAllContent(client osclient.Interface, namespace string) (err error) {
|
| 95 | 95 |
if err != nil {
|
| 96 | 96 |
return err |
| 97 | 97 |
} |
| 98 |
- err = deleteDeployments(client, namespace) |
|
| 99 |
- if err != nil {
|
|
| 100 |
- return err |
|
| 101 |
- } |
|
| 102 | 98 |
err = deleteImageStreams(client, namespace) |
| 103 | 99 |
if err != nil {
|
| 104 | 100 |
return err |
| ... | ... |
@@ -210,20 +206,6 @@ func deleteImageStreams(client osclient.Interface, ns string) error {
|
| 210 | 210 |
return nil |
| 211 | 211 |
} |
| 212 | 212 |
|
| 213 |
-func deleteDeployments(client osclient.Interface, ns string) error {
|
|
| 214 |
- items, err := client.Deployments(ns).List(labels.Everything(), fields.Everything()) |
|
| 215 |
- if err != nil {
|
|
| 216 |
- return err |
|
| 217 |
- } |
|
| 218 |
- for i := range items.Items {
|
|
| 219 |
- err := client.Deployments(ns).Delete(items.Items[i].Name) |
|
| 220 |
- if err != nil {
|
|
| 221 |
- return err |
|
| 222 |
- } |
|
| 223 |
- } |
|
| 224 |
- return nil |
|
| 225 |
-} |
|
| 226 |
- |
|
| 227 | 213 |
func deleteDeploymentConfigs(client osclient.Interface, ns string) error {
|
| 228 | 214 |
items, err := client.DeploymentConfigs(ns).List(labels.Everything(), fields.Everything()) |
| 229 | 215 |
if err != nil {
|
| ... | ... |
@@ -46,8 +46,9 @@ func TestSyncNamespaceThatIsTerminating(t *testing.T) {
|
| 46 | 46 |
"list-role", |
| 47 | 47 |
"list-routes", |
| 48 | 48 |
"list-builds", |
| 49 |
+ "finalize-namespace", |
|
| 49 | 50 |
"list-deploymentconfig", |
| 50 |
- "list-deployment") |
|
| 51 |
+ ) |
|
| 51 | 52 |
actionSet := util.NewStringSet() |
| 52 | 53 |
for i := range mockKubeClient.Actions {
|
| 53 | 54 |
actionSet.Insert(mockKubeClient.Actions[i].Action) |
| ... | ... |
@@ -21,7 +21,7 @@ import ( |
| 21 | 21 |
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy" |
| 22 | 22 |
) |
| 23 | 23 |
|
| 24 |
-func TestRestrictedAccessForProjectAdmins(t *testing.T) {
|
|
| 24 |
+func TestAuthorizationRestrictedAccessForProjectAdmins(t *testing.T) {
|
|
| 25 | 25 |
_, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 26 | 26 |
if err != nil {
|
| 27 | 27 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -47,12 +47,12 @@ func TestRestrictedAccessForProjectAdmins(t *testing.T) {
|
| 47 | 47 |
t.Fatalf("unexpected error: %v", err)
|
| 48 | 48 |
} |
| 49 | 49 |
|
| 50 |
- _, err = haroldClient.Deployments("hammer-project").List(labels.Everything(), fields.Everything())
|
|
| 50 |
+ _, err = haroldClient.DeploymentConfigs("hammer-project").List(labels.Everything(), fields.Everything())
|
|
| 51 | 51 |
if err != nil {
|
| 52 | 52 |
t.Fatalf("unexpected error: %v", err)
|
| 53 | 53 |
} |
| 54 | 54 |
|
| 55 |
- _, err = markClient.Deployments("hammer-project").List(labels.Everything(), fields.Everything())
|
|
| 55 |
+ _, err = markClient.DeploymentConfigs("hammer-project").List(labels.Everything(), fields.Everything())
|
|
| 56 | 56 |
if (err == nil) || !kapierror.IsForbidden(err) {
|
| 57 | 57 |
t.Fatalf("unexpected error: %v", err)
|
| 58 | 58 |
} |
| ... | ... |
@@ -91,7 +91,7 @@ func waitForProject(t *testing.T, client client.Interface, projectName string, d |
| 91 | 91 |
t.Errorf("expected project %v not found", projectName)
|
| 92 | 92 |
} |
| 93 | 93 |
|
| 94 |
-func TestOnlyResolveRolesForBindingsThatMatter(t *testing.T) {
|
|
| 94 |
+func TestAuthorizationOnlyResolveRolesForBindingsThatMatter(t *testing.T) {
|
|
| 95 | 95 |
_, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 96 | 96 |
if err != nil {
|
| 97 | 97 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -164,7 +164,7 @@ func (test resourceAccessReviewTest) run(t *testing.T) {
|
| 164 | 164 |
} |
| 165 | 165 |
} |
| 166 | 166 |
|
| 167 |
-func TestResourceAccessReview(t *testing.T) {
|
|
| 167 |
+func TestAuthorizationResourceAccessReview(t *testing.T) {
|
|
| 168 | 168 |
_, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 169 | 169 |
if err != nil {
|
| 170 | 170 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -290,7 +290,7 @@ func (test subjectAccessReviewTest) run(t *testing.T) {
|
| 290 | 290 |
} |
| 291 | 291 |
} |
| 292 | 292 |
|
| 293 |
-func TestSubjectAccessReview(t *testing.T) {
|
|
| 293 |
+func TestAuthorizationSubjectAccessReview(t *testing.T) {
|
|
| 294 | 294 |
_, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 295 | 295 |
if err != nil {
|
| 296 | 296 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -21,7 +21,7 @@ import ( |
| 21 | 21 |
testutil "github.com/openshift/origin/test/util" |
| 22 | 22 |
) |
| 23 | 23 |
|
| 24 |
-func TestAuthenticatedUsersAgainstOpenshiftNamespace(t *testing.T) {
|
|
| 24 |
+func TestBootstrapPolicyAuthenticatedUsersAgainstOpenshiftNamespace(t *testing.T) {
|
|
| 25 | 25 |
_, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 26 | 26 |
if err != nil {
|
| 27 | 27 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -61,22 +61,22 @@ func TestAuthenticatedUsersAgainstOpenshiftNamespace(t *testing.T) {
|
| 61 | 61 |
t.Errorf("unexpected error: %v", err)
|
| 62 | 62 |
} |
| 63 | 63 |
|
| 64 |
- if _, err := valerieOpenshiftClient.ImageRepositories(openshiftSharedResourcesNamespace).List(labels.Everything(), fields.Everything()); err != nil {
|
|
| 64 |
+ if _, err := valerieOpenshiftClient.ImageStreams(openshiftSharedResourcesNamespace).List(labels.Everything(), fields.Everything()); err != nil {
|
|
| 65 | 65 |
t.Errorf("unexpected error: %v", err)
|
| 66 | 66 |
} |
| 67 |
- if _, err := valerieOpenshiftClient.ImageRepositories(kapi.NamespaceDefault).List(labels.Everything(), fields.Everything()); err == nil || !kapierror.IsForbidden(err) {
|
|
| 67 |
+ if _, err := valerieOpenshiftClient.ImageStreams(kapi.NamespaceDefault).List(labels.Everything(), fields.Everything()); err == nil || !kapierror.IsForbidden(err) {
|
|
| 68 | 68 |
t.Errorf("unexpected error: %v", err)
|
| 69 | 69 |
} |
| 70 | 70 |
|
| 71 |
- if _, err := valerieOpenshiftClient.ImageRepositoryTags(openshiftSharedResourcesNamespace).Get("name", "tag"); !kapierror.IsNotFound(err) {
|
|
| 71 |
+ if _, err := valerieOpenshiftClient.ImageStreamTags(openshiftSharedResourcesNamespace).Get("name", "tag"); !kapierror.IsNotFound(err) {
|
|
| 72 | 72 |
t.Errorf("unexpected error: %v", err)
|
| 73 | 73 |
} |
| 74 |
- if _, err := valerieOpenshiftClient.ImageRepositoryTags(kapi.NamespaceDefault).Get("name", "tag"); err == nil || !kapierror.IsForbidden(err) {
|
|
| 74 |
+ if _, err := valerieOpenshiftClient.ImageStreamTags(kapi.NamespaceDefault).Get("name", "tag"); err == nil || !kapierror.IsForbidden(err) {
|
|
| 75 | 75 |
t.Errorf("unexpected error: %v", err)
|
| 76 | 76 |
} |
| 77 | 77 |
} |
| 78 | 78 |
|
| 79 |
-func TestOverwritePolicyCommand(t *testing.T) {
|
|
| 79 |
+func TestBootstrapPolicyOverwritePolicyCommand(t *testing.T) {
|
|
| 80 | 80 |
masterConfig, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 81 | 81 |
if err != nil {
|
| 82 | 82 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -114,7 +114,7 @@ func TestOverwritePolicyCommand(t *testing.T) {
|
| 114 | 114 |
} |
| 115 | 115 |
} |
| 116 | 116 |
|
| 117 |
-func TestSelfSubjectAccessReviews(t *testing.T) {
|
|
| 117 |
+func TestBootstrapPolicySelfSubjectAccessReviews(t *testing.T) {
|
|
| 118 | 118 |
_, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 119 | 119 |
if err != nil {
|
| 120 | 120 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -5,6 +5,7 @@ package integration |
| 5 | 5 |
import ( |
| 6 | 6 |
"net/http" |
| 7 | 7 |
"net/http/httptest" |
| 8 |
+ "strings" |
|
| 8 | 9 |
"sync" |
| 9 | 10 |
"testing" |
| 10 | 11 |
|
| ... | ... |
@@ -261,10 +262,13 @@ func NewTestBuildOpenshift(t *testing.T) *testBuildOpenshift {
|
| 261 | 261 |
"imageStreamTags": imageStreamTagStorage, |
| 262 | 262 |
"imageStreamImages": imageStreamImageStorage, |
| 263 | 263 |
} |
| 264 |
+ for k, v := range storage {
|
|
| 265 |
+ storage[strings.ToLower(k)] = v |
|
| 266 |
+ } |
|
| 264 | 267 |
|
| 265 | 268 |
version := &apiserver.APIGroupVersion{
|
| 266 | 269 |
Root: "/osapi", |
| 267 |
- Version: "v1beta1", |
|
| 270 |
+ Version: "v1beta3", |
|
| 268 | 271 |
|
| 269 | 272 |
Storage: storage, |
| 270 | 273 |
Codec: latest.Codec, |
| ... | ... |
@@ -6,6 +6,7 @@ import ( |
| 6 | 6 |
"fmt" |
| 7 | 7 |
"net/http" |
| 8 | 8 |
"net/http/httptest" |
| 9 |
+ "strings" |
|
| 9 | 10 |
"sync" |
| 10 | 11 |
"testing" |
| 11 | 12 |
|
| ... | ... |
@@ -25,7 +26,6 @@ import ( |
| 25 | 25 |
"github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/admission/admit" |
| 26 | 26 |
|
| 27 | 27 |
"github.com/openshift/origin/pkg/api/latest" |
| 28 |
- "github.com/openshift/origin/pkg/api/v1beta1" |
|
| 29 | 28 |
osclient "github.com/openshift/origin/pkg/client" |
| 30 | 29 |
deployapi "github.com/openshift/origin/pkg/deploy/api" |
| 31 | 30 |
deploytest "github.com/openshift/origin/pkg/deploy/api/test" |
| ... | ... |
@@ -33,7 +33,6 @@ import ( |
| 33 | 33 |
deployconfigcontroller "github.com/openshift/origin/pkg/deploy/controller/deploymentconfig" |
| 34 | 34 |
imagechangecontroller "github.com/openshift/origin/pkg/deploy/controller/imagechange" |
| 35 | 35 |
deployconfiggenerator "github.com/openshift/origin/pkg/deploy/generator" |
| 36 |
- deployregistry "github.com/openshift/origin/pkg/deploy/registry/deploy" |
|
| 37 | 36 |
deployconfigregistry "github.com/openshift/origin/pkg/deploy/registry/deployconfig" |
| 38 | 37 |
deployetcd "github.com/openshift/origin/pkg/deploy/registry/etcd" |
| 39 | 38 |
imageapi "github.com/openshift/origin/pkg/image/api" |
| ... | ... |
@@ -425,14 +424,16 @@ func NewTestDeployOpenshift(t *testing.T) *testDeployOpenshift {
|
| 425 | 425 |
"imageStreamImages": imageStreamImageStorage, |
| 426 | 426 |
"imageStreamMappings": imageStreamMappingStorage, |
| 427 | 427 |
"imageStreamTags": imageStreamTagStorage, |
| 428 |
- "deployments": deployregistry.NewREST(deployEtcd), |
|
| 429 | 428 |
"deploymentConfigs": deployconfigregistry.NewREST(deployEtcd), |
| 430 |
- "generateDeploymentConfigs": deployconfiggenerator.NewREST(deployConfigGenerator, v1beta1.Codec), |
|
| 429 |
+ "generateDeploymentConfigs": deployconfiggenerator.NewREST(deployConfigGenerator, latest.Codec), |
|
| 430 |
+ } |
|
| 431 |
+ for k, v := range storage {
|
|
| 432 |
+ storage[strings.ToLower(k)] = v |
|
| 431 | 433 |
} |
| 432 | 434 |
|
| 433 | 435 |
version := &apiserver.APIGroupVersion{
|
| 434 | 436 |
Root: "/osapi", |
| 435 |
- Version: "v1beta1", |
|
| 437 |
+ Version: "v1beta3", |
|
| 436 | 438 |
|
| 437 | 439 |
Storage: storage, |
| 438 | 440 |
Codec: latest.Codec, |
| ... | ... |
@@ -155,12 +155,12 @@ func setup(t *testing.T) *client.Client {
|
| 155 | 155 |
|
| 156 | 156 |
clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig) |
| 157 | 157 |
if err != nil {
|
| 158 |
- t.Errorf("unexpected error: %v", err)
|
|
| 158 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 159 | 159 |
} |
| 160 | 160 |
|
| 161 | 161 |
clusterAdminKubeClient, err := testutil.GetClusterAdminKubeClient(clusterAdminKubeConfig) |
| 162 | 162 |
if err != nil {
|
| 163 |
- t.Errorf("unexpected error: %v", err)
|
|
| 163 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 164 | 164 |
} |
| 165 | 165 |
clusterAdminKubeClient.Namespaces().Create(&kapi.Namespace{
|
| 166 | 166 |
ObjectMeta: kapi.ObjectMeta{Name: testutil.Namespace()},
|
| ... | ... |
@@ -228,8 +228,8 @@ func runTest(t *testing.T, testname string, clusterAdminClient *client.Client, i |
| 228 | 228 |
t.Fatalf("expected watch event type %s, got %s", e, a)
|
| 229 | 229 |
} |
| 230 | 230 |
newBuild = event.Object.(*buildapi.Build) |
| 231 |
- if newBuild.Parameters.Output.DockerImageReference != "registry:8080/openshift/test-image-trigger:outputtag" {
|
|
| 232 |
- t.Fatalf("Expected build with output image %s, got %s", "registry:8080/openshift/test-image-trigger:outputtag", newBuild.Parameters.Output.DockerImageReference)
|
|
| 231 |
+ if newBuild.Parameters.Output.To.Name != "test-image-trigger-repo" || newBuild.Parameters.Output.Tag != "outputtag" {
|
|
| 232 |
+ t.Fatalf("unexpected build output: %#v %#v", newBuild.Parameters.Output.To, newBuild.Parameters.Output)
|
|
| 233 | 233 |
} |
| 234 | 234 |
if newBuild.Labels["testlabel"] != "testvalue" {
|
| 235 | 235 |
t.Fatalf("Expected build with label %s=%s from build config got %s=%s", "testlabel", "testvalue", "testlabel", newBuild.Labels["testlabel"])
|
| ... | ... |
@@ -293,8 +293,8 @@ func runTest(t *testing.T, testname string, clusterAdminClient *client.Client, i |
| 293 | 293 |
t.Fatalf("expected watch event type %s, got %s", e, a)
|
| 294 | 294 |
} |
| 295 | 295 |
newBuild = event.Object.(*buildapi.Build) |
| 296 |
- if newBuild.Parameters.Output.DockerImageReference != "registry:8080/openshift/test-image-trigger:outputtag" {
|
|
| 297 |
- t.Fatalf("Expected build with output image %s, got %s", "registry:8080/openshift/test-image-trigger:outputtag", newBuild.Parameters.Output.DockerImageReference)
|
|
| 296 |
+ if newBuild.Parameters.Output.To.Name != "test-image-trigger-repo" || newBuild.Parameters.Output.Tag != "outputtag" {
|
|
| 297 |
+ t.Fatalf("unexpected build output: %#v %#v", newBuild.Parameters.Output.To, newBuild.Parameters.Output)
|
|
| 298 | 298 |
} |
| 299 | 299 |
if newBuild.Labels["testlabel"] != "testvalue" {
|
| 300 | 300 |
t.Fatalf("Expected build with label %s=%s from build config got %s=%s", "testlabel", "testvalue", "testlabel", newBuild.Labels["testlabel"])
|
| 301 | 301 |
deleted file mode 100644 |
| ... | ... |
@@ -1,280 +0,0 @@ |
| 1 |
-// +build integration,!no-etcd |
|
| 2 |
- |
|
| 3 |
-package integration |
|
| 4 |
- |
|
| 5 |
-import ( |
|
| 6 |
- "reflect" |
|
| 7 |
- "testing" |
|
| 8 |
- |
|
| 9 |
- kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
|
| 10 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/api/errors" |
|
| 11 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/fields" |
|
| 12 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/labels" |
|
| 13 |
- "github.com/GoogleCloudPlatform/kubernetes/pkg/util" |
|
| 14 |
- |
|
| 15 |
- imageapi "github.com/openshift/origin/pkg/image/api" |
|
| 16 |
- testutil "github.com/openshift/origin/test/util" |
|
| 17 |
-) |
|
| 18 |
- |
|
| 19 |
-func init() {
|
|
| 20 |
- testutil.RequireEtcd() |
|
| 21 |
-} |
|
| 22 |
- |
|
| 23 |
-func TestImageRepositoryList(t *testing.T) {
|
|
| 24 |
- _, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
|
| 25 |
- if err != nil {
|
|
| 26 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 27 |
- } |
|
| 28 |
- |
|
| 29 |
- clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig) |
|
| 30 |
- if err != nil {
|
|
| 31 |
- t.Errorf("unexpected error: %v", err)
|
|
| 32 |
- } |
|
| 33 |
- |
|
| 34 |
- err = testutil.CreateNamespace(clusterAdminKubeConfig, testutil.Namespace()) |
|
| 35 |
- if err != nil {
|
|
| 36 |
- t.Errorf("unexpected error: %v", err)
|
|
| 37 |
- } |
|
| 38 |
- |
|
| 39 |
- builds, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).List(labels.Everything(), fields.Everything()) |
|
| 40 |
- if err != nil {
|
|
| 41 |
- t.Fatalf("Unexpected error %v", err)
|
|
| 42 |
- } |
|
| 43 |
- if len(builds.Items) != 0 {
|
|
| 44 |
- t.Errorf("Expected no builds, got %#v", builds.Items)
|
|
| 45 |
- } |
|
| 46 |
-} |
|
| 47 |
- |
|
| 48 |
-func mockImageRepository() *imageapi.ImageRepository {
|
|
| 49 |
- return &imageapi.ImageRepository{ObjectMeta: kapi.ObjectMeta{Name: "test"}}
|
|
| 50 |
-} |
|
| 51 |
- |
|
| 52 |
-func TestImageRepositoryCreate(t *testing.T) {
|
|
| 53 |
- _, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
|
| 54 |
- if err != nil {
|
|
| 55 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 56 |
- } |
|
| 57 |
- |
|
| 58 |
- clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig) |
|
| 59 |
- if err != nil {
|
|
| 60 |
- t.Errorf("unexpected error: %v", err)
|
|
| 61 |
- } |
|
| 62 |
- |
|
| 63 |
- err = testutil.CreateNamespace(clusterAdminKubeConfig, testutil.Namespace()) |
|
| 64 |
- if err != nil {
|
|
| 65 |
- t.Errorf("unexpected error: %v", err)
|
|
| 66 |
- } |
|
| 67 |
- |
|
| 68 |
- repo := mockImageRepository() |
|
| 69 |
- |
|
| 70 |
- if _, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Create(&imageapi.ImageRepository{}); err == nil || !errors.IsInvalid(err) {
|
|
| 71 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 72 |
- } |
|
| 73 |
- |
|
| 74 |
- expected, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Create(repo) |
|
| 75 |
- if err != nil {
|
|
| 76 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 77 |
- } |
|
| 78 |
- if expected.Name == "" {
|
|
| 79 |
- t.Errorf("Unexpected empty image Name %v", expected)
|
|
| 80 |
- } |
|
| 81 |
- |
|
| 82 |
- actual, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Get(repo.Name) |
|
| 83 |
- if err != nil {
|
|
| 84 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 85 |
- } |
|
| 86 |
- if !reflect.DeepEqual(expected, actual) {
|
|
| 87 |
- t.Errorf("unexpected object: %s", util.ObjectDiff(expected, actual))
|
|
| 88 |
- } |
|
| 89 |
- |
|
| 90 |
- repos, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).List(labels.Everything(), fields.Everything()) |
|
| 91 |
- if err != nil {
|
|
| 92 |
- t.Fatalf("Unexpected error %v", err)
|
|
| 93 |
- } |
|
| 94 |
- if len(repos.Items) != 1 {
|
|
| 95 |
- t.Errorf("Expected one image, got %#v", repos.Items)
|
|
| 96 |
- } |
|
| 97 |
-} |
|
| 98 |
- |
|
| 99 |
-func TestImageRepositoryMappingCreate(t *testing.T) {
|
|
| 100 |
- _, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
|
| 101 |
- if err != nil {
|
|
| 102 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 103 |
- } |
|
| 104 |
- |
|
| 105 |
- clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig) |
|
| 106 |
- if err != nil {
|
|
| 107 |
- t.Errorf("unexpected error: %v", err)
|
|
| 108 |
- } |
|
| 109 |
- |
|
| 110 |
- err = testutil.CreateNamespace(clusterAdminKubeConfig, testutil.Namespace()) |
|
| 111 |
- if err != nil {
|
|
| 112 |
- t.Errorf("unexpected error: %v", err)
|
|
| 113 |
- } |
|
| 114 |
- |
|
| 115 |
- repo := mockImageRepository() |
|
| 116 |
- |
|
| 117 |
- expected, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Create(repo) |
|
| 118 |
- if err != nil {
|
|
| 119 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 120 |
- } |
|
| 121 |
- if expected.Name == "" {
|
|
| 122 |
- t.Errorf("Unexpected empty image Name %v", expected)
|
|
| 123 |
- } |
|
| 124 |
- |
|
| 125 |
- // create a mapping to an image that doesn't exist |
|
| 126 |
- mapping := &imageapi.ImageRepositoryMapping{
|
|
| 127 |
- ObjectMeta: kapi.ObjectMeta{Name: repo.Name},
|
|
| 128 |
- Tag: "newer", |
|
| 129 |
- Image: imageapi.Image{
|
|
| 130 |
- ObjectMeta: kapi.ObjectMeta{
|
|
| 131 |
- Name: "image1", |
|
| 132 |
- }, |
|
| 133 |
- DockerImageReference: "some/other/name", |
|
| 134 |
- }, |
|
| 135 |
- } |
|
| 136 |
- if err := clusterAdminClient.ImageRepositoryMappings(testutil.Namespace()).Create(mapping); err != nil {
|
|
| 137 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 138 |
- } |
|
| 139 |
- |
|
| 140 |
- // verify we can tag a second time with the same data, and nothing changes |
|
| 141 |
- if err := clusterAdminClient.ImageRepositoryMappings(testutil.Namespace()).Create(mapping); err != nil {
|
|
| 142 |
- t.Fatalf("unexpected non-error or type: %v", err)
|
|
| 143 |
- } |
|
| 144 |
- |
|
| 145 |
- // create an image directly |
|
| 146 |
- image := &imageapi.Image{
|
|
| 147 |
- ObjectMeta: kapi.ObjectMeta{Name: "image2"},
|
|
| 148 |
- DockerImageMetadata: imageapi.DockerImage{
|
|
| 149 |
- Config: imageapi.DockerConfig{
|
|
| 150 |
- Env: []string{"A=B"},
|
|
| 151 |
- }, |
|
| 152 |
- }, |
|
| 153 |
- } |
|
| 154 |
- if _, err := clusterAdminClient.Images().Create(image); err == nil {
|
|
| 155 |
- t.Error("unexpected non-error")
|
|
| 156 |
- } |
|
| 157 |
- image.DockerImageReference = "some/other/name" // can reuse references across multiple images |
|
| 158 |
- actual, err := clusterAdminClient.Images().Create(image) |
|
| 159 |
- if err != nil {
|
|
| 160 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 161 |
- } |
|
| 162 |
- if actual == nil || actual.Name != image.Name {
|
|
| 163 |
- t.Errorf("unexpected object: %#v", actual)
|
|
| 164 |
- } |
|
| 165 |
- |
|
| 166 |
- // verify that image repository mappings cannot mutate / overwrite the image (images are immutable) |
|
| 167 |
- mapping = &imageapi.ImageRepositoryMapping{
|
|
| 168 |
- ObjectMeta: kapi.ObjectMeta{Name: repo.Name},
|
|
| 169 |
- Tag: "newest", |
|
| 170 |
- Image: *image, |
|
| 171 |
- } |
|
| 172 |
- mapping.Image.DockerImageReference = "different" |
|
| 173 |
- if err := clusterAdminClient.ImageRepositoryMappings(testutil.Namespace()).Create(mapping); err != nil {
|
|
| 174 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 175 |
- } |
|
| 176 |
- image, err = clusterAdminClient.Images().Get(image.Name) |
|
| 177 |
- if err != nil {
|
|
| 178 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 179 |
- } |
|
| 180 |
- if image.DockerImageReference != "some/other/name" {
|
|
| 181 |
- t.Fatalf("image was unexpectedly mutated: %#v", image)
|
|
| 182 |
- } |
|
| 183 |
- |
|
| 184 |
- // ensure the correct tags are set |
|
| 185 |
- updated, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Get(repo.Name) |
|
| 186 |
- if err != nil {
|
|
| 187 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 188 |
- } |
|
| 189 |
- if updated.Tags != nil {
|
|
| 190 |
- t.Errorf("unexpected object: %#v", updated.Tags)
|
|
| 191 |
- } |
|
| 192 |
- |
|
| 193 |
- fromTag, err := clusterAdminClient.ImageRepositoryTags(testutil.Namespace()).Get(repo.Name, "newer") |
|
| 194 |
- if err != nil {
|
|
| 195 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 196 |
- } |
|
| 197 |
- if fromTag.Name != "test:newer" || fromTag.UID == "" || fromTag.DockerImageReference != "some/other/name" {
|
|
| 198 |
- t.Errorf("unexpected object: %#v", fromTag)
|
|
| 199 |
- } |
|
| 200 |
- |
|
| 201 |
- fromTag, err = clusterAdminClient.ImageRepositoryTags(testutil.Namespace()).Get(repo.Name, "newest") |
|
| 202 |
- if err != nil {
|
|
| 203 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 204 |
- } |
|
| 205 |
- if fromTag.Name != "test:newest" || fromTag.UID == "" || fromTag.DockerImageReference != "some/other/name" {
|
|
| 206 |
- t.Errorf("unexpected object: %#v", fromTag)
|
|
| 207 |
- } |
|
| 208 |
- |
|
| 209 |
- // verify that image repository mappings can use the same image for different tags |
|
| 210 |
- image.ResourceVersion = "" |
|
| 211 |
- mapping = &imageapi.ImageRepositoryMapping{
|
|
| 212 |
- ObjectMeta: kapi.ObjectMeta{Name: repo.Name},
|
|
| 213 |
- Tag: "anothertag", |
|
| 214 |
- Image: *image, |
|
| 215 |
- } |
|
| 216 |
- if err := clusterAdminClient.ImageRepositoryMappings(testutil.Namespace()).Create(mapping); err != nil {
|
|
| 217 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 218 |
- } |
|
| 219 |
- // ensure the correct tags are set |
|
| 220 |
- updated, err = clusterAdminClient.ImageRepositories(testutil.Namespace()).Get(repo.Name) |
|
| 221 |
- if err != nil {
|
|
| 222 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 223 |
- } |
|
| 224 |
- if updated.Tags != nil {
|
|
| 225 |
- t.Errorf("unexpected object: %#v", updated.Tags)
|
|
| 226 |
- } |
|
| 227 |
- |
|
| 228 |
- fromTag, err = clusterAdminClient.ImageRepositoryTags(testutil.Namespace()).Get(repo.Name, "newer") |
|
| 229 |
- if err != nil {
|
|
| 230 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 231 |
- } |
|
| 232 |
- if fromTag.Name != "test:newer" || fromTag.UID == "" || fromTag.DockerImageReference != "some/other/name" {
|
|
| 233 |
- t.Errorf("unexpected object: %#v", fromTag)
|
|
| 234 |
- } |
|
| 235 |
- |
|
| 236 |
- fromTag, err = clusterAdminClient.ImageRepositoryTags(testutil.Namespace()).Get(repo.Name, "newest") |
|
| 237 |
- if err != nil {
|
|
| 238 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 239 |
- } |
|
| 240 |
- if fromTag.Name != "test:newest" || fromTag.UID == "" || fromTag.DockerImageReference != "some/other/name" {
|
|
| 241 |
- t.Errorf("unexpected object: %#v", fromTag)
|
|
| 242 |
- } |
|
| 243 |
- fromTag, err = clusterAdminClient.ImageRepositoryTags(testutil.Namespace()).Get(repo.Name, "anothertag") |
|
| 244 |
- if err != nil {
|
|
| 245 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 246 |
- } |
|
| 247 |
- if fromTag.Name != "test:anothertag" || fromTag.UID == "" || fromTag.DockerImageReference != "some/other/name" {
|
|
| 248 |
- t.Errorf("unexpected object: %#v", fromTag)
|
|
| 249 |
- } |
|
| 250 |
- |
|
| 251 |
-} |
|
| 252 |
- |
|
| 253 |
-func TestImageRepositoryDelete(t *testing.T) {
|
|
| 254 |
- _, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
|
| 255 |
- if err != nil {
|
|
| 256 |
- t.Fatalf("unexpected error: %v", err)
|
|
| 257 |
- } |
|
| 258 |
- |
|
| 259 |
- clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig) |
|
| 260 |
- if err != nil {
|
|
| 261 |
- t.Errorf("unexpected error: %v", err)
|
|
| 262 |
- } |
|
| 263 |
- err = testutil.CreateNamespace(clusterAdminKubeConfig, testutil.Namespace()) |
|
| 264 |
- if err != nil {
|
|
| 265 |
- t.Errorf("unexpected error: %v", err)
|
|
| 266 |
- } |
|
| 267 |
- |
|
| 268 |
- repo := mockImageRepository() |
|
| 269 |
- |
|
| 270 |
- if err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Delete(repo.Name); err == nil || !errors.IsNotFound(err) {
|
|
| 271 |
- t.Fatalf("Unxpected non-error or type: %v", err)
|
|
| 272 |
- } |
|
| 273 |
- actual, err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Create(repo) |
|
| 274 |
- if err != nil {
|
|
| 275 |
- t.Fatalf("Unexpected error: %v", err)
|
|
| 276 |
- } |
|
| 277 |
- if err := clusterAdminClient.ImageRepositories(testutil.Namespace()).Delete(actual.Name); err != nil {
|
|
| 278 |
- t.Fatalf("Unxpected error: %v", err)
|
|
| 279 |
- } |
|
| 280 |
-} |
| ... | ... |
@@ -10,7 +10,7 @@ import ( |
| 10 | 10 |
kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
| 11 | 11 |
klatest "github.com/GoogleCloudPlatform/kubernetes/pkg/api/latest" |
| 12 | 12 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/api/rest" |
| 13 |
- kv1beta1 "github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta1" |
|
| 13 |
+ kv1beta3 "github.com/GoogleCloudPlatform/kubernetes/pkg/api/v1beta3" |
|
| 14 | 14 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/apiserver" |
| 15 | 15 |
kclient "github.com/GoogleCloudPlatform/kubernetes/pkg/client" |
| 16 | 16 |
"github.com/GoogleCloudPlatform/kubernetes/pkg/master" |
| ... | ... |
@@ -19,7 +19,6 @@ import ( |
| 19 | 19 |
"github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/admission/admit" |
| 20 | 20 |
|
| 21 | 21 |
"github.com/openshift/origin/pkg/api/latest" |
| 22 |
- "github.com/openshift/origin/pkg/api/v1beta1" |
|
| 23 | 22 |
buildapi "github.com/openshift/origin/pkg/build/api" |
| 24 | 23 |
"github.com/openshift/origin/pkg/client" |
| 25 | 24 |
projectapi "github.com/openshift/origin/pkg/project/api" |
| ... | ... |
@@ -54,10 +53,10 @@ func TestProjectIsNamespace(t *testing.T) {
|
| 54 | 54 |
|
| 55 | 55 |
version := &apiserver.APIGroupVersion{
|
| 56 | 56 |
Root: "/api", |
| 57 |
- Version: "v1beta1", |
|
| 57 |
+ Version: "v1beta3", |
|
| 58 | 58 |
|
| 59 | 59 |
Storage: kubeStorage, |
| 60 |
- Codec: kv1beta1.Codec, |
|
| 60 |
+ Codec: kv1beta3.Codec, |
|
| 61 | 61 |
|
| 62 | 62 |
Mapper: klatest.RESTMapper, |
| 63 | 63 |
|
| ... | ... |
@@ -73,7 +72,7 @@ func TestProjectIsNamespace(t *testing.T) {
|
| 73 | 73 |
t.Fatalf("unable to install REST: %v", err)
|
| 74 | 74 |
} |
| 75 | 75 |
|
| 76 |
- kubeClient, err := kclient.New(&kclient.Config{Host: server.URL, Version: "v1beta1"})
|
|
| 76 |
+ kubeClient, err := kclient.New(&kclient.Config{Host: server.URL, Version: "v1beta3"})
|
|
| 77 | 77 |
if err != nil {
|
| 78 | 78 |
t.Fatalf("Unexpected error: %v", err)
|
| 79 | 79 |
} |
| ... | ... |
@@ -85,10 +84,10 @@ func TestProjectIsNamespace(t *testing.T) {
|
| 85 | 85 |
} |
| 86 | 86 |
osVersion := &apiserver.APIGroupVersion{
|
| 87 | 87 |
Root: "/osapi", |
| 88 |
- Version: "v1beta1", |
|
| 88 |
+ Version: "v1beta3", |
|
| 89 | 89 |
|
| 90 | 90 |
Storage: originStorage, |
| 91 |
- Codec: v1beta1.Codec, |
|
| 91 |
+ Codec: latest.Codec, |
|
| 92 | 92 |
|
| 93 | 93 |
Mapper: latest.RESTMapper, |
| 94 | 94 |
|
| ... | ... |
@@ -29,11 +29,11 @@ func TestUnprivilegedNewProject(t *testing.T) {
|
| 29 | 29 |
|
| 30 | 30 |
clusterAdminClientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig) |
| 31 | 31 |
if err != nil {
|
| 32 |
- t.Errorf("unexpected error: %v", err)
|
|
| 32 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 33 | 33 |
} |
| 34 | 34 |
clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig) |
| 35 | 35 |
if err != nil {
|
| 36 |
- t.Errorf("unexpected error: %v", err)
|
|
| 36 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 37 | 37 |
} |
| 38 | 38 |
|
| 39 | 39 |
valerieClientConfig := *clusterAdminClientConfig |
| ... | ... |
@@ -59,10 +59,10 @@ func TestUnprivilegedNewProject(t *testing.T) {
|
| 59 | 59 |
// confirm that we have access to request the project |
| 60 | 60 |
allowed, err := valerieOpenshiftClient.ProjectRequests().List(labels.Everything(), fields.Everything()) |
| 61 | 61 |
if err != nil {
|
| 62 |
- t.Errorf("unexpected error: %v", err)
|
|
| 62 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 63 | 63 |
} |
| 64 | 64 |
if allowed.Status != kapi.StatusSuccess {
|
| 65 |
- t.Errorf("expected %v, got %v", kapi.StatusSuccess, allowed.Status)
|
|
| 65 |
+ t.Fatalf("expected %v, got %v", kapi.StatusSuccess, allowed.Status)
|
|
| 66 | 66 |
} |
| 67 | 67 |
|
| 68 | 68 |
requestProject := osc.NewProjectOptions{
|
| ... | ... |
@@ -75,30 +75,30 @@ func TestUnprivilegedNewProject(t *testing.T) {
|
| 75 | 75 |
} |
| 76 | 76 |
|
| 77 | 77 |
if err := requestProject.Run(); err != nil {
|
| 78 |
- t.Errorf("unexpected error: %v", err)
|
|
| 78 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 79 | 79 |
} |
| 80 | 80 |
|
| 81 | 81 |
waitForProject(t, valerieOpenshiftClient, "new-project", 5*time.Second, 10) |
| 82 | 82 |
|
| 83 | 83 |
// request the same one again. This should fail during the bulk creation step |
| 84 | 84 |
if err := requestProject.Run(); err == nil || !strings.Contains(err.Error(), "already exists") {
|
| 85 |
- t.Errorf("expected an already exists error, but got %v", err)
|
|
| 85 |
+ t.Fatalf("expected an already exists error, but got %v", err)
|
|
| 86 | 86 |
} |
| 87 | 87 |
|
| 88 | 88 |
tokens := strings.Split(masterConfig.ProjectRequestConfig.ProjectRequestTemplate, "/") |
| 89 | 89 |
if err := clusterAdminClient.Templates(tokens[0]).Delete(tokens[1]); err != nil {
|
| 90 |
- t.Errorf("unexpected error: %v", err)
|
|
| 90 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 91 | 91 |
} |
| 92 | 92 |
|
| 93 | 93 |
requestProject.ProjectName = "different" |
| 94 | 94 |
// This should fail during the template retrieve |
| 95 | 95 |
if err := requestProject.Run(); !kapierrors.IsNotFound(err) {
|
| 96 |
- t.Errorf("expected a not found error, but got %v", err)
|
|
| 96 |
+ t.Fatalf("expected a not found error, but got %v", err)
|
|
| 97 | 97 |
} |
| 98 | 98 |
|
| 99 | 99 |
} |
| 100 | 100 |
|
| 101 |
-func TestDeniedUnprivilegedNewProject(t *testing.T) {
|
|
| 101 |
+func TestUnprivilegedNewProjectDenied(t *testing.T) {
|
|
| 102 | 102 |
_, clusterAdminKubeConfig, err := testutil.StartTestMaster() |
| 103 | 103 |
if err != nil {
|
| 104 | 104 |
t.Fatalf("unexpected error: %v", err)
|
| ... | ... |
@@ -106,20 +106,20 @@ func TestDeniedUnprivilegedNewProject(t *testing.T) {
|
| 106 | 106 |
|
| 107 | 107 |
clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig) |
| 108 | 108 |
if err != nil {
|
| 109 |
- t.Errorf("unexpected error: %v", err)
|
|
| 109 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 110 | 110 |
} |
| 111 | 111 |
role, err := clusterAdminClient.ClusterRoles().Get(bootstrappolicy.SelfProvisionerRoleName) |
| 112 | 112 |
if err != nil {
|
| 113 |
- t.Errorf("unexpected error: %v", err)
|
|
| 113 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 114 | 114 |
} |
| 115 | 115 |
role.Rules = []authorizationapi.PolicyRule{}
|
| 116 | 116 |
if _, err := clusterAdminClient.ClusterRoles().Update(role); err != nil {
|
| 117 |
- t.Errorf("unexpected error: %v", err)
|
|
| 117 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 118 | 118 |
} |
| 119 | 119 |
|
| 120 | 120 |
clusterAdminClientConfig, err := testutil.GetClusterAdminClientConfig(clusterAdminKubeConfig) |
| 121 | 121 |
if err != nil {
|
| 122 |
- t.Errorf("unexpected error: %v", err)
|
|
| 122 |
+ t.Fatalf("unexpected error: %v", err)
|
|
| 123 | 123 |
} |
| 124 | 124 |
|
| 125 | 125 |
valerieClientConfig := *clusterAdminClientConfig |
| ... | ... |
@@ -145,11 +145,11 @@ func TestDeniedUnprivilegedNewProject(t *testing.T) {
|
| 145 | 145 |
// confirm that we have access to request the project |
| 146 | 146 |
allowed, err := valerieOpenshiftClient.ProjectRequests().List(labels.Everything(), fields.Everything()) |
| 147 | 147 |
if err == nil {
|
| 148 |
- t.Errorf("expected error: %v", err)
|
|
| 148 |
+ t.Fatalf("expected error: %v", err)
|
|
| 149 | 149 |
} |
| 150 | 150 |
expectedError := `ProjectRequest "" is forbidden: You may not request a new project via this API.` |
| 151 | 151 |
if (err != nil) && (err.Error() != expectedError) {
|
| 152 |
- t.Errorf("expected %v, got %v", expectedError, allowed.Status)
|
|
| 152 |
+ t.Fatalf("expected %v, got %v", expectedError, allowed.Status)
|
|
| 153 | 153 |
} |
| 154 | 154 |
|
| 155 | 155 |
} |
| ... | ... |
@@ -218,7 +218,7 @@ func TestWebhookGithubPing(t *testing.T) {
|
| 218 | 218 |
|
| 219 | 219 |
for _, s := range []string{
|
| 220 | 220 |
openshift.whPrefix + "pushbuild/secret101/github?namespace=" + testutil.Namespace(), |
| 221 |
- "/osapi/v1beta1/buildConfigs/pushbuild/webhooks/secret101/github?namespace=" + testutil.Namespace(), |
|
| 221 |
+ "/osapi/v1beta3/namespaces/" + testutil.Namespace() + "/buildconfigs/pushbuild/webhooks/secret101/github", |
|
| 222 | 222 |
} {
|
| 223 | 223 |
// trigger build event sending push notification |
| 224 | 224 |
postFile(&http.Client{}, "ping", "pingevent.json", openshift.server.URL+s, http.StatusOK, t)
|
| ... | ... |
@@ -6,6 +6,7 @@ import ( |
| 6 | 6 |
"net/http/httptest" |
| 7 | 7 |
"os" |
| 8 | 8 |
"path/filepath" |
| 9 |
+ "strings" |
|
| 9 | 10 |
"testing" |
| 10 | 11 |
|
| 11 | 12 |
kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" |
| ... | ... |
@@ -17,7 +18,8 @@ import ( |
| 17 | 17 |
|
| 18 | 18 |
"github.com/openshift/origin/pkg/api/latest" |
| 19 | 19 |
osclient "github.com/openshift/origin/pkg/client" |
| 20 |
- config "github.com/openshift/origin/pkg/config/api" |
|
| 20 |
+ //config "github.com/openshift/origin/pkg/config/api" |
|
| 21 |
+ templateapi "github.com/openshift/origin/pkg/template/api" |
|
| 21 | 22 |
templateregistry "github.com/openshift/origin/pkg/template/registry" |
| 22 | 23 |
) |
| 23 | 24 |
|
| ... | ... |
@@ -52,18 +54,24 @@ func TestTemplateTransformationFromConfig(t *testing.T) {
|
| 52 | 52 |
server := httptest.NewServer(osMux) |
| 53 | 53 |
defer server.Close() |
| 54 | 54 |
|
| 55 |
- osClient := osclient.NewOrDie(&kclient.Config{Host: server.URL})
|
|
| 55 |
+ osClient := osclient.NewOrDie(&kclient.Config{Host: server.URL, Version: latest.Version})
|
|
| 56 | 56 |
|
| 57 | 57 |
storage := map[string]rest.Storage{
|
| 58 | 58 |
"templateConfigs": templateregistry.NewREST(true), |
| 59 | 59 |
"processedTemplates": templateregistry.NewREST(false), |
| 60 | 60 |
} |
| 61 |
+ if !kapi.PreV1Beta3(latest.Version) {
|
|
| 62 |
+ for k, v := range storage {
|
|
| 63 |
+ delete(storage, k) |
|
| 64 |
+ storage[strings.ToLower(k)] = v |
|
| 65 |
+ } |
|
| 66 |
+ } |
|
| 61 | 67 |
|
| 62 | 68 |
interfaces, _ := latest.InterfacesFor(latest.Version) |
| 63 | 69 |
handlerContainer := master.NewHandlerContainer(osMux) |
| 64 | 70 |
version := apiserver.APIGroupVersion{
|
| 65 | 71 |
Root: "/osapi", |
| 66 |
- Version: "v1beta1", |
|
| 72 |
+ Version: latest.Version, |
|
| 67 | 73 |
|
| 68 | 74 |
Mapper: latest.RESTMapper, |
| 69 | 75 |
|
| ... | ... |
@@ -82,14 +90,18 @@ func TestTemplateTransformationFromConfig(t *testing.T) {
|
| 82 | 82 |
t.Fatalf("unexpected error: %v", err)
|
| 83 | 83 |
} |
| 84 | 84 |
|
| 85 |
- walkJSONFiles("fixtures", func(name, path string, _ []byte) {
|
|
| 86 |
- config := &config.Config{}
|
|
| 87 |
- err := osClient.RESTClient.Post().Resource("templateConfigs").Body(path).Do().Into(config)
|
|
| 85 |
+ walkJSONFiles("fixtures", func(name, path string, data []byte) {
|
|
| 86 |
+ template, err := interfaces.Codec.Decode(data) |
|
| 87 |
+ if err != nil {
|
|
| 88 |
+ t.Errorf("%q: unexpected error: %v", path, err)
|
|
| 89 |
+ return |
|
| 90 |
+ } |
|
| 91 |
+ config, err := osClient.TemplateConfigs("default").Create(template.(*templateapi.Template))
|
|
| 88 | 92 |
if err != nil {
|
| 89 | 93 |
t.Errorf("%q: unexpected error: %v", path, err)
|
| 90 | 94 |
return |
| 91 | 95 |
} |
| 92 |
- if len(config.Items) == 0 {
|
|
| 96 |
+ if len(config.Objects) == 0 {
|
|
| 93 | 97 |
t.Errorf("%q: no items in config object", path)
|
| 94 | 98 |
return |
| 95 | 99 |
} |
| ... | ... |
@@ -33,7 +33,7 @@ func CreateSampleImageStream(namespace string) *imageapi.ImageStream {
|
| 33 | 33 |
// namespace |
| 34 | 34 |
func DeleteSampleImageStream(stream *imageapi.ImageStream, namespace string) {
|
| 35 | 35 |
client, _ := GetClusterAdminClient(KubeConfigPath()) |
| 36 |
- client.ImageRepositories(namespace).Delete(stream.Name) |
|
| 36 |
+ client.ImageStreams(namespace).Delete(stream.Name) |
|
| 37 | 37 |
} |
| 38 | 38 |
|
| 39 | 39 |
// GetBuildFixture reads the Build JSON and returns and Build object |