/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for
 * license information.
 *
 * Code generated by Microsoft (R) AutoRest Code Generator.
 * Changes may cause incorrect behavior and will be lost if the code is
 * regenerated.
 */

'use strict';

/**
 * Application gateway backendhealth http settings.
 *
 */
class ApplicationGatewayBackendHealthServer {
  /**
   * Create a ApplicationGatewayBackendHealthServer.
   * @property {string} [address] IP address or FQDN of backend server.
   * @property {object} [ipConfiguration] Reference of IP configuration of
   * backend server.
   * @property {array} [ipConfiguration.virtualNetworkTaps] The reference to
   * Virtual Network Taps.
   * @property {array} [ipConfiguration.applicationGatewayBackendAddressPools]
   * The reference of ApplicationGatewayBackendAddressPool resource.
   * @property {array} [ipConfiguration.loadBalancerBackendAddressPools] The
   * reference of LoadBalancerBackendAddressPool resource.
   * @property {array} [ipConfiguration.loadBalancerInboundNatRules] A list of
   * references of LoadBalancerInboundNatRules.
   * @property {string} [ipConfiguration.privateIPAddress] Private IP address
   * of the IP configuration.
   * @property {string} [ipConfiguration.privateIPAllocationMethod] The private
   * IP address allocation method. Possible values include: 'Static', 'Dynamic'
   * @property {string} [ipConfiguration.privateIPAddressVersion] Available
   * from Api-Version 2016-03-30 onwards, it represents whether the specific
   * ipconfiguration is IPv4 or IPv6. Default is taken as IPv4. Possible values
   * include: 'IPv4', 'IPv6'
   * @property {object} [ipConfiguration.subnet] Subnet bound to the IP
   * configuration.
   * @property {string} [ipConfiguration.subnet.addressPrefix] The address
   * prefix for the subnet.
   * @property {array} [ipConfiguration.subnet.addressPrefixes] List of
   * address prefixes for the subnet.
   * @property {object} [ipConfiguration.subnet.networkSecurityGroup] The
   * reference of the NetworkSecurityGroup resource.
   * @property {array}
   * [ipConfiguration.subnet.networkSecurityGroup.securityRules] A collection
   * of security rules of the network security group.
   * @property {array}
   * [ipConfiguration.subnet.networkSecurityGroup.defaultSecurityRules] The
   * default security rules of network security group.
   * @property {array}
   * [ipConfiguration.subnet.networkSecurityGroup.networkInterfaces] A
   * collection of references to network interfaces.
   * @property {array} [ipConfiguration.subnet.networkSecurityGroup.subnets] A
   * collection of references to subnets.
   * @property {string}
   * [ipConfiguration.subnet.networkSecurityGroup.resourceGuid] The resource
   * GUID property of the network security group resource.
   * @property {string}
   * [ipConfiguration.subnet.networkSecurityGroup.provisioningState] The
   * provisioning state of the public IP resource. Possible values are:
   * 'Updating', 'Deleting', and 'Failed'.
   * @property {string} [ipConfiguration.subnet.networkSecurityGroup.etag] A
   * unique read-only string that changes whenever the resource is updated.
   * @property {object} [ipConfiguration.subnet.routeTable] The reference of
   * the RouteTable resource.
   * @property {array} [ipConfiguration.subnet.routeTable.routes] Collection of
   * routes contained within a route table.
   * @property {array} [ipConfiguration.subnet.routeTable.subnets] A collection
   * of references to subnets.
   * @property {boolean}
   * [ipConfiguration.subnet.routeTable.disableBgpRoutePropagation] Gets or
   * sets whether to disable the routes learned by BGP on that route table.
   * True means disable.
   * @property {string} [ipConfiguration.subnet.routeTable.provisioningState]
   * The provisioning state of the resource. Possible values are: 'Updating',
   * 'Deleting', and 'Failed'.
   * @property {string} [ipConfiguration.subnet.routeTable.etag] Gets a unique
   * read-only string that changes whenever the resource is updated.
   * @property {object} [ipConfiguration.subnet.natGateway] Nat gateway
   * associated with this subnet.
   * @property {string} [ipConfiguration.subnet.natGateway.id] Resource ID.
   * @property {array} [ipConfiguration.subnet.serviceEndpoints] An array of
   * service endpoints.
   * @property {array} [ipConfiguration.subnet.serviceEndpointPolicies] An
   * array of service endpoint policies.
   * @property {array} [ipConfiguration.subnet.interfaceEndpoints] An array of
   * references to interface endpoints
   * @property {array} [ipConfiguration.subnet.ipConfigurations] Gets an array
   * of references to the network interface IP configurations using subnet.
   * @property {array} [ipConfiguration.subnet.ipConfigurationProfiles] Array
   * of IP configuration profiles which reference this subnet.
   * @property {array} [ipConfiguration.subnet.resourceNavigationLinks] Gets an
   * array of references to the external resources using subnet.
   * @property {array} [ipConfiguration.subnet.serviceAssociationLinks] Gets an
   * array of references to services injecting into this subnet.
   * @property {array} [ipConfiguration.subnet.delegations] Gets an array of
   * references to the delegations on the subnet.
   * @property {string} [ipConfiguration.subnet.purpose] A read-only string
   * identifying the intention of use for this subnet based on delegations and
   * other user-defined properties.
   * @property {string} [ipConfiguration.subnet.provisioningState] The
   * provisioning state of the resource.
   * @property {string} [ipConfiguration.subnet.name] The name of the resource
   * that is unique within a resource group. This name can be used to access
   * the resource.
   * @property {string} [ipConfiguration.subnet.etag] A unique read-only string
   * that changes whenever the resource is updated.
   * @property {boolean} [ipConfiguration.primary] Gets whether this is a
   * primary customer address on the network interface.
   * @property {object} [ipConfiguration.publicIPAddress] Public IP address
   * bound to the IP configuration.
   * @property {object} [ipConfiguration.publicIPAddress.sku] The public IP
   * address SKU.
   * @property {string} [ipConfiguration.publicIPAddress.sku.name] Name of a
   * public IP address SKU. Possible values include: 'Basic', 'Standard'
   * @property {string}
   * [ipConfiguration.publicIPAddress.publicIPAllocationMethod] The public IP
   * address allocation method. Possible values include: 'Static', 'Dynamic'
   * @property {string}
   * [ipConfiguration.publicIPAddress.publicIPAddressVersion] The public IP
   * address version. Possible values include: 'IPv4', 'IPv6'
   * @property {object} [ipConfiguration.publicIPAddress.ipConfiguration] The
   * IP configuration associated with the public IP address.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.privateIPAddress] The
   * private IP address of the IP configuration.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.privateIPAllocationMethod]
   * The private IP address allocation method. Possible values include:
   * 'Static', 'Dynamic'
   * @property {object}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet] The reference of
   * the subnet resource.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.addressPrefix] The
   * address prefix for the subnet.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.addressPrefixes]
   * List of  address prefixes for the subnet.
   * @property {object}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup]
   * The reference of the NetworkSecurityGroup resource.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.securityRules]
   * A collection of security rules of the network security group.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.defaultSecurityRules]
   * The default security rules of network security group.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.networkInterfaces]
   * A collection of references to network interfaces.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.subnets]
   * A collection of references to subnets.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.resourceGuid]
   * The resource GUID property of the network security group resource.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.provisioningState]
   * The provisioning state of the public IP resource. Possible values are:
   * 'Updating', 'Deleting', and 'Failed'.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.networkSecurityGroup.etag]
   * A unique read-only string that changes whenever the resource is updated.
   * @property {object}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable] The
   * reference of the RouteTable resource.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.routes]
   * Collection of routes contained within a route table.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.subnets]
   * A collection of references to subnets.
   * @property {boolean}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.disableBgpRoutePropagation]
   * Gets or sets whether to disable the routes learned by BGP on that route
   * table. True means disable.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.provisioningState]
   * The provisioning state of the resource. Possible values are: 'Updating',
   * 'Deleting', and 'Failed'.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.routeTable.etag]
   * Gets a unique read-only string that changes whenever the resource is
   * updated.
   * @property {object}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.natGateway] Nat
   * gateway associated with this subnet.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.natGateway.id]
   * Resource ID.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.serviceEndpoints]
   * An array of service endpoints.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.serviceEndpointPolicies]
   * An array of service endpoint policies.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.interfaceEndpoints]
   * An array of references to interface endpoints
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.ipConfigurations]
   * Gets an array of references to the network interface IP configurations
   * using subnet.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.ipConfigurationProfiles]
   * Array of IP configuration profiles which reference this subnet.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.resourceNavigationLinks]
   * Gets an array of references to the external resources using subnet.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.serviceAssociationLinks]
   * Gets an array of references to services injecting into this subnet.
   * @property {array}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.delegations] Gets
   * an array of references to the delegations on the subnet.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.purpose] A
   * read-only string identifying the intention of use for this subnet based on
   * delegations and other user-defined properties.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.provisioningState]
   * The provisioning state of the resource.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.name] The name of
   * the resource that is unique within a resource group. This name can be used
   * to access the resource.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.subnet.etag] A unique
   * read-only string that changes whenever the resource is updated.
   * @property {object}
   * [ipConfiguration.publicIPAddress.ipConfiguration.publicIPAddress] The
   * reference of the public IP resource.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ipConfiguration.provisioningState] Gets
   * the provisioning state of the public IP resource. Possible values are:
   * 'Updating', 'Deleting', and 'Failed'.
   * @property {string} [ipConfiguration.publicIPAddress.ipConfiguration.name]
   * The name of the resource that is unique within a resource group. This name
   * can be used to access the resource.
   * @property {string} [ipConfiguration.publicIPAddress.ipConfiguration.etag]
   * A unique read-only string that changes whenever the resource is updated.
   * @property {object} [ipConfiguration.publicIPAddress.dnsSettings] The FQDN
   * of the DNS record associated with the public IP address.
   * @property {string}
   * [ipConfiguration.publicIPAddress.dnsSettings.domainNameLabel] Gets or sets
   * the Domain name label.The concatenation of the domain name label and the
   * regionalized DNS zone make up the fully qualified domain name associated
   * with the public IP address. If a domain name label is specified, an A DNS
   * record is created for the public IP in the Microsoft Azure DNS system.
   * @property {string} [ipConfiguration.publicIPAddress.dnsSettings.fqdn] Gets
   * the FQDN, Fully qualified domain name of the A DNS record associated with
   * the public IP. This is the concatenation of the domainNameLabel and the
   * regionalized DNS zone.
   * @property {string}
   * [ipConfiguration.publicIPAddress.dnsSettings.reverseFqdn] Gets or Sets the
   * Reverse FQDN. A user-visible, fully qualified domain name that resolves to
   * this public IP address. If the reverseFqdn is specified, then a PTR DNS
   * record is created pointing from the IP address in the in-addr.arpa domain
   * to the reverse FQDN.
   * @property {object} [ipConfiguration.publicIPAddress.ddosSettings] The DDoS
   * protection custom policy associated with the public IP address.
   * @property {object}
   * [ipConfiguration.publicIPAddress.ddosSettings.ddosCustomPolicy] The DDoS
   * custom policy associated with the public IP.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ddosSettings.ddosCustomPolicy.id]
   * Resource ID.
   * @property {string}
   * [ipConfiguration.publicIPAddress.ddosSettings.protectionCoverage] The DDoS
   * protection policy customizability of the public IP. Only standard coverage
   * will have the ability to be customized. Possible values include: 'Basic',
   * 'Standard'
   * @property {array} [ipConfiguration.publicIPAddress.ipTags] The list of
   * tags associated with the public IP address.
   * @property {string} [ipConfiguration.publicIPAddress.ipAddress] The IP
   * address associated with the public IP address resource.
   * @property {object} [ipConfiguration.publicIPAddress.publicIPPrefix] The
   * Public IP Prefix this Public IP Address should be allocated from.
   * @property {string} [ipConfiguration.publicIPAddress.publicIPPrefix.id]
   * Resource ID.
   * @property {number} [ipConfiguration.publicIPAddress.idleTimeoutInMinutes]
   * The idle timeout of the public IP address.
   * @property {string} [ipConfiguration.publicIPAddress.resourceGuid] The
   * resource GUID property of the public IP resource.
   * @property {string} [ipConfiguration.publicIPAddress.provisioningState] The
   * provisioning state of the PublicIP resource. Possible values are:
   * 'Updating', 'Deleting', and 'Failed'.
   * @property {string} [ipConfiguration.publicIPAddress.etag] A unique
   * read-only string that changes whenever the resource is updated.
   * @property {array} [ipConfiguration.publicIPAddress.zones] A list of
   * availability zones denoting the IP allocated for the resource needs to
   * come from.
   * @property {array} [ipConfiguration.applicationSecurityGroups] Application
   * security groups in which the IP configuration is included.
   * @property {string} [ipConfiguration.provisioningState] The provisioning
   * state of the network interface IP configuration. Possible values are:
   * 'Updating', 'Deleting', and 'Failed'.
   * @property {string} [ipConfiguration.name] The name of the resource that is
   * unique within a resource group. This name can be used to access the
   * resource.
   * @property {string} [ipConfiguration.etag] A unique read-only string that
   * changes whenever the resource is updated.
   * @property {string} [health] Health of backend server. Possible values
   * include: 'Unknown', 'Up', 'Down', 'Partial', 'Draining'
   * @property {string} [healthProbeLog] Health Probe Log.
   */
  constructor() {
  }

  /**
   * Defines the metadata of ApplicationGatewayBackendHealthServer
   *
   * @returns {object} metadata of ApplicationGatewayBackendHealthServer
   *
   */
  mapper() {
    return {
      required: false,
      serializedName: 'ApplicationGatewayBackendHealthServer',
      type: {
        name: 'Composite',
        className: 'ApplicationGatewayBackendHealthServer',
        modelProperties: {
          address: {
            required: false,
            serializedName: 'address',
            type: {
              name: 'String'
            }
          },
          ipConfiguration: {
            required: false,
            serializedName: 'ipConfiguration',
            type: {
              name: 'Composite',
              className: 'NetworkInterfaceIPConfiguration'
            }
          },
          health: {
            required: false,
            serializedName: 'health',
            type: {
              name: 'String'
            }
          },
          healthProbeLog: {
            required: false,
            serializedName: 'healthProbeLog',
            type: {
              name: 'String'
            }
          }
        }
      }
    };
  }
}

module.exports = ApplicationGatewayBackendHealthServer;
