@@ -509,6 +509,86 @@ func (c *OVClient) SubmitNewProfile(p ServerProfile, ignoreFlags ...ForceFlag) (
509
509
return nil
510
510
}
511
511
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
+
512
592
// create profile from template
513
593
func (c * OVClient ) CreateProfileFromTemplate (name string , template ServerProfile , blade ServerHardware , ignoreFlags ... ForceFlag ) error {
514
594
log .Debugf ("TEMPLATE : %+v\n " , template )
0 commit comments