def modify_load_balancer_attributes(self): load_balancer_name = self._get_param('LoadBalancerName') load_balancer = self.elb_backend.get_load_balancer(load_balancer_name) cross_zone = self._get_dict_param("LoadBalancerAttributes.CrossZoneLoadBalancing.") if cross_zone: attribute = CrossZoneLoadBalancingAttribute() attribute.enabled = cross_zone["enabled"] == "true" self.elb_backend.set_cross_zone_load_balancing_attribute(load_balancer_name, attribute) access_log = self._get_dict_param("LoadBalancerAttributes.AccessLog.") if access_log: attribute = AccessLogAttribute() attribute.enabled = access_log["enabled"] == "true" attribute.s3_bucket_name = access_log['s3_bucket_name'] attribute.s3_bucket_prefix = access_log['s3_bucket_prefix'] attribute.emit_interval = access_log["emit_interval"] self.elb_backend.set_access_log_attribute(load_balancer_name, attribute) connection_draining = self._get_dict_param("LoadBalancerAttributes.ConnectionDraining.") if connection_draining: attribute = ConnectionDrainingAttribute() attribute.enabled = connection_draining["enabled"] == "true" attribute.timeout = connection_draining["timeout"] self.elb_backend.set_connection_draining_attribute(load_balancer_name, attribute) connection_settings = self._get_dict_param("LoadBalancerAttributes.ConnectionSettings.") if connection_settings: attribute = ConnectionSettingAttribute() attribute.idle_timeout = connection_settings["idle_timeout"] self.elb_backend.set_connection_settings_attribute(load_balancer_name, attribute) template = self.response_template(MODIFY_ATTRIBUTES_TEMPLATE) return template.render(attributes=load_balancer.attributes)
def modify_load_balancer_attributes(self): load_balancer_name = self.querystring.get('LoadBalancerName')[0] load_balancer = self.elb_backend.describe_load_balancers( load_balancer_name)[0] def parse_attribute(attribute_name): """ Transform self.querystring parameters matching `LoadBalancerAttributes.attribute_name.attribute_key` into a dictionary of (attribute_name, attribute_key)` pairs. """ attribute_prefix = "LoadBalancerAttributes." + attribute_name return dict((key.lstrip(attribute_prefix), value[0]) for key, value in self.querystring.items() if key.startswith(attribute_prefix)) cross_zone = parse_attribute("CrossZoneLoadBalancing") if cross_zone: attribute = CrossZoneLoadBalancingAttribute() attribute.enabled = cross_zone["Enabled"] == "true" self.elb_backend.set_cross_zone_load_balancing_attribute( load_balancer_name, attribute) access_log = parse_attribute("AccessLog") if access_log: attribute = AccessLogAttribute() attribute.enabled = access_log["Enabled"] == "true" attribute.s3_bucket_name = access_log["S3BucketName"] attribute.s3_bucket_prefix = access_log["S3BucketPrefix"] attribute.emit_interval = access_log["EmitInterval"] self.elb_backend.set_access_log_attribute(load_balancer_name, attribute) connection_draining = parse_attribute("ConnectionDraining") if connection_draining: attribute = ConnectionDrainingAttribute() attribute.enabled = connection_draining["Enabled"] == "true" attribute.timeout = connection_draining["Timeout"] self.elb_backend.set_connection_draining_attribute( load_balancer_name, attribute) connection_settings = parse_attribute("ConnectionSettings") if connection_settings: attribute = ConnectionSettingAttribute() attribute.idle_timeout = connection_settings["IdleTimeout"] self.elb_backend.set_connection_settings_attribute( load_balancer_name, attribute) template = self.response_template(MODIFY_ATTRIBUTES_TEMPLATE) return template.render(attributes=load_balancer.attributes)
def modify_load_balancer_attributes(self): load_balancer_name = self.querystring.get('LoadBalancerName')[0] load_balancer = self.elb_backend.describe_load_balancers(load_balancer_name)[0] def parse_attribute(attribute_name): """ Transform self.querystring parameters matching `LoadBalancerAttributes.attribute_name.attribute_key` into a dictionary of (attribute_name, attribute_key)` pairs. """ attribute_prefix = "LoadBalancerAttributes." + attribute_name return dict((key.lstrip(attribute_prefix), value[0]) for key, value in self.querystring.items() if key.startswith(attribute_prefix)) cross_zone = parse_attribute("CrossZoneLoadBalancing") if cross_zone: attribute = CrossZoneLoadBalancingAttribute() attribute.enabled = cross_zone["Enabled"] == "true" self.elb_backend.set_cross_zone_load_balancing_attribute(load_balancer_name, attribute) access_log = parse_attribute("AccessLog") if access_log: attribute = AccessLogAttribute() attribute.enabled = access_log["Enabled"] == "true" attribute.s3_bucket_name = access_log["S3BucketName"] attribute.s3_bucket_prefix = access_log["S3BucketPrefix"] attribute.emit_interval = access_log["EmitInterval"] self.elb_backend.set_access_log_attribute(load_balancer_name, attribute) connection_draining = parse_attribute("ConnectionDraining") if connection_draining: attribute = ConnectionDrainingAttribute() attribute.enabled = connection_draining["Enabled"] == "true" attribute.timeout = connection_draining["Timeout"] self.elb_backend.set_connection_draining_attribute(load_balancer_name, attribute) connection_settings = parse_attribute("ConnectionSettings") if connection_settings: attribute = ConnectionSettingAttribute() attribute.idle_timeout = connection_settings["IdleTimeout"] self.elb_backend.set_connection_settings_attribute(load_balancer_name, attribute) template = self.response_template(MODIFY_ATTRIBUTES_TEMPLATE) return template.render(attributes=load_balancer.attributes)
def get_default_attributes(cls): attributes = LbAttributes() cross_zone_load_balancing = CrossZoneLoadBalancingAttribute() cross_zone_load_balancing.enabled = False attributes.cross_zone_load_balancing = cross_zone_load_balancing connection_draining = ConnectionDrainingAttribute() connection_draining.enabled = False attributes.connection_draining = connection_draining access_log = AccessLogAttribute() access_log.enabled = False attributes.access_log = access_log connection_settings = ConnectionSettingAttribute() connection_settings.idle_timeout = 60 attributes.connecting_settings = connection_settings return attributes
def set_attributes(name, attributes, region=None, key=None, keyid=None, profile=None): """ Set attributes on an ELB. name (string) Name of the ELB instance to set attributes for attributes A dict of attributes to set. Valid attributes are: access_log (dict) enabled (bool) Enable storage of access logs. s3_bucket_name (string) The name of the S3 bucket to place logs. s3_bucket_prefix (string) Prefix for the log file name. emit_interval (int) Interval for storing logs in S3 in minutes. Valid values are 5 and 60. connection_draining (dict) enabled (bool) Enable connection draining. timeout (int) Maximum allowed time in seconds for sending existing connections to an instance that is deregistering or unhealthy. Default is 300. cross_zone_load_balancing (dict) enabled (bool) Enable cross-zone load balancing. CLI example to set attributes on an ELB: .. code-block:: bash salt myminion boto_elb.set_attributes myelb '{"access_log": {"enabled": "true", "s3_bucket_name": "mybucket", "s3_bucket_prefix": "mylogs/", "emit_interval": "5"}}' region=us-east-1 """ conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile) al = attributes.get("access_log", {}) czlb = attributes.get("cross_zone_load_balancing", {}) cd = attributes.get("connection_draining", {}) cs = attributes.get("connecting_settings", {}) if not al and not czlb and not cd and not cs: log.error("No supported attributes for ELB.") return False if al: _al = AccessLogAttribute() _al.enabled = al.get("enabled", False) if not _al.enabled: msg = "Access log attribute configured, but enabled config missing" log.error(msg) return False _al.s3_bucket_name = al.get("s3_bucket_name", None) _al.s3_bucket_prefix = al.get("s3_bucket_prefix", None) _al.emit_interval = al.get("emit_interval", None) added_attr = conn.modify_lb_attribute(name, "accessLog", _al) if added_attr: log.info("Added access_log attribute to %s elb.", name) else: log.error("Failed to add access_log attribute to %s elb.", name) return False if czlb: _czlb = CrossZoneLoadBalancingAttribute() _czlb.enabled = czlb["enabled"] added_attr = conn.modify_lb_attribute(name, "crossZoneLoadBalancing", _czlb.enabled) if added_attr: log.info("Added cross_zone_load_balancing attribute to %s elb.", name) else: log.error("Failed to add cross_zone_load_balancing attribute.") return False if cd: _cd = ConnectionDrainingAttribute() _cd.enabled = cd["enabled"] _cd.timeout = cd.get("timeout", 300) added_attr = conn.modify_lb_attribute(name, "connectionDraining", _cd) if added_attr: log.info("Added connection_draining attribute to %s elb.", name) else: log.error("Failed to add connection_draining attribute.") return False if cs: _cs = ConnectionSettingAttribute() _cs.idle_timeout = cs.get("idle_timeout", 60) added_attr = conn.modify_lb_attribute(name, "connectingSettings", _cs) if added_attr: log.info("Added connecting_settings attribute to %s elb.", name) else: log.error("Failed to add connecting_settings attribute.") return False return True
def set_attributes(name, attributes, region=None, key=None, keyid=None, profile=None): ''' Set attributes on an ELB. CLI example to set attributes on an ELB: .. code-block:: bash salt myminion boto_elb.set_attributes myelb '{"access_log": {"enabled": "true", "s3_bucket_name": "mybucket", "s3_bucket_prefix": "mylogs/", "emit_interval": "5"}}' region=us-east-1 ''' conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile) al = attributes.get('access_log', {}) czlb = attributes.get('cross_zone_load_balancing', {}) cd = attributes.get('connection_draining', {}) cs = attributes.get('connecting_settings', {}) if not al and not czlb and not cd and not cs: log.error('No supported attributes for ELB.') return False if al: _al = AccessLogAttribute() _al.enabled = al.get('enabled', False) if not _al.enabled: msg = 'Access log attribute configured, but enabled config missing' log.error(msg) return False _al.s3_bucket_name = al.get('s3_bucket_name', None) _al.s3_bucket_prefix = al.get('s3_bucket_prefix', None) _al.emit_interval = al.get('emit_interval', None) added_attr = conn.modify_lb_attribute(name, 'accessLog', _al) if added_attr: log.info('Added access_log attribute to {0} elb.'.format(name)) else: msg = 'Failed to add access_log attribute to {0} elb.' log.error(msg.format(name)) return False if czlb: _czlb = CrossZoneLoadBalancingAttribute() _czlb.enabled = czlb['enabled'] added_attr = conn.modify_lb_attribute(name, 'crossZoneLoadBalancing', _czlb.enabled) if added_attr: msg = 'Added cross_zone_load_balancing attribute to {0} elb.' log.info(msg.format(name)) else: log.error('Failed to add cross_zone_load_balancing attribute.') return False if cd: _cd = ConnectionDrainingAttribute() _cd.enabled = cd['enabled'] _cd.timeout = cd.get('timeout', 300) added_attr = conn.modify_lb_attribute(name, 'connectionDraining', _cd) if added_attr: msg = 'Added connection_draining attribute to {0} elb.' log.info(msg.format(name)) else: log.error('Failed to add connection_draining attribute.') return False if cs: _cs = ConnectionSettingAttribute() _cs.idle_timeout = cs.get('idle_timeout', 60) added_attr = conn.modify_lb_attribute(name, 'connectingSettings', _cs) if added_attr: msg = 'Added connecting_settings attribute to {0} elb.' log.info(msg.format(name)) else: log.error('Failed to add connecting_settings attribute.') return False return True
def set_attributes(name, attributes, region=None, key=None, keyid=None, profile=None): """ Set attributes on an ELB. name (string) Name of the ELB instance to set attributes for attributes A dict of attributes to set. Valid attributes are: access_log (dict) enabled (bool) Enable storage of access logs. s3_bucket_name (string) The name of the S3 bucket to place logs. s3_bucket_prefix (string) Prefix for the log file name. emit_interval (int) Interval for storing logs in S3 in minutes. Valid values are 5 and 60. connection_draining (dict) enabled (bool) Enable connection draining. timeout (int) Maximum allowed time in seconds for sending existing connections to an instance that is deregistering or unhealthy. Default is 300. cross_zone_load_balancing (dict) enabled (bool) Enable cross-zone load balancing. CLI example to set attributes on an ELB: .. code-block:: bash salt myminion boto_elb.set_attributes myelb '{"access_log": {"enabled": "true", "s3_bucket_name": "mybucket", "s3_bucket_prefix": "mylogs/", "emit_interval": "5"}}' region=us-east-1 """ conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile) al = attributes.get("access_log", {}) czlb = attributes.get("cross_zone_load_balancing", {}) cd = attributes.get("connection_draining", {}) cs = attributes.get("connecting_settings", {}) if not al and not czlb and not cd and not cs: log.error("No supported attributes for ELB.") return False if al: _al = AccessLogAttribute() _al.enabled = al.get("enabled", False) if not _al.enabled: msg = "Access log attribute configured, but enabled config missing" log.error(msg) return False _al.s3_bucket_name = al.get("s3_bucket_name", None) _al.s3_bucket_prefix = al.get("s3_bucket_prefix", None) _al.emit_interval = al.get("emit_interval", None) added_attr = conn.modify_lb_attribute(name, "accessLog", _al) if added_attr: log.info("Added access_log attribute to {0} elb.".format(name)) else: msg = "Failed to add access_log attribute to {0} elb." log.error(msg.format(name)) return False if czlb: _czlb = CrossZoneLoadBalancingAttribute() _czlb.enabled = czlb["enabled"] added_attr = conn.modify_lb_attribute(name, "crossZoneLoadBalancing", _czlb.enabled) if added_attr: msg = "Added cross_zone_load_balancing attribute to {0} elb." log.info(msg.format(name)) else: log.error("Failed to add cross_zone_load_balancing attribute.") return False if cd: _cd = ConnectionDrainingAttribute() _cd.enabled = cd["enabled"] _cd.timeout = cd.get("timeout", 300) added_attr = conn.modify_lb_attribute(name, "connectionDraining", _cd) if added_attr: msg = "Added connection_draining attribute to {0} elb." log.info(msg.format(name)) else: log.error("Failed to add connection_draining attribute.") return False if cs: _cs = ConnectionSettingAttribute() _cs.idle_timeout = cs.get("idle_timeout", 60) added_attr = conn.modify_lb_attribute(name, "connectingSettings", _cs) if added_attr: msg = "Added connecting_settings attribute to {0} elb." log.info(msg.format(name)) else: log.error("Failed to add connecting_settings attribute.") return False return True