mirror of
https://github.com/containers/podman.git
synced 2025-05-23 10:07:33 +08:00

this should represent the last major changes to get darwin to **compile**. again, the purpose here is to get darwin to compile so that we can eventually implement a ci task that would protect against regressions for darwin compilation. i have left the manual darwin compilation largely static still and in fact now only interject (manually) two build tags to assist with the build. trevor king has great ideas on how to make this better and i will defer final implementation of those to him. Signed-off-by: baude <bbaude@redhat.com> Closes: #1047 Approved by: rhatdan
68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
// +build linux
|
|
|
|
package libpod
|
|
|
|
import (
|
|
"encoding/json"
|
|
"path/filepath"
|
|
|
|
"github.com/boltdb/bolt"
|
|
"github.com/containers/storage"
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func (s *BoltState) getContainerFromDB(id []byte, ctr *Container, ctrsBkt *bolt.Bucket) error {
|
|
valid := true
|
|
ctrBkt := ctrsBkt.Bucket(id)
|
|
if ctrBkt == nil {
|
|
return errors.Wrapf(ErrNoSuchCtr, "container %s not found in DB", string(id))
|
|
}
|
|
|
|
configBytes := ctrBkt.Get(configKey)
|
|
if configBytes == nil {
|
|
return errors.Wrapf(ErrInternal, "container %s missing config key in DB", string(id))
|
|
}
|
|
|
|
stateBytes := ctrBkt.Get(stateKey)
|
|
if stateBytes == nil {
|
|
return errors.Wrapf(ErrInternal, "container %s missing state key in DB", string(id))
|
|
}
|
|
|
|
netNSBytes := ctrBkt.Get(netNSKey)
|
|
|
|
if err := json.Unmarshal(configBytes, ctr.config); err != nil {
|
|
return errors.Wrapf(err, "error unmarshalling container %s config", string(id))
|
|
}
|
|
|
|
if err := json.Unmarshal(stateBytes, ctr.state); err != nil {
|
|
return errors.Wrapf(err, "error unmarshalling container %s state", string(id))
|
|
}
|
|
|
|
// The container may not have a network namespace, so it's OK if this is
|
|
// nil
|
|
if netNSBytes != nil {
|
|
nsPath := string(netNSBytes)
|
|
netNS, err := joinNetNS(nsPath)
|
|
if err == nil {
|
|
ctr.state.NetNS = netNS
|
|
} else {
|
|
logrus.Errorf("error joining network namespace for container %s", ctr.ID())
|
|
valid = false
|
|
}
|
|
}
|
|
|
|
// Get the lock
|
|
lockPath := filepath.Join(s.lockDir, string(id))
|
|
lock, err := storage.GetLockfile(lockPath)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "error retrieving lockfile for container %s", string(id))
|
|
}
|
|
ctr.lock = lock
|
|
|
|
ctr.runtime = s.runtime
|
|
ctr.valid = valid
|
|
|
|
return nil
|
|
}
|