ip = meta['ip']
if 'ports' in meta and meta['ports']:
port = meta['ports'][0]
- r += [f'--web.listen-address={ip}:{port}']
if daemon_type == 'prometheus':
config = fetch_configs(ctx)
+ ip_to_bind_to = config.get('ip_to_bind_to', '')
+ if ip_to_bind_to:
+ ip = ip_to_bind_to
retention_time = config.get('retention_time', '15d')
retention_size = config.get(
'retention_size', '0'
addr = next(iter(ipv4_addrs or ipv6_addrs), None)
host = wrap_ipv6(addr) if addr else host
r += [f'--web.external-url={scheme}://{host}:{port}']
+ r += [f'--web.listen-address={ip}:{port}']
if daemon_type == 'alertmanager':
config = fetch_configs(ctx)
peers = config.get('peers', list()) # type: ignore
'files': {
'prometheus.yml': 'bettercallherc',
},
+ 'ip_to_bind_to': '1.2.3.4'
}
_cephadm._common_deploy(ctx)
runfile_lines = f.read().splitlines()
assert 'podman' in runfile_lines[-1]
assert runfile_lines[-1].endswith(
- 'quay.io/titans/prometheus:latest --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --web.listen-address=:9095 --storage.tsdb.retention.time=15d --storage.tsdb.retention.size=0 --web.external-url=http://10.10.10.10:9095'
+ 'quay.io/titans/prometheus:latest --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --storage.tsdb.retention.time=15d --storage.tsdb.retention.size=0 --web.external-url=http://10.10.10.10:9095 --web.listen-address=1.2.3.4:9095'
)
assert '--user 8765' in runfile_lines[-1]
assert f'-v /var/lib/ceph/{fsid}/prometheus.fire/etc/prometheus:/etc/prometheus:Z' in runfile_lines[-1]
'ceph_exporter_sd_url': ceph_exporter_sd_url
}
+ ip_to_bind_to = ''
+ if spec.only_bind_port_on_networks and spec.networks:
+ assert daemon_spec.host is not None
+ ip_to_bind_to = self.mgr.get_first_matching_network_ip(daemon_spec.host, spec) or ''
+ if ip_to_bind_to:
+ daemon_spec.port_ips = {str(port): ip_to_bind_to}
+
web_context = {
'prometheus_web_user': prometheus_user,
'prometheus_web_password': password_hash(prometheus_password),
},
'retention_time': retention_time,
'retention_size': retention_size,
+ 'ip_to_bind_to': ip_to_bind_to,
'web_config': '/etc/prometheus/web.yml'
}
else:
'prometheus.yml': self.mgr.template.render('services/prometheus/prometheus.yml.j2', context)
},
'retention_time': retention_time,
- 'retention_size': retention_size
+ 'retention_size': retention_size,
+ 'ip_to_bind_to': ip_to_bind_to
}
# include alerts, if present in the container
keepalived_password='12345',
virtual_ip="1.2.3.4/32",
backend_service='rgw.foo')) as _, \
- with_service(cephadm_module, PrometheusSpec('prometheus')) as _:
+ with_service(cephadm_module, PrometheusSpec('prometheus',
+ networks=['1.2.3.0/24'],
+ only_bind_port_on_networks=True)) as _:
y = dedent("""
# This file is generated by cephadm.
"deploy_arguments": [],
"params": {
'tcp_ports': [9095],
+ 'port_ips': {'8765': '1.2.3.1'}
},
"meta": {
'service_name': 'prometheus',
'ports': [9095],
- 'ip': None,
+ 'ip': '1.2.3.1',
'deployed_by': [],
'rank': None,
'rank_generation': None,
},
'retention_time': '15d',
'retention_size': '0',
+ 'ip_to_bind_to': '1.2.3.1',
},
}),
)
},
'retention_time': '15d',
'retention_size': '0',
+ 'ip_to_bind_to': '',
'web_config': '/etc/prometheus/web.yml',
},
}),
preview_only: bool = False,
config: Optional[Dict[str, str]] = None,
networks: Optional[List[str]] = None,
+ only_bind_port_on_networks: bool = False,
port: Optional[int] = None,
retention_time: Optional[str] = None,
retention_size: Optional[str] = None,
self.retention_time = retention_time.strip() if retention_time else None
self.retention_size = retention_size.strip() if retention_size else None
+ self.only_bind_port_on_networks = only_bind_port_on_networks
def validate(self) -> None:
super(PrometheusSpec, self).validate()