github.com/vmware/govmomi@v0.51.0/eam/simulator/issue.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package simulator
     6  
     7  import (
     8  	"sync"
     9  
    10  	"github.com/vmware/govmomi/eam/types"
    11  )
    12  
    13  var (
    14  	activeIssueKeys   = map[int32]struct{}{}
    15  	activeIssueKeysMu sync.RWMutex
    16  )
    17  
    18  func nextAvailableIssueKey() int32 {
    19  	activeIssueKeysMu.Lock()
    20  	defer activeIssueKeysMu.Unlock()
    21  	for i := int32(1); ; i++ {
    22  		if _, isActiveKey := activeIssueKeys[i]; !isActiveKey {
    23  			activeIssueKeys[i] = struct{}{}
    24  			return i
    25  		}
    26  	}
    27  }
    28  
    29  func freeIssueKey(i int32) {
    30  	activeIssueKeysMu.Lock()
    31  	defer activeIssueKeysMu.Unlock()
    32  	delete(activeIssueKeys, i)
    33  }
    34  
    35  func issueType(issue types.BaseIssue) types.BaseIssue {
    36  	switch typedIssue := issue.(type) {
    37  	case types.BaseVmNotDeployed:
    38  		return typedIssue.GetVmNotDeployed()
    39  	case types.BaseVmDeployed:
    40  		return typedIssue.GetVmDeployed()
    41  	case types.BaseVmPoweredOff:
    42  		return typedIssue.GetVmPoweredOff()
    43  	case types.BaseVmIssue:
    44  		return typedIssue.GetVmIssue()
    45  	case types.BaseVibNotInstalled:
    46  		return typedIssue.GetVibNotInstalled()
    47  	case types.BaseVibIssue:
    48  		return typedIssue.GetVibIssue()
    49  	case types.BaseAgentIssue:
    50  		return typedIssue.GetAgentIssue()
    51  	case types.BaseAgencyIssue:
    52  		return typedIssue.GetAgencyIssue()
    53  	case types.BaseHostIssue:
    54  		return typedIssue.GetHostIssue()
    55  	default:
    56  		return issue
    57  	}
    58  }