Initial commit
This commit is contained in:
76
index.php
Normal file
76
index.php
Normal file
@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
|
||||
require './vendor/autoload.php';
|
||||
|
||||
$config = Yaml::parseFile('config.yaml');
|
||||
|
||||
$data = [
|
||||
'http' => [
|
||||
'routers' => [],
|
||||
'services' => [],
|
||||
],
|
||||
];
|
||||
foreach ($config['servers'] as $server_name => $server_ip) {
|
||||
$proxy_routers = @file_get_contents("http://{$server_ip}:8080/api/http/routers");
|
||||
if (empty($proxy_routers)) {
|
||||
continue;
|
||||
}
|
||||
$proxy_routers = json_decode($proxy_routers, TRUE);
|
||||
$server_key = 'proxy-'.$server_name;
|
||||
$data['http']['services'][$server_key] = [
|
||||
'loadBalancer' => [
|
||||
'servers' => [
|
||||
['url' => "http://{$server_ip}:80"],
|
||||
],
|
||||
'passHostHeader' => TRUE,
|
||||
],
|
||||
];
|
||||
foreach ($proxy_routers as $router) {
|
||||
if ($router['status'] !== 'enabled' || $router['provider'] !== 'docker') {
|
||||
continue;
|
||||
}
|
||||
preg_match_all("/Host\(\`(?'domain'[a-zA-Z\.\-]+)\`\)/m", $router['rule'], $rule_hosts);
|
||||
if (empty($rule_hosts['domain'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$domains = [];
|
||||
foreach ($rule_hosts['domain'] as $domain) {
|
||||
$is_docker_name = !str_contains($domain, '.');
|
||||
if ($is_docker_name) {
|
||||
continue;
|
||||
}
|
||||
$domains[] = $domain;
|
||||
}
|
||||
if (empty($domains)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$main_router = [
|
||||
'entryPoints' => ['websecure'],
|
||||
'rule' => $router['rule'],
|
||||
'service' => $server_key,
|
||||
'tls' => [
|
||||
'certResolver' => 'defaultResolver',
|
||||
'domains' => [],
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($domains as $domain) {
|
||||
$main_router['tls']['domains'][] = [
|
||||
'main' => $domain,
|
||||
'sans' => [],
|
||||
];
|
||||
}
|
||||
|
||||
$router_name = $server_key . '--' . $router['name'];
|
||||
$router_name = str_replace(['@'], '_', $router_name);
|
||||
$data['http']['routers'][$router_name] = $main_router;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
header('application/x-yaml');
|
||||
echo Yaml::dump($data, 4, 2, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK | Yaml::DUMP_OBJECT_AS_MAP);
|
Reference in New Issue
Block a user