summaryrefslogtreecommitdiff
path: root/cmd/podman/system/service.go
diff options
context:
space:
mode:
authorJhon Honce <jhonce@redhat.com>2021-10-05 10:43:55 -0700
committerJhon Honce <jhonce@redhat.com>2021-10-08 13:57:20 -0700
commit8d3aec9d08bddf486dcb30e7113777b9d0cc27bd (patch)
treee47d47a39f50f7cadaaf0c8bd81f5ed689081b1a /cmd/podman/system/service.go
parentbd4d9a09520b2329b1cf3dd8cdf8194b8bdeab67 (diff)
downloadpodman-8d3aec9d08bddf486dcb30e7113777b9d0cc27bd.tar.gz
podman-8d3aec9d08bddf486dcb30e7113777b9d0cc27bd.tar.bz2
podman-8d3aec9d08bddf486dcb30e7113777b9d0cc27bd.zip
Enable /debug/pprof API service endpoints
* Refactor sidecar HTTP service for /debug/pprof endpoints to use a TCP address given via new podman system service --pprof-address flag * Allow same URL parsing in "system service" as bindings/connection.go * Refactor NewServerWithSettings() to use entities.ServiceOptions in place of deleted server.Options * Updated godoc for impacted functions and types * Fixed API service Shutdown() to do an orderly shutdown when terminated and running with --time=0 Signed-off-by: Jhon Honce <jhonce@redhat.com>
Diffstat (limited to 'cmd/podman/system/service.go')
-rw-r--r--cmd/podman/system/service.go43
1 files changed, 24 insertions, 19 deletions
diff --git a/cmd/podman/system/service.go b/cmd/podman/system/service.go
index 99a6b1e1e..41d20d9fd 100644
--- a/cmd/podman/system/service.go
+++ b/cmd/podman/system/service.go
@@ -35,12 +35,14 @@ Enable a listening service for API access to Podman commands.
Long: srvDescription,
RunE: service,
ValidArgsFunction: common.AutocompleteDefaultOneArg,
- Example: `podman system service --time=0 unix:///tmp/podman.sock`,
+ Example: `podman system service --time=0 unix:///tmp/podman.sock
+ podman system service --time=0 tcp://localhost:8888`,
}
srvArgs = struct {
- Timeout int64
CorsHeaders string
+ PProfAddr string
+ Timeout uint
}{}
)
@@ -51,15 +53,20 @@ func init() {
})
flags := srvCmd.Flags()
-
cfg := registry.PodmanConfig()
+
timeFlagName := "time"
- flags.Int64VarP(&srvArgs.Timeout, timeFlagName, "t", int64(cfg.Engine.ServiceTimeout), "Time until the service session expires in seconds. Use 0 to disable the timeout")
+ flags.UintVarP(&srvArgs.Timeout, timeFlagName, "t", cfg.Engine.ServiceTimeout,
+ "Time until the service session expires in seconds. Use 0 to disable the timeout")
_ = srvCmd.RegisterFlagCompletionFunc(timeFlagName, completion.AutocompleteNone)
+ flags.SetNormalizeFunc(aliasTimeoutFlag)
+
flags.StringVarP(&srvArgs.CorsHeaders, "cors", "", "", "Set CORS Headers")
_ = srvCmd.RegisterFlagCompletionFunc("cors", completion.AutocompleteNone)
- flags.SetNormalizeFunc(aliasTimeoutFlag)
+ flags.StringVarP(&srvArgs.PProfAddr, "pprof-address", "", "",
+ "Binding network address for pprof profile endpoints, default: do not expose endpoints")
+ flags.MarkHidden("pprof-address")
}
func aliasTimeoutFlag(_ *pflag.FlagSet, name string) pflag.NormalizedName {
@@ -74,7 +81,7 @@ func service(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
- logrus.Infof("Using API endpoint: '%s'", apiURI)
+
// Clean up any old existing unix domain socket
if len(apiURI) > 0 {
uri, err := url.Parse(apiURI)
@@ -92,33 +99,31 @@ func service(cmd *cobra.Command, args []string) error {
}
}
- opts := entities.ServiceOptions{
- URI: apiURI,
- Command: cmd,
+ return restService(cmd.Flags(), registry.PodmanConfig(), entities.ServiceOptions{
CorsHeaders: srvArgs.CorsHeaders,
- }
-
- opts.Timeout = time.Duration(srvArgs.Timeout) * time.Second
- return restService(opts, cmd.Flags(), registry.PodmanConfig())
+ PProfAddr: srvArgs.PProfAddr,
+ Timeout: time.Duration(srvArgs.Timeout) * time.Second,
+ URI: apiURI,
+ })
}
-func resolveAPIURI(_url []string) (string, error) {
+func resolveAPIURI(uri []string) (string, error) {
// When determining _*THE*_ listening endpoint --
// 1) User input wins always
// 2) systemd socket activation
// 3) rootless honors XDG_RUNTIME_DIR
// 4) lastly adapter.DefaultAPIAddress
- if len(_url) == 0 {
+ if len(uri) == 0 {
if v, found := os.LookupEnv("PODMAN_SOCKET"); found {
- logrus.Debugf("PODMAN_SOCKET='%s' used to determine API endpoint", v)
- _url = []string{v}
+ logrus.Debugf("PODMAN_SOCKET=%q used to determine API endpoint", v)
+ uri = []string{v}
}
}
switch {
- case len(_url) > 0 && _url[0] != "":
- return _url[0], nil
+ case len(uri) > 0 && uri[0] != "":
+ return uri[0], nil
case systemd.SocketActivated():
logrus.Info("Using systemd socket activation to determine API endpoint")
return "", nil