diff env/lib/python3.7/site-packages/boto/ec2/elb/loadbalancer.py @ 2:6af9afd405e9 draft

"planemo upload commit 0a63dd5f4d38a1f6944587f52a8cd79874177fc1"
author shellac
date Thu, 14 May 2020 14:56:58 -0400
parents 26e78fe6e8c4
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/env/lib/python3.7/site-packages/boto/ec2/elb/loadbalancer.py	Thu May 14 14:56:58 2020 -0400
@@ -0,0 +1,419 @@
+# Copyright (c) 2006-2012 Mitch Garnaat http://garnaat.org/
+# Copyright (c) 2012 Amazon.com, Inc. or its affiliates.  All Rights Reserved
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish, dis-
+# tribute, sublicense, and/or sell copies of the Software, and to permit
+# persons to whom the Software is furnished to do so, subject to the fol-
+# lowing conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+from boto.ec2.elb.healthcheck import HealthCheck
+from boto.ec2.elb.listener import Listener
+from boto.ec2.elb.listelement import ListElement
+from boto.ec2.elb.policies import Policies, OtherPolicy
+from boto.ec2.elb.securitygroup import SecurityGroup
+from boto.ec2.instanceinfo import InstanceInfo
+from boto.resultset import ResultSet
+from boto.compat import six
+
+
+class Backend(object):
+    """Backend server description"""
+
+    def __init__(self, connection=None):
+        self.connection = connection
+        self.instance_port = None
+        self.policies = None
+
+    def __repr__(self):
+        return 'Backend(%r:%r)' % (self.instance_port, self.policies)
+
+    def startElement(self, name, attrs, connection):
+        if name == 'PolicyNames':
+            self.policies = ResultSet([('member', OtherPolicy)])
+            return self.policies
+
+    def endElement(self, name, value, connection):
+        if name == 'InstancePort':
+            self.instance_port = int(value)
+        return
+
+
+class LoadBalancerZones(object):
+    """
+    Used to collect the zones for a Load Balancer when enable_zones
+    or disable_zones are called.
+    """
+    def __init__(self, connection=None):
+        self.connection = connection
+        self.zones = ListElement()
+
+    def startElement(self, name, attrs, connection):
+        if name == 'AvailabilityZones':
+            return self.zones
+
+    def endElement(self, name, value, connection):
+        pass
+
+
+class LoadBalancer(object):
+    """
+    Represents an EC2 Load Balancer.
+    """
+
+    def __init__(self, connection=None, name=None, endpoints=None):
+        """
+        :ivar boto.ec2.elb.ELBConnection connection: The connection this load
+            balancer was instance was instantiated from.
+        :ivar list listeners: A list of tuples in the form of
+            ``(<Inbound port>, <Outbound port>, <Protocol>)``
+        :ivar boto.ec2.elb.healthcheck.HealthCheck health_check: The health
+            check policy for this load balancer.
+        :ivar boto.ec2.elb.policies.Policies policies: Cookie stickiness and
+            other policies.
+        :ivar str name: The name of the Load Balancer.
+        :ivar str dns_name: The external DNS name for the balancer.
+        :ivar str created_time: A date+time string showing when the
+            load balancer was created.
+        :ivar list instances: A list of :py:class:`boto.ec2.instanceinfo.InstanceInfo`
+            instances, representing the EC2 instances this load balancer is
+            distributing requests to.
+        :ivar list availability_zones: The availability zones this balancer
+            covers.
+        :ivar str canonical_hosted_zone_name: Current CNAME for the balancer.
+        :ivar str canonical_hosted_zone_name_id: The Route 53 hosted zone
+            ID of this balancer. Needed when creating an Alias record in a
+            Route 53 hosted zone.
+        :ivar boto.ec2.elb.securitygroup.SecurityGroup source_security_group:
+            The security group that you can use as part of your inbound rules
+            for your load balancer back-end instances to disallow traffic
+            from sources other than your load balancer.
+        :ivar list subnets: A list of subnets this balancer is on.
+        :ivar list security_groups: A list of additional security groups that
+            have been applied.
+        :ivar str vpc_id: The ID of the VPC that this ELB resides within.
+        :ivar list backends: A list of :py:class:`boto.ec2.elb.loadbalancer.Backend
+            back-end server descriptions.
+        """
+        self.connection = connection
+        self.name = name
+        self.listeners = None
+        self.health_check = None
+        self.policies = None
+        self.dns_name = None
+        self.created_time = None
+        self.instances = None
+        self.availability_zones = ListElement()
+        self.canonical_hosted_zone_name = None
+        self.canonical_hosted_zone_name_id = None
+        self.source_security_group = None
+        self.subnets = ListElement()
+        self.security_groups = ListElement()
+        self.vpc_id = None
+        self.scheme = None
+        self.backends = None
+        self._attributes = None
+
+    def __repr__(self):
+        return 'LoadBalancer:%s' % self.name
+
+    def startElement(self, name, attrs, connection):
+        if name == 'HealthCheck':
+            self.health_check = HealthCheck(self)
+            return self.health_check
+        elif name == 'ListenerDescriptions':
+            self.listeners = ResultSet([('member', Listener)])
+            return self.listeners
+        elif name == 'AvailabilityZones':
+            return self.availability_zones
+        elif name == 'Instances':
+            self.instances = ResultSet([('member', InstanceInfo)])
+            return self.instances
+        elif name == 'Policies':
+            self.policies = Policies(self)
+            return self.policies
+        elif name == 'SourceSecurityGroup':
+            self.source_security_group = SecurityGroup()
+            return self.source_security_group
+        elif name == 'Subnets':
+            return self.subnets
+        elif name == 'SecurityGroups':
+            return self.security_groups
+        elif name == 'VPCId':
+            pass
+        elif name == "BackendServerDescriptions":
+            self.backends = ResultSet([('member', Backend)])
+            return self.backends
+        else:
+            return None
+
+    def endElement(self, name, value, connection):
+        if name == 'LoadBalancerName':
+            self.name = value
+        elif name == 'DNSName':
+            self.dns_name = value
+        elif name == 'CreatedTime':
+            self.created_time = value
+        elif name == 'InstanceId':
+            self.instances.append(value)
+        elif name == 'CanonicalHostedZoneName':
+            self.canonical_hosted_zone_name = value
+        elif name == 'CanonicalHostedZoneNameID':
+            self.canonical_hosted_zone_name_id = value
+        elif name == 'VPCId':
+            self.vpc_id = value
+        elif name == 'Scheme':
+            self.scheme = value
+        else:
+            setattr(self, name, value)
+
+    def enable_zones(self, zones):
+        """
+        Enable availability zones to this Access Point.
+        All zones must be in the same region as the Access Point.
+
+        :type zones: string or List of strings
+        :param zones: The name of the zone(s) to add.
+
+        """
+        if isinstance(zones, six.string_types):
+            zones = [zones]
+        new_zones = self.connection.enable_availability_zones(self.name, zones)
+        self.availability_zones = new_zones
+
+    def disable_zones(self, zones):
+        """
+        Disable availability zones from this Access Point.
+
+        :type zones: string or List of strings
+        :param zones: The name of the zone(s) to add.
+
+        """
+        if isinstance(zones, six.string_types):
+            zones = [zones]
+        new_zones = self.connection.disable_availability_zones(
+            self.name, zones)
+        self.availability_zones = new_zones
+
+    def get_attributes(self, force=False):
+        """
+        Gets the LbAttributes.  The Attributes will be cached.
+
+        :type force: bool
+        :param force: Ignore cache value and reload.
+
+        :rtype: boto.ec2.elb.attributes.LbAttributes
+        :return: The LbAttribues object
+        """
+        if not self._attributes or force:
+            self._attributes = self.connection.get_all_lb_attributes(self.name)
+        return self._attributes
+
+    def is_cross_zone_load_balancing(self, force=False):
+        """
+        Identifies if the ELB is current configured to do CrossZone Balancing.
+
+        :type force: bool
+        :param force: Ignore cache value and reload.
+
+        :rtype: bool
+        :return: True if balancing is enabled, False if not.
+        """
+        return self.get_attributes(force).cross_zone_load_balancing.enabled
+
+    def enable_cross_zone_load_balancing(self):
+        """
+        Turns on CrossZone Load Balancing for this ELB.
+
+        :rtype: bool
+        :return: True if successful, False if not.
+        """
+        success = self.connection.modify_lb_attribute(
+            self.name, 'crossZoneLoadBalancing', True)
+        if success and self._attributes:
+            self._attributes.cross_zone_load_balancing.enabled = True
+        return success
+
+    def disable_cross_zone_load_balancing(self):
+        """
+        Turns off CrossZone Load Balancing for this ELB.
+
+        :rtype: bool
+        :return: True if successful, False if not.
+        """
+        success = self.connection.modify_lb_attribute(
+            self.name, 'crossZoneLoadBalancing', False)
+        if success and self._attributes:
+            self._attributes.cross_zone_load_balancing.enabled = False
+        return success
+
+    def register_instances(self, instances):
+        """
+        Adds instances to this load balancer. All instances must be in the same
+        region as the load balancer. Adding endpoints that are already
+        registered with the load balancer has no effect.
+
+        :param list instances: List of instance IDs (strings) that you'd like
+            to add to this load balancer.
+
+        """
+        if isinstance(instances, six.string_types):
+            instances = [instances]
+        new_instances = self.connection.register_instances(self.name,
+                                                           instances)
+        self.instances = new_instances
+
+    def deregister_instances(self, instances):
+        """
+        Remove instances from this load balancer. Removing instances that are
+        not registered with the load balancer has no effect.
+
+        :param list instances: List of instance IDs (strings) that you'd like
+            to remove from this load balancer.
+
+        """
+        if isinstance(instances, six.string_types):
+            instances = [instances]
+        new_instances = self.connection.deregister_instances(self.name,
+                                                             instances)
+        self.instances = new_instances
+
+    def delete(self):
+        """
+        Delete this load balancer.
+        """
+        return self.connection.delete_load_balancer(self.name)
+
+    def configure_health_check(self, health_check):
+        """
+        Configures the health check behavior for the instances behind this
+        load balancer. See :ref:`elb-configuring-a-health-check` for a
+        walkthrough.
+
+        :param boto.ec2.elb.healthcheck.HealthCheck health_check: A
+            HealthCheck instance that tells the load balancer how to check
+            its instances for health.
+        """
+        return self.connection.configure_health_check(self.name, health_check)
+
+    def get_instance_health(self, instances=None):
+        """
+        Returns a list of :py:class:`boto.ec2.elb.instancestate.InstanceState`
+        objects, which show the health of the instances attached to this
+        load balancer.
+
+        :rtype: list
+        :returns: A list of
+            :py:class:`InstanceState <boto.ec2.elb.instancestate.InstanceState>`
+            instances, representing the instances
+            attached to this load balancer.
+        """
+        return self.connection.describe_instance_health(self.name, instances)
+
+    def create_listeners(self, listeners):
+        return self.connection.create_load_balancer_listeners(self.name,
+                                                              listeners)
+
+    def create_listener(self, inPort, outPort=None, proto="tcp"):
+        if outPort is None:
+            outPort = inPort
+        return self.create_listeners([(inPort, outPort, proto)])
+
+    def delete_listeners(self, listeners):
+        return self.connection.delete_load_balancer_listeners(self.name,
+                                                              listeners)
+
+    def delete_listener(self, inPort):
+        return self.delete_listeners([inPort])
+
+    def delete_policy(self, policy_name):
+        """
+        Deletes a policy from the LoadBalancer. The specified policy must not
+        be enabled for any listeners.
+        """
+        return self.connection.delete_lb_policy(self.name, policy_name)
+
+    def set_policies_of_listener(self, lb_port, policies):
+        return self.connection.set_lb_policies_of_listener(self.name,
+                                                           lb_port,
+                                                           policies)
+
+    def set_policies_of_backend_server(self, instance_port, policies):
+        return self.connection.set_lb_policies_of_backend_server(
+            self.name, instance_port, policies)
+
+    def create_cookie_stickiness_policy(self, cookie_expiration_period,
+                                        policy_name):
+        return self.connection.create_lb_cookie_stickiness_policy(
+            cookie_expiration_period, self.name, policy_name)
+
+    def create_app_cookie_stickiness_policy(self, name, policy_name):
+        return self.connection.create_app_cookie_stickiness_policy(name,
+                                                                   self.name,
+                                                                   policy_name)
+
+    def set_listener_SSL_certificate(self, lb_port, ssl_certificate_id):
+        return self.connection.set_lb_listener_SSL_certificate(
+            self.name, lb_port, ssl_certificate_id)
+
+    def create_lb_policy(self, policy_name, policy_type, policy_attribute):
+        return self.connection.create_lb_policy(
+            self.name, policy_name, policy_type, policy_attribute)
+
+    def attach_subnets(self, subnets):
+        """
+        Attaches load balancer to one or more subnets.
+        Attaching subnets that are already registered with the
+        Load Balancer has no effect.
+
+        :type subnets: string or List of strings
+        :param subnets: The name of the subnet(s) to add.
+
+        """
+        if isinstance(subnets, six.string_types):
+            subnets = [subnets]
+        new_subnets = self.connection.attach_lb_to_subnets(self.name, subnets)
+        self.subnets = new_subnets
+
+    def detach_subnets(self, subnets):
+        """
+        Detaches load balancer from one or more subnets.
+
+        :type subnets: string or List of strings
+        :param subnets: The name of the subnet(s) to detach.
+
+        """
+        if isinstance(subnets, six.string_types):
+            subnets = [subnets]
+        new_subnets = self.connection.detach_lb_from_subnets(
+            self.name, subnets)
+        self.subnets = new_subnets
+
+    def apply_security_groups(self, security_groups):
+        """
+        Associates one or more security groups with the load balancer.
+        The provided security groups will override any currently applied
+        security groups.
+
+        :type security_groups: string or List of strings
+        :param security_groups: The name of the security group(s) to add.
+
+        """
+        if isinstance(security_groups, six.string_types):
+            security_groups = [security_groups]
+        new_sgs = self.connection.apply_security_groups_to_lb(
+            self.name, security_groups)
+        self.security_groups = new_sgs