Skip to content

Commit e6e8daf

Browse files
authoredNov 17, 2021
{Network} az network lb address-pool: support new option update (Azure#20333)
* support address-pool update * fix * fix * check whether new_addresses is empty
1 parent 9546f46 commit e6e8daf

File tree

6 files changed

+906
-507
lines changed

6 files changed

+906
-507
lines changed
 

‎linter_exclusions.yml

+5
Original file line numberDiff line numberDiff line change
@@ -2395,6 +2395,11 @@ network lb address-pool create:
23952395
backend_addresses_config_file:
23962396
rule_exclusions:
23972397
- option_length_too_long
2398+
network lb address-pool update:
2399+
parameters:
2400+
backend_addresses_config_file:
2401+
rule_exclusions:
2402+
- option_length_too_long
23982403
network lb create:
23992404
parameters:
24002405
private_ip_address_version:

‎src/azure-cli/azure/cli/command_modules/network/_help.py

+49
Original file line numberDiff line numberDiff line change
@@ -3554,6 +3554,55 @@
35543554
text: az network lb address-pool create -g MyResourceGroup --lb-name MyLb -n MyAddressPool --backend-addresses-config-file @config_file.json
35553555
"""
35563556

3557+
helps['network lb address-pool update'] = """
3558+
type: command
3559+
short-summary: Update an address pool.
3560+
parameters:
3561+
- name: --backend-address
3562+
short-summary: Backend addresses information for backend address pool. If it's used, --vnet is required or subnet is required.
3563+
long-summary: |
3564+
Usage1: --backend-address name=addr1 ip-address=10.0.0.1 --vnet MyVnet
3565+
Usage2: --backend-address name=addr1 ip-address=10.0.0.1 subnet=/subscriptions/000/resourceGroups/MyRg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/subnet1
3566+
Usage3: --backend-address name=addr1 ip-address=10.0.0.1 subnet=subnet1 --vnet MyVnet
3567+
3568+
name: Required. The name of the backend address.
3569+
ip-address: Required. Ip Address within the Virtual Network.
3570+
subnet: Name or Id of the subnet.
3571+
3572+
Multiple backend addresses can be specified by using more than one `--backend-address` argument.
3573+
- name: --backend-addresses-config-file
3574+
short-summary: A config file used to set backend addresses. This argument is for experienced users. You may encounter parse errors if the json file is invalid.
3575+
long-summary: |
3576+
Usage: --backend-addresses-config-file @"{config_file.json}"
3577+
3578+
A example config file is
3579+
[
3580+
{
3581+
"name": "address1",
3582+
"virtualNetwork": "clitestvnet",
3583+
"ipAddress": "10.0.0.4"
3584+
},
3585+
{
3586+
"name": "address2",
3587+
"virtualNetwork": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli_test_lb_address_pool_addresses000001/providers/Microsoft.Network/virtualNetworks/clitestvnet",
3588+
"ipAddress": "10.0.0.5"
3589+
},
3590+
{
3591+
"name": "address3",
3592+
"subnet": "subnet3",
3593+
"ipAddress": "10.0.0.6"
3594+
},
3595+
{
3596+
"name": "address4",
3597+
"subnet": "/subscriptions/000/resourceGroups/MyRg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/subnet4",
3598+
"ipAddress": "10.0.0.7"
3599+
}
3600+
]
3601+
examples:
3602+
- name: Update an address pool with several backend addresses using key-value arguments.
3603+
text: az network lb address-pool update -g MyResourceGroup --lb-name MyLb -n MyAddressPool --vnet {VnetResourceId} --backend-address name=addr1 ip-address=10.0.0.1 --backend-address name=addr2 ip-address=10.0.0.3
3604+
"""
3605+
35573606
helps['network lb address-pool delete'] = """
35583607
type: command
35593608
short-summary: Delete an address pool.

‎src/azure-cli/azure/cli/command_modules/network/commands.py

+2
Original file line numberDiff line numberDiff line change
@@ -949,6 +949,8 @@ def _make_singular(value):
949949

950950
with self.command_group('network lb address-pool', network_lb_backend_pool_sdk) as g:
951951
g.custom_command('create', 'create_lb_backend_address_pool')
952+
g.generic_update_command('update', setter_name='begin_create_or_update',
953+
custom_func_name='set_lb_backend_address_pool')
952954
g.show_command('show', 'get')
953955
g.command('list', 'list')
954956
g.custom_command('delete', 'delete_lb_backend_address_pool')

‎src/azure-cli/azure/cli/command_modules/network/custom.py

+68
Original file line numberDiff line numberDiff line change
@@ -3908,6 +3908,74 @@ def create_lb_backend_address_pool(cmd, resource_group_name, load_balancer_name,
39083908
new_pool)
39093909

39103910

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+
39113979
def delete_lb_backend_address_pool(cmd, resource_group_name, load_balancer_name, backend_address_pool_name):
39123980
from azure.cli.core.commands import LongRunningOperation
39133981
ncf = network_client_factory(cmd.cli_ctx)

0 commit comments

Comments
 (0)
Please sign in to comment.