1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package main
- import (
- "os"
- "path/filepath"
- "github.com/Microsoft/hcsshim/internal/appargs"
- "github.com/Microsoft/hcsshim/internal/lcow"
- "github.com/Microsoft/hcsshim/internal/uvm"
- "github.com/Microsoft/hcsshim/osversion"
- gcsclient "github.com/Microsoft/opengcs/client"
- "github.com/pkg/errors"
- "github.com/urfave/cli"
- )
- var createScratchCommand = cli.Command{
- Name: "create-scratch",
- Usage: "creates a scratch vhdx at 'destpath' that is ext4 formatted",
- Description: "Creates a scratch vhdx at 'destpath' that is ext4 formatted",
- Flags: []cli.Flag{
- cli.StringFlag{
- Name: "destpath",
- Usage: "Required: describes the destination vhd path",
- },
- },
- Before: appargs.Validate(),
- Action: func(context *cli.Context) error {
- dest := context.String("destpath")
- if dest == "" {
- return errors.New("'destpath' is required")
- }
-
- if osversion.Get().Build < osversion.RS5 {
- cfg := gcsclient.Config{
- Options: gcsclient.Options{
- KirdPath: filepath.Join(os.Getenv("ProgramFiles"), "Linux Containers"),
- KernelFile: "kernel",
- InitrdFile: uvm.InitrdFile,
- },
- Name: "createscratch-uvm",
- UvmTimeoutSeconds: 5 * 60,
- }
- if err := cfg.StartUtilityVM(); err != nil {
- return errors.Wrapf(err, "failed to start '%s'", cfg.Name)
- }
- defer cfg.Uvm.Terminate()
- if err := cfg.CreateExt4Vhdx(dest, lcow.DefaultScratchSizeGB, ""); err != nil {
- return errors.Wrapf(err, "failed to create ext4vhdx for '%s'", cfg.Name)
- }
- } else {
- opts := uvm.NewDefaultOptionsLCOW("createscratch-uvm", context.GlobalString("owner"))
- convertUVM, err := uvm.CreateLCOW(opts)
- if err != nil {
- return errors.Wrapf(err, "failed to create '%s'", opts.ID)
- }
- defer convertUVM.Close()
- if err := convertUVM.Start(); err != nil {
- return errors.Wrapf(err, "failed to start '%s'", opts.ID)
- }
- if err := lcow.CreateScratch(convertUVM, dest, lcow.DefaultScratchSizeGB, "", ""); err != nil {
- return errors.Wrapf(err, "failed to create ext4vhdx for '%s'", opts.ID)
- }
- }
- return nil
- },
- }
|