Может ли эта логика c не быть более упрощенной, код работает, но он стал слишком большим количеством спагетти. Требования состоят в том, что всегда должно быть одно соединение, если это возможно, в состоянии available
, но мне нужно отключить все состояния available
и воссоздать их. эти пути, которые я должен покрыть:
- , если оба vif-файла отключены, вызовите create
- , если оба vif-файла доступны, снимите их и увеличьте один за другим
- если один вниз и один доступный, сначала поднимите нижний, затем снимите и поднимите доступный
- , если только один, поднимите его, затем создайте второй
- , если только один, создайте второй, затем удалите и заново создайте первый
var vifsMap = make(map[string][]*directconnect.VirtualInterface)
var vifsStateAvailable, vifsStateDown []*directconnect.VirtualInterface
for _, item := range convertToDirectconnect(lagPair, amz.dcLags) {
vis, err := amz.dcRead.DescribeVirtualInterfaces(&directconnect.DescribeVirtualInterfacesInput{ConnectionId: item.LagId})
if err != nil {
return err
}
for _, vi := range vis.VirtualInterfaces {
if *vi.OwnerAccount == cfg.RemoteAccountID {
if aws.StringValue(vi.VirtualInterfaceState) == directconnect.VirtualInterfaceStateAvailable {
vifsStateAvailable = append(vifsStateAvailable, vi)
} else if aws.StringValue(vi.VirtualInterfaceState) == directconnect.VirtualInterfaceStateDown {
vifsStateDown = append(vifsStateDown, vi)
}
}
}
}
vifsMap["available"] = vifsStateAvailable
vifsMap["down"] = vifsStateDown
if len(vifsStateDown) > 1 {
fmt.Println("contains 2 down elements")
} else if len(vifsStateAvailable) > 1 {
fmt.Println("contains 2 up elements")
} else if len(vifsStateDown) == 1 && len(vifsStateAvailable) == 1 {
fmt.Println("contains 1 vif down and 1 up")
} else if len(vifsStateAvailable) == 1 && len(vifsStateDown) == 1 {
fmt.Println("contains 1 vif up and 1 down")
} else if len(vifsStateDown) == 1 && len(vifsStateAvailable) == 0 {
fmt.Println("contains 1 down only")
} else if len(vifsStateAvailable) == 1 && len(vifsStateDown) == 0 {
fmt.Println("contains 1 up only")
}