mirror of
https://github.com/openfaas/faasd.git
synced 2025-06-25 08:13:24 +00:00
Set working directory for faasd / faas-containerd
* faasd writes secrets to wd + /secrets/* * faas-containerd is passed a custom path to use to load the secrets Both services gain their work /run/ folders for temporary and working files. Tested on RPi3 e2e with faasd install. Signed-off-by: Alex Ellis (OpenFaaS Ltd) <alexellis2@gmail.com>
This commit is contained in:
committed by
Alex Ellis
parent
3068d03279
commit
d135999d3b
@ -2,6 +2,7 @@ package cmd
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
@ -17,14 +18,28 @@ var installCmd = &cobra.Command{
|
|||||||
RunE: runInstall,
|
RunE: runInstall,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const faasdwd = "/run/faasd"
|
||||||
|
const faasContainerdwd = "/run/faas-containerd"
|
||||||
|
|
||||||
func runInstall(_ *cobra.Command, _ []string) error {
|
func runInstall(_ *cobra.Command, _ []string) error {
|
||||||
|
|
||||||
if basicAuthErr := makeBasicAuthFiles(); basicAuthErr != nil {
|
if err := ensureWorkingDir(path.Join(faasdwd, "secrets")); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := ensureWorkingDir(faasContainerdwd); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if basicAuthErr := makeBasicAuthFiles(path.Join(faasdwd, "secrets")); basicAuthErr != nil {
|
||||||
return errors.Wrap(basicAuthErr, "cannot create basic-auth-* files")
|
return errors.Wrap(basicAuthErr, "cannot create basic-auth-* files")
|
||||||
}
|
}
|
||||||
|
|
||||||
wd := "/run/faasd"
|
if err := cp("prometheus.yml", faasdwd); err != nil {
|
||||||
if err := ensureWorkingDir(wd); err != nil {
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := cp("resolv.conf", faasdwd); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,12 +58,15 @@ func runInstall(_ *cobra.Command, _ []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = systemd.InstallUnit("faas-containerd", wd)
|
err = systemd.InstallUnit("faas-containerd", map[string]string{
|
||||||
|
"Cwd": faasContainerdwd,
|
||||||
|
"SecretMountPath": path.Join(faasdwd, "secrets")})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = systemd.InstallUnit("faasd", wd)
|
err = systemd.InstallUnit("faasd", map[string]string{"Cwd": faasdwd})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -91,7 +109,7 @@ func binExists(folder, name string) error {
|
|||||||
|
|
||||||
func ensureWorkingDir(folder string) error {
|
func ensureWorkingDir(folder string) error {
|
||||||
if _, err := os.Stat(folder); err != nil {
|
if _, err := os.Stat(folder); err != nil {
|
||||||
err = os.MkdirAll("/run/faasd", 0600)
|
err = os.MkdirAll(folder, 0600)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -99,3 +117,22 @@ func ensureWorkingDir(folder string) error {
|
|||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func cp(source, destFolder string) error {
|
||||||
|
file, err := os.Open(source)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
out, err := os.Create(path.Join(destFolder, source))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer out.Close()
|
||||||
|
|
||||||
|
_, err = io.Copy(out, file)
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
18
cmd/up.go
18
cmd/up.go
@ -49,7 +49,7 @@ func runUp(_ *cobra.Command, _ []string) error {
|
|||||||
clientSuffix = "-arm64"
|
clientSuffix = "-arm64"
|
||||||
}
|
}
|
||||||
|
|
||||||
if basicAuthErr := makeBasicAuthFiles(); basicAuthErr != nil {
|
if basicAuthErr := makeBasicAuthFiles(path.Join(path.Join(faasdwd, "secrets"))); basicAuthErr != nil {
|
||||||
return errors.Wrap(basicAuthErr, "cannot create basic-auth-* files")
|
return errors.Wrap(basicAuthErr, "cannot create basic-auth-* files")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,8 +132,8 @@ func runUp(_ *cobra.Command, _ []string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeBasicAuthFiles() error {
|
func makeBasicAuthFiles(wd string) error {
|
||||||
wd, _ := os.Getwd()
|
|
||||||
pwdFile := wd + "/basic-auth-password"
|
pwdFile := wd + "/basic-auth-password"
|
||||||
authPassword, err := password.Generate(63, 10, 0, false, true)
|
authPassword, err := password.Generate(63, 10, 0, false, true)
|
||||||
|
|
||||||
@ -183,11 +183,11 @@ func makeServiceDefinitions(archSuffix string) []pkg.Service {
|
|||||||
},
|
},
|
||||||
Mounts: []pkg.Mount{
|
Mounts: []pkg.Mount{
|
||||||
pkg.Mount{
|
pkg.Mount{
|
||||||
Src: path.Join(wd, "basic-auth-password"),
|
Src: path.Join(path.Join(wd, "secrets"), "basic-auth-password"),
|
||||||
Dest: path.Join(secretMountDir, "basic-auth-password"),
|
Dest: path.Join(secretMountDir, "basic-auth-password"),
|
||||||
},
|
},
|
||||||
pkg.Mount{
|
pkg.Mount{
|
||||||
Src: path.Join(wd, "basic-auth-user"),
|
Src: path.Join(path.Join(wd, "secrets"), "basic-auth-user"),
|
||||||
Dest: path.Join(secretMountDir, "basic-auth-user"),
|
Dest: path.Join(secretMountDir, "basic-auth-user"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -231,11 +231,11 @@ func makeServiceDefinitions(archSuffix string) []pkg.Service {
|
|||||||
Image: "docker.io/openfaas/gateway:0.18.8" + archSuffix,
|
Image: "docker.io/openfaas/gateway:0.18.8" + archSuffix,
|
||||||
Mounts: []pkg.Mount{
|
Mounts: []pkg.Mount{
|
||||||
pkg.Mount{
|
pkg.Mount{
|
||||||
Src: path.Join(wd, "basic-auth-password"),
|
Src: path.Join(path.Join(wd, "secrets"), "basic-auth-password"),
|
||||||
Dest: path.Join(secretMountDir, "basic-auth-password"),
|
Dest: path.Join(secretMountDir, "basic-auth-password"),
|
||||||
},
|
},
|
||||||
pkg.Mount{
|
pkg.Mount{
|
||||||
Src: path.Join(wd, "basic-auth-user"),
|
Src: path.Join(path.Join(wd, "secrets"), "basic-auth-user"),
|
||||||
Dest: path.Join(secretMountDir, "basic-auth-user"),
|
Dest: path.Join(secretMountDir, "basic-auth-user"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -257,11 +257,11 @@ func makeServiceDefinitions(archSuffix string) []pkg.Service {
|
|||||||
Image: "docker.io/openfaas/queue-worker:0.9.0",
|
Image: "docker.io/openfaas/queue-worker:0.9.0",
|
||||||
Mounts: []pkg.Mount{
|
Mounts: []pkg.Mount{
|
||||||
pkg.Mount{
|
pkg.Mount{
|
||||||
Src: path.Join(wd, "basic-auth-password"),
|
Src: path.Join(path.Join(wd, "secrets"), "basic-auth-password"),
|
||||||
Dest: path.Join(secretMountDir, "basic-auth-password"),
|
Dest: path.Join(secretMountDir, "basic-auth-password"),
|
||||||
},
|
},
|
||||||
pkg.Mount{
|
pkg.Mount{
|
||||||
Src: path.Join(wd, "basic-auth-user"),
|
Src: path.Join(path.Join(wd, "secrets"), "basic-auth-user"),
|
||||||
Dest: path.Join(secretMountDir, "basic-auth-user"),
|
Dest: path.Join(secretMountDir, "basic-auth-user"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -3,7 +3,7 @@ Description=faasd-containerd
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
MemoryLimit=500M
|
MemoryLimit=500M
|
||||||
# Environment="basic_auth=true" # Not tested properly in PR #13, causes runtime error
|
Environment="secret_mount_path={{.SecretMountPath}}"
|
||||||
ExecStart=/usr/local/bin/faas-containerd
|
ExecStart=/usr/local/bin/faas-containerd
|
||||||
Restart=on-failure
|
Restart=on-failure
|
||||||
RestartSec=10s
|
RestartSec=10s
|
||||||
|
@ -64,10 +64,9 @@ func DaemonReload() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func InstallUnit(name, folder string) error {
|
func InstallUnit(name string, tokens map[string]string) error {
|
||||||
if len(folder) == 0 {
|
if len(tokens["Cwd"]) == 0 {
|
||||||
wd, _ := os.Getwd()
|
return fmt.Errorf("key Cwd expected in tokens parameter")
|
||||||
folder = wd
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tmplName := "./hack/" + name + ".service"
|
tmplName := "./hack/" + name + ".service"
|
||||||
@ -78,13 +77,8 @@ func InstallUnit(name, folder string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tpl bytes.Buffer
|
var tpl bytes.Buffer
|
||||||
userData := struct {
|
|
||||||
Cwd string
|
|
||||||
}{
|
|
||||||
Cwd: folder,
|
|
||||||
}
|
|
||||||
|
|
||||||
err = tmpl.Execute(&tpl, userData)
|
err = tmpl.Execute(&tpl, tokens)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user