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 }