args := ctx.Params[0].(runMachineActionsArgs) fmt.Fprintf(args.writer, " update status for machine (%s, %s)", args.box.GetFullName(), args.machineStatus.String()) var mach machine.Machine if ctx.Previous != nil && strings.Compare(reflect.TypeOf(ctx.Previous).Name(), "Machine") == 0 { mach = ctx.Previous.(machine.Machine) } else { mach = machine.Machine{ Id: args.box.Id, CartonId: args.box.CartonId, Level: args.box.Level, Name: args.box.GetFullName(), SSH: args.box.SSH, Status: args.machineStatus, } } if err := mach.SetStatus(mach.Status); err != nil { fmt.Fprintf(args.writer, " update status for machine failed.\n") return err, nil } return mach, nil }, Backward: func(ctx action.BWContext) { c := ctx.FWResult.(machine.Machine) c.SetStatus(constants.StatusError) }, } var createMachine = action.Action{ Name: "create-machine", Forward: func(ctx action.FWContext) (action.Result, error) { args := ctx.Params[0].(runMachineActionsArgs)