skus/m1small/m1small.go
func (s *SkuM1Small) Procurement() *taskmanager.Task {
	agent := taskmanager.NewAgent(s.TaskManager, SkuName)
	task := agent.GetTask()

	agent.Run(func(ag *taskmanager.Agent) (err error) {
		if clnt, err := s.GetInnkeeperClient(); err == nil {
			if phinfo, err := clnt.ProvisionHost(ClientSkuName, s.UserIdentifier); err == nil {
				lo.G.Debug("provisionhost response: ", phinfo)

				ag.GetTask().Update(func(t *taskmanager.Task) interface{} {
					t.Status = taskmanager.AgentTaskStatusComplete
					t.SetPublicMeta(ProvisionHostInfoMetaName, phinfo)
					return t
				})
				go s.StartPoller(phinfo.Data[0].RequestID, task)
			} else {
				return err
			}
		}
		return err
	})

	return task
}
func (s *SkuM1Small) Procurement() *taskmanager.Task {
	agent := taskmanager.NewAgent(s.TaskManager, SkuName)
	task := agent.GetTask()

	agent.Run(func(ag *taskmanager.Agent) (err error) {
		if clnt, err := s.GetInnkeeperClient(); err == nil {
			if phinfo, err := clnt.ProvisionHost(ClientSkuName, s.UserIdentifier); err == nil {
				lo.G.Debug("provisionhost response: ", phinfo)

				ag.GetTask().Update(func(t *taskmanager.Task) interface{} {
					t.Status = taskmanager.AgentTaskStatusComplete
					t.SetPublicMeta(ProvisionHostInfoMetaName, phinfo)
					return t
				})
				go s.StartPoller(phinfo.Data[0].RequestID, task)
			} else {
				return err
			}
		}
		return err
	})

	return task
}
// Procurement -- use agent to run async task