Skip to content

Commit fb4c664

Browse files
Merge pull request #439 from HewlettPackard/sp-async
Adding a new function for Async SP creation
2 parents bea37e9 + 59988ab commit fb4c664

File tree

2 files changed

+103
-0
lines changed

2 files changed

+103
-0
lines changed

examples/server_profiles.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,29 @@ func main() {
6363
fmt.Println("#----------------Server Profile Created---------------#")
6464
}
6565

66+
// Example: Submit a new Server Profile asynchronously
67+
//
68+
// This example demonstrates how to use the `SubmitNewProfileAsync` function to create
69+
// a new server profile in OneView. The call is asynchronous, meaning it immediately
70+
// returns a Task object instead of waiting for the operation to finish.
71+
//
72+
// The returned Task contains the URI that can be polled or monitored until the
73+
// profile creation completes. If the server hardware already has a profile assigned
74+
// or if the hardware is powered on, an error will be returned.
75+
task, err := ovc.SubmitNewProfileAsync(server_profile_create_map, ignoreFlags...)
76+
if err != nil {
77+
fmt.Println("Server Profile Create Failed: ", err)
78+
} else {
79+
80+
if err != nil {
81+
fmt.Println("Error marshaling task:", err)
82+
} else {
83+
fmt.Println("Task URI:")
84+
fmt.Println(string(task.URI))
85+
}
86+
fmt.Println("#----------------Server Profile Creation Task Initiated---------------#")
87+
}
88+
6689
sort := ""
6790
server_name := ov.ServerHardwareType{}
6891
spt, err := ovc.GetProfileTemplateByName(spt_name)

ov/profiles.go

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,86 @@ func (c *OVClient) SubmitNewProfile(p ServerProfile, ignoreFlags ...ForceFlag) (
509509
return nil
510510
}
511511

512+
// SubmitNewProfileAsync - submit new profile template
513+
func (c *OVClient) SubmitNewProfileAsync(
514+
p ServerProfile,
515+
ignoreFlags ...ForceFlag,
516+
) (*Task, error) {
517+
var err error
518+
log.Infof("Initializing creation of server profile for %s.", p.Name)
519+
var (
520+
uri = "/rest/server-profiles"
521+
server ServerHardware
522+
t *Task
523+
// if no warning flags has been provided, use default value:
524+
forceFlags = map[string]interface{}{
525+
"force": ForceIgnoreNone,
526+
}
527+
)
528+
// refresh login
529+
c.RefreshLogin()
530+
c.SetAuthHeaderOptions(c.GetAuthHeaderMap())
531+
532+
t = t.NewProfileTask(c)
533+
t.ResetTask()
534+
log.Debugf("REST : %s \n %+v\n", uri, p)
535+
log.Debugf("task -> %+v", t)
536+
537+
// Check if server hardware already has server profile assigned
538+
if server.ServerProfileURI.String() != "null" {
539+
return nil, fmt.Errorf("hardware %s already has server profile assigned", server.Name)
540+
}
541+
542+
server, err = c.GetServerHardwareByUri(p.ServerHardwareURI)
543+
544+
if err != nil {
545+
log.Warnf("Problem getting server hardware, %s", err)
546+
}
547+
548+
// power off the server so that we can add to SP
549+
if server.Name != "" && server.PowerState == "on" {
550+
return nil, errors.New("Server Hardware must be powered off to assign to the server profile")
551+
}
552+
553+
serverHardwareType, err := c.GetServerHardwareTypeByUri(server.ServerHardwareTypeURI)
554+
if err != nil {
555+
log.Warnf("Error getting server hardware type %s", err)
556+
}
557+
serverHarwdareTypeGen := serverHardwareType.Generation
558+
559+
var emptyMgmtProcessorsStruct ManagementProcessors
560+
if !reflect.DeepEqual(p.ManagementProcessors, emptyMgmtProcessorsStruct) {
561+
mp := SetMp(serverHarwdareTypeGen, p.ManagementProcessors)
562+
p.ManagementProcessor = mp
563+
}
564+
565+
// append force flags comma separated
566+
if len(ignoreFlags) > 0 {
567+
var flags []string
568+
569+
for _, i := range ignoreFlags {
570+
flags = append(flags, i.String())
571+
}
572+
573+
forceFlags["force"] = strings.Join(flags, ",")
574+
}
575+
576+
data, err := c.RestAPICall(rest.POST, uri, p, forceFlags)
577+
if err != nil {
578+
t.TaskIsDone = true
579+
log.Errorf("Error submitting new profile request: %s", err)
580+
return nil, err
581+
}
582+
583+
log.Debugf("Response New Profile %s", data)
584+
if err := json.Unmarshal([]byte(data), &t); err != nil {
585+
t.TaskIsDone = true
586+
log.Errorf("Error with task un-marshal: %s", err)
587+
return nil, err
588+
}
589+
return t, nil
590+
}
591+
512592
// create profile from template
513593
func (c *OVClient) CreateProfileFromTemplate(name string, template ServerProfile, blade ServerHardware, ignoreFlags ...ForceFlag) error {
514594
log.Debugf("TEMPLATE : %+v\n", template)

0 commit comments

Comments
 (0)