Skip to content

Commit 2eb4d6e

Browse files
authored
🐛 Extension addon (ref) regex fix. (#783)
Missed a validation in #782. Signed-off-by: Jeff Ortel <jortel@redhat.com>
1 parent 6627a2d commit 2eb4d6e

File tree

2 files changed

+32
-28
lines changed

2 files changed

+32
-28
lines changed

task/manager.go

+31-27
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ func (m *Manager) selectExtensions(task *Task, addon *crd.Addon) (err error) {
560560
matched := false
561561
selector := NewSelector(m.DB, task)
562562
for _, extension := range m.cluster.Extensions() {
563-
matched, err = m.matchAddon(extension, addon)
563+
matched, err = task.matchAddon(extension, addon)
564564
if err != nil {
565565
return
566566
}
@@ -579,30 +579,6 @@ func (m *Manager) selectExtensions(task *Task, addon *crd.Addon) (err error) {
579579
return
580580
}
581581

582-
// matchAddon - returns true when the extension's `addon`
583-
// (ref) matches the addon name.
584-
// The `ref` is matched as a REGEX when it contains
585-
// characters other than: [0-9A-Za-z_].
586-
func (m *Manager) matchAddon(extension *crd.Extension, addon *crd.Addon) (matched bool, err error) {
587-
ref := strings.TrimSpace(extension.Spec.Addon)
588-
p := IsRegex
589-
if p.MatchString(ref) {
590-
p, err = regexp.Compile(ref)
591-
if err != nil {
592-
err = &ExtAddonNotValid{
593-
Extension: extension.Name,
594-
Reason: err.Error(),
595-
}
596-
return
597-
}
598-
matched = p.MatchString(addon.Name)
599-
} else {
600-
601-
matched = addon.Name == ref
602-
}
603-
return
604-
}
605-
606582
// postpone Postpones a task as needed based on rules.
607583
// postpone order:
608584
// - priority (lower)
@@ -1361,7 +1337,12 @@ func (r *Task) Run(cluster *Cluster) (started bool, err error) {
13611337
return
13621338
}
13631339
for _, extension := range extensions {
1364-
if r.Addon != extension.Spec.Addon {
1340+
matched := false
1341+
matched, err = r.matchAddon(&extension, addon)
1342+
if err != nil {
1343+
return
1344+
}
1345+
if !matched {
13651346
err = &ExtensionNotValid{
13661347
Name: extension.Name,
13671348
Addon: addon.Name,
@@ -1620,7 +1601,7 @@ func (r *Task) podFailed(pod *core.Pod, client k8s.Client) {
16201601
}
16211602
}
16221603

1623-
// getExtensions by name.
1604+
// getExtensions returns defined extensions.
16241605
func (r *Task) getExtensions(client k8s.Client) (extensions []crd.Extension, err error) {
16251606
for _, name := range r.Extensions {
16261607
extension := crd.Extension{}
@@ -1646,6 +1627,29 @@ func (r *Task) getExtensions(client k8s.Client) (extensions []crd.Extension, err
16461627
return
16471628
}
16481629

1630+
// matchAddon - returns true when the extension's `addon`
1631+
// (ref) matches the addon name.
1632+
// The `ref` is matched as a REGEX when it contains
1633+
// characters other than: [0-9A-Za-z_].
1634+
func (r *Task) matchAddon(extension *crd.Extension, addon *crd.Addon) (matched bool, err error) {
1635+
ref := strings.TrimSpace(extension.Spec.Addon)
1636+
p := IsRegex
1637+
if p.MatchString(ref) {
1638+
p, err = regexp.Compile(ref)
1639+
if err != nil {
1640+
err = &ExtAddonNotValid{
1641+
Extension: extension.Name,
1642+
Reason: err.Error(),
1643+
}
1644+
return
1645+
}
1646+
matched = p.MatchString(addon.Name)
1647+
} else {
1648+
matched = addon.Name == ref
1649+
}
1650+
return
1651+
}
1652+
16491653
// pod build the pod.
16501654
func (r *Task) pod(
16511655
addon *crd.Addon,

task/task_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ func TestPriorityGraph(t *testing.T) {
138138

139139
func TestAddonRegex(t *testing.T) {
140140
g := gomega.NewGomegaWithT(t)
141-
m := Manager{}
141+
m := Task{}
142142
addonA := &crd.Addon{}
143143
addonA.Name = "A"
144144
addonB := &crd.Addon{}

0 commit comments

Comments
 (0)