Index: third_party/gsutil/boto/boto/ec2/elb/loadbalancer.py |
diff --git a/third_party/gsutil/boto/boto/ec2/elb/loadbalancer.py b/third_party/gsutil/boto/boto/ec2/elb/loadbalancer.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7b80d79ff18706b387db91afbb0b9e1d1e493d7e |
--- /dev/null |
+++ b/third_party/gsutil/boto/boto/ec2/elb/loadbalancer.py |
@@ -0,0 +1,324 @@ |
+# 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 |
+from boto.ec2.elb.securitygroup import SecurityGroup |
+from boto.ec2.instanceinfo import InstanceInfo |
+from boto.resultset import ResultSet |
+ |
+ |
+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 |
+ |
+ |
+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 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. |
+ """ |
+ 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 |
+ |
+ 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 |
+ 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, str) or isinstance(zones, unicode): |
+ 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, str) or isinstance(zones, unicode): |
+ zones = [zones] |
+ new_zones = self.connection.disable_availability_zones(self.name, zones) |
+ self.availability_zones = new_zones |
+ |
+ 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, str) or isinstance(instances, unicode): |
+ 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, str) or isinstance(instances, unicode): |
+ 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 == 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 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 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, str) or isinstance(subnets, unicode): |
+ 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, str) or isinstance(subnets, unicode): |
+ subnets = [subnets] |
+ new_subnets = self.connection.detach_lb_to_subnets(self.name, subnets) |
+ self.subnets = new_subnets |
+ |
+ def apply_security_groups(self, security_groups): |
+ """ |
+ Applies security groups to the load balancer. |
+ Applying security groups that are already registered with the |
+ Load Balancer has no effect. |
+ |
+ :type security_groups: string or List of strings |
+ :param security_groups: The name of the security group(s) to add. |
+ |
+ """ |
+ if isinstance(security_groups, str) or \ |
+ isinstance(security_groups, unicode): |
+ security_groups = [security_groups] |
+ new_sgs = self.connection.apply_security_groups_to_lb( |
+ self.name, security_groups) |
+ self.security_groups = new_sgs |