@@ -100,11 +100,11 @@ func GetSubnetID(ctx context.Context, client client.Client, vpcID int, subnetNam
100100 return 0 , subnetLookupError {subnetName }
101101}
102102
103- // GetVPCIPAddresses returns vpc ip's for given VPC label
104- func GetVPCIPAddresses (ctx context.Context , client client.Client , vpcName string ) ([]linodego. VPCIP , error ) {
103+ // getVPCIDAndFilter returns the VPC ID and a resultFilter for subnet names (if any)
104+ func getVPCIDAndFilter (ctx context.Context , client client.Client , vpcName string ) (int , string , error ) {
105105 vpcID , err := GetVPCID (ctx , client , strings .TrimSpace (vpcName ))
106106 if err != nil {
107- return nil , err
107+ return 0 , "" , err
108108 }
109109
110110 resultFilter := ""
@@ -133,68 +133,48 @@ func GetVPCIPAddresses(ctx context.Context, client client.Client, vpcName string
133133 filter , err = json .Marshal (subnetFilter {SubnetID : strings .Join (subnetIDList , "," )})
134134 if err != nil {
135135 klog .Error ("could not create JSON filter for subnet_id" )
136+ } else {
137+ resultFilter = string (filter )
136138 }
137- resultFilter = string (filter )
138139 }
139140
140- resp , err := client .ListVPCIPAddresses (ctx , vpcID , linodego .NewListOptions (0 , resultFilter ))
141+ return vpcID , resultFilter , nil
142+ }
143+
144+ // handleNotFoundError checks if the error is a '404 Not Found error' and deletes the entry from the cache.
145+ func handleNotFoundError (err error , vpcName string ) error {
146+ if linodego .ErrHasStatus (err , http .StatusNotFound ) {
147+ Mu .Lock ()
148+ defer Mu .Unlock ()
149+ klog .Errorf ("vpc %s not found. Deleting entry from cache" , vpcName )
150+ delete (vpcIDs , vpcName )
151+ }
152+ return err
153+ }
154+
155+ // GetVPCIPAddresses returns vpc ip's for given VPC label
156+ func GetVPCIPAddresses (ctx context.Context , client client.Client , vpcName string ) ([]linodego.VPCIP , error ) {
157+ vpcID , resultFilter , err := getVPCIDAndFilter (ctx , client , vpcName )
141158 if err != nil {
142- if linodego .ErrHasStatus (err , http .StatusNotFound ) {
143- Mu .Lock ()
144- defer Mu .Unlock ()
145- klog .Errorf ("vpc %s not found. Deleting entry from cache" , vpcName )
146- delete (vpcIDs , vpcName )
147- }
148159 return nil , err
149160 }
161+
162+ resp , err := client .ListVPCIPAddresses (ctx , vpcID , linodego .NewListOptions (0 , resultFilter ))
163+ if err != nil {
164+ return nil , handleNotFoundError (err , vpcName )
165+ }
150166 return resp , nil
151167}
152168
153169func GetVPCIPv6Addresses (ctx context.Context , client client.Client , vpcName string ) ([]linodego.VPCIP , error ) {
154- vpcID , err := GetVPCID (ctx , client , strings . TrimSpace ( vpcName ) )
170+ vpcID , resultFilter , err := getVPCIDAndFilter (ctx , client , vpcName )
155171 if err != nil {
156172 return nil , err
157173 }
158174
159- resultFilter := ""
160-
161- // Get subnet ID(s) from name(s) if subnet-names is specified
162- if len (Options .SubnetNames ) > 0 {
163- // subnetIDList is a slice of strings for ease of use with resultFilter
164- subnetIDList := []string {}
165-
166- for _ , name := range Options .SubnetNames {
167- // For caching
168- var subnetID int
169- subnetID , err = GetSubnetID (ctx , client , vpcID , name )
170- // Don't filter subnets we can't find
171- if err != nil {
172- klog .Errorf ("subnet %s not found due to error: %v. Skipping." , name , err )
173- continue
174- }
175-
176- // For use with the JSON filter
177- subnetIDList = append (subnetIDList , strconv .Itoa (subnetID ))
178- }
179-
180- // Assign the list of IDs to a stringified JSON filter
181- var filter []byte
182- filter , err = json .Marshal (subnetFilter {SubnetID : strings .Join (subnetIDList , "," )})
183- if err != nil {
184- klog .Error ("could not create JSON filter for subnet_id" )
185- }
186- resultFilter = string (filter )
187- }
188-
189175 resp , err := client .ListVPCIPv6Addresses (ctx , vpcID , linodego .NewListOptions (0 , resultFilter ))
190176 if err != nil {
191- if linodego .ErrHasStatus (err , http .StatusNotFound ) {
192- Mu .Lock ()
193- defer Mu .Unlock ()
194- klog .Errorf ("vpc %s not found. Deleting entry from cache" , vpcName )
195- delete (vpcIDs , vpcName )
196- }
197- return nil , err
177+ return nil , handleNotFoundError (err , vpcName )
198178 }
199179 return resp , nil
200180}
0 commit comments