mirror of
https://github.com/fosrl/pangolin.git
synced 2025-08-23 18:56:07 +02:00
Fixing traefik problems
This commit is contained in:
parent
609435328e
commit
7ca507b1ce
2 changed files with 37 additions and 27 deletions
|
@ -210,9 +210,9 @@ export class TraefikConfigManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// logger.debug(
|
logger.debug(
|
||||||
// `Successfully retrieved traefik config: ${JSON.stringify(traefikConfig)}`
|
`Successfully retrieved traefik config: ${JSON.stringify(traefikConfig)}`
|
||||||
// );
|
);
|
||||||
|
|
||||||
const badgerMiddlewareName = "badger";
|
const badgerMiddlewareName = "badger";
|
||||||
if (traefikConfig?.http?.middlewares) {
|
if (traefikConfig?.http?.middlewares) {
|
||||||
|
|
|
@ -81,6 +81,16 @@ export async function traefikConfigProvider(
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
||||||
|
// Define extended target type with site information
|
||||||
|
type TargetWithSite = Target & {
|
||||||
|
site: {
|
||||||
|
siteId: number;
|
||||||
|
type: string;
|
||||||
|
subnet: string | null;
|
||||||
|
exitNodeId: number | null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
// Get all resources with related data
|
// Get all resources with related data
|
||||||
const allResources = await db.transaction(async (tx) => {
|
const allResources = await db.transaction(async (tx) => {
|
||||||
// Get resources with their targets and sites in a single optimized query
|
// Get resources with their targets and sites in a single optimized query
|
||||||
|
@ -122,9 +132,10 @@ export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
||||||
eq(targets.enabled, true),
|
eq(targets.enabled, true),
|
||||||
eq(resources.enabled, true),
|
eq(resources.enabled, true),
|
||||||
or(
|
or(
|
||||||
eq(sites.exitNodeId, currentExitNodeId),
|
eq(sites.exitNodeId, exitNodeId),
|
||||||
isNull(sites.exitNodeId)
|
isNull(sites.exitNodeId)
|
||||||
),
|
),
|
||||||
|
ne(targetHealthCheck.hcHealth, "unhealthy")
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -192,7 +203,6 @@ export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
||||||
|
|
||||||
for (const resource of allResources) {
|
for (const resource of allResources) {
|
||||||
const targets = resource.targets;
|
const targets = resource.targets;
|
||||||
const site = resource.site;
|
|
||||||
|
|
||||||
const routerName = `${resource.resourceId}-router`;
|
const routerName = `${resource.resourceId}-router`;
|
||||||
const serviceName = `${resource.resourceId}-service`;
|
const serviceName = `${resource.resourceId}-service`;
|
||||||
|
@ -295,14 +305,14 @@ export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
||||||
|
|
||||||
config_output.http.services![serviceName] = {
|
config_output.http.services![serviceName] = {
|
||||||
loadBalancer: {
|
loadBalancer: {
|
||||||
servers: targets
|
servers: (targets as TargetWithSite[])
|
||||||
.filter((target: Target) => {
|
.filter((target: TargetWithSite) => {
|
||||||
if (!target.enabled) {
|
if (!target.enabled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
site.type === "local" ||
|
target.site.type === "local" ||
|
||||||
site.type === "wireguard"
|
target.site.type === "wireguard"
|
||||||
) {
|
) {
|
||||||
if (
|
if (
|
||||||
!target.ip ||
|
!target.ip ||
|
||||||
|
@ -311,27 +321,27 @@ export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
||||||
) {
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (site.type === "newt") {
|
} else if (target.site.type === "newt") {
|
||||||
if (
|
if (
|
||||||
!target.internalPort ||
|
!target.internalPort ||
|
||||||
!target.method ||
|
!target.method ||
|
||||||
!site.subnet
|
!target.site.subnet
|
||||||
) {
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.map((target: Target) => {
|
.map((target: TargetWithSite) => {
|
||||||
if (
|
if (
|
||||||
site.type === "local" ||
|
target.site.type === "local" ||
|
||||||
site.type === "wireguard"
|
target.site.type === "wireguard"
|
||||||
) {
|
) {
|
||||||
return {
|
return {
|
||||||
url: `${target.method}://${target.ip}:${target.port}`
|
url: `${target.method}://${target.ip}:${target.port}`
|
||||||
};
|
};
|
||||||
} else if (site.type === "newt") {
|
} else if (target.site.type === "newt") {
|
||||||
const ip = site.subnet!.split("/")[0];
|
const ip = target.site.subnet!.split("/")[0];
|
||||||
return {
|
return {
|
||||||
url: `${target.method}://${ip}:${target.internalPort}`
|
url: `${target.method}://${ip}:${target.internalPort}`
|
||||||
};
|
};
|
||||||
|
@ -415,35 +425,35 @@ export async function getTraefikConfig(exitNodeId: number): Promise<any> {
|
||||||
|
|
||||||
config_output[protocol].services[serviceName] = {
|
config_output[protocol].services[serviceName] = {
|
||||||
loadBalancer: {
|
loadBalancer: {
|
||||||
servers: targets
|
servers: (targets as TargetWithSite[])
|
||||||
.filter((target: Target) => {
|
.filter((target: TargetWithSite) => {
|
||||||
if (!target.enabled) {
|
if (!target.enabled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
site.type === "local" ||
|
target.site.type === "local" ||
|
||||||
site.type === "wireguard"
|
target.site.type === "wireguard"
|
||||||
) {
|
) {
|
||||||
if (!target.ip || !target.port) {
|
if (!target.ip || !target.port) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else if (site.type === "newt") {
|
} else if (target.site.type === "newt") {
|
||||||
if (!target.internalPort || !site.subnet) {
|
if (!target.internalPort || !target.site.subnet) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
})
|
})
|
||||||
.map((target: Target) => {
|
.map((target: TargetWithSite) => {
|
||||||
if (
|
if (
|
||||||
site.type === "local" ||
|
target.site.type === "local" ||
|
||||||
site.type === "wireguard"
|
target.site.type === "wireguard"
|
||||||
) {
|
) {
|
||||||
return {
|
return {
|
||||||
address: `${target.ip}:${target.port}`
|
address: `${target.ip}:${target.port}`
|
||||||
};
|
};
|
||||||
} else if (site.type === "newt") {
|
} else if (target.site.type === "newt") {
|
||||||
const ip = site.subnet!.split("/")[0];
|
const ip = target.site.subnet!.split("/")[0];
|
||||||
return {
|
return {
|
||||||
address: `${ip}:${target.internalPort}`
|
address: `${ip}:${target.internalPort}`
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue