mirror of
https://github.com/pomerium/pomerium.git
synced 2025-06-09 14:22:40 +02:00
core/envoy: clean up temporary directory on start (#4914)
This commit is contained in:
parent
4301da3648
commit
2a9e76eb7c
2 changed files with 64 additions and 3 deletions
|
@ -12,12 +12,15 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/rs/zerolog/log"
|
||||||
|
|
||||||
"github.com/pomerium/pomerium/pkg/envoy/files"
|
"github.com/pomerium/pomerium/pkg/envoy/files"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ownerRX = os.FileMode(0o500)
|
ownerRX = os.FileMode(0o500)
|
||||||
maxExpandedEnvoySize = 1 << 30
|
maxExpandedEnvoySize = 1 << 30
|
||||||
|
envoyPrefix = "pomerium-envoy"
|
||||||
)
|
)
|
||||||
|
|
||||||
type hashReader struct {
|
type hashReader struct {
|
||||||
|
@ -53,17 +56,20 @@ func Extract() (fullEnvoyPath string, err error) {
|
||||||
return setupFullEnvoyPath, setupErr
|
return setupFullEnvoyPath, setupErr
|
||||||
}
|
}
|
||||||
|
|
||||||
dir, err := os.MkdirTemp(os.TempDir(), "pomerium-envoy")
|
tmpDir := os.TempDir()
|
||||||
|
|
||||||
|
cleanTempDir(tmpDir)
|
||||||
|
dir, err := os.MkdirTemp(tmpDir, envoyPrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setupErr = fmt.Errorf("envoy: failed making temporary working dir: %w", err)
|
setupErr = fmt.Errorf("envoy: failed making temporary working dir: %w", err)
|
||||||
return
|
return setupFullEnvoyPath, setupErr
|
||||||
}
|
}
|
||||||
setupFullEnvoyPath = filepath.Join(dir, "envoy")
|
setupFullEnvoyPath = filepath.Join(dir, "envoy")
|
||||||
|
|
||||||
err = extract(setupFullEnvoyPath)
|
err = extract(setupFullEnvoyPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setupErr = fmt.Errorf("envoy: failed to extract embedded envoy binary: %w", err)
|
setupErr = fmt.Errorf("envoy: failed to extract embedded envoy binary: %w", err)
|
||||||
return
|
return setupFullEnvoyPath, setupErr
|
||||||
}
|
}
|
||||||
|
|
||||||
setupDone = true
|
setupDone = true
|
||||||
|
@ -97,3 +103,27 @@ func extract(dstName string) (err error) {
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cleanTempDir(tmpDir string) {
|
||||||
|
d, err := os.Open(tmpDir)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn().Msg("envoy: failed to open temp directory for clean up")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer d.Close()
|
||||||
|
|
||||||
|
fs, err := d.Readdir(-1)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn().Msg("envoy: failed to read files in temporary directory")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, f := range fs {
|
||||||
|
if f.IsDir() && strings.HasPrefix(f.Name(), envoyPrefix) {
|
||||||
|
err := os.RemoveAll(filepath.Join(tmpDir, f.Name()))
|
||||||
|
if err != nil {
|
||||||
|
log.Warn().Err(err).Msg("envoy: failed to delete previous extracted envoy")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
31
pkg/envoy/extract_test.go
Normal file
31
pkg/envoy/extract_test.go
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package envoy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/fs"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestClean(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
tmpDir := t.TempDir()
|
||||||
|
d1, err := os.MkdirTemp(tmpDir, envoyPrefix)
|
||||||
|
require.NoError(t, err)
|
||||||
|
d2, err := os.MkdirTemp(tmpDir, envoyPrefix)
|
||||||
|
require.NoError(t, err)
|
||||||
|
d3, err := os.MkdirTemp(tmpDir, envoyPrefix)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
cleanTempDir(tmpDir)
|
||||||
|
|
||||||
|
_, err = os.Stat(d1)
|
||||||
|
assert.ErrorIs(t, err, fs.ErrNotExist)
|
||||||
|
_, err = os.Stat(d2)
|
||||||
|
assert.ErrorIs(t, err, fs.ErrNotExist)
|
||||||
|
_, err = os.Stat(d3)
|
||||||
|
assert.ErrorIs(t, err, fs.ErrNotExist)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue