本文整理汇总了Golang中github.com/lxc/lxd/shared.LogError函数的典型用法代码示例。如果您正苦于以下问题:Golang LogError函数的具体用法?Golang LogError怎么用?Golang LogError使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了LogError函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: send
func (s *btrfsMigrationSourceDriver) send(conn *websocket.Conn, btrfsPath string, btrfsParent string) error {
args := []string{"send", btrfsPath}
if btrfsParent != "" {
args = append(args, "-p", btrfsParent)
}
cmd := exec.Command("btrfs", args...)
stdout, err := cmd.StdoutPipe()
if err != nil {
return err
}
stderr, err := cmd.StderrPipe()
if err != nil {
return err
}
if err := cmd.Start(); err != nil {
return err
}
<-shared.WebsocketSendStream(conn, stdout, 4*1024*1024)
output, err := ioutil.ReadAll(stderr)
if err != nil {
shared.LogError("problem reading btrfs send stderr", log.Ctx{"err": err})
}
err = cmd.Wait()
if err != nil {
shared.LogError("problem with btrfs send", log.Ctx{"output": string(output)})
}
return err
}
示例2: containerDeleteSnapshots
func containerDeleteSnapshots(d *Daemon, cname string) error {
shared.LogDebug("containerDeleteSnapshots",
log.Ctx{"container": cname})
results, err := dbContainerGetSnapshots(d.db, cname)
if err != nil {
return err
}
for _, sname := range results {
sc, err := containerLoadByName(d, sname)
if err != nil {
shared.LogError(
"containerDeleteSnapshots: Failed to load the snapshotcontainer",
log.Ctx{"container": cname, "snapshot": sname})
continue
}
if err := sc.Delete(); err != nil {
shared.LogError(
"containerDeleteSnapshots: Failed to delete a snapshotcontainer",
log.Ctx{"container": cname, "snapshot": sname, "err": err})
}
}
return nil
}
示例3: deviceUSBEvent
func deviceUSBEvent(d *Daemon, usb usbDevice) {
containers, err := dbContainersList(d.db, cTypeRegular)
if err != nil {
shared.LogError("problem loading containers list", log.Ctx{"err": err})
return
}
for _, name := range containers {
containerIf, err := containerLoadByName(d, name)
if err != nil {
continue
}
c, ok := containerIf.(*containerLXC)
if !ok {
shared.LogErrorf("got device event on non-LXC container?")
return
}
if !c.IsRunning() {
continue
}
devices := c.ExpandedDevices()
for _, name := range devices.DeviceNames() {
m := devices[name]
if m["type"] != "usb" {
continue
}
if m["vendorid"] != usb.vendor || (m["productid"] != "" && m["productid"] != usb.product) {
continue
}
if usb.action == "add" {
err := c.insertUnixDeviceNum(m, usb.major, usb.minor, usb.path)
if err != nil {
shared.LogError("failed to create usb device", log.Ctx{"err": err, "usb": usb, "container": c.Name()})
return
}
} else if usb.action == "remove" {
err := c.removeUnixDeviceNum(m, usb.major, usb.minor, usb.path)
if err != nil {
shared.LogError("failed to remove usb device", log.Ctx{"err": err, "usb": usb, "container": c.Name()})
return
}
} else {
shared.LogError("unknown action for usb device", log.Ctx{"usb": usb})
continue
}
}
}
}
示例4: profilesGet
func profilesGet(d *Daemon, r *http.Request) Response {
results, err := dbProfiles(d.db)
if err != nil {
return SmartError(err)
}
recursion := d.isRecursionRequest(r)
resultString := make([]string, len(results))
resultMap := make([]*shared.ProfileConfig, len(results))
i := 0
for _, name := range results {
if !recursion {
url := fmt.Sprintf("/%s/profiles/%s", shared.APIVersion, name)
resultString[i] = url
} else {
profile, err := doProfileGet(d, name)
if err != nil {
shared.LogError("Failed to get profile", log.Ctx{"profile": name})
continue
}
resultMap[i] = profile
}
i++
}
if !recursion {
return SyncResponse(true, resultString)
}
return SyncResponse(true, resultMap)
}
示例5: doDeleteImage
func doDeleteImage(d *Daemon, fingerprint string) error {
id, imgInfo, err := dbImageGet(d.db, fingerprint, false, false)
if err != nil {
return err
}
// get storage before deleting images/$fp because we need to
// look at the path
s, err := storageForImage(d, imgInfo)
if err != nil {
shared.LogError("error detecting image storage backend", log.Ctx{"fingerprint": imgInfo.Fingerprint, "err": err})
} else {
// Remove the image from storage backend
if err = s.ImageDelete(imgInfo.Fingerprint); err != nil {
shared.LogError("error deleting the image from storage backend", log.Ctx{"fingerprint": imgInfo.Fingerprint, "err": err})
}
}
// Remove main image file
fname := shared.VarPath("images", imgInfo.Fingerprint)
if shared.PathExists(fname) {
err = os.Remove(fname)
if err != nil {
shared.LogDebugf("Error deleting image file %s: %s", fname, err)
}
}
// Remove the rootfs file
fname = shared.VarPath("images", imgInfo.Fingerprint) + ".rootfs"
if shared.PathExists(fname) {
err = os.Remove(fname)
if err != nil {
shared.LogDebugf("Error deleting image file %s: %s", fname, err)
}
}
// Remove the DB entry
if err = dbImageDelete(d.db, id); err != nil {
return err
}
return nil
}
示例6: send
func (s *zfsMigrationSourceDriver) send(conn *websocket.Conn, zfsName string, zfsParent string, readWrapper func(io.ReadCloser) io.ReadCloser) error {
fields := strings.SplitN(s.container.Name(), shared.SnapshotDelimiter, 2)
args := []string{"send", fmt.Sprintf("%s/containers/%[email protected]%s", s.zfs.zfsPool, fields[0], zfsName)}
if zfsParent != "" {
args = append(args, "-i", fmt.Sprintf("%s/containers/%[email protected]%s", s.zfs.zfsPool, s.container.Name(), zfsParent))
}
cmd := exec.Command("zfs", args...)
stdout, err := cmd.StdoutPipe()
if err != nil {
return err
}
readPipe := io.ReadCloser(stdout)
if readWrapper != nil {
readPipe = readWrapper(stdout)
}
stderr, err := cmd.StderrPipe()
if err != nil {
return err
}
if err := cmd.Start(); err != nil {
return err
}
<-shared.WebsocketSendStream(conn, readPipe, 4*1024*1024)
output, err := ioutil.ReadAll(stderr)
if err != nil {
shared.LogError("problem reading zfs send stderr", log.Ctx{"err": err})
}
err = cmd.Wait()
if err != nil {
shared.LogError("problem with zfs send", log.Ctx{"output": string(output)})
}
return err
}
示例7: pruneExpiredImages
func pruneExpiredImages(d *Daemon) {
shared.LogInfof("Pruning expired images")
// Get the list of expires images
expiry := daemonConfig["images.remote_cache_expiry"].GetInt64()
images, err := dbImagesGetExpired(d.db, expiry)
if err != nil {
shared.LogError("Unable to retrieve the list of expired images", log.Ctx{"err": err})
return
}
// Delete them
for _, fp := range images {
if err := doDeleteImage(d, fp); err != nil {
shared.LogError("Error deleting image", log.Ctx{"err": err, "fp": fp})
}
}
shared.LogInfof("Done pruning expired images")
}
示例8: daemonConfigInit
func daemonConfigInit(db *sql.DB) error {
// Set all the keys
daemonConfig = map[string]*daemonConfigKey{
"core.https_address": &daemonConfigKey{valueType: "string", setter: daemonConfigSetAddress},
"core.https_allowed_headers": &daemonConfigKey{valueType: "string"},
"core.https_allowed_methods": &daemonConfigKey{valueType: "string"},
"core.https_allowed_origin": &daemonConfigKey{valueType: "string"},
"core.https_allowed_credentials": &daemonConfigKey{valueType: "bool"},
"core.proxy_http": &daemonConfigKey{valueType: "string", setter: daemonConfigSetProxy},
"core.proxy_https": &daemonConfigKey{valueType: "string", setter: daemonConfigSetProxy},
"core.proxy_ignore_hosts": &daemonConfigKey{valueType: "string", setter: daemonConfigSetProxy},
"core.trust_password": &daemonConfigKey{valueType: "string", hiddenValue: true, setter: daemonConfigSetPassword},
"images.auto_update_cached": &daemonConfigKey{valueType: "bool", defaultValue: "true"},
"images.auto_update_interval": &daemonConfigKey{valueType: "int", defaultValue: "6"},
"images.compression_algorithm": &daemonConfigKey{valueType: "string", validator: daemonConfigValidateCompression, defaultValue: "gzip"},
"images.remote_cache_expiry": &daemonConfigKey{valueType: "int", defaultValue: "10", trigger: daemonConfigTriggerExpiry},
"storage.lvm_fstype": &daemonConfigKey{valueType: "string", defaultValue: "ext4", validValues: []string{"ext4", "xfs"}},
"storage.lvm_mount_options": &daemonConfigKey{valueType: "string", defaultValue: "discard"},
"storage.lvm_thinpool_name": &daemonConfigKey{valueType: "string", defaultValue: "LXDPool", validator: storageLVMValidateThinPoolName},
"storage.lvm_vg_name": &daemonConfigKey{valueType: "string", validator: storageLVMValidateVolumeGroupName, setter: daemonConfigSetStorage},
"storage.lvm_volume_size": &daemonConfigKey{valueType: "string", defaultValue: "10GiB"},
"storage.zfs_pool_name": &daemonConfigKey{valueType: "string", validator: storageZFSValidatePoolName, setter: daemonConfigSetStorage},
"storage.zfs_remove_snapshots": &daemonConfigKey{valueType: "bool"},
"storage.zfs_use_refquota": &daemonConfigKey{valueType: "bool"},
}
// Load the values from the DB
dbValues, err := dbConfigValuesGet(db)
if err != nil {
return err
}
daemonConfigLock.Lock()
for k, v := range dbValues {
_, ok := daemonConfig[k]
if !ok {
shared.LogError("Found invalid configuration key in database", log.Ctx{"key": k})
}
daemonConfig[k].currentValue = v
}
daemonConfigLock.Unlock()
return nil
}
示例9: getRunningContainersWithProfile
func getRunningContainersWithProfile(d *Daemon, profile string) []container {
results := []container{}
output, err := dbProfileContainersGet(d.db, profile)
if err != nil {
return results
}
for _, name := range output {
c, err := containerLoadByName(d, name)
if err != nil {
shared.LogError("Failed opening container", log.Ctx{"container": name})
continue
}
results = append(results, c)
}
return results
}
示例10: containerSnapRestore
func containerSnapRestore(d *Daemon, name string, snap string) error {
// normalize snapshot name
if !shared.IsSnapshot(snap) {
snap = name + shared.SnapshotDelimiter + snap
}
shared.LogInfo(
"RESTORE => Restoring snapshot",
log.Ctx{
"snapshot": snap,
"container": name})
c, err := containerLoadByName(d, name)
if err != nil {
shared.LogError(
"RESTORE => loadcontainerLXD() failed",
log.Ctx{
"container": name,
"err": err})
return err
}
source, err := containerLoadByName(d, snap)
if err != nil {
switch err {
case sql.ErrNoRows:
return fmt.Errorf("snapshot %s does not exist", snap)
default:
return err
}
}
if err := c.Restore(source); err != nil {
return err
}
return nil
}
示例11: networkStartup
func networkStartup(d *Daemon) error {
// Get a list of managed networks
networks, err := dbNetworks(d.db)
if err != nil {
return err
}
// Bring them all up
for _, name := range networks {
n, err := networkLoadByName(d, name)
if err != nil {
return err
}
err = n.Start()
if err != nil {
// Don't cause LXD to fail to start entirely on network bring up failure
shared.LogError("Failed to bring up network", log.Ctx{"err": err, "name": name})
}
}
return nil
}
示例12: MigrationSink
func (s *storageBtrfs) MigrationSink(live bool, container container, snapshots []*Snapshot, conn *websocket.Conn, srcIdmap *shared.IdmapSet) error {
if runningInUserns {
return rsyncMigrationSink(live, container, snapshots, conn, srcIdmap)
}
cName := container.Name()
snapshotsPath := shared.VarPath(fmt.Sprintf("snapshots/%s", cName))
if !shared.PathExists(snapshotsPath) {
err := os.MkdirAll(shared.VarPath(fmt.Sprintf("snapshots/%s", cName)), 0700)
if err != nil {
return err
}
}
btrfsRecv := func(btrfsPath string, targetPath string, isSnapshot bool) error {
args := []string{"receive", "-e", btrfsPath}
cmd := exec.Command("btrfs", args...)
// Remove the existing pre-created subvolume
err := s.subvolsDelete(targetPath)
if err != nil {
return err
}
stdin, err := cmd.StdinPipe()
if err != nil {
return err
}
stderr, err := cmd.StderrPipe()
if err != nil {
return err
}
if err := cmd.Start(); err != nil {
return err
}
<-shared.WebsocketRecvStream(stdin, conn)
output, err := ioutil.ReadAll(stderr)
if err != nil {
shared.LogDebugf("problem reading btrfs receive stderr %s", err)
}
err = cmd.Wait()
if err != nil {
shared.LogError("problem with btrfs receive", log.Ctx{"output": string(output)})
return err
}
if !isSnapshot {
cPath := containerPath(fmt.Sprintf("%s/.root", cName), true)
err := s.subvolSnapshot(cPath, targetPath, false)
if err != nil {
shared.LogError("problem with btrfs snapshot", log.Ctx{"err": err})
return err
}
err = s.subvolsDelete(cPath)
if err != nil {
shared.LogError("problem with btrfs delete", log.Ctx{"err": err})
return err
}
}
return nil
}
for _, snap := range snapshots {
args := snapshotProtobufToContainerArgs(container.Name(), snap)
s, err := containerCreateEmptySnapshot(container.Daemon(), args)
if err != nil {
return err
}
if err := btrfsRecv(containerPath(cName, true), s.Path(), true); err != nil {
return err
}
}
/* finally, do the real container */
if err := btrfsRecv(containerPath(cName, true), container.Path(), false); err != nil {
return err
}
if live {
if err := btrfsRecv(containerPath(cName, true), container.Path(), false); err != nil {
return err
}
}
// Cleanup
if ok, _ := shared.PathIsEmpty(snapshotsPath); ok {
err := os.Remove(snapshotsPath)
if err != nil {
return err
}
//.........这里部分代码省略.........
示例13: Init
//.........这里部分代码省略.........
/* Make sure all our directories are available */
if err := os.MkdirAll(shared.CachePath(), 0700); err != nil {
return err
}
if err := os.MkdirAll(shared.VarPath("containers"), 0711); err != nil {
return err
}
if err := os.MkdirAll(shared.VarPath("devices"), 0711); err != nil {
return err
}
if err := os.MkdirAll(shared.VarPath("devlxd"), 0755); err != nil {
return err
}
if err := os.MkdirAll(shared.VarPath("images"), 0700); err != nil {
return err
}
if err := os.MkdirAll(shared.LogPath(), 0700); err != nil {
return err
}
if err := os.MkdirAll(shared.VarPath("security"), 0700); err != nil {
return err
}
if err := os.MkdirAll(shared.VarPath("shmounts"), 0711); err != nil {
return err
}
if err := os.MkdirAll(shared.VarPath("snapshots"), 0700); err != nil {
return err
}
/* Detect the filesystem */
d.BackingFs, err = filesystemDetect(d.lxcpath)
if err != nil {
shared.LogError("Error detecting backing fs", log.Ctx{"err": err})
}
/* Read the uid/gid allocation */
d.IdmapSet, err = shared.DefaultIdmapSet()
if err != nil {
shared.LogWarn("Error reading idmap", log.Ctx{"err": err.Error()})
shared.LogWarnf("Only privileged containers will be able to run")
} else {
shared.LogInfof("Default uid/gid map:")
for _, lxcmap := range d.IdmapSet.ToLxcString() {
shared.LogInfof(strings.TrimRight(" - "+lxcmap, "\n"))
}
}
/* Initialize the database */
err = initializeDbObject(d, shared.VarPath("lxd.db"))
if err != nil {
return err
}
/* Load all config values from the database */
err = daemonConfigInit(d.db)
if err != nil {
return err
}
if !d.MockMode {
/* Setup the storage driver */
err = d.SetupStorageDriver()
if err != nil {
return fmt.Errorf("Failed to setup storage: %s", err)
}
示例14: deviceTaskBalance
func deviceTaskBalance(d *Daemon) {
min := func(x, y int) int {
if x < y {
return x
}
return y
}
// Don't bother running when CGroup support isn't there
if !cgCpusetController {
return
}
// Get effective cpus list - those are all guaranteed to be online
effectiveCpus, err := cGroupGet("cpuset", "/", "cpuset.effective_cpus")
if err != nil {
// Older kernel - use cpuset.cpus
effectiveCpus, err = cGroupGet("cpuset", "/", "cpuset.cpus")
if err != nil {
shared.LogErrorf("Error reading host's cpuset.cpus")
return
}
}
err = cGroupSet("cpuset", "/lxc", "cpuset.cpus", effectiveCpus)
if err != nil && shared.PathExists("/sys/fs/cgroup/cpuset/lxc") {
shared.LogWarn("Error setting lxd's cpuset.cpus", log.Ctx{"err": err})
}
cpus, err := parseCpuset(effectiveCpus)
if err != nil {
shared.LogError("Error parsing host's cpu set", log.Ctx{"cpuset": effectiveCpus, "err": err})
return
}
// Iterate through the containers
containers, err := dbContainersList(d.db, cTypeRegular)
if err != nil {
shared.LogError("problem loading containers list", log.Ctx{"err": err})
return
}
fixedContainers := map[int][]container{}
balancedContainers := map[container]int{}
for _, name := range containers {
c, err := containerLoadByName(d, name)
if err != nil {
continue
}
conf := c.ExpandedConfig()
cpulimit, ok := conf["limits.cpu"]
if !ok || cpulimit == "" {
cpulimit = effectiveCpus
}
if !c.IsRunning() {
continue
}
count, err := strconv.Atoi(cpulimit)
if err == nil {
// Load-balance
count = min(count, len(cpus))
balancedContainers[c] = count
} else {
// Pinned
containerCpus, err := parseCpuset(cpulimit)
if err != nil {
return
}
for _, nr := range containerCpus {
if !shared.IntInSlice(nr, cpus) {
continue
}
_, ok := fixedContainers[nr]
if ok {
fixedContainers[nr] = append(fixedContainers[nr], c)
} else {
fixedContainers[nr] = []container{c}
}
}
}
}
// Balance things
pinning := map[container][]string{}
usage := map[int]deviceTaskCPU{}
for _, id := range cpus {
cpu := deviceTaskCPU{}
cpu.id = id
cpu.strId = fmt.Sprintf("%d", id)
count := 0
cpu.count = &count
usage[id] = cpu
}
for cpu, ctns := range fixedContainers {
c, ok := usage[cpu]
if !ok {
//.........这里部分代码省略.........
示例15: ImageDownload
//.........这里部分代码省略.........
}
fp = fingerprint
break
}
} else if protocol == "lxd" {
target, err := remoteGetImageFingerprint(d, server, certificate, fp)
if err == nil && target != "" {
fp = target
}
}
if _, _, err := dbImageGet(d.db, fp, false, false); err == nil {
shared.LogDebug("Image already exists in the db", log.Ctx{"image": fp})
// already have it
return fp, nil
}
// Now check if we already downloading the image
d.imagesDownloadingLock.RLock()
if waitChannel, ok := d.imagesDownloading[fp]; ok {
// We already download the image
d.imagesDownloadingLock.RUnlock()
shared.LogDebug(
"Already downloading the image, waiting for it to succeed",
log.Ctx{"image": fp})
// Wait until the download finishes (channel closes)
if _, ok := <-waitChannel; ok {
shared.LogWarnf("Value transmitted over image lock semaphore?")
}
if _, _, err := dbImageGet(d.db, fp, false, true); err != nil {
shared.LogError(
"Previous download didn't succeed",
log.Ctx{"image": fp})
return "", fmt.Errorf("Previous download didn't succeed")
}
shared.LogDebug(
"Previous download succeeded",
log.Ctx{"image": fp})
return fp, nil
}
d.imagesDownloadingLock.RUnlock()
if op == nil {
ctxMap = log.Ctx{"alias": alias, "server": server}
} else {
ctxMap = log.Ctx{"trigger": op.url, "image": fp, "operation": op.id, "alias": alias, "server": server}
}
shared.LogInfo("Downloading image", ctxMap)
// Add the download to the queue
d.imagesDownloadingLock.Lock()
d.imagesDownloading[fp] = make(chan bool)
d.imagesDownloadingLock.Unlock()
// Unlock once this func ends.
defer func() {
d.imagesDownloadingLock.Lock()
if waitChannel, ok := d.imagesDownloading[fp]; ok {