Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion src/azure-cli-core/azure/cli/core/commands/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,12 @@ def get_api_version(self, resource_type=None, operation_group=None):
resource_type = resource_type or self.command_kwargs.get('resource_type', None)
return self.loader.get_api_version(resource_type=resource_type, operation_group=operation_group)

def supported_api_version(self, resource_type=None, min_api=None, max_api=None, operation_group=None):
def supported_api_version(self, resource_type=None, min_api=None, max_api=None,
operation_group=None, parameter_name=None):
if min_api and parameter_name:
parameter_name = None
if parameter_name is not None and parameter_name in self.arguments:
min_api = self.arguments[parameter_name].type.settings.get('min_api', None)
resource_type = resource_type or self.command_kwargs.get('resource_type', None)
return self.loader.supported_api_version(resource_type=resource_type, min_api=min_api, max_api=max_api,
operation_group=operation_group)
Expand Down
3 changes: 2 additions & 1 deletion src/azure-cli/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ Release History

* az application-gateway probe: Support --port option to specify a port for probing backend servers when create and update
* az network list-service-aliases: Support list service aliases which can be used for Service Endpoint Policies

* az network application-gateway url-path-map create/update: bug fix for `--waf-policy`
* az network application-gateway: support `--rewrite-rule-set`

**Packaging**

Expand Down
8 changes: 6 additions & 2 deletions src/azure-cli/azure/cli/command_modules/network/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ def load_arguments(self, _):
c.argument('http_settings', help='The name or ID of the backend HTTP settings.', completer=get_ag_subresource_completion_list('backend_http_settings_collection'))
c.argument('rule_type', help='The rule type (Basic, PathBasedRouting).')
c.argument('url_path_map', help='The name or ID of the URL path map.', completer=get_ag_subresource_completion_list('url_path_maps'))
c.argument('rewrite_rule_set', min_api='2019-04-01', help='The name or ID of the rewrite rule set.')

with self.argument_context('network application-gateway ssl-cert') as c:
c.argument('cert_data', options_list='--cert-file', type=file_type, completer=FilesCompleter(), help='The path to the PFX certificate file.', validator=validate_ssl_cert)
Expand All @@ -297,22 +298,25 @@ def load_arguments(self, _):
c.argument('paths', nargs='+', help='Space-separated list of paths to associate with the rule. Valid paths start and end with "/" (ex: "/bar/")', arg_group='First Rule')
c.argument('address_pool', help='The name or ID of the backend address pool to use with the created rule.', completer=get_ag_subresource_completion_list('backend_address_pools'), arg_group='First Rule')
c.argument('http_settings', help='The name or ID of the HTTP settings to use with the created rule.', completer=get_ag_subresource_completion_list('backend_http_settings_collection'), arg_group='First Rule')
c.argument('firewall_policy', min_api='2019-09-01', help='Name or ID of a Firewall Policy resource.')
c.argument('firewall_policy', min_api='2019-09-01', help='Name or ID of a Firewall Policy resource.', arg_group='First Rule')
c.argument('rewrite_rule_set', min_api='2019-04-01', help='The name or ID of the rewrite rule set. If not specified, the default for the map will be used.', arg_group='First Rule')
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need add completer=get_ag_subresource_completion_list() for "rewrite_rule_set"?


with self.argument_context('network application-gateway url-path-map create') as c:
c.argument('default_address_pool', help='The name or ID of the default backend address pool, if different from --address-pool.', completer=get_ag_subresource_completion_list('backend_address_pools'))
c.argument('default_http_settings', help='The name or ID of the default HTTP settings, if different from --http-settings.', completer=get_ag_subresource_completion_list('backend_http_settings_collection'))
c.argument('default_rewrite_rule_set', min_api='2019-04-01', help='The name or ID of the default rewrite rule set, if different from --rewrite-rule-set.')

with self.argument_context('network application-gateway url-path-map update') as c:
c.argument('default_address_pool', help='The name or ID of the default backend address pool.', completer=get_ag_subresource_completion_list('backend_address_pools'))
c.argument('default_http_settings', help='The name or ID of the default HTTP settings.', completer=get_ag_subresource_completion_list('backend_http_settings_collection'))
c.argument('default_rewrite_rule_set', min_api='2019-04-01', help='The name or ID of the default rewrite rule set.')

with self.argument_context('network application-gateway url-path-map rule') as c:
c.argument('item_name', options_list=['--name', '-n'], help='The name of the url-path-map rule.', completer=ag_url_map_rule_completion_list, id_part='child_name_2')
c.argument('url_path_map_name', options_list='--path-map-name', help='The name of the URL path map.', completer=get_ag_subresource_completion_list('url_path_maps'), id_part='child_name_1')
c.argument('address_pool', help='The name or ID of the backend address pool. If not specified, the default for the map will be used.', completer=get_ag_subresource_completion_list('backend_address_pools'))
c.argument('http_settings', help='The name or ID of the HTTP settings. If not specified, the default for the map will be used.', completer=get_ag_subresource_completion_list('backend_http_settings_collection'))
for item in ['address_pool', 'http_settings', 'redirect_config', 'paths']:
for item in ['address_pool', 'http_settings', 'redirect_config', 'paths', 'rewrite_rule_set', 'firewall_policy']:
c.argument(item, arg_group=None)

with self.argument_context('network application-gateway url-path-map rule create') as c:
Expand Down
15 changes: 14 additions & 1 deletion src/azure-cli/azure/cli/command_modules/network/_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -770,6 +770,10 @@ def process_ag_rule_create_namespace(cmd, namespace): # pylint: disable=unused-
namespace.redirect_config = _generate_ag_subproperty_id(
cmd.cli_ctx, namespace, 'redirectConfigurations', namespace.redirect_config)

if namespace.rewrite_rule_set and not is_valid_resource_id(namespace.rewrite_rule_set):
namespace.rewrite_rule_set = _generate_ag_subproperty_id(
cmd.cli_ctx, namespace, 'rewriteRuleSets', namespace.rewrite_rule_set)


def process_ag_ssl_policy_set_namespace(namespace):
if namespace.disabled_ssl_protocols and getattr(namespace, 'clear', None):
Expand All @@ -792,11 +796,16 @@ def process_ag_url_path_map_create_namespace(cmd, namespace): # pylint: disable
namespace.default_redirect_config = _generate_ag_subproperty_id(
cmd.cli_ctx, namespace, 'redirectConfigurations', namespace.default_redirect_config)

if namespace.firewall_policy and not is_valid_resource_id(namespace.firewall_policy):
if hasattr(namespace, 'firewall_policy') and \
namespace.firewall_policy and not is_valid_resource_id(namespace.firewall_policy):
namespace.firewall_policy = _generate_ag_subproperty_id(
cmd.cli_ctx, namespace, 'firewallPolicy', namespace.firewall_policy
)

if namespace.default_rewrite_rule_set and not is_valid_resource_id(namespace.default_rewrite_rule_set):
namespace.default_rewrite_rule_set = _generate_ag_subproperty_id(
cmd.cli_ctx, namespace, 'rewriteRuleSets', namespace.default_rewrite_rule_set)

if hasattr(namespace, 'rule_name'):
process_ag_url_path_map_rule_create_namespace(cmd, namespace)

Expand All @@ -816,6 +825,10 @@ def process_ag_url_path_map_rule_create_namespace(cmd, namespace): # pylint: di
namespace.redirect_config = _generate_ag_subproperty_id(
cmd.cli_ctx, namespace, 'redirectConfigurations', namespace.redirect_config)

if namespace.rewrite_rule_set and not is_valid_resource_id(namespace.rewrite_rule_set):
namespace.rewrite_rule_set = _generate_ag_subproperty_id(
cmd.cli_ctx, namespace, 'rewriteRuleSets', namespace.rewrite_rule_set)


def process_ag_create_namespace(cmd, namespace):
get_default_location_from_resource_group(cmd, namespace)
Expand Down
38 changes: 32 additions & 6 deletions src/azure-cli/azure/cli/command_modules/network/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
from azure.cli.command_modules.network.zone_file.make_zone_file import make_zone_file
from azure.cli.core.profiles import ResourceType, supported_api_version


logger = get_logger(__name__)


Expand Down Expand Up @@ -724,7 +725,7 @@ def update_ag_probe(cmd, instance, parent, item_name, protocol=None, host=None,

def create_ag_request_routing_rule(cmd, resource_group_name, application_gateway_name, item_name,
address_pool=None, http_settings=None, http_listener=None, redirect_config=None,
url_path_map=None, rule_type='Basic', no_wait=False):
url_path_map=None, rule_type='Basic', no_wait=False, rewrite_rule_set=None):
ApplicationGatewayRequestRoutingRule, SubResource = cmd.get_models(
'ApplicationGatewayRequestRoutingRule', 'SubResource')
ncf = network_client_factory(cmd.cli_ctx)
Expand All @@ -744,14 +745,18 @@ def create_ag_request_routing_rule(cmd, resource_group_name, application_gateway
url_path_map=SubResource(id=url_path_map) if url_path_map else None)
if cmd.supported_api_version(min_api='2017-06-01'):
new_rule.redirect_configuration = SubResource(id=redirect_config) if redirect_config else None

rewrite_rule_set_name = next(key for key, value in locals().items() if id(value) == id(rewrite_rule_set))
if cmd.supported_api_version(parameter_name=rewrite_rule_set_name):
new_rule.rewrite_rule_set = SubResource(id=rewrite_rule_set) if rewrite_rule_set else None
upsert_to_collection(ag, 'request_routing_rules', new_rule, 'name')
return sdk_no_wait(no_wait, ncf.application_gateways.create_or_update,
resource_group_name, application_gateway_name, ag)


def update_ag_request_routing_rule(cmd, instance, parent, item_name, address_pool=None,
http_settings=None, http_listener=None, redirect_config=None, url_path_map=None,
rule_type=None):
rule_type=None, rewrite_rule_set=None):
SubResource = cmd.get_models('SubResource')
if address_pool is not None:
instance.backend_address_pool = SubResource(id=address_pool)
Expand All @@ -765,6 +770,8 @@ def update_ag_request_routing_rule(cmd, instance, parent, item_name, address_poo
instance.url_path_map = SubResource(id=url_path_map)
if rule_type is not None:
instance.rule_type = rule_type
if rewrite_rule_set is not None:
instance.rewrite_rule_set = SubResource(id=rewrite_rule_set)
return parent


Expand Down Expand Up @@ -848,9 +855,9 @@ def update_ag_trusted_root_certificate(instance, parent, item_name, cert_data=No


def create_ag_url_path_map(cmd, resource_group_name, application_gateway_name, item_name, paths,
address_pool=None, http_settings=None, redirect_config=None,
address_pool=None, http_settings=None, redirect_config=None, rewrite_rule_set=None,
default_address_pool=None, default_http_settings=None, default_redirect_config=None,
no_wait=False, rule_name='default'):
no_wait=False, rule_name='default', default_rewrite_rule_set=None, firewall_policy=None):
ApplicationGatewayUrlPathMap, ApplicationGatewayPathRule, SubResource = cmd.get_models(
'ApplicationGatewayUrlPathMap', 'ApplicationGatewayPathRule', 'SubResource')
ncf = network_client_factory(cmd.cli_ctx)
Expand All @@ -872,6 +879,15 @@ def create_ag_url_path_map(cmd, resource_group_name, application_gateway_name, i
new_map.default_redirect_configuration = \
SubResource(id=default_redirect_config) if default_redirect_config else None

rewrite_rule_set_name = next(key for key, value in locals().items() if id(value) == id(rewrite_rule_set))
if cmd.supported_api_version(parameter_name=rewrite_rule_set_name):
new_rule.rewrite_rule_set = SubResource(id=rewrite_rule_set) if rewrite_rule_set else None
new_map.default_rewrite_rule_set = \
SubResource(id=default_rewrite_rule_set) if default_rewrite_rule_set else None

if cmd.supported_api_version(min_api='2019-09-01'):
new_rule.firewall_policy = SubResource(id=firewall_policy) if firewall_policy else None

# pull defaults from the rule specific properties if the default-* option isn't specified
if new_rule.backend_address_pool and not new_map.default_backend_address_pool:
new_map.default_backend_address_pool = new_rule.backend_address_pool
Expand All @@ -889,7 +905,8 @@ def create_ag_url_path_map(cmd, resource_group_name, application_gateway_name, i


def update_ag_url_path_map(cmd, instance, parent, item_name, default_address_pool=None,
default_http_settings=None, default_redirect_config=None, raw=False):
default_http_settings=None, default_redirect_config=None, raw=False,
default_rewrite_rule_set=None):
SubResource = cmd.get_models('SubResource')
if default_address_pool == '':
instance.default_backend_address_pool = None
Expand All @@ -905,12 +922,17 @@ def update_ag_url_path_map(cmd, instance, parent, item_name, default_address_poo
instance.default_redirect_configuration = None
elif default_redirect_config:
instance.default_redirect_configuration = SubResource(id=default_redirect_config)

if default_rewrite_rule_set == '':
instance.default_rewrite_rule_set = None
elif default_rewrite_rule_set:
instance.default_rewrite_rule_set = SubResource(id=default_rewrite_rule_set)
return parent


def create_ag_url_path_map_rule(cmd, resource_group_name, application_gateway_name, url_path_map_name,
item_name, paths, address_pool=None, http_settings=None, redirect_config=None,
firewall_policy=None, no_wait=False):
firewall_policy=None, no_wait=False, rewrite_rule_set=None):
ApplicationGatewayPathRule, SubResource = cmd.get_models('ApplicationGatewayPathRule', 'SubResource')
ncf = network_client_factory(cmd.cli_ctx)
ag = ncf.application_gateways.get(resource_group_name, application_gateway_name)
Expand All @@ -931,6 +953,10 @@ def create_ag_url_path_map_rule(cmd, resource_group_name, application_gateway_na
if url_map.default_redirect_configuration else None
new_rule.redirect_configuration = SubResource(id=redirect_config) if redirect_config else default_redirect

rewrite_rule_set_name = next(key for key, value in locals().items() if id(value) == id(rewrite_rule_set))
if cmd.supported_api_version(parameter_name=rewrite_rule_set_name):
new_rule.rewrite_rule_set = SubResource(id=rewrite_rule_set) if rewrite_rule_set else None

if cmd.supported_api_version(min_api='2019-09-01'):
new_rule.firewall_policy = SubResource(id=firewall_policy) if firewall_policy else None

Expand Down
Loading