def build_public_ip_resource(cmd, name, location, tags, address_allocation, dns_name, sku, zone): public_ip_properties = {'publicIPAllocationMethod': address_allocation} if dns_name: public_ip_properties['dnsSettings'] = {'domainNameLabel': dns_name} public_ip = { 'apiVersion': get_target_network_api(cmd.cli_ctx), 'type': 'Microsoft.Network/publicIPAddresses', 'name': name, 'location': location, 'tags': tags, 'dependsOn': [], 'properties': public_ip_properties } # when multiple zones are provided(through a x-zone scale set), we don't propagate to PIP becasue it doesn't # support x-zone; rather we will rely on the Standard LB to work with such scale sets if zone and len(zone) == 1: public_ip['zones'] = zone if sku and cmd.supported_api_version(ResourceType.MGMT_NETWORK, min_api='2017-08-01'): public_ip['sku'] = {'name': sku} return public_ip
def build_load_balancer_resource(cmd, name, location, tags, backend_pool_name, nat_pool_name, backend_port, frontend_ip_name, public_ip_id, subnet_id, private_ip_address, private_ip_allocation, sku): lb_id = "resourceId('Microsoft.Network/loadBalancers', '{}')".format(name) frontend_ip_config = _build_frontend_ip_config(frontend_ip_name, public_ip_id, private_ip_address, private_ip_allocation, subnet_id) lb_properties = { 'backendAddressPools': [{ 'name': backend_pool_name }], 'inboundNatPools': [{ 'name': nat_pool_name, 'properties': { 'frontendIPConfiguration': { 'id': "[concat({}, '/frontendIPConfigurations/', '{}')]".format( lb_id, frontend_ip_name) }, 'protocol': 'tcp', 'frontendPortRangeStart': '50000', 'frontendPortRangeEnd': '50119', 'backendPort': backend_port } }], 'frontendIPConfigurations': [frontend_ip_config] } lb = { 'type': 'Microsoft.Network/loadBalancers', 'name': name, 'location': location, 'tags': tags, 'apiVersion': get_target_network_api(cmd.cli_ctx), 'dependsOn': [], 'properties': lb_properties } if sku and cmd.supported_api_version(ResourceType.MGMT_NETWORK, min_api='2017-08-01'): lb['sku'] = {'name': sku} # LB rule is the way to enable SNAT so outbound connections are possible if sku.lower() == 'standard': lb_properties['loadBalancingRules'] = [{ "name": "LBRule", "properties": { "frontendIPConfiguration": { 'id': "[concat({}, '/frontendIPConfigurations/', '{}')]". format(lb_id, frontend_ip_name) }, "backendAddressPool": { "id": "[concat({}, '/backendAddressPools/', '{}')]".format( lb_id, backend_pool_name) }, "protocol": "tcp", "frontendPort": 80, "backendPort": 80, "enableFloatingIP": False, "idleTimeoutInMinutes": 5, } }] return lb
def build_load_balancer_resource(cmd, name, location, tags, backend_pool_name, nat_pool_name, backend_port, frontend_ip_name, public_ip_id, subnet_id, private_ip_address, private_ip_allocation, sku, instance_count, disable_overprovision): lb_id = "resourceId('Microsoft.Network/loadBalancers', '{}')".format(name) frontend_ip_config = _build_frontend_ip_config(frontend_ip_name, public_ip_id, private_ip_address, private_ip_allocation, subnet_id) lb_properties = { 'backendAddressPools': [ { 'name': backend_pool_name } ], 'inboundNatPools': [ { 'name': nat_pool_name, 'properties': { 'frontendIPConfiguration': { 'id': "[concat({}, '/frontendIPConfigurations/', '{}')]".format( lb_id, frontend_ip_name) }, 'protocol': 'tcp', 'frontendPortRangeStart': '50000', # keep 50119 as minimum for backward compat, and ensure over-provision is taken care of 'frontendPortRangeEnd': str(max(50119, 49999 + instance_count * (1 if disable_overprovision else 2))), 'backendPort': backend_port } } ], 'frontendIPConfigurations': [frontend_ip_config] } lb = { 'type': 'Microsoft.Network/loadBalancers', 'name': name, 'location': location, 'tags': tags, 'apiVersion': get_target_network_api(cmd.cli_ctx), 'dependsOn': [], 'properties': lb_properties } if sku and cmd.supported_api_version(ResourceType.MGMT_NETWORK, min_api='2017-08-01'): lb['sku'] = {'name': sku} # LB rule is the way to enable SNAT so outbound connections are possible if sku.lower() == 'standard': lb_properties['loadBalancingRules'] = [{ "name": "LBRule", "properties": { "frontendIPConfiguration": { 'id': "[concat({}, '/frontendIPConfigurations/', '{}')]".format(lb_id, frontend_ip_name) }, "backendAddressPool": { "id": "[concat({}, '/backendAddressPools/', '{}')]".format(lb_id, backend_pool_name) }, "protocol": "tcp", "frontendPort": 80, "backendPort": 80, "enableFloatingIP": False, "idleTimeoutInMinutes": 5, } }] return lb