Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit abd6c9b

Browse files
authored
Merge pull request #454 from ulyssessouza/remove-namespace-from-metadata
Remove the notion of namespace
2 parents 5b2a129 + 6688c3b commit abd6c9b

File tree

27 files changed

+196
-143
lines changed

27 files changed

+196
-143
lines changed

cmd/docker-app/bundle.go

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ import (
2121
)
2222

2323
type bundleOptions struct {
24-
invocationImageName string
25-
namespace string
26-
out string
24+
out string
2725
}
2826

2927
func bundleCmd(dockerCli command.Cli) *cobra.Command {
@@ -37,14 +35,12 @@ func bundleCmd(dockerCli command.Cli) *cobra.Command {
3735
},
3836
}
3937

40-
cmd.Flags().StringVarP(&opts.invocationImageName, "invocation-image", "i", "", "specify the name of invocation image to build")
41-
cmd.Flags().StringVar(&opts.namespace, "namespace", "", "namespace to use (default: namespace in metadata)")
4238
cmd.Flags().StringVarP(&opts.out, "out", "o", "bundle.json", "path to the output bundle.json (- for stdout)")
4339
return cmd
4440
}
4541

4642
func runBundle(dockerCli command.Cli, appName string, opts bundleOptions) error {
47-
bundle, err := makeBundle(dockerCli, appName, opts.namespace, opts.invocationImageName)
43+
bundle, err := makeBundle(dockerCli, appName)
4844
if err != nil {
4945
return err
5046
}
@@ -63,22 +59,22 @@ func runBundle(dockerCli command.Cli, appName string, opts bundleOptions) error
6359
return ioutil.WriteFile(opts.out, bundleBytes, 0644)
6460
}
6561

66-
func makeBundle(dockerCli command.Cli, appName, namespace, invocationImageName string) (*bundle.Bundle, error) {
62+
func makeBundle(dockerCli command.Cli, appName string) (*bundle.Bundle, error) {
6763
app, err := packager.Extract(appName)
6864
if err != nil {
6965
return nil, err
7066
}
7167
defer app.Cleanup()
72-
return makeBundleFromApp(dockerCli, app, namespace, invocationImageName)
68+
return makeBundleFromApp(dockerCli, app)
7369
}
7470

75-
func makeBundleFromApp(dockerCli command.Cli, app *types.App, namespace, invocationImageName string) (*bundle.Bundle, error) {
71+
func makeBundleFromApp(dockerCli command.Cli, app *types.App) (*bundle.Bundle, error) {
7672
meta := app.Metadata()
77-
invocationImageName, err := makeImageName(meta, namespace, invocationImageName, "-invoc")
73+
invocationImageName, err := makeImageName(meta)
7874
if err != nil {
7975
return nil, err
8076
}
81-
if _, err := makeImageName(app.Metadata(), namespace, "", ""); err != nil {
77+
if _, err := makeImageName(meta); err != nil {
8278
return nil, err
8379
}
8480

@@ -102,18 +98,10 @@ func makeBundleFromApp(dockerCli command.Cli, app *types.App, namespace, invocat
10298
return packager.ToCNAB(app, invocationImageName)
10399
}
104100

105-
func makeImageName(meta metadata.AppMetadata, namespace, name, suffix string) (string, error) {
106-
if name == "" {
107-
name = fmt.Sprintf("%s:%s%s", meta.Name, meta.Version, suffix)
108-
}
109-
if namespace == "" {
110-
namespace = meta.Namespace
111-
}
112-
if namespace != "" {
113-
name = fmt.Sprintf("%s/%s", namespace, name)
114-
}
101+
func makeImageName(meta metadata.AppMetadata) (string, error) {
102+
name := fmt.Sprintf("%s:%s-invoc", meta.Name, meta.Version)
115103
if _, err := reference.ParseNormalizedNamed(name); err != nil {
116-
return "", errors.Wrapf(err, "image name %q is invalid, please check namespace, name and version fields", name)
104+
return "", errors.Wrapf(err, "image name %q is invalid, please check name and version fields", name)
117105
}
118106
return name, nil
119107
}

cmd/docker-app/bundle_test.go

Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -9,46 +9,16 @@ import (
99

1010
func TestMakeInvocationImage(t *testing.T) {
1111
testcases := []struct {
12-
name string
13-
imageName string
14-
namespace string
15-
meta metadata.AppMetadata
16-
expected string
17-
err string
12+
name string
13+
meta metadata.AppMetadata
14+
expected string
15+
err string
1816
}{
19-
{
20-
name: "specify-image-name",
21-
imageName: "my-invocation-image",
22-
expected: "my-invocation-image",
23-
},
24-
{
25-
name: "specify-image-name-and-namespace",
26-
imageName: "my-invocation-image",
27-
namespace: "my-namespace",
28-
expected: "my-namespace/my-invocation-image",
29-
},
3017
{
3118
name: "simple-metadata",
3219
meta: metadata.AppMetadata{Name: "name", Version: "version"},
3320
expected: "name:version-invoc",
3421
},
35-
{
36-
name: "simple-metadata-with-overridden-namespace",
37-
namespace: "my-namespace",
38-
meta: metadata.AppMetadata{Name: "name", Version: "version"},
39-
expected: "my-namespace/name:version-invoc",
40-
},
41-
{
42-
name: "metadata-with-namespace",
43-
meta: metadata.AppMetadata{Name: "name", Version: "version", Namespace: "namespace"},
44-
expected: "namespace/name:version-invoc",
45-
},
46-
{
47-
name: "metadata-with-namespace-and-overridden-namespace",
48-
namespace: "my-namespace",
49-
meta: metadata.AppMetadata{Name: "name", Version: "version", Namespace: "namespace"},
50-
expected: "my-namespace/name:version-invoc",
51-
},
5222
{
5323
name: "simple-metadata",
5424
meta: metadata.AppMetadata{Name: "WrongName&%*", Version: "version"},
@@ -57,10 +27,10 @@ func TestMakeInvocationImage(t *testing.T) {
5727
}
5828
for _, c := range testcases {
5929
t.Run(c.name, func(t *testing.T) {
60-
actual, err := makeImageName(c.meta, c.namespace, c.imageName, "-invoc")
30+
actual, err := makeImageName(c.meta)
6131
if c.err != "" {
6232
assert.ErrorContains(t, err, c.err)
63-
assert.Equal(t, actual, "")
33+
assert.Equal(t, actual, "", "On "+c.meta.Name)
6434
} else {
6535
assert.NilError(t, err)
6636
assert.Equal(t, actual, c.expected)

cmd/docker-app/cnab.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,16 +117,16 @@ func getAppNameKind(name string) (string, nameKind) {
117117
return name, nameKindFile
118118
}
119119

120-
func extractAndLoadAppBasedBundle(dockerCli command.Cli, namespace, name string) (*bundle.Bundle, error) {
120+
func extractAndLoadAppBasedBundle(dockerCli command.Cli, name string) (*bundle.Bundle, error) {
121121
app, err := packager.Extract(name)
122122
if err != nil {
123123
return nil, err
124124
}
125125
defer app.Cleanup()
126-
return makeBundleFromApp(dockerCli, app, namespace, "")
126+
return makeBundleFromApp(dockerCli, app)
127127
}
128128

129-
func resolveBundle(dockerCli command.Cli, namespace, name string) (*bundle.Bundle, error) {
129+
func resolveBundle(dockerCli command.Cli, name string) (*bundle.Bundle, error) {
130130
// resolution logic:
131131
// - if there is a docker-app package in working directory, or an http:// / https:// prefix, use packager.Extract result
132132
// - the name has a .json or .cnab extension and refers to an existing file or web resource: load the bundle
@@ -136,11 +136,11 @@ func resolveBundle(dockerCli command.Cli, namespace, name string) (*bundle.Bundl
136136
switch kind {
137137
case nameKindFile:
138138
if strings.HasSuffix(name, internal.AppExtension) {
139-
return extractAndLoadAppBasedBundle(dockerCli, namespace, name)
139+
return extractAndLoadAppBasedBundle(dockerCli, name)
140140
}
141141
return loader.NewDetectingLoader().Load(name)
142142
case nameKindDir, nameKindEmpty:
143-
return extractAndLoadAppBasedBundle(dockerCli, namespace, name)
143+
return extractAndLoadAppBasedBundle(dockerCli, name)
144144
case nameKindReference:
145145
// TODO: pull the bundle
146146
fmt.Fprintln(dockerCli.Err(), "WARNING: pulling a CNAB is not yet supported")

cmd/docker-app/inspect.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func inspectCmd(dockerCli command.Cli) *cobra.Command {
2828
if err != nil {
2929
return err
3030
}
31-
bundle, err := resolveBundle(dockerCli, "", appname)
31+
bundle, err := resolveBundle(dockerCli, appname)
3232
if err != nil {
3333
return err
3434
}

cmd/docker-app/install.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ type installOptions struct {
1717
parametersOptions
1818
credentialOptions
1919
orchestrator string
20-
namespace string
2120
kubeNamespace string
2221
stackName string
2322
insecure bool
@@ -58,7 +57,6 @@ func installCmd(dockerCli command.Cli) *cobra.Command {
5857
opts.parametersOptions.addFlags(cmd.Flags())
5958
opts.credentialOptions.addFlags(cmd.Flags())
6059
cmd.Flags().StringVarP(&opts.orchestrator, "orchestrator", "o", "", "Orchestrator to install on (swarm, kubernetes)")
61-
cmd.Flags().StringVar(&opts.namespace, "namespace", "", "Namespace to use (default: namespace in metadata)")
6260
cmd.Flags().StringVar(&opts.kubeNamespace, "kubernetes-namespace", "default", "Kubernetes namespace to install into")
6361
cmd.Flags().StringVar(&opts.stackName, "name", "", "Installation name (defaults to application name)")
6462
cmd.Flags().BoolVar(&opts.insecure, "insecure", false, "Use insecure registry, without SSL")
@@ -74,7 +72,7 @@ func runInstall(dockerCli command.Cli, appname string, opts installOptions) erro
7472
}
7573
targetContext := getTargetContext(opts.targetContext, dockerCli.CurrentContext())
7674

77-
bndl, err := resolveBundle(dockerCli, opts.namespace, appname)
75+
bndl, err := resolveBundle(dockerCli, appname)
7876
if err != nil {
7977
return err
8078
}

cmd/docker-app/push.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@ import (
99
)
1010

1111
type pushOptions struct {
12-
namespace string
13-
tag string
14-
repo string
12+
tag string
1513
}
1614

1715
func pushCmd() *cobra.Command {
@@ -26,15 +24,13 @@ func pushCmd() *cobra.Command {
2624
return err
2725
}
2826
defer app.Cleanup()
29-
dgst, err := packager.Push(app, opts.namespace, opts.tag, opts.repo)
27+
dgst, err := packager.Push(app, opts.tag)
3028
if err == nil {
3129
fmt.Println(dgst)
3230
}
3331
return err
3432
},
3533
}
36-
cmd.Flags().StringVar(&opts.namespace, "namespace", "", "Namespace to use (default: namespace in metadata)")
37-
cmd.Flags().StringVarP(&opts.tag, "tag", "t", "", "Tag to use (default: version in metadata)")
38-
cmd.Flags().StringVar(&opts.repo, "repo", "", "Name of the remote repository (default: <app-name>.dockerapp)")
34+
cmd.Flags().StringVarP(&opts.tag, "tag", "t", "", "Target registry reference (default is : from metadata)")
3935
return cmd
4036
}

cmd/docker-app/upgrade.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ type upgradeOptions struct {
1515
parametersOptions
1616
credentialOptions
1717
bundleOrDockerApp string
18-
namespace string
1918
insecure bool
2019
}
2120

@@ -32,7 +31,6 @@ func upgradeCmd(dockerCli command.Cli) *cobra.Command {
3231
opts.parametersOptions.addFlags(cmd.Flags())
3332
opts.credentialOptions.addFlags(cmd.Flags())
3433
cmd.Flags().StringVar(&opts.bundleOrDockerApp, "bundle", "", "Override with new bundle or Docker App")
35-
cmd.Flags().StringVar(&opts.namespace, "namespace", "", "Namespace to use (default: namespace in metadata)")
3634
cmd.Flags().BoolVar(&opts.insecure, "insecure", false, "Use insecure registry, without SSL")
3735

3836
return cmd
@@ -49,7 +47,7 @@ func runUpgrade(dockerCli command.Cli, installationName string, opts upgradeOpti
4947
}
5048

5149
if opts.bundleOrDockerApp != "" {
52-
b, err := resolveBundle(dockerCli, opts.namespace, opts.bundleOrDockerApp)
50+
b, err := resolveBundle(dockerCli, opts.bundleOrDockerApp)
5351
if err != nil {
5452
return err
5553
}

e2e/commands_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,6 @@ version: 0.1.0
8686
name: app-test
8787
# A short description of the application
8888
description: my cool app
89-
# Namespace to use when pushing to a registry. This is typically your Hub username.
90-
#namespace: myhubusername
9189
# List of application maintainers with name and email for each
9290
maintainers:
9391
- name: bob
@@ -243,10 +241,10 @@ func TestBundle(t *testing.T) {
243241

244242
// List the images on the build context daemon and checks the invocation image is there
245243
cmd.Command = []string{dockerCli, "image", "ls", "--format", "{{.Repository}}:{{.Tag}}"}
246-
icmd.RunCmd(cmd).Assert(t, icmd.Expected{ExitCode: 0, Out: "acmecorp/simple:1.1.0-beta1-invoc"})
244+
icmd.RunCmd(cmd).Assert(t, icmd.Expected{ExitCode: 0, Out: "simple:1.1.0-beta1-invoc"})
247245

248246
// Copy all the files from the invocation image and check them
249-
cmd.Command = []string{dockerCli, "create", "--name", "invocation", "acmecorp/simple:1.1.0-beta1-invoc"}
247+
cmd.Command = []string{dockerCli, "create", "--name", "invocation", "simple:1.1.0-beta1-invoc"}
250248
id := strings.TrimSpace(icmd.RunCmd(cmd).Assert(t, icmd.Success).Stdout())
251249
cmd.Command = []string{dockerCli, "cp", "invocation:/cnab/app/simple.dockerapp", tmpDir.Join("simple.dockerapp")}
252250
icmd.RunCmd(cmd).Assert(t, icmd.Success)

e2e/testdata/init-singlefile.dockerapp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ version: 0.1.0
55
name: tac
66
# A short description of the application
77
description: my cool app
8-
# Namespace to use when pushing to a registry. This is typically your Hub username.
9-
#namespace: myhubusername
108
# List of application maintainers with name and email for each
119
maintainers:
1210
- name: bob
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
version: 0.1.0
22
name: myapp
33
description: ""
4-
namespace: "alice"
54
maintainers:
65
- name: bearclaw
76

0 commit comments

Comments
 (0)