本文整理汇总了Golang中github.com/cloudius-systems/capstan/util.Repo.ImageExists方法的典型用法代码示例。如果您正苦于以下问题:Golang Repo.ImageExists方法的具体用法?Golang Repo.ImageExists怎么用?Golang Repo.ImageExists使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/cloudius-systems/capstan/util.Repo
的用法示例。
在下文中一共展示了Repo.ImageExists方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Run
func Run(repo *util.Repo, config *RunConfig) error {
var path string
var cmd *exec.Cmd
// Start an existing instance
if config.ImageName == "" && config.InstanceName != "" {
instanceName, instancePlatform := util.SearchInstance(config.InstanceName)
if instanceName != "" {
defer fmt.Println("")
fmt.Printf("Created instance: %s\n", instanceName)
// Do not set RawTerm for gce
if instancePlatform != "gce" {
util.RawTerm()
defer util.ResetTerm()
}
var err error
switch instancePlatform {
case "qemu":
c, _ := qemu.LoadConfig(instanceName)
cmd, err = qemu.LaunchVM(c)
case "vbox":
c, _ := vbox.LoadConfig(instanceName)
cmd, err = vbox.LaunchVM(c)
case "vmw":
c, _ := vmw.LoadConfig(instanceName)
cmd, err = vmw.LaunchVM(c)
case "gce":
c, _ := gce.LoadConfig(instanceName)
cmd, err = gce.LaunchVM(c)
}
if err != nil {
return err
}
if cmd != nil {
return cmd.Wait()
}
return nil
} else {
// The InstanceName is actually a ImageName
// so, cmd like "capstan run cloudius/osv" will work
config.ImageName = config.InstanceName
config.InstanceName = strings.Replace(config.InstanceName, "/", "-", -1)
return Run(repo, config)
}
// Both ImageName and InstanceName are specified
} else if config.ImageName != "" && config.InstanceName != "" {
if _, err := os.Stat(config.ImageName); os.IsNotExist(err) {
if repo.ImageExists(config.Hypervisor, config.ImageName) {
path = repo.ImagePath(config.Hypervisor, config.ImageName)
} else if image.IsCloudImage(config.ImageName) {
path = config.ImageName
} else if util.IsRemoteImage(config.ImageName) {
err := Pull(repo, config.Hypervisor, config.ImageName)
if err != nil {
return err
}
path = repo.ImagePath(config.Hypervisor, config.ImageName)
} else {
return fmt.Errorf("%s: no such image", config.ImageName)
}
if config.Hypervisor == "gce" && !image.IsCloudImage(config.ImageName) {
str, err := ioutil.ReadFile(path)
if err != nil {
return err
}
path = string(str)
}
} else {
path = config.ImageName
}
deleteInstance(config.InstanceName)
// Valid only when Capstanfile is present
} else if config.ImageName == "" && config.InstanceName == "" {
config.ImageName = repo.DefaultImage()
config.InstanceName = config.ImageName
if config.ImageName == "" {
return fmt.Errorf("No Capstanfile found, unable to run.")
}
if !repo.ImageExists(config.Hypervisor, config.ImageName) {
if !util.ConfigExists("Capstanfile") {
return fmt.Errorf("%s: no such image", config.ImageName)
}
err := Build(repo, config.Hypervisor, config.ImageName, config.Verbose)
if err != nil {
return err
}
}
path = repo.ImagePath(config.Hypervisor, config.ImageName)
deleteInstance(config.InstanceName)
// Cmdline option is not valid
} else {
usage()
return nil
}
//.........这里部分代码省略.........
示例2: Run
func Run(repo *util.Repo, config *RunConfig) error {
var path string
if config.ImageName != "" {
if _, err := os.Stat(config.ImageName); os.IsNotExist(err) {
if repo.ImageExists(config.Hypervisor, config.ImageName) {
path = repo.ImagePath(config.Hypervisor, config.ImageName)
} else if util.IsRemoteImage(config.ImageName) {
err := Pull(repo, config.Hypervisor, config.ImageName)
if err != nil {
return err
}
path = repo.ImagePath(config.Hypervisor, config.ImageName)
} else {
return fmt.Errorf("%s: no such image", config.ImageName)
}
} else {
path = config.ImageName
}
} else {
config.ImageName = repo.DefaultImage()
if config.ImageName == "" {
return fmt.Errorf("No Capstanfile found, unable to run.")
}
if !repo.ImageExists(config.Hypervisor, config.ImageName) {
if !util.ConfigExists("Capstanfile") {
return fmt.Errorf("%s: no such image", config.ImageName)
}
err := Build(repo, config.Hypervisor, config.ImageName, config.Verbose)
if err != nil {
return err
}
}
path = repo.ImagePath(config.Hypervisor, config.ImageName)
}
format, err := image.Probe(path)
if err != nil {
return err
}
if format == image.Unknown {
return fmt.Errorf("%s: image format not recognized, unable to run it.", path)
}
size, err := util.ParseMemSize(config.Memory)
if err != nil {
return err
}
var cmd *exec.Cmd
switch config.Hypervisor {
case "qemu":
id := util.ID()
dir := filepath.Join(os.Getenv("HOME"), ".capstan/instances/qemu", id)
config := &qemu.VMConfig{
Name: id,
Image: path,
Verbose: true,
Memory: size,
Cpus: config.Cpus,
NatRules: config.NatRules,
BackingFile: true,
InstanceDir: dir,
Monitor: filepath.Join(dir, "osv.monitor"),
}
fmt.Printf("Created instance: %s\n", id)
tio, _ := util.RawTerm()
defer util.ResetTerm(tio)
cmd, err = qemu.LaunchVM(config)
defer qemu.DeleteVM(config)
case "vbox":
if format != image.VDI && format != image.VMDK {
return fmt.Errorf("%s: image format of %s is not supported, unable to run it.", config.Hypervisor, path)
}
id := util.ID()
config := &vbox.VMConfig{
Name: id,
Dir: filepath.Join(util.HomePath(), ".capstan/instances/vbox"),
Image: path,
Memory: size,
Cpus: config.Cpus,
NatRules: config.NatRules,
}
fmt.Printf("Created instance: %s\n", id)
tio, _ := util.RawTerm()
defer util.ResetTerm(tio)
cmd, err = vbox.LaunchVM(config)
defer vbox.DeleteVM(config)
case "gce":
id := util.ID()
bucket := "osvimg"
config := &gce.VMConfig{
Name: "osv-capstan-" + id,
Image: "osv-capstan-" + id,
Network: "default",
MachineType: "n1-standard-1",
Zone: "us-central1-a",
CloudStoragePath: "gs://" + bucket + "/osv-capstan-" + id + ".tar.gz",
Tarball: path,
}
cmd, err = gce.LaunchVM(config)
case "vmw":
id := util.ID()
if format != image.VMDK {
//.........这里部分代码省略.........