本文整理汇总了Golang中github.com/hyperhq/runv/hypervisor/pod.RandStr函数的典型用法代码示例。如果您正苦于以下问题:Golang RandStr函数的具体用法?Golang RandStr怎么用?Golang RandStr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RandStr函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: GetVm
func GetVm(vmId string, b *BootConfig, waitStarted, lazy bool, keep int) (vm *Vm, err error) {
var id string
for {
id = fmt.Sprintf("vm-%s", pod.RandStr(10, "alpha"))
if _, err = os.Stat(BaseDir + "/" + id); os.IsNotExist(err) {
break
}
}
vm = NewVm(id, b.CPU, b.Memory, lazy, keep)
if err = vm.Launch(b); err != nil {
return nil, err
}
if waitStarted {
// wait init connected
Status, err := vm.GetResponseChan()
if err != nil {
vm.Kill()
return nil, err
}
defer vm.ReleaseResponseChan(Status)
for {
vmResponse, ok := <-Status
if !ok || vmResponse.Code == types.E_VM_RUNNING {
break
}
}
}
return vm, nil
}
开发者ID:ZJU-SEL,项目名称:runv,代码行数:31,代码来源:vm.go
示例2: CmdPodRun
func (daemon *Daemon) CmdPodRun(job *engine.Job) error {
// we can only support 1024 Pods
if daemon.GetRunningPodNum() >= 1024 {
return fmt.Errorf("Pod full, the maximum Pod is 1024!")
}
var autoremove bool = false
podArgs := job.Args[0]
if job.Args[1] == "yes" {
autoremove = true
}
podId := fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
glog.Info(podArgs)
var lazy bool = hypervisor.HDriver.SupportLazyMode()
code, cause, err := daemon.StartPod(podId, podArgs, "", nil, lazy, autoremove, types.VM_KEEP_NONE)
if err != nil {
glog.Error(err.Error())
return err
}
// Prepare the VM status to client
v := &engine.Env{}
v.Set("ID", podId)
v.SetInt("Code", code)
v.Set("Cause", cause)
if _, err := v.WriteTo(job.Stdout); err != nil {
return err
}
return nil
}
开发者ID:sulochan,项目名称:hyper,代码行数:34,代码来源:pod.go
示例3: CmdPodCreate
func (daemon *Daemon) CmdPodCreate(job *engine.Job) error {
// we can only support 1024 Pods
if daemon.GetRunningPodNum() >= 1024 {
return fmt.Errorf("Pod full, the maximum Pod is 1024!")
}
podArgs := job.Args[0]
autoRemove := false
if job.Args[1] == "yes" || job.Args[1] == "true" {
autoRemove = true
}
podId := fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
daemon.PodList.Lock()
glog.V(2).Infof("lock PodList")
defer glog.V(2).Infof("unlock PodList")
defer daemon.PodList.Unlock()
err := daemon.CreatePod(podId, podArgs, autoRemove)
if err != nil {
return err
}
// Prepare the VM status to client
v := &engine.Env{}
v.Set("ID", podId)
v.SetInt("Code", 0)
v.Set("Cause", "")
if _, err := v.WriteTo(job.Stdout); err != nil {
return err
}
return nil
}
开发者ID:Astray-git,项目名称:hyper,代码行数:32,代码来源:pod.go
示例4: runvAllocAndRespondTag
func runvAllocAndRespondTag(conn net.Conn) (tag string, err error) {
tag = pod.RandStr(8, "alphanum")
m := &hypervisor.DecodedMessage{
Code: RUNV_ACK,
Message: []byte(tag),
}
data := hypervisor.NewVmMessage(m)
conn.Write(data)
return tag, nil
}
开发者ID:ZJU-SEL,项目名称:runv,代码行数:11,代码来源:runv.go
示例5: CreatePod
func (daemon *Daemon) CreatePod(podId, podArgs string, autoremove bool) (*Pod, error) {
// we can only support 1024 Pods
if daemon.GetRunningPodNum() >= 1024 {
return nil, fmt.Errorf("Pod full, the maximum Pod is 1024!")
}
if podId == "" {
podId = fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
}
return daemon.createPodInternal(podId, podArgs, autoremove, false)
}
开发者ID:ZJU-SEL,项目名称:hyper,代码行数:12,代码来源:pod.go
示例6: NewVm
func (daemon *Daemon) NewVm(id string, cpu, memory int, lazy bool, keep int) *hypervisor.Vm {
vmId := id
if vmId == "" {
for {
vmId = fmt.Sprintf("vm-%s", pod.RandStr(10, "alpha"))
if _, ok := daemon.VmList[vmId]; !ok {
break
}
}
}
return hypervisor.NewVm(vmId, cpu, memory, lazy, keep)
}
开发者ID:sulochan,项目名称:hyper,代码行数:13,代码来源:vm.go
示例7: New
func New(templateRoot string, cpu, mem int, kernel, initrd string) base.Factory {
var vmName string
for {
vmName = fmt.Sprintf("template-vm-%s", pod.RandStr(10, "alpha"))
if _, err := os.Stat(templateRoot + "/" + vmName); os.IsNotExist(err) {
break
}
}
s, err := template.CreateTemplateVM(templateRoot+"/"+vmName, vmName, cpu, mem, kernel, initrd)
if err != nil {
glog.Infof("failed to create template factory: %v", err)
glog.Infof("use direct factory instead")
return direct.New(cpu, mem, kernel, initrd)
}
return &templateFactory{s: s}
}
开发者ID:juito,项目名称:hyper,代码行数:17,代码来源:template.go
示例8: NewVm
func (vl *VmList) NewVm(id string, cpu, memory int, lazy bool) *hypervisor.Vm {
vmId := id
vl.Lock()
defer vl.Unlock()
if vmId == "" {
for {
vmId = fmt.Sprintf("vm-%s", pod.RandStr(10, "alpha"))
if _, ok := vl.vms[vmId]; !ok {
break
}
}
vl.vms[vmId] = nil
}
return hypervisor.NewVm(vmId, cpu, memory, lazy)
}
开发者ID:juito,项目名称:hyper,代码行数:17,代码来源:vm.go
示例9: CmdVmCreate
func (daemon *Daemon) CmdVmCreate(job *engine.Job) (err error) {
var (
vmId = fmt.Sprintf("vm-%s", pod.RandStr(10, "alpha"))
vm *hypervisor.Vm
cpu = 1
mem = 128
)
if job.Args[0] != "" {
cpu, err = strconv.Atoi(job.Args[0])
if err != nil {
return err
}
}
if job.Args[1] != "" {
mem, err = strconv.Atoi(job.Args[1])
if err != nil {
return err
}
}
vm, err = daemon.StartVm(vmId, cpu, mem, false, 0)
if err != nil {
return err
}
daemon.AddVm(vm)
// Prepare the VM status to client
v := &engine.Env{}
v.Set("ID", vmId)
v.SetInt("Code", 0)
v.Set("Cause", "")
if _, err := v.WriteTo(job.Stdout); err != nil {
return err
}
return nil
}
开发者ID:sulochan,项目名称:hyper,代码行数:40,代码来源:vm.go
示例10: CreatePod
func (daemon *Daemon) CreatePod(podId string, podSpec *apitypes.UserPod) (*Pod, error) {
if podId == "" {
podId = fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
}
p, err := daemon.createPodInternal(podId, podSpec, false)
if err != nil {
return nil, err
}
/* Create pod may change the pod spec */
spec, err := json.Marshal(p.Spec)
if err != nil {
return nil, err
}
if err = daemon.AddPod(p, string(spec)); err != nil {
return nil, err
}
return p, nil
}
开发者ID:juito,项目名称:hyper,代码行数:22,代码来源:run.go
示例11: SetupLoopbackAddress
// Setup lo ip address
// options for operation: add or del
func SetupLoopbackAddress(vm *hypervisor.Vm, container, ip, operation string) error {
command := "ip addr " + operation + " dev lo " + ip + "/32"
execcmd, err := json.Marshal(strings.Split(command, " "))
if err != nil {
return err
}
tty := &hypervisor.TtyIO{
Callback: make(chan *types.VmResponse, 1),
ClientTag: pod.RandStr(8, "alphanum"),
}
if err := vm.Exec(tty, container, string(execcmd)); err != nil {
return err
}
if tty.ExitCode != 0 {
return fmt.Errorf("exec %s on container %s failed with exit code %d", command, container, tty.ExitCode)
}
return nil
}
开发者ID:ZJU-SEL,项目名称:hyper,代码行数:24,代码来源:servicediscovery.go
示例12: ApplyServices
func ApplyServices(vm *hypervisor.Vm, container string, services []pod.UserService) error {
// Update lo ip addresses
var command []string
oldServices, err := GetServices(vm, container)
if err != nil {
return err
}
err = UpdateLoopbackAddress(vm, container, oldServices, services)
if err != nil {
return err
}
// Update haproxy config
config := path.Join(ServiceVolume, ServiceConfig)
vm.WriteFile(container, config, GenerateServiceConfig(services))
command = append(command, "sh")
command = append(command, "-c")
command = append(command, "haproxy -f /usr/local/etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf `cat /var/run/haproxy.pid`")
execcmd, err := json.Marshal(command)
if err != nil {
return err
}
tty := &hypervisor.TtyIO{
Callback: make(chan *types.VmResponse, 1),
ClientTag: pod.RandStr(8, "alphanum"),
}
if err := vm.Exec(tty, container, string(execcmd)); err != nil {
return err
}
if tty.ExitCode != 0 {
return fmt.Errorf("exec %s on container %s failed with exit code %d", command, container, tty.ExitCode)
}
return nil
}
开发者ID:ZJU-SEL,项目名称:hyper,代码行数:39,代码来源:servicediscovery.go
示例13: CmdPodCreate
func (daemon *Daemon) CmdPodCreate(job *engine.Job) error {
// we can only support 1024 Pods
if daemon.GetRunningPodNum() >= 1024 {
return fmt.Errorf("Pod full, the maximum Pod is 1024!")
}
podArgs := job.Args[0]
podId := fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
err := daemon.CreatePod(podId, podArgs, nil, false)
if err != nil {
return err
}
// Prepare the VM status to client
v := &engine.Env{}
v.Set("ID", podId)
v.SetInt("Code", 0)
v.Set("Cause", "")
if _, err := v.WriteTo(job.Stdout); err != nil {
return err
}
return nil
}
开发者ID:sulochan,项目名称:hyper,代码行数:24,代码来源:pod.go
示例14: createHyperPod
func createHyperPod(f factory.Factory, spec *specs.Spec, defaultCpus int, defaultMemory int) (*HyperPod, error) {
podId := fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
userPod := pod.ConvertOCF2PureUserPod(spec)
podStatus := hypervisor.NewPod(podId, userPod, nil)
cpu := defaultCpus
if userPod.Resource.Vcpu > 0 {
cpu = userPod.Resource.Vcpu
}
mem := defaultMemory
if userPod.Resource.Memory > 0 {
mem = userPod.Resource.Memory
}
kernel := chooseKernel(spec)
initrd := chooseInitrd(spec)
glog.V(3).Infof("Using kernel: %s; Initrd: %s; vCPU: %d; Memory %d", kernel, initrd, cpu, mem)
var (
vm *hypervisor.Vm
err error
)
if len(kernel) == 0 && len(initrd) == 0 {
vm, err = f.GetVm(cpu, mem)
if err != nil {
glog.V(1).Infof("Create VM failed with default kernel config: %s", err.Error())
return nil, err
}
glog.V(3).Infof("Creating VM with default kernel config")
} else if len(kernel) == 0 || len(initrd) == 0 {
// if user specify a kernel, they must specify an initrd at the same time
return nil, fmt.Errorf("You must specify an initrd if you specify a kernel, or vice-versa")
} else {
boot := &hypervisor.BootConfig{
CPU: cpu,
Memory: mem,
Kernel: kernel,
Initrd: initrd,
}
vm, err = hypervisor.GetVm("", boot, true, false)
if err != nil {
glog.V(1).Infof("Create VM failed: %s", err.Error())
return nil, err
}
glog.V(3).Infof("Creating VM with specific kernel config")
}
Response := vm.StartPod(podStatus, userPod, nil, nil)
if Response.Data == nil {
vm.Kill()
glog.V(1).Infof("StartPod fail: QEMU response data is nil\n")
return nil, fmt.Errorf("StartPod fail")
}
glog.V(1).Infof("result: code %d %s\n", Response.Code, Response.Cause)
hp := &HyperPod{
userPod: userPod,
podStatus: podStatus,
vm: vm,
Containers: make(map[string]*Container),
Processes: make(map[string]*Process),
}
// create Listener process running in its own netns
if err = hp.startNsListener(); err != nil {
hp.reap()
glog.V(1).Infof("start ns listener fail: %s\n", err.Error())
return nil, err
}
return hp, nil
}
开发者ID:feiskyer,项目名称:runv,代码行数:73,代码来源:hyperpod.go
示例15: CmdPodRun
func (daemon *Daemon) CmdPodRun(job *engine.Job) error {
// we can only support 1024 Pods
if daemon.GetRunningPodNum() >= 1024 {
return fmt.Errorf("Pod full, the maximum Pod is 1024!")
}
var (
autoremove bool = false
tag string = ""
ttys []*hypervisor.TtyIO = []*hypervisor.TtyIO{}
ttyCallback chan *types.VmResponse
)
podArgs := job.Args[0]
if job.Args[1] == "yes" {
autoremove = true
}
if len(job.Args) > 2 {
tag = job.Args[2]
}
if tag != "" {
glog.V(1).Info("Pod Run with client terminal tag: ", tag)
ttyCallback = make(chan *types.VmResponse, 1)
ttys = append(ttys, &hypervisor.TtyIO{
Stdin: job.Stdin,
Stdout: job.Stdout,
ClientTag: tag,
Callback: ttyCallback,
})
}
podId := fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
glog.Info(podArgs)
var lazy bool = hypervisor.HDriver.SupportLazyMode()
daemon.PodList.Lock()
glog.V(2).Infof("lock PodList")
defer glog.V(2).Infof("unlock PodList")
defer daemon.PodList.Unlock()
code, cause, err := daemon.StartPod(podId, podArgs, "", nil, lazy, autoremove, types.VM_KEEP_NONE, ttys)
if err != nil {
glog.Error(err.Error())
return err
}
if len(ttys) > 0 {
<-ttyCallback
return nil
}
// Prepare the VM status to client
v := &engine.Env{}
v.Set("ID", podId)
v.SetInt("Code", code)
v.Set("Cause", cause)
if _, err := v.WriteTo(job.Stdout); err != nil {
return err
}
return nil
}
开发者ID:Astray-git,项目名称:hyper,代码行数:62,代码来源:pod.go
示例16: main
func main() {
hypervisor.InterfaceCount = 0
var containerInfoList []*hypervisor.ContainerInfo
var roots []string
var containerId string
var err error
ocffile := flag.String("config", "", "ocf configure file")
kernel := flag.String("kernel", "", "hyper kernel")
initrd := flag.String("initrd", "", "hyper initrd")
vbox := flag.String("vbox", "", "vbox boot iso")
driver := flag.String("driver", "", "hypervisor driver")
flag.Parse()
if *ocffile == "" {
*ocffile = "config.json"
}
if _, err = os.Stat(*ocffile); os.IsNotExist(err) {
fmt.Printf("Please specify ocffile or put config.json under current working directory\n")
return
}
if *vbox == "" {
*vbox = "./vbox.iso"
}
if _, err = os.Stat(*vbox); err == nil {
*vbox, err = filepath.Abs(*vbox)
if err != nil {
fmt.Printf("Cannot get abs path for vbox: %s\n", err.Error())
return
}
}
if *kernel == "" {
*kernel = "./kernel"
}
if _, err = os.Stat(*kernel); err == nil {
*kernel, err = filepath.Abs(*kernel)
if err != nil {
fmt.Printf("Cannot get abs path for kernel: %s\n", err.Error())
return
}
}
if *initrd == "" {
*initrd = "./initrd.img"
}
if _, err = os.Stat(*initrd); err == nil {
*initrd, err = filepath.Abs(*initrd)
if err != nil {
fmt.Printf("Cannot get abs path for initrd: %s\n", err.Error())
return
}
}
if *driver == "" {
*driver = "kvm"
fmt.Printf("Use default hypervisor KVM\n")
}
if hypervisor.HDriver, err = driverloader.Probe(*driver); err != nil {
fmt.Printf("%s\n", err.Error())
return
}
podId := fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
vmId := fmt.Sprintf("vm-%s", pod.RandStr(10, "alpha"))
ocfData, err := ioutil.ReadFile(*ocffile)
if err != nil {
fmt.Printf("%s\n", err.Error())
return
}
userPod, err := pod.OCFConvert2Pod(ocfData)
if err != nil {
fmt.Printf("%s\n", err.Error())
return
}
mypod := hypervisor.NewPod(podId, userPod)
var (
cpu = 1
mem = 128
)
if userPod.Resource.Vcpu > 0 {
cpu = userPod.Resource.Vcpu
}
if userPod.Resource.Memory > 0 {
mem = userPod.Resource.Memory
}
//.........这里部分代码省略.........
开发者ID:guijianfeng,项目名称:runv,代码行数:101,代码来源:runv.go
示例17: ParsePod
//.........这里部分代码省略.........
glog.V(1).Infof("Parsing envs for container %d: %d Evs", i, len(env))
glog.V(1).Infof("The fs type is %s", fstype)
glog.V(1).Infof("WorkingDir is %s", string(jsonResponse.Config.WorkingDir))
glog.V(1).Infof("Image is %s", string(devFullName))
containerInfo := &hypervisor.ContainerInfo{
Id: c.Id,
Rootfs: rootfs,
Image: devFullName,
Fstype: fstype,
Workdir: jsonResponse.Config.WorkingDir,
Entrypoint: jsonResponse.Config.Entrypoint.Slice(),
Cmd: jsonResponse.Config.Cmd.Slice(),
Envs: env,
}
glog.V(1).Infof("Container Info is \n%v", containerInfo)
containerInfoList = append(containerInfoList, containerInfo)
glog.V(1).Infof("container %d created %s, workdir %s, env: %v", i, c.Id, jsonResponse.Config.WorkingDir, env)
}
// Process the 'Volumes' section
for _, v := range userPod.Volumes {
if v.Source == "" {
if storageDriver == "devicemapper" {
volName := fmt.Sprintf("%s-%s-%s", volPoolName, mypod.Id, v.Name)
dev_id, _ := daemon.GetVolumeId(mypod.Id, volName)
glog.Error("DeviceID is %d", dev_id)
if dev_id < 1 {
dev_id, _ = daemon.GetMaxDeviceId()
err := daemon.CreateVolume(mypod.Id, volName, fmt.Sprintf("%d", dev_id+1), false)
if err != nil {
return nil, nil, err
}
} else {
err := daemon.CreateVolume(mypod.Id, volName, fmt.Sprintf("%d", dev_id), true)
if err != nil {
return nil, nil, err
}
}
fstype, err = dm.ProbeFsType("/dev/mapper/" + volName)
if err != nil {
fstype = "ext4"
}
myVol := &hypervisor.VolumeInfo{
Name: v.Name,
Filepath: path.Join("/dev/mapper/", volName),
Fstype: fstype,
Format: "raw",
}
volumeInfoList = append(volumeInfoList, myVol)
glog.V(1).Infof("volume %s created with dm as %s", v.Name, volName)
continue
} else {
// Make sure the v.Name is given
v.Source = path.Join("/var/tmp/hyper/", v.Name)
if _, err := os.Stat(v.Source); err != nil && os.IsNotExist(err) {
if err := os.MkdirAll(v.Source, os.FileMode(0777)); err != nil {
return nil, nil, err
}
}
v.Driver = "vfs"
}
}
if v.Driver != "vfs" {
glog.V(1).Infof("bypass %s volume %s", v.Driver, v.Name)
continue
}
// Process the situation if the source is not NULL, we need to bind that dir to sharedDir
var flags uintptr = utils.MS_BIND
mountSharedDir := pod.RandStr(10, "alpha")
targetDir := path.Join(sharedDir, mountSharedDir)
glog.V(1).Infof("trying to bind dir %s to %s", v.Source, targetDir)
if runtime.GOOS == "linux" {
if err := os.MkdirAll(targetDir, 0755); err != nil && !os.IsExist(err) {
glog.Errorf("error to create dir %s for volume %s", targetDir, v.Name)
return nil, nil, err
}
}
if err := utils.Mount(v.Source, targetDir, "dir", flags, "--bind"); err != nil {
glog.Errorf("bind dir %s failed: %s", v.Source, err.Error())
return nil, nil, err
}
myVol := &hypervisor.VolumeInfo{
Name: v.Name,
Filepath: mountSharedDir,
Fstype: "dir",
Format: "",
}
glog.V(1).Infof("dir %s is bound to %s", v.Source, targetDir)
volumeInfoList = append(volumeInfoList, myVol)
}
return containerInfoList, volumeInfoList, nil
}
开发者ID:sulochan,项目名称:hyper,代码行数:101,代码来源:pod.go
示例18: startRunvPod
func startRunvPod(context *nsContext, config *startConfig) (err error) {
context.lock.Lock()
defer context.lock.Unlock()
if context.firstConfig == nil {
context.firstConfig = config
} else {
// check stopped
if len(context.actives) == 0 {
return fmt.Errorf("The namespace service was stopped")
}
// check match
if config.Root != "" && config.Root != context.firstConfig.Root {
return fmt.Errorf("The root is not match")
}
if config.Driver != "" && config.Driver != context.firstConfig.Driver {
return fmt.Errorf("The driver is not match")
}
if config.Kernel != "" && config.Kernel != context.firstConfig.Kernel {
return fmt.Errorf("The kernel is not match")
}
if config.Initrd != "" && config.Initrd != context.firstConfig.Initrd {
return fmt.Errorf("The initrd is not match")
}
if config.Vbox != "" && config.Vbox != context.firstConfig.Vbox {
return fmt.Errorf("The vbox is not match")
}
// check shared namespace
for _, ns := range config.LinuxRuntimeSpec.Linux.Namespaces {
if ns.Path == "" {
continue
}
_, ok := context.actives[ns.Path]
if !ok {
return fmt.Errorf("Cann't share namespace with: %s", ns.Path)
}
}
// OK, the pod has been started, add this config and return
context.actives[config.Name] = config
return nil
}
hypervisor.InterfaceCount = 0
driver := config.Driver
if hypervisor.HDriver, err = driverloader.Probe(driver); err != nil {
fmt.Printf("%s\n", err.Error())
return err
}
context.podId = fmt.Sprintf("pod-%s", pod.RandStr(10, "alpha"))
context.vmId = fmt.Sprintf("vm-%s", pod.RandStr(10, "alpha"))
context.userPod = pod.ConvertOCF2PureUserPod(&config.LinuxSpec, &config.LinuxRuntimeSpec)
context.podStatus = hypervisor.NewPod(context.podId, context.userPod)
context.vm, err = startVm(config, context.userPod, context.vmId)
if err != nil {
fmt.Printf("%s\n", err.Error())
return err
}
Response := context.vm.StartPod(context.podStatus, context.userPod, nil, nil)
if Response.Data == nil {
fmt.Printf("StartPod fail: QEMU response data is nil\n")
return fmt.Errorf("StartPod fail")
}
fmt.Printf("result: code %d %s\n", Response.Code, Response.Cause)
context.actives[config.Name] = config
return nil
}
开发者ID:ZJU-SEL,项目名称:runv,代码行数:70,代码来源:runv.go
示例19: PrepareVolume
func (daemon *Daemon) PrepareVolume(mypod *hypervisor.Pod, userPod *pod.UserPod,
vmId string) ([]*hypervisor.VolumeInfo, error) {
var (
fstype string
volPoolName string
err error
sharedDir = path.Join(hypervisor.BaseDir, vmId, hypervisor.ShareDirTag)
volumeInfoList = []*hypervisor.VolumeInfo{}
)
// Process the 'Volumes' section
for _, v := range userPod.Volumes {
if v.Source == "" {
if daemon.Storage.StorageType == "devicemapper" {
volName := fmt.Sprintf("%s-%s-%s", volPoolName, mypod.Id, v.Name)
dev_id, _ := daemon.GetVolumeId(mypod.Id, volName)
glog.Error("DeviceID is %d", dev_id)
if dev_id < 1 {
dev_id, _ = daemon.GetMaxDeviceId()
err := daemon.CreateVolume(mypod.Id, volName, fmt.Sprintf("%d", dev_id+1), false)
if err != nil {
return nil, err
}
} else {
err := daemon.CreateVolume(mypod.Id, volName, fmt.Sprintf("%d", dev_id), true)
if err != nil {
return nil, err
}
}
fstype, err = dm.ProbeFsType("/dev/mapper/" + volName)
if err != nil {
fstype = "ext4"
}
myVol := &hypervisor.VolumeInfo{
Name: v.Name,
Filepath: path.Join("/dev/mapper/", volName),
Fstype: fstype,
Format: "raw",
}
volumeInfoList = append(volumeInfoList, myVol)
glog.V(1).Infof("volume %s created with dm as %s", v.Name, volName)
continue
} else {
// Make sure the v.Name is given
v.Source = path.Join("/var/tmp/hyper/", v.Name)
if _, err := os.Stat(v.Source); err != nil && os.IsNotExist(err) {
if err := os.MkdirAll(v.Source, os.FileMode(0777)); err != nil {
return nil, err
}
}
v.Driver = "vfs"
}
}
if v.Driver != "vfs" {
glog.V(1).Infof("bypass %s volume %s", v.Driver, v.Name)
continue
}
// Process the situation if the source is not NULL, we need to bind that dir to sharedDir
var flags uintptr = utils.MS_BIND
mountSharedDir := pod.RandStr(10, "alpha")
targetDir := path.Join(sharedDir, mountSharedDir)
glog.V(1).Infof("trying to bind dir %s to %s", v.Source, targetDir)
if runtime.GOOS == "linux" {
if err := os.MkdirAll(targetDir, 0755); err != nil && !os.IsExist(err) {
glog.Errorf("error to create dir %s for volume %s", targetDir, v.Name)
return nil, err
}
}
if err := utils.Mount(v.Source, targetDir, "dir", flags, "--bind"); err != nil {
glog.Errorf("bind dir %s failed: %s", v.Source, err.Error())
return nil, err
}
myVol := &hypervisor.VolumeInfo{
Name: v.Name,
Filepath: mountSharedDir,
Fstype: "dir",
Format: "",
}
glog.V(1).Infof("dir %s is bound to %s", v.Source, targetDir)
volumeInfoList = append(volumeInfoList, myVol)
}
return volumeInfoList, nil
}
开发者ID:Oliverlyn,项目名称:hyper,代码行数:90,代码来源:pod.go
示例20: ContainerAttach
// ContainerAttach attaches streams to the container cID. If stream is true, it streams the output.
func (d Docker) ContainerAttach(cId string, stdin io.ReadCloser, stdout, stderr io.Writer, stream bool) error {
tag := pod.RandStr(8, "alphanum")
return d.Daemon.Attach(stdin, ioutils.NopWriteCloser(stdout), "container", cId, tag)
}
开发者ID:ZJU-SEL,项目名称:hyper,代码行数:5,代码来源:pod.go
注:本文中的github.com/hyperhq/runv/hypervisor/pod.RandStr函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论