diff --git a/go.mod b/go.mod index e7de9ec7..216dbc9a 100644 --- a/go.mod +++ b/go.mod @@ -30,7 +30,7 @@ require ( github.com/opencontainers/runc v1.0.0-rc9 // indirect github.com/opencontainers/runtime-spec v1.0.2 github.com/openfaas/faas v0.0.0-20201205125747-9bbb25e3c7c4 - github.com/openfaas/faas-provider v0.17.1 + github.com/openfaas/faas-provider v0.17.2 github.com/pkg/errors v0.9.1 github.com/prometheus/procfs v0.2.0 // indirect github.com/sethvargo/go-password v0.1.3 diff --git a/go.sum b/go.sum index e55395ad..38ed6b35 100644 --- a/go.sum +++ b/go.sum @@ -185,6 +185,8 @@ github.com/openfaas/faas-provider v0.17.0 h1:4rT8CosKhI5xaAMqbyihEgR6KefO/ViJdF0 github.com/openfaas/faas-provider v0.17.0/go.mod h1:fq1JL0mX4rNvVVvRLaLRJ3H6o667sHuyP5p/7SZEe98= github.com/openfaas/faas-provider v0.17.1 h1:P5xTLN+/08PLLh4auIlO/PaUD/J3BUTmaC3en8N5zbs= github.com/openfaas/faas-provider v0.17.1/go.mod h1:fq1JL0mX4rNvVVvRLaLRJ3H6o667sHuyP5p/7SZEe98= +github.com/openfaas/faas-provider v0.17.2 h1:jZ+Z83A/tyJoI1AnpyLN3o0B4K0UEsz1YJ3erASMu+s= +github.com/openfaas/faas-provider v0.17.2/go.mod h1:fq1JL0mX4rNvVVvRLaLRJ3H6o667sHuyP5p/7SZEe98= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/pkg/provider/handlers/deploy.go b/pkg/provider/handlers/deploy.go index 6d5452c6..25b92d25 100644 --- a/pkg/provider/handlers/deploy.go +++ b/pkg/provider/handlers/deploy.go @@ -29,8 +29,8 @@ import ( const annotationLabelPrefix = "com.openfaas.annotations." +// MakeDeployHandler returns a handler to deploy a function func MakeDeployHandler(client *containerd.Client, cni gocni.CNI, secretMountPath string, alwaysPull bool) func(w http.ResponseWriter, r *http.Request) { - return func(w http.ResponseWriter, r *http.Request) { if r.Body == nil { diff --git a/pkg/provider/handlers/functions.go b/pkg/provider/handlers/functions.go index 064e619a..7c0d9998 100644 --- a/pkg/provider/handlers/functions.go +++ b/pkg/provider/handlers/functions.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "strings" + "time" "github.com/opencontainers/runtime-spec/specs-go" @@ -27,6 +28,7 @@ type Function struct { secrets []string envVars map[string]string envProcess string + createdAt time.Time } // ListFunctions returns a map of all functions with running tasks on namespace @@ -81,6 +83,11 @@ func GetFunction(client *containerd.Client, name string) (Function, error) { return Function{}, fmt.Errorf("unable to load function spec for reading secrets: %s, error %s", name, err) } + info, err := c.Info(ctx) + if err != nil { + return Function{}, fmt.Errorf("can't load info for: %s, error %s", name, err) + } + envVars, envProcess := readEnvFromProcessEnv(spec.Process.Env) secrets := readSecretsFromMounts(spec.Mounts) @@ -92,6 +99,7 @@ func GetFunction(client *containerd.Client, name string) (Function, error) { fn.secrets = secrets fn.envVars = envVars fn.envProcess = envProcess + fn.createdAt = info.CreatedAt replicas := 0 task, err := c.Task(ctx, nil) diff --git a/pkg/provider/handlers/read.go b/pkg/provider/handlers/read.go index ec37d226..7b76d5d0 100644 --- a/pkg/provider/handlers/read.go +++ b/pkg/provider/handlers/read.go @@ -34,6 +34,7 @@ func MakeReadHandler(client *containerd.Client) func(w http.ResponseWriter, r *h Secrets: fn.secrets, EnvVars: fn.envVars, EnvProcess: fn.envProcess, + CreatedAt: fn.createdAt, }) } @@ -41,6 +42,5 @@ func MakeReadHandler(client *containerd.Client) func(w http.ResponseWriter, r *h w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) w.Write(body) - } } diff --git a/pkg/provider/handlers/replicas.go b/pkg/provider/handlers/replicas.go index 88a52d2d..721f6b30 100644 --- a/pkg/provider/handlers/replicas.go +++ b/pkg/provider/handlers/replicas.go @@ -26,6 +26,7 @@ func MakeReplicaReaderHandler(client *containerd.Client) func(w http.ResponseWri Secrets: f.secrets, EnvVars: f.envVars, EnvProcess: f.envProcess, + CreatedAt: f.createdAt, } functionBytes, _ := json.Marshal(found) diff --git a/vendor/github.com/openfaas/faas-provider/types/model.go b/vendor/github.com/openfaas/faas-provider/types/model.go index 5a09e3d7..bb06ae63 100644 --- a/vendor/github.com/openfaas/faas-provider/types/model.go +++ b/vendor/github.com/openfaas/faas-provider/types/model.go @@ -1,5 +1,7 @@ package types +import "time" + // FunctionDeployment represents a request to create or update a Function. type FunctionDeployment struct { @@ -100,7 +102,9 @@ type FunctionStatus struct { // mount-point. ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty"` - // ** Status fields *8 + // ================ + // Fields for status + // ================ // InvocationCount count of invocations InvocationCount float64 `json:"invocationCount,omitempty"` @@ -111,4 +115,8 @@ type FunctionStatus struct { // AvailableReplicas is the count of replicas ready to receive // invocations as reported by the faas-provider AvailableReplicas uint64 `json:"availableReplicas,omitempty"` + + // CreatedAt is the time read back from the faas backend's + // data store for when the function or its container was created. + CreatedAt time.Time `json:"created_at,omitempty"` } diff --git a/vendor/modules.txt b/vendor/modules.txt index bb6f17a5..1f4b9869 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -195,7 +195,7 @@ github.com/opencontainers/runtime-spec/specs-go # github.com/openfaas/faas v0.0.0-20201205125747-9bbb25e3c7c4 ## explicit github.com/openfaas/faas/gateway/requests -# github.com/openfaas/faas-provider v0.17.1 +# github.com/openfaas/faas-provider v0.17.2 ## explicit github.com/openfaas/faas-provider github.com/openfaas/faas-provider/auth