@@ -3908,6 +3908,74 @@ def create_lb_backend_address_pool(cmd, resource_group_name, load_balancer_name,
3908
3908
new_pool )
3909
3909
3910
3910
3911
+ def set_lb_backend_address_pool (cmd , instance , resource_group_name , vnet = None , backend_addresses = None ,
3912
+ backend_addresses_config_file = None ):
3913
+
3914
+ if backend_addresses and backend_addresses_config_file :
3915
+ raise CLIError ('usage error: Only one of --backend-address and --backend-addresses-config-file can be provided at the same time.' ) # pylint: disable=line-too-long
3916
+ if backend_addresses_config_file :
3917
+ if not isinstance (backend_addresses_config_file , list ):
3918
+ raise CLIError ('Config file must be a list. Please see example as a reference.' )
3919
+ for addr in backend_addresses_config_file :
3920
+ if not isinstance (addr , dict ):
3921
+ raise CLIError ('Each address in config file must be a dictionary. Please see example as a reference.' )
3922
+
3923
+ (LoadBalancerBackendAddress ,
3924
+ Subnet ,
3925
+ VirtualNetwork ) = cmd .get_models ('LoadBalancerBackendAddress' ,
3926
+ 'Subnet' ,
3927
+ 'VirtualNetwork' )
3928
+
3929
+ addresses_pool = []
3930
+ if backend_addresses :
3931
+ addresses_pool .extend (backend_addresses )
3932
+ if backend_addresses_config_file :
3933
+ addresses_pool .extend (backend_addresses_config_file )
3934
+ for addr in addresses_pool :
3935
+ if 'virtual_network' not in addr and vnet :
3936
+ addr ['virtual_network' ] = vnet
3937
+
3938
+ # pylint: disable=line-too-long
3939
+ if cmd .supported_api_version (min_api = '2020-11-01' ): # pylint: disable=too-many-nested-blocks
3940
+ try :
3941
+ if addresses_pool :
3942
+ new_addresses = []
3943
+ for addr in addresses_pool :
3944
+ # vnet | subnet | status
3945
+ # name/id | name/id/null | ok
3946
+ # null | id | ok
3947
+ if 'virtual_network' in addr :
3948
+ address = LoadBalancerBackendAddress (name = addr ['name' ],
3949
+ virtual_network = VirtualNetwork (id = _process_vnet_name_and_id (addr ['virtual_network' ], cmd , resource_group_name )),
3950
+ subnet = Subnet (id = _process_subnet_name_and_id (addr ['subnet' ], addr ['virtual_network' ], cmd , resource_group_name )) if 'subnet' in addr else None ,
3951
+ ip_address = addr ['ip_address' ])
3952
+ elif 'subnet' in addr and is_valid_resource_id (addr ['subnet' ]):
3953
+ address = LoadBalancerBackendAddress (name = addr ['name' ],
3954
+ subnet = Subnet (id = addr ['subnet' ]),
3955
+ ip_address = addr ['ip_address' ])
3956
+ else :
3957
+ raise KeyError
3958
+
3959
+ new_addresses .append (address )
3960
+ else :
3961
+ new_addresses = None
3962
+ except KeyError :
3963
+ raise UnrecognizedArgumentError ('Each backend address must have name, ip-address, (vnet name and subnet '
3964
+ 'name | subnet id) information.' )
3965
+ else :
3966
+ try :
3967
+ new_addresses = [LoadBalancerBackendAddress (name = addr ['name' ],
3968
+ virtual_network = VirtualNetwork (id = _process_vnet_name_and_id (addr ['virtual_network' ], cmd , resource_group_name )),
3969
+ ip_address = addr ['ip_address' ]) for addr in addresses_pool ] if addresses_pool else None
3970
+ except KeyError :
3971
+ raise UnrecognizedArgumentError ('Each backend address must have name, vnet and ip-address information.' )
3972
+
3973
+ if new_addresses :
3974
+ instance .load_balancer_backend_addresses = new_addresses
3975
+
3976
+ return instance
3977
+
3978
+
3911
3979
def delete_lb_backend_address_pool (cmd , resource_group_name , load_balancer_name , backend_address_pool_name ):
3912
3980
from azure .cli .core .commands import LongRunningOperation
3913
3981
ncf = network_client_factory (cmd .cli_ctx )
0 commit comments