def get_sticky_setting(details, service_alias): setting = [] is_sticky = False appsession = get_service_attribute(details, "appsession", service_alias) if appsession: setting.append("appsession %s" % appsession) is_sticky = True cookie = get_service_attribute(details, "cookie", service_alias) if cookie: setting.append("cookie %s" % cookie) is_sticky = True return setting, is_sticky
def get_tcp_routes(details, routes, port, port_num): tcp_routes = [] routes_added = [] addresses_added = [] if port != port_num and port != port_num + "/ssl": return tcp_routes, routes_added for _service_alias, routes in routes.iteritems(): tcp_ports = get_service_attribute(details, "tcp_ports", _service_alias) if tcp_ports and port in tcp_ports: for route in routes: if route["port"] == port_num: address = "%s:%s" % (route["addr"], route["port"]) if address not in addresses_added: addresses_added.append(address) tcp_route = ["server %s %s" % (route["container_name"], address)] health_check = get_healthcheck_string(details, _service_alias) # extra_route_settings = get_extra_route_settings_string(details, _service_alias) extra_tcp_settings = get_extra_tcp_settings_string(details, _service_alias) route_setting = " ".join([health_check, extra_tcp_settings]).strip() tcp_route.append(route_setting) tcp_routes.append(" ".join(tcp_route)) routes_added.append(route) return tcp_routes, routes_added
def get_gzip_compression_setting(details, service_alias): setting = [] gzip_compression_type = get_service_attribute(details, 'gzip_compression_type', service_alias) if gzip_compression_type: setting.append("compression algo gzip") setting.append("compression type %s" % gzip_compression_type) return setting
def get_options_setting(details, service_alias): setting = [] options = get_service_attribute(details, 'option', service_alias) if options: for option in options: setting.append("option %s" % option) return setting
def get_tcp_port_list(details, service_aliases): ports = [] for service_alias in service_aliases: tcp_ports = get_service_attribute(details, "tcp_ports", service_alias) if tcp_ports: ports.extend(tcp_ports) return ports
def get_service_aliases_given_tcp_port(details, service_aliases, tcp_port): services = [] for service_alias in service_aliases: tcp_ports = get_service_attribute(details, "tcp_ports", service_alias) if tcp_ports and tcp_port in tcp_ports: services.append(service_alias) return services
def get_tcp_routes(details, routes, port, port_num): tcp_routes = [] routes_added = [] addresses_added = [] if port != port_num and port != port_num + "/ssl": return tcp_routes, routes_added for _service_alias, routes in routes.iteritems(): tcp_ports = get_service_attribute(details, "tcp_ports", _service_alias) if tcp_ports and port in tcp_ports: for route in routes: if route["port"] == port_num: address = "%s:%s" % (route["addr"], route["port"]) if address not in addresses_added: addresses_added.append(address) tcp_route = [ "server %s %s" % (route["container_name"], address) ] health_check = get_healthcheck_string( details, _service_alias) extra_route_settings = get_extra_route_settings_string( details, _service_alias) route_setting = " ".join( [health_check, extra_route_settings]).strip() tcp_route.append(route_setting) tcp_routes.append(" ".join(tcp_route)) routes_added.append(route) return tcp_routes, routes_added
def get_tcp_port_list(details, service_aliases): ports = [] for service_alias in service_aliases: tcp_ports = get_service_attribute(details, "tcp_ports", service_alias) if tcp_ports and isinstance(tcp_ports, list): ports.extend(tcp_ports) return ports
def get_extra_route_settings(details, service_alias, default_extra_route_settings): extra_route_settings = get_service_attribute(details, "extra_route_settings", service_alias) extra_route_settings = extra_route_settings if extra_route_settings else default_extra_route_settings return extra_route_settings
def test_get_service_attribute_with_service_aliase(self): self.assertEqual("valueA", get_service_attribute(self.details, 'attrA', 'web-a')) self.assertEqual("valueB", get_service_attribute(self.details, 'attrB', 'web-a')) self.assertEqual(None, get_service_attribute(self.details, 'attrC', 'web-a')) self.assertEqual("valueC", get_service_attribute(self.details, 'attrA', 'web-b')) self.assertEqual("valueB", get_service_attribute(self.details, 'attrB', 'web-a')) self.assertEqual(None, get_service_attribute(self.details, 'attrC', 'web-a')) self.assertEqual(None, get_service_attribute(self.details, 'attrA', 'web-c')) self.assertEqual(None, get_service_attribute(None, 'attrA', 'web-a'))
def get_basic_auth_setting(details, basic_auth, service_alias): setting = [] exclude_basic_auth = get_service_attribute(details, "exclude_basic_auth", service_alias) if basic_auth and not exclude_basic_auth: setting.append("acl need_auth http_auth(haproxy_userlist)") setting.append("http-request auth realm haproxy_basic_auth if !need_auth") return setting
def get_hsts_max_age_setting(details, service_alias): setting = [] hsts_max_age = get_service_attribute(details, "hsts_max_age", service_alias) if hsts_max_age: setting.append( "rspadd Strict-Transport-Security:\ max-age=%s;\ includeSubDomains" % hsts_max_age) return setting
def get_extra_settings_setting(details, service_alias): setting = [] extra_settings_str = get_service_attribute(details, 'extra_settings', service_alias) if extra_settings_str: extra_settings = re.split(r'(?<!\\),', extra_settings_str) for extra_setting in extra_settings: if extra_setting.strip(): setting.append(extra_setting.strip().replace("\,", ",")) return setting
def get_tcp_options(details, services): option_list = [] for service in services: options = get_service_attribute(details, 'option', service) if options and type(options) is list: for option in options: if option not in option_list: option_list.append(option) return ["option %s" % option for option in option_list]
def get_tcp_extra_settings(details, services): setting_list = [] for service in services: extra_settings = get_service_attribute(details, 'extra_settings', service) if extra_settings: settings = re.split(r'(?<!\\),', extra_settings) for s in settings: setting = s.strip().replace("\,", ",") if setting and setting not in setting_list: setting_list.append(setting) return setting_list
def get_tcp_routes(details, routes, port, port_num): tcp_routes = [] routes_added = [] if port != port_num and port != port_num + "/ssl": return tcp_routes, routes_added for _service_alias, routes in routes.iteritems(): tcp_ports = get_service_attribute(details, "tcp_ports", _service_alias) if tcp_ports and port in tcp_ports: for route in routes: if route["port"] == port_num: tcp_route = ["server %s %s:%s" % (route["container_name"], route["addr"], route["port"])] health_check = get_healthcheck_string(details, _service_alias) tcp_route.append(health_check) tcp_routes.append(" ".join(tcp_route)) routes_added.append(route) return tcp_routes, routes_added
def get_tcp_routes(details, routes, port, port_num): tcp_routes = [] routes_added = [] if port != port_num and port != port_num + "/ssl": return tcp_routes, routes_added for _service_alias, routes in routes.iteritems(): tcp_ports = get_service_attribute(details, "tcp_ports", _service_alias) if tcp_ports and port in tcp_ports: for route in routes: if route["port"] == port_num: tcp_route = [ "server %s %s:%s" % (route["container_name"], route["addr"], route["port"]) ] health_check = get_healthcheck_string( details, _service_alias) tcp_route.append(health_check) tcp_routes.append(" ".join(tcp_route)) routes_added.append(route) return tcp_routes, routes_added
def get_tcp_balance(details): balance = get_service_attribute(details, 'balance') if balance: return ["balance %s" % balance] else: return []
def test_get_servide_attribute_without_service_aliase(self): self.assertIn(get_service_attribute(self.details, 'attrA'), ['valueA', 'valueC']) self.assertEqual(get_service_attribute(self.details, 'attrB'), "valueB") self.assertEqual(get_service_attribute(self.details, 'attrD'), "valueD") self.assertIsNone(get_service_attribute(self.details, 'attrE'))
def get_healthcheck_string(details, service_alias): health_check = get_service_attribute(details, "health_check", service_alias) health_check = health_check if health_check else HEALTH_CHECK return health_check
def get_route_health_check(details, service_alias, default_health_check): health_check = get_service_attribute(details, "health_check", service_alias) health_check = health_check if health_check else default_health_check return health_check
def get_balance_setting(details, service_alias): setting = [] balance = get_service_attribute(details, "balance", service_alias) if balance: setting.append("balance %s" % balance) return setting
def get_extra_route_settings_string(details, service_alias): extra_route_settings = get_service_attribute(details, "extra_route_settings", service_alias) extra_route_settings = extra_route_settings if extra_route_settings else EXTRA_ROUTE_SETTINGS return extra_route_settings
def get_force_ssl_setting(details, service_alias): setting = [] force_ssl = get_service_attribute(details, "force_ssl", service_alias) if force_ssl: setting.append("redirect scheme https code 301 if !{ ssl_fc }") return setting
def get_http_check_setting(details, service_alias): setting = [] http_check = get_service_attribute(details, "http_check", service_alias) if http_check: setting.append("option httpchk %s" % http_check) return setting
def get_hsts_max_age_setting(details, service_alias): setting = [] hsts_max_age = get_service_attribute(details, "hsts_max_age", service_alias) if hsts_max_age: setting.append("rspadd Strict-Transport-Security:\ max-age=%s;\ includeSubDomains" % hsts_max_age) return setting