Упрощение дерева решений при работе с картой, имеющей два ключа и значение в качестве среза - PullRequest
0 голосов
/ 14 апреля 2020

Может ли эта логика c не быть более упрощенной, код работает, но он стал слишком большим количеством спагетти. Требования состоят в том, что всегда должно быть одно соединение, если это возможно, в состоянии available, но мне нужно отключить все состояния available и воссоздать их. эти пути, которые я должен покрыть:

  1. , если оба vif-файла отключены, вызовите create
  2. , если оба vif-файла доступны, снимите их и увеличьте один за другим
  3. если один вниз и один доступный, сначала поднимите нижний, затем снимите и поднимите доступный
  4. , если только один, поднимите его, затем создайте второй
  5. , если только один, создайте второй, затем удалите и заново создайте первый
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")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...