mirror of
https://github.com/containers/podman.git
synced 2025-08-06 19:44:14 +08:00
Compile regex on demand not in init
Every podman command is paying the price for this compile even when they don't use the Regex, this will speed up start of podman by a little. [NO NEW TESTS NEEDED] Existing tests should catch issues. Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
@ -10,6 +10,7 @@ import (
|
||||
"os"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -22,8 +23,9 @@ const (
|
||||
|
||||
var (
|
||||
whiteSpaces = " \t"
|
||||
alphaRegexp = regexp.MustCompile(`[a-zA-Z]`)
|
||||
domainRegexp = regexp.MustCompile(`^(:?(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]))(:?\.(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])))*)\.?\s*$`)
|
||||
alphaRegexp *regexp.Regexp
|
||||
domainRegexp *regexp.Regexp
|
||||
onceRegex sync.Once
|
||||
)
|
||||
|
||||
// validateExtraHost validates that the specified string is a valid extrahost and returns it.
|
||||
@ -52,6 +54,10 @@ func validateIPAddress(val string) (string, error) {
|
||||
}
|
||||
|
||||
func ValidateDomain(val string) (string, error) {
|
||||
onceRegex.Do(func() {
|
||||
alphaRegexp = regexp.MustCompile(`[a-zA-Z]`)
|
||||
domainRegexp = regexp.MustCompile(`^(:?(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]))(:?\.(:?[a-zA-Z0-9]|(:?[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])))*)\.?\s*$`)
|
||||
})
|
||||
if alphaRegexp.FindString(val) == "" {
|
||||
return "", fmt.Errorf("%s is not a valid domain", val)
|
||||
}
|
||||
|
@ -3,7 +3,6 @@ package define
|
||||
import (
|
||||
"bufio"
|
||||
"io"
|
||||
"regexp"
|
||||
|
||||
"github.com/containers/common/libnetwork/types"
|
||||
)
|
||||
@ -20,8 +19,6 @@ var (
|
||||
NameRegex = types.NameRegex
|
||||
// RegexError is thrown in presence of an invalid container/pod name.
|
||||
RegexError = types.RegexError
|
||||
// UmaskRegex is a regular expression to validate Umask.
|
||||
UmaskRegex = regexp.MustCompile(`^[0-7]{1,4}$`)
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -6,7 +6,9 @@ import (
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
|
||||
"github.com/containers/buildah/pkg/parse"
|
||||
@ -28,6 +30,11 @@ import (
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
var (
|
||||
umaskRegex *regexp.Regexp
|
||||
onceRegex sync.Once
|
||||
)
|
||||
|
||||
// WithStorageConfig uses the given configuration to set up container storage.
|
||||
// If this is not specified, the system default configuration will be used
|
||||
// instead.
|
||||
@ -1790,11 +1797,14 @@ func WithTimezone(path string) CtrCreateOption {
|
||||
|
||||
// WithUmask sets the umask in the container
|
||||
func WithUmask(umask string) CtrCreateOption {
|
||||
onceRegex.Do(func() {
|
||||
umaskRegex = regexp.MustCompile(`^[0-7]{1,4}$`)
|
||||
})
|
||||
return func(ctr *Container) error {
|
||||
if ctr.valid {
|
||||
return define.ErrCtrFinalized
|
||||
}
|
||||
if !define.UmaskRegex.MatchString(umask) {
|
||||
if !umaskRegex.MatchString(umask) {
|
||||
return fmt.Errorf("invalid umask string %s: %w", umask, define.ErrInvalidArg)
|
||||
}
|
||||
ctr.config.Umask = umask
|
||||
|
@ -17,6 +17,7 @@ import (
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/image/v5/types"
|
||||
@ -37,11 +38,16 @@ type devino struct {
|
||||
}
|
||||
|
||||
var (
|
||||
iidRegex = regexp.MustCompile(`^[0-9a-f]{12}`)
|
||||
iidRegex *regexp.Regexp
|
||||
onceRegex sync.Once
|
||||
)
|
||||
|
||||
// Build creates an image using a containerfile reference
|
||||
func Build(ctx context.Context, containerFiles []string, options entities.BuildOptions) (*entities.BuildReport, error) {
|
||||
onceRegex.Do(func() {
|
||||
iidRegex = regexp.MustCompile(`^[0-9a-f]{12}`)
|
||||
})
|
||||
|
||||
if options.CommonBuildOpts == nil {
|
||||
options.CommonBuildOpts = new(define.CommonBuildOptions)
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/containers/podman/v4/pkg/systemd/parser"
|
||||
)
|
||||
@ -29,8 +30,6 @@ const (
|
||||
XNetworkGroup = "X-Network"
|
||||
)
|
||||
|
||||
var validPortRange = regexp.MustCompile(`\d+(-\d+)?(/udp|/tcp)?$`)
|
||||
|
||||
// All the supported quadlet keys
|
||||
const (
|
||||
KeyContainerName = "ContainerName"
|
||||
@ -75,8 +74,12 @@ const (
|
||||
KeyConfigMap = "ConfigMap"
|
||||
)
|
||||
|
||||
// Supported keys in "Container" group
|
||||
var supportedContainerKeys = map[string]bool{
|
||||
var (
|
||||
onceRegex sync.Once
|
||||
validPortRange *regexp.Regexp
|
||||
|
||||
// Supported keys in "Container" group
|
||||
supportedContainerKeys = map[string]bool{
|
||||
KeyContainerName: true,
|
||||
KeyImage: true,
|
||||
KeyEnvironment: true,
|
||||
@ -106,17 +109,17 @@ var supportedContainerKeys = map[string]bool{
|
||||
KeySeccompProfile: true,
|
||||
KeyAddDevice: true,
|
||||
KeyNetwork: true,
|
||||
}
|
||||
}
|
||||
|
||||
// Supported keys in "Volume" group
|
||||
var supportedVolumeKeys = map[string]bool{
|
||||
// Supported keys in "Volume" group
|
||||
supportedVolumeKeys = map[string]bool{
|
||||
KeyUser: true,
|
||||
KeyGroup: true,
|
||||
KeyLabel: true,
|
||||
}
|
||||
}
|
||||
|
||||
// Supported keys in "Volume" group
|
||||
var supportedNetworkKeys = map[string]bool{
|
||||
// Supported keys in "Volume" group
|
||||
supportedNetworkKeys = map[string]bool{
|
||||
KeyNetworkDisableDNS: true,
|
||||
KeyNetworkDriver: true,
|
||||
KeyNetworkGateway: true,
|
||||
@ -127,10 +130,10 @@ var supportedNetworkKeys = map[string]bool{
|
||||
KeyNetworkOptions: true,
|
||||
KeyNetworkSubnet: true,
|
||||
KeyLabel: true,
|
||||
}
|
||||
}
|
||||
|
||||
// Supported keys in "Kube" group
|
||||
var supportedKubeKeys = map[string]bool{
|
||||
// Supported keys in "Kube" group
|
||||
supportedKubeKeys = map[string]bool{
|
||||
KeyYaml: true,
|
||||
KeyRemapUID: true,
|
||||
KeyRemapGID: true,
|
||||
@ -138,7 +141,8 @@ var supportedKubeKeys = map[string]bool{
|
||||
KeyRemapUIDSize: true,
|
||||
KeyNetwork: true,
|
||||
KeyConfigMap: true,
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
func replaceExtension(name string, extension string, extraPrefix string, extraSuffix string) string {
|
||||
baseName := name
|
||||
@ -152,6 +156,9 @@ func replaceExtension(name string, extension string, extraPrefix string, extraSu
|
||||
}
|
||||
|
||||
func isPortRange(port string) bool {
|
||||
onceRegex.Do(func() {
|
||||
validPortRange = regexp.MustCompile(`\d+(-\d+)?(/udp|/tcp)?$`)
|
||||
})
|
||||
return validPortRange.MatchString(port)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user