Skip to content

Commit 873ca0e

Browse files
committed
Fix #718 - Namespaces that start with a number cause errors
1 parent 3e22bcf commit 873ca0e

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

pkg/appmanager/appManager_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4200,6 +4200,30 @@ var _ = Describe("AppManager Tests", func() {
42004200
Expect(err).ToNot(BeNil())
42014201
})
42024202

4203+
// This test case validates namespace name update funcitonality
4204+
// where, a name starting with a 'number' is prefixed with 'cfgmap_<name>'
4205+
It("Check namespace name starting with number", func() {
4206+
NumNSname := "4-default-rack"
4207+
cfgMapSelector, err := labels.Parse(DefaultConfigMapLabel)
4208+
Expect(err).To(BeNil())
4209+
err = mockMgr.appMgr.AddNamespace(NumNSname, cfgMapSelector, 0)
4210+
Expect(err).To(BeNil())
4211+
4212+
cfgFoo := test.NewConfigMap("foomap", "1", NumNSname,
4213+
map[string]string{
4214+
"schema": schemaUrl,
4215+
"data": configmapFoo,
4216+
})
4217+
4218+
r := mockMgr.addConfigMap(cfgFoo)
4219+
Expect(r).To(BeTrue(), "Config map should be processed.")
4220+
resources := mockMgr.resources()
4221+
rs, ok := resources.Get(serviceKey{"foo", 80, NumNSname},
4222+
formatConfigMapVSName(cfgFoo))
4223+
Expect(ok).To(BeTrue(), "Config map should be accessible.")
4224+
Expect(rs.Virtual.Name).To(Equal("cfgmap_" + NumNSname + "_foomap"))
4225+
})
4226+
42034227
It("watches namespace labels", func() {
42044228
nsLabel := "watching"
42054229
err := mockMgr.startLabelMode(nsLabel)

pkg/appmanager/resourceConfig.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,16 @@ func (v *Virtual) SetVirtualAddress(bindAddr string, port int32) {
222222
}
223223

224224
// format the virtual server name for a ConfigMap
225+
226+
// To handle VS name which start with Number,
227+
// we are prefixing with 'cfgmap_' to avoid errors with bigip.
225228
func formatConfigMapVSName(cm *v1.ConfigMap) string {
226-
return fmt.Sprintf("%s_%s", cm.ObjectMeta.Namespace, cm.ObjectMeta.Name)
229+
VSprefix := "cfgmap"
230+
if _, err := strconv.Atoi(cm.ObjectMeta.Namespace[0:1]); err == nil {
231+
return fmt.Sprintf("%s_%s_%s", VSprefix, cm.ObjectMeta.Namespace, cm.ObjectMeta.Name)
232+
} else {
233+
return fmt.Sprintf("%s_%s", cm.ObjectMeta.Namespace, cm.ObjectMeta.Name)
234+
}
227235
}
228236

229237
// format the pool name for a ConfigMap

0 commit comments

Comments
 (0)