fix: filtering requires case-by-case handling

See https://github.com/moby/moby/issues/32985.
This commit is contained in:
2022-03-30 16:11:52 +02:00
parent e8e41850b5
commit 323f4467c8
6 changed files with 35 additions and 10 deletions

View File

@ -64,8 +64,13 @@ func (a App) StackName() string {
return stackName
}
// Filters retrieves exact app filters for querying the container runtime.
func (a App) Filters() (filters.Args, error) {
// Filters retrieves exact app filters for querying the container runtime. Due
// to upstream issues, filtering works different depending on what you're
// querying. So, for example, secrets don't work with regex! The caller needs
// to implement their own validation that the right secrets are matched. In
// order to handle these cases, we provide the `appendServiceNames` /
// `exactMatch` modifiers.
func (a App) Filters(appendServiceNames, exactMatch bool) (filters.Args, error) {
filters := filters.NewArgs()
composeFiles, err := GetAppComposeFiles(a.Recipe, a.Env)
@ -80,7 +85,22 @@ func (a App) Filters() (filters.Args, error) {
}
for _, service := range compose.Services {
filter := fmt.Sprintf("^%s_%s", a.StackName(), service.Name)
var filter string
if appendServiceNames {
if exactMatch {
filter = fmt.Sprintf("^%s_%s", a.StackName(), service.Name)
} else {
filter = fmt.Sprintf("%s_%s", a.StackName(), service.Name)
}
} else {
if exactMatch {
filter = fmt.Sprintf("^%s", a.StackName())
} else {
filter = fmt.Sprintf("%s", a.StackName())
}
}
filters.Add("name", filter)
}