func (command *commandRebuild) Execute(resource *handler.Resource) { params := resource.Params.(*paramsRebuild) opts := params.opts serverID := params.serverID server, err := servers.Rebuild(command.Ctx.ServiceClient, serverID, opts).Extract() if err != nil { resource.Err = err return } if params.wait { err = osServers.WaitForStatus(command.Ctx.ServiceClient, serverID, "ACTIVE", 600) if err != nil { resource.Err = err return } server, err = servers.Get(command.Ctx.ServiceClient, serverID).Extract() if err != nil { resource.Err = err return } } resource.Result = serverSingle(server) }
func (command *commandGet) Execute(resource *handler.Resource) { serverID := resource.Params.(*paramsGet).server server, err := servers.Get(command.Context().ServiceClient, serverID).Extract() if err != nil { resource.Err = err return } resource.Result = serverSingle(server) }
func (command *commandDelete) Execute(resource *handler.Resource) { serverID := resource.Params.(*paramsDelete).server err := servers.Delete(command.Ctx.ServiceClient, serverID).ExtractErr() if err != nil { resource.Err = err return } if resource.Params.(*paramsDelete).wait { i := 0 for i < 120 { _, err := servers.Get(command.Ctx.ServiceClient, serverID).Extract() if err != nil { break } time.Sleep(5 * time.Second) i++ } resource.Result = fmt.Sprintf("Deleted instance [%s]\n", serverID) } else { resource.Result = fmt.Sprintf("Deleting instance [%s]\n", serverID) } }
func (command *commandCreate) Execute(resource *handler.Resource) { opts := resource.Params.(*paramsCreate).opts var server *osServers.Server var err error if len(opts.BlockDevice) > 0 { server, err = bfv.Create(command.Ctx.ServiceClient, opts).Extract() } else { server, err = servers.Create(command.Ctx.ServiceClient, opts).Extract() } handleErr: if err != nil { switch err.(type) { case *osServers.ErrNeitherImageIDNorImageNameProvided: err = errors.New("One and only one of the --image-id and the --image-name flags must be provided.") case *osServers.ErrNeitherFlavorIDNorFlavorNameProvided: err = errors.New("One and only one of the --flavor-id and the --flavor-name flags must be provided.") case *gophercloud.ErrErrorAfterReauthentication: err = err.(*gophercloud.ErrErrorAfterReauthentication).UnexpectedResponseCodeError goto handleErr case *gophercloud.UnexpectedResponseCodeError: switch err.(*gophercloud.UnexpectedResponseCodeError).Actual { case 403: imageID := opts.ImageRef if imageID == "" { id, err := osImages.IDFromName(command.Ctx.ServiceClient, opts.ImageName) if err != nil { resource.Err = err return } imageID = id } flavorLabel := "id" flavorID := opts.FlavorRef if flavorID == "" { flavorLabel = "name" flavorID = opts.FlavorName } err = fmt.Errorf(strings.Join([]string{"The flavor you've chosen has a disk size of 0, so an image can't be created on it directly.\n", "To boot with this flavor, creating a 100 GB volume and not deleting that volume when the server is deleted, run this command:\n", fmt.Sprintf("rack servers instance create --name %s --flavor-%s %s \\", opts.Name, flavorLabel, flavorID), fmt.Sprintf("--block-device \"source-type=image,source-id=%s,volume-size=100,destination-type=volume,delete-on-termination=false\"\n", imageID), "For more information please run: rack servers instance create --help", }, "\n")) } } resource.Err = err return } if resource.Params.(*paramsCreate).wait { err = osServers.WaitForStatus(command.Ctx.ServiceClient, server.ID, "ACTIVE", 600) if err != nil { resource.Err = err return } server, err = servers.Get(command.Ctx.ServiceClient, server.ID).Extract() if err != nil { resource.Err = err return } } resource.Result = serverSingle(server) }