Skip to content

Commit

Permalink
[Network] az network virtual-appliance: Support Azure network virtual…
Browse files Browse the repository at this point in the history
… appliance. (#14224)

* waiting for test

* finish tests

* refine tests

* finish

* address comments

* fix
  • Loading branch information
mmyyrroonn authored Jul 9, 2020
1 parent ee7db68 commit c763c5b
Show file tree
Hide file tree
Showing 8 changed files with 52,294 additions and 6 deletions.
12 changes: 12 additions & 0 deletions src/azure-cli/azure/cli/command_modules/network/_client_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,3 +262,15 @@ def cf_bastion_hosts(cli_ctx, _):

def cf_security_partner_providers(cli_ctx, _):
return network_client_factory(cli_ctx).security_partner_providers


def cf_network_virtual_appliances(cli_ctx, _):
return network_client_factory(cli_ctx).network_virtual_appliances


def cf_virtual_appliance_skus(cli_ctx, _):
return network_client_factory(cli_ctx).virtual_appliance_skus


def cf_virtual_appliance_sites(cli_ctx, _):
return network_client_factory(cli_ctx).virtual_appliance_sites
91 changes: 91 additions & 0 deletions src/azure-cli/azure/cli/command_modules/network/_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -6121,3 +6121,94 @@
type: command
short-summary: Show a Azure security partner provider.
"""

helps['network virtual-appliance'] = """
type: group
short-summary: Manage Azure Network Virtual Appliance.
"""

helps['network virtual-appliance create'] = """
type: command
short-summary: Create an Azure network virtual appliance.
examples:
- name: Create an Azure network virtual appliance.
text: |
az network virtual-appliance create -n MyName -g MyRG --vhub {vhubID} --vendor "barracudasdwanrelease" --scale-unit 2 -v latest --asn 10000 --init-config "echo $hello" --boot-blobs {blobUrl1} {blobUrl2} --cloud-blobs {blobUrl3} {blobUrl4}
"""

helps['network virtual-appliance update'] = """
type: command
short-summary: Update an Azure network virtual appliance.
examples:
- name: Update an Azure network virtual appliance.
text: |
az network virtual-appliance update -n MyName -g MyRG --asn 20000 --init-config "echo $hello"
"""

helps['network virtual-appliance show'] = """
type: command
short-summary: Show the detail of an Azure network virtual appliance.
"""

helps['network virtual-appliance list'] = """
type: command
short-summary: List all Azure network virtual appliance.
"""

helps['network virtual-appliance delete'] = """
type: command
short-summary: Delete an Azure network virtual appliance.
"""

helps['network virtual-appliance site'] = """
type: group
short-summary: Manage Azure Network Virtual Appliance Site.
"""

helps['network virtual-appliance site create'] = """
type: command
short-summary: Create an Azure network virtual appliance site.
examples:
- name: Create an Azure network virtual appliance site.
text: |
az network virtual-appliance site create -n MyName -g MyRG --appliance-name MyAppliance --address-prefix 10.0.0.0/24 --allow --default --optimize
"""

helps['network virtual-appliance site update'] = """
type: command
short-summary: Update an Azure network virtual appliance site.
examples:
- name: Update an Azure network virtual appliance site.
text: |
az network virtual-appliance site update -n MyName -g MyRG --appliance-name MyAppliance --address-prefix 10.0.0.0/24 --allow false --default false --optimize false
"""

helps['network virtual-appliance site show'] = """
type: command
short-summary: Show the detail of an Azure network virtual appliance site.
"""

helps['network virtual-appliance site list'] = """
type: command
short-summary: List all Azure network virtual appliance site.
"""

helps['network virtual-appliance site delete'] = """
type: command
short-summary: Delete an Azure network virtual appliance site.
"""

helps['network virtual-appliance sku'] = """
type: group
short-summary: Manage Azure Network Virtual Appliance Sku.
"""

helps['network virtual-appliance sku show'] = """
type: command
short-summary: Show the detail of an Azure network virtual appliance sku.
"""

helps['network virtual-appliance sku list'] = """
type: command
short-summary: List all Azure network virtual appliance sku.
"""
33 changes: 30 additions & 3 deletions src/azure-cli/azure/cli/command_modules/network/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
validate_express_route_port, bandwidth_validator_factory,
get_header_configuration_validator, validate_nat_gateway, validate_match_variables,
validate_waf_policy, get_subscription_list_validator, validate_frontend_ip_configs,
validate_application_gateway_identity, validate_virtul_network_gateway, validate_private_dns_zone,
validate_user_assigned_identity, validate_virtul_network_gateway, validate_private_dns_zone,
NWConnectionMonitorEndpointFilterItemAction, NWConnectionMonitorTestConfigurationHTTPRequestHeaderAction,
process_private_link_resource_id_argument, process_private_endpoint_connection_id_argument,
process_vnet_name_or_id)
Expand Down Expand Up @@ -129,7 +129,7 @@ def load_arguments(self, _):
c.argument('firewall_policy', options_list='--waf-policy', min_api='2018-12-01', help='Name or ID of a web application firewall (WAF) policy.', validator=validate_waf_policy)

with self.argument_context('network application-gateway', arg_group='Identity') as c:
c.argument('user_assigned_identity', options_list='--identity', help="Name or ID of the ManagedIdentity Resource", validator=validate_application_gateway_identity)
c.argument('user_assigned_identity', options_list='--identity', help="Name or ID of the ManagedIdentity Resource", validator=validate_user_assigned_identity)

with self.argument_context('network application-gateway', arg_group='Network') as c:
c.argument('virtual_network_name', virtual_network_name_type)
Expand Down Expand Up @@ -773,7 +773,7 @@ def load_arguments(self, _):

with self.argument_context('network express-route port identity assign', arg_group='Identity', min_api='2019-08-01') as c:
c.argument('user_assigned_identity', options_list='--identity',
help="Name or ID of the ManagedIdentity Resource", validator=validate_application_gateway_identity)
help="Name or ID of the ManagedIdentity Resource", validator=validate_user_assigned_identity)
# endregion

# region PrivateEndpoint
Expand Down Expand Up @@ -1826,6 +1826,7 @@ def load_arguments(self, _):
c.argument('security_provider_name', arg_type=get_enum_type(SecurityProviderName), help='The security provider name', options_list=['--provider'])
c.argument('security_partner_provider_name', options_list=['--name', '-n'], help='Name of the Security Partner Provider.')
c.argument('virtual_hub', options_list=['--vhub'], help='Name or ID of the virtual hub to which the Security Partner Provider belongs.', validator=validate_virtual_hub)
# endregion

# region PrivateLinkResource and PrivateEndpointConnection
from azure.cli.command_modules.network.private_link_resource_and_endpoint_connections.custom import TYPE_CLIENT_MAPPING, register_providers
Expand All @@ -1849,3 +1850,29 @@ def load_arguments(self, _):
c.argument('resource_group_name', required=False)
c.argument('resource_name', required=False, help='Name of the resource')
# endregion

# region Network Virtual Appliance
with self.argument_context('network virtual-appliance', arg_group='Sku') as c:
c.argument('vendor', help='Virtual Appliance Vendor.')
c.argument('bundled_scale_unit', options_list=['--scale-unit'], help='Virtual Appliance Scale Unit.')
c.argument('market_place_version', options_list=['--version', '-v'], help='Virtual Appliance Version.')
with self.argument_context('network virtual-appliance') as c:
c.argument('network_virtual_appliance_name', help='The name of Network Virtual Appliance', options_list=['--name', '-n'])
c.argument('boot_strap_configuration_blobs', options_list=['--boot-strap-config-blobs', '--boot-blobs'], nargs='+', help='Space-separated list of BootStrapConfigurationBlobs storage URLs.')
c.argument('cloud_init_configuration_blobs', options_list=['--cloud-init-config-blobs', '--cloud-blobs'], nargs='+', help='Space-separated list of CloudInitConfigurationBlob storage URLs.')
c.argument('virtual_hub', options_list=['--vhub'], help='Name or ID of the virtual hub to which the Security Partner Provider belongs.', validator=validate_virtual_hub)
c.argument('cloud_init_configuration', options_list=['--cloud-init-config', '--init-config'], help='CloudInitConfiguration scripts that will be run during cloud initialization')
c.argument('asn', type=int, help='VirtualAppliance ASN. The valid value ranges from 1 to 4294967295. ')

with self.argument_context('network virtual-appliance sku') as c:
c.argument('sku_name', help='The name of Network Virtual Appliance SKU', options_list=['--name', '-n'])

with self.argument_context('network virtual-appliance site') as c:
c.argument('network_virtual_appliance_name', options_list=['--appliance-name'])
c.argument('site_name', help='The name of Network Virtual Appliance Site', options_list=['--name', '-n'])
c.argument('address_prefix', help='Address Prefix of Network Virtual Appliance Site')
with self.argument_context('network virtual-appliance site', arg_group='Breakout of O365') as c:
c.argument('allow', arg_type=get_three_state_flag(), help='Flag to control breakout of o365 allow category.')
c.argument('optimize', arg_type=get_three_state_flag(), help='Flag to control breakout of o365 optimize category.')
c.argument('default', arg_type=get_three_state_flag(), help='Flag to control breakout of o365 default category.')
# endregion
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ def validate_dns_record_type(namespace):
return


def validate_application_gateway_identity(cmd, namespace):
def validate_user_assigned_identity(cmd, namespace):
from msrestazure.tools import is_valid_resource_id, resource_id

if namespace.user_assigned_identity and not is_valid_resource_id(namespace.user_assigned_identity):
Expand Down Expand Up @@ -882,7 +882,7 @@ def process_ag_create_namespace(cmd, namespace):
validate_tags(namespace)
validate_custom_error_pages(namespace)
validate_waf_policy(cmd, namespace)
validate_application_gateway_identity(cmd, namespace)
validate_user_assigned_identity(cmd, namespace)


def process_auth_create_namespace(cmd, namespace):
Expand Down
42 changes: 41 additions & 1 deletion src/azure-cli/azure/cli/command_modules/network/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@
cf_express_route_ports, cf_express_route_port_locations, cf_express_route_links, cf_app_gateway_waf_policy,
cf_service_tags, cf_private_link_services, cf_private_endpoint_types, cf_peer_express_route_circuit_connections,
cf_virtual_router, cf_virtual_router_peering, cf_service_aliases, cf_bastion_hosts, cf_flow_logs,
cf_private_dns_zone_groups, cf_security_partner_providers, cf_load_balancer_backend_pools)
cf_private_dns_zone_groups, cf_security_partner_providers, cf_load_balancer_backend_pools,
cf_network_virtual_appliances, cf_virtual_appliance_skus, cf_virtual_appliance_sites)
from azure.cli.command_modules.network._util import (
list_network_resource_property, get_network_resource_property_entry, delete_network_resource_property_entry)
from azure.cli.command_modules.network._format import (
Expand Down Expand Up @@ -371,6 +372,24 @@ def load_command_table(self, _):
min_api='2020-03-01'
)

network_virtual_appliances_sdk = CliCommandType(
operations_tmpl='azure.mgmt.network.operations#NetworkVirtualAppliancesOperations.{}',
client_factory=cf_network_virtual_appliances,
min_api='2020-05-01'
)

virtual_appliance_skus_sdk = CliCommandType(
operations_tmpl='azure.mgmt.network.operations#VirtualApplianceSkusOperations.{}',
client_factory=cf_virtual_appliance_skus,
min_api='2020-05-01'
)

virtual_appliance_sites_sdk = CliCommandType(
operations_tmpl='azure.mgmt.network.operations#VirtualApplianceSitesOperations.{}',
client_factory=cf_virtual_appliance_sites,
min_api='2020-05-01'
)

network_custom = CliCommandType(operations_tmpl='azure.cli.command_modules.network.custom#{}')

# endregion
Expand Down Expand Up @@ -1208,6 +1227,7 @@ def _make_singular(value):
g.show_command('show', 'get')
g.custom_command('list', 'list_security_partner_provider')
g.command('delete', 'delete')
# endregion

# region PrivateLinkResource and PrivateEndpointConnection
plr_and_pec_custom = CliCommandType(operations_tmpl='azure.cli.command_modules.network.private_link_resource_and_endpoint_connections.custom#{}')
Expand All @@ -1220,3 +1240,23 @@ def _make_singular(value):
g.custom_show_command('show', 'show_private_endpoint_connection')
g.custom_command('list', 'list_private_endpoint_connection')
# endregion

# region Network Virtual Appliance
with self.command_group('network virtual-appliance', network_virtual_appliances_sdk, client_factory=cf_network_virtual_appliances, is_preview=True) as g:
g.custom_command('create', 'create_network_virtual_appliance')
g.generic_update_command('update', custom_func_name='update_network_virtual_appliance')
g.show_command('show', 'get')
g.custom_command('list', 'list_network_virtual_appliance')
g.command('delete', 'delete', confirmation=True)

with self.command_group('network virtual-appliance site', virtual_appliance_sites_sdk, client_factory=cf_virtual_appliance_sites, is_preview=True) as g:
g.custom_command('create', 'create_network_virtual_appliance_site')
g.generic_update_command('update', custom_func_name='update_network_virtual_appliance_site')
g.show_command('show', 'get')
g.command('delete', 'delete', confirmation=True)
g.command('list', 'list')

with self.command_group('network virtual-appliance sku', virtual_appliance_skus_sdk, is_preview=True) as g:
g.show_command('show', 'get')
g.command('list', 'list')
# endregion
74 changes: 74 additions & 0 deletions src/azure-cli/azure/cli/command_modules/network/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -5960,3 +5960,77 @@ def list_security_partner_provider(cmd, resource_group_name=None):
return client.list_by_resource_group(resource_group_name=resource_group_name)
return client.list()
# endregion


# region network virtual appliance
def create_network_virtual_appliance(cmd, client, resource_group_name, network_virtual_appliance_name,
vendor, bundled_scale_unit, market_place_version,
virtual_hub, boot_strap_configuration_blobs=None,
cloud_init_configuration_blobs=None,
cloud_init_configuration=None, asn=None,
location=None, tags=None, no_wait=False):
(NetworkVirtualAppliance,
SubResource,
VirtualApplianceSkuProperties) = cmd.get_models('NetworkVirtualAppliance',
'SubResource',
'VirtualApplianceSkuProperties')

virtual_appliance = NetworkVirtualAppliance(boot_strap_configuration_blobs=boot_strap_configuration_blobs,
cloud_init_configuration_blobs=cloud_init_configuration_blobs,
cloud_init_configuration=cloud_init_configuration,
virtual_appliance_asn=asn,
virtual_hub=SubResource(id=virtual_hub),
nva_sku=VirtualApplianceSkuProperties(
vendor=vendor,
bundled_scale_unit=bundled_scale_unit,
market_place_version=market_place_version
),
location=location,
tags=tags)

return sdk_no_wait(no_wait, client.create_or_update, resource_group_name, network_virtual_appliance_name, virtual_appliance)


def update_network_virtual_appliance(instance, cmd, cloud_init_configuration=None, asn=None):
with cmd.update_context(instance) as c:
c.set_param('virtual_appliance_asn', asn)
c.set_param('cloud_init_configuration', cloud_init_configuration)
return instance


def list_network_virtual_appliance(cmd, client, resource_group_name=None):
if resource_group_name:
return client.list_by_resource_group(resource_group_name=resource_group_name)
return client.list()


def create_network_virtual_appliance_site(cmd, client, resource_group_name, network_virtual_appliance_name,
site_name, address_prefix, allow=None, optimize=None, default=None,
no_wait=False):
(BreakOutCategoryPolicies,
Office365PolicyProperties,
VirtualApplianceSite) = cmd.get_models('BreakOutCategoryPolicies',
'Office365PolicyProperties',
'VirtualApplianceSite')

virtual_appliance_site = VirtualApplianceSite(address_prefix=address_prefix,
o365_policy=Office365PolicyProperties(
break_out_categories=BreakOutCategoryPolicies(
allow=allow,
optimize=optimize,
default=default
)
))

return sdk_no_wait(no_wait, client.create_or_update,
resource_group_name, network_virtual_appliance_name, site_name, virtual_appliance_site)


def update_network_virtual_appliance_site(instance, cmd, address_prefix, allow=None, optimize=None, default=None):
with cmd.update_context(instance) as c:
c.set_param('address_prefix', address_prefix)
c.set_param('o365_policy.break_out_categories.allow', allow)
c.set_param('o365_policy.break_out_categories.optimize', optimize)
c.set_param('o365_policy.break_out_categories.default', default)
return instance
# endregion
Loading

0 comments on commit c763c5b

Please sign in to comment.