Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Network] az network virtual-appliance: Support Azure network virtual appliance. #14224

Merged
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
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 @@ -6113,3 +6113,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 @@ -768,7 +768,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',
mmyyrroonn marked this conversation as resolved.
Show resolved Hide resolved
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 @@ -1821,6 +1821,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 @@ -1844,3 +1845,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.')
mmyyrroonn marked this conversation as resolved.
Show resolved Hide resolved
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 @@ -5933,3 +5933,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