本文整理汇总了Golang中github.com/hyperhq/runv/hypervisor/pod.RandStr函数的典型用法代码示例。如果您正苦于以下问题:Golang RandStr函数的具体用法?Golang RandStr怎么用?Golang RandStr使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RandStr函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的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
}
示例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
}
示例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
}
示例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
}
示例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)
}
示例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)
}
示例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}
}
示例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)
}
示例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
}
示例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
}
示例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
}
示例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
}
示例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
}
示例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
}
示例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
}