Draft: Issues when deploying on an IPv6 only environment
<!-- For new feature requests, please check if the feature follows our Technical Design guidelines - https://gitlab.com/gitlab-org/gitlab-environment-toolkit/-/blob/main/TECHNICAL_DESIGN.md#integrations-list. --> <!-- For bugs, please fill in details about your GET configuration: - GET version: - Cloud Provider: GCP/AWS/Azure/Other - Environment configuration: Before raising a bug, please read through our Troubleshooting guide to determine if it's a known issue - https://gitlab.com/gitlab-org/gitlab-environment-toolkit/-/blob/main/docs/environment_troubleshooting.md. --> ## Problem Statement A customer trying to install GitLab HA in an IPv6-only (NO dual-stack) environment using the GitLab Environment Toolkit (GET) faced multiple compatibility issues with hardcoded IPv4 settings. ## Current Issues ### 1. Hardcoded IPv4 addresses in GET configurations Several configuration values are hardcoded to IPv4 addresses and need IPv6 equivalents: - `node_exporter['listen_address']` is set to `0.0.0.0:9100` → needs `[::]:9100` for IPv6 - `postgresql['listen_address']` is set to `0.0.0.0` → needs `[::]` for IPv6 - `127.0.0.1` → needs `::1` for IPv6 **Current workaround**: These settings can be adjusted by providing custom `gitlab_configs` in GET, but this is not ideal. ### 2. Issue in omnibus-gitlab patroni template The main blocker is in the patroni configuration template in omnibus-gitlab: https://gitlab.com/gitlab-org/omnibus-gitlab/-/blob/master/files/gitlab-cookbooks/patroni/templates/default/patroni.yaml.erb#L13 **Problem**: Line 13 merges the postgres listen address and port together. For IPv4 (`0.0.0.0:5432`) this works fine, but for IPv6 (`[::]:5432`) it causes YAML parsing errors: ``` 2025-09-23_05:27:26.42434 yaml.parser.ParserError: while parsing a flow node 2025-09-23_05:27:26.42435 expected the node content, but found ':' 2025-09-23_05:27:26.42435 in "/var/opt/gitlab/patroni/patroni.yaml", line 14, column 12 ``` **Root cause**: The generated YAML looks like: ```yaml postgresql: listen: [::]:5432 ``` Since the IPv6 address isn't properly quoted (`"[::]:5432"`), the YAML parser interprets the brackets as a list syntax. ### 3. Hardcoded IPv4 Ansible facts GET uses hardcoded IPv4 Ansible facts that don't work in IPv6-only environments. **Current workaround**: The customer had to add this playbook before running the installation playbook: ```yaml - name: Adjust IPv4 facts hosts: all:!get_ignored gather_facts: true tasks: - name: Override ansible_default_ipv4.address with IPv6 address set_fact: ansible_default_ipv4: address: "{{ ansible_default_ipv6.address }}" ``` <!-- Set Work Type label(s) for the Issue - https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification --> <!-- Note: Only one subtype should be selected -->
issue