in ebcli/controllers/migrate.py [0:0]
def get_listener_configs(sites: List["Site"], ssl_certificate_domain_name: str = None):
"""
Generate complete Elastic Beanstalk listener configurations from IIS site configurations.
Processes IIS sites to create comprehensive ALB listener configurations, including HTTP
and HTTPS listeners, rules, and process mappings. Handles both protocol types and
automatically determines default processes.
Args:
sites: List of IIS Site objects to generate listener configs from
ssl_certificate_domain_name: Optional ARN of SSL certificate for HTTPS listeners.
Required if any HTTPS listeners are configured.
Returns:
List of Elastic Beanstalk option settings containing:
- HTTP/HTTPS listener configurations with default processes
- Listener rules with priorities and conditions
- Process configurations with ports and protocols
- Protocol mappings for each target group
Returns empty list if no valid listener rules are found or on error.
Notes:
- Processes sites to extract bindings and create corresponding ALB rules
- Handles both HTTP and HTTPS protocols if certificate provided
- Creates process mappings based on port numbers
- Assigns rule priorities based on specificity
- Treats configuration errors as non-fatal
"""
option_settings = []
try:
site_configs = get_site_configs(sites=sites)
alb_rules = create_alb_rules(site_configs)
converted_alb_rules = convert_alb_rules_to_option_settings(
alb_rules, ssl_certificate_domain_name
)
http_listener_rule_option_settings = (
converted_alb_rules.http_listener_rule_option_settings
)
if ssl_certificate_domain_name:
https_listener_rule_option_settings = (
converted_alb_rules.https_listener_rule_option_settings
)
else:
https_listener_rule_option_settings = []
process_protocol_mappings = converted_alb_rules.process_protocol_mappings
if (
not http_listener_rule_option_settings
and not https_listener_rule_option_settings
):
return []
http_listener_rule_names = _extract_and_join_rule_names(
http_listener_rule_option_settings
)
if ssl_certificate_domain_name:
https_listener_rule_names = _extract_and_join_rule_names(
https_listener_rule_option_settings
)
else:
https_listener_rule_names = []
http_processes = _extract_process_values(http_listener_rule_option_settings)
if ssl_certificate_domain_name:
https_processes = _extract_process_values(
https_listener_rule_option_settings
)
else:
https_processes = []
default_process_name = None
if "default" in http_processes:
default_process_name = "default"
elif http_processes:
default_process_name = sorted(list(http_processes))[0]
default_https_process_name = None
if https_processes:
default_https_process_name = sorted(list(https_processes))[0]
option_settings.extend(
_create_http_listener_settings(
default_process_name, http_listener_rule_names
)
)
if https_listener_rule_option_settings:
option_settings.extend(
_create_https_listener_settings(
default_https_process_name,
https_listener_rule_names,
ssl_certificate_domain_name,
)
)
process_option_settings = _create_process_option_settings(
process_protocol_mappings
)
option_settings += (
http_listener_rule_option_settings
+ https_listener_rule_option_settings
+ process_option_settings
)
return option_settings
except Exception as e:
io.log_warning(
f"Error: {str(e)}. Treating listener rule creation as non-fatal. This might cause environment to be in degraded state."
)