Draft: Issues when deploying on an IPv6 only environment
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 to0.0.0.0:9100
→ needs[::]:9100
for IPv6 -
postgresql['listen_address']
is set to0.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:
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:
- 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 }}"