sigs.k8s.io/cluster-api-provider-aws@v1.5.5/pkg/cloud/services/network/network.go (about) 1 /* 2 Copyright 2018 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package network 18 19 import ( 20 infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1" 21 "sigs.k8s.io/cluster-api-provider-aws/pkg/cloud/awserrors" 22 infrautilconditions "sigs.k8s.io/cluster-api-provider-aws/util/conditions" 23 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" 24 "sigs.k8s.io/cluster-api/util/conditions" 25 ) 26 27 // ReconcileNetwork reconciles the network of the given cluster. 28 func (s *Service) ReconcileNetwork() (err error) { 29 s.scope.V(2).Info("Reconciling network for cluster", "cluster-name", s.scope.Name(), "cluster-namespace", s.scope.Namespace()) 30 31 // VPC. 32 if err := s.reconcileVPC(); err != nil { 33 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.VpcReadyCondition, infrav1.VpcReconciliationFailedReason, infrautilconditions.ErrorConditionAfterInit(s.scope.ClusterObj()), err.Error()) 34 return err 35 } 36 conditions.MarkTrue(s.scope.InfraCluster(), infrav1.VpcReadyCondition) 37 38 // Secondary CIDR 39 if err := s.associateSecondaryCidr(); err != nil { 40 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.SecondaryCidrsReadyCondition, infrav1.SecondaryCidrReconciliationFailedReason, infrautilconditions.ErrorConditionAfterInit(s.scope.ClusterObj()), err.Error()) 41 return err 42 } 43 44 // Subnets. 45 if err := s.reconcileSubnets(); err != nil { 46 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.SubnetsReadyCondition, infrav1.SubnetsReconciliationFailedReason, infrautilconditions.ErrorConditionAfterInit(s.scope.ClusterObj()), err.Error()) 47 return err 48 } 49 50 // Internet Gateways. 51 if err := s.reconcileInternetGateways(); err != nil { 52 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.InternetGatewayReadyCondition, infrav1.InternetGatewayFailedReason, infrautilconditions.ErrorConditionAfterInit(s.scope.ClusterObj()), err.Error()) 53 return err 54 } 55 56 // NAT Gateways. 57 if err := s.reconcileNatGateways(); err != nil { 58 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.NatGatewaysReadyCondition, infrav1.NatGatewaysReconciliationFailedReason, infrautilconditions.ErrorConditionAfterInit(s.scope.ClusterObj()), err.Error()) 59 return err 60 } 61 62 // Routing tables. 63 if err := s.reconcileRouteTables(); err != nil { 64 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.RouteTablesReadyCondition, infrav1.RouteTableReconciliationFailedReason, infrautilconditions.ErrorConditionAfterInit(s.scope.ClusterObj()), err.Error()) 65 return err 66 } 67 68 s.scope.V(2).Info("Reconcile network completed successfully") 69 return nil 70 } 71 72 // DeleteNetwork deletes the network of the given cluster. 73 func (s *Service) DeleteNetwork() (err error) { 74 s.scope.V(2).Info("Deleting network") 75 76 vpc := &infrav1.VPCSpec{} 77 // Get VPC used for the cluster 78 if s.scope.VPC().ID != "" { 79 var err error 80 vpc, err = s.describeVPCByID() 81 if err != nil { 82 if awserrors.IsNotFound(err) { 83 // If the VPC does not exist, nothing to do 84 return nil 85 } 86 return err 87 } 88 } else { 89 s.scope.Error(err, "non-fatal: VPC ID is missing, ") 90 } 91 92 vpc.DeepCopyInto(s.scope.VPC()) 93 94 // Routing tables. 95 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.RouteTablesReadyCondition, clusterv1.DeletingReason, clusterv1.ConditionSeverityInfo, "") 96 if err := s.scope.PatchObject(); err != nil { 97 return err 98 } 99 100 if err := s.deleteRouteTables(); err != nil { 101 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.RouteTablesReadyCondition, "DeletingFailed", clusterv1.ConditionSeverityWarning, err.Error()) 102 return err 103 } 104 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.RouteTablesReadyCondition, clusterv1.DeletedReason, clusterv1.ConditionSeverityInfo, "") 105 106 // NAT Gateways. 107 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.NatGatewaysReadyCondition, clusterv1.DeletingReason, clusterv1.ConditionSeverityInfo, "") 108 if err := s.scope.PatchObject(); err != nil { 109 return err 110 } 111 112 if err := s.deleteNatGateways(); err != nil { 113 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.NatGatewaysReadyCondition, "DeletingFailed", clusterv1.ConditionSeverityWarning, err.Error()) 114 return err 115 } 116 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.NatGatewaysReadyCondition, clusterv1.DeletedReason, clusterv1.ConditionSeverityInfo, "") 117 118 // EIPs. 119 if err := s.releaseAddresses(); err != nil { 120 return err 121 } 122 123 // Internet Gateways. 124 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.InternetGatewayReadyCondition, clusterv1.DeletingReason, clusterv1.ConditionSeverityInfo, "") 125 if err := s.scope.PatchObject(); err != nil { 126 return err 127 } 128 129 if err := s.deleteInternetGateways(); err != nil { 130 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.InternetGatewayReadyCondition, "DeletingFailed", clusterv1.ConditionSeverityWarning, err.Error()) 131 return err 132 } 133 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.InternetGatewayReadyCondition, clusterv1.DeletedReason, clusterv1.ConditionSeverityInfo, "") 134 135 // Subnets. 136 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.SubnetsReadyCondition, clusterv1.DeletingReason, clusterv1.ConditionSeverityInfo, "") 137 if err := s.scope.PatchObject(); err != nil { 138 return err 139 } 140 141 if err := s.deleteSubnets(); err != nil { 142 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.SubnetsReadyCondition, "DeletingFailed", clusterv1.ConditionSeverityWarning, err.Error()) 143 return err 144 } 145 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.SubnetsReadyCondition, clusterv1.DeletedReason, clusterv1.ConditionSeverityInfo, "") 146 147 // Secondary CIDR. 148 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.SecondaryCidrsReadyCondition, clusterv1.DeletingReason, clusterv1.ConditionSeverityInfo, "") 149 if err := s.disassociateSecondaryCidr(); err != nil { 150 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.SecondaryCidrsReadyCondition, "DisassociateFailed", clusterv1.ConditionSeverityWarning, err.Error()) 151 return err 152 } 153 154 // VPC. 155 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.VpcReadyCondition, clusterv1.DeletingReason, clusterv1.ConditionSeverityInfo, "") 156 if err := s.scope.PatchObject(); err != nil { 157 return err 158 } 159 160 if err := s.deleteVPC(); err != nil { 161 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.VpcReadyCondition, "DeletingFailed", clusterv1.ConditionSeverityWarning, err.Error()) 162 return err 163 } 164 conditions.MarkFalse(s.scope.InfraCluster(), infrav1.VpcReadyCondition, clusterv1.DeletedReason, clusterv1.ConditionSeverityInfo, "") 165 166 s.scope.V(2).Info("Delete network completed successfully") 167 return nil 168 }