diff options
author | Matthew Heon <mheon@redhat.com> | 2018-11-28 15:27:09 -0500 |
---|---|---|
committer | Matthew Heon <mheon@redhat.com> | 2018-12-02 13:38:36 -0500 |
commit | 6e167029478e29d24ff75d259123e7f7e093b6ff (patch) | |
tree | 823dd8278ba5281ff5e588cbeddd222e278ec8db /libpod/boltdb_state.go | |
parent | 41f250c4861b9950b63dc7501211d13b6e0bd5ed (diff) | |
download | podman-6e167029478e29d24ff75d259123e7f7e093b6ff.tar.gz podman-6e167029478e29d24ff75d259123e7f7e093b6ff.tar.bz2 podman-6e167029478e29d24ff75d259123e7f7e093b6ff.zip |
Add ability to retrieve runtime configuration from DB
When we create a Libpod database, we store a number of runtime
configuration fields in it. If we can retrieve those, we can use
them to configure the runtime to match the DB instead of inbuilt
defaults, helping to ensure that we don't error in cases where
our compiled-in defaults changed.
Signed-off-by: Matthew Heon <mheon@redhat.com>
Diffstat (limited to 'libpod/boltdb_state.go')
-rw-r--r-- | libpod/boltdb_state.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/libpod/boltdb_state.go b/libpod/boltdb_state.go index 42f029379..7191b184a 100644 --- a/libpod/boltdb_state.go +++ b/libpod/boltdb_state.go @@ -240,6 +240,48 @@ func (s *BoltState) Refresh() error { return err } +// GetDBConfig retrieves runtime configuration fields that were created when +// the database was first initialized +func (s *BoltState) GetDBConfig() (*DBConfig, error) { + cfg := new(DBConfig) + + db, err := s.getDBCon() + if err != nil { + return nil, err + } + defer s.closeDBCon(db) + + err = db.View(func(tx *bolt.Tx) error { + configBucket, err := getRuntimeConfigBucket(tx) + if err != nil { + return nil + } + + // Some of these may be nil + // When we convert to string, Go will coerce them to "" + // That's probably fine - we could raise an error if the key is + // missing, but just not including it is also OK. + libpodRoot := configBucket.Get(staticDirKey) + libpodTmp := configBucket.Get(tmpDirKey) + storageRoot := configBucket.Get(graphRootKey) + storageTmp := configBucket.Get(runRootKey) + graphDriver := configBucket.Get(graphDriverKey) + + cfg.LibpodRoot = string(libpodRoot) + cfg.LibpodTmp = string(libpodTmp) + cfg.StorageRoot = string(storageRoot) + cfg.StorageTmp = string(storageTmp) + cfg.GraphDriver = string(graphDriver) + + return nil + }) + if err != nil { + return nil, err + } + + return cfg, nil +} + // SetNamespace sets the namespace that will be used for container and pod // retrieval func (s *BoltState) SetNamespace(ns string) error { |