feat: add network swarm json

This commit is contained in:
Mauricio Siu
2024-05-18 17:59:04 -06:00
parent 506fe074df
commit baecc49d86
7 changed files with 2505 additions and 59 deletions

View File

@@ -79,6 +79,12 @@ interface ServiceModeSwarm {
GlobalJob?: {} | undefined;
}
interface NetworkSwarm {
Target?: string | undefined;
Aliases?: string[] | undefined;
DriverOpts?: { [key: string]: string } | undefined;
}
interface LabelsSwarm {
[name: string]: string;
}
@@ -129,6 +135,7 @@ export const applications = pgTable("application", {
rollbackConfigSwarm: json("rollbackConfigSwarm").$type<UpdateConfigSwarm>(),
modeSwarm: json("modeSwarm").$type<ServiceModeSwarm>(),
labelsSwarm: json("labelsSwarm").$type<LabelsSwarm>(),
networkSwarm: json("networkSwarm").$type<NetworkSwarm[]>(),
//
replicas: integer("replicas").default(1).notNull(),
applicationStatus: applicationStatus("applicationStatus")
@@ -242,6 +249,16 @@ const ServiceModeSwarmSchema = z
})
.strict();
const NetworkSwarmSchema = z.array(
z
.object({
Target: z.string().optional(),
Aliases: z.array(z.string()).optional(),
DriverOpts: z.object({}).optional(),
})
.strict(),
);
const LabelsSwarmSchema = z.record(z.string());
const createSchema = createInsertSchema(applications, {
@@ -287,61 +304,7 @@ const createSchema = createInsertSchema(applications, {
rollbackConfigSwarm: UpdateConfigSwarmSchema.nullable(),
modeSwarm: ServiceModeSwarmSchema.nullable(),
labelsSwarm: LabelsSwarmSchema.nullable(),
// restartPolicySwarm: z
// .object({
// Condition: z.string().optional(),
// Delay: z.number().optional(),
// MaxAttempts: z.number().optional(),
// Window: z.number().optional(),
// })
// .strict()
// .nullable(),
// placementSwarm: z
// .object({
// Constraints: z.array(z.string()).optional(),
// Preferences: z.array(PreferenceSchema).optional(),
// MaxReplicas: z.number().optional(),
// Platforms: z.array(PlatformSchema).optional(),
// })
// .strict()
// .nullable(),
// updateConfigSwarm: z
// .object({
// Parallelism: z.number(),
// Delay: z.number().optional(),
// FailureAction: z.string().optional(),
// Monitor: z.number().optional(),
// MaxFailureRatio: z.number().optional(),
// Order: z.string(),
// })
// .strict()
// .nullable(),
// rollbackConfigSwarm: z
// .object({
// Parallelism: z.number(),
// Delay: z.number().optional(),
// FailureAction: z.string().optional(),
// Monitor: z.number().optional(),
// MaxFailureRatio: z.number().optional(),
// Order: z.string(),
// })
// .strict()
// .nullable(),
// modeSwarm: z
// .object({
// Replicated: ReplicatedSchema.optional(),
// Global: z.object({}).optional(),
// ReplicatedJob: ReplicatedJobSchema.optional(),
// GlobalJob: z.object({}).optional(),
// })
// .strict()
// .nullable(),
// labelsSwarm: z
// .object({
// })
// .strict()
// .nullable(),
networkSwarm: NetworkSwarmSchema.nullable(),
});
export const apiCreateApplication = createSchema.pick({

View File

@@ -73,6 +73,7 @@ export const mechanizeDockerContainer = async (
cpuReservation,
command,
ports,
networkSwarm,
} = application;
const resources = calculateResources({
@@ -92,6 +93,7 @@ export const mechanizeDockerContainer = async (
Mode,
RollbackConfig,
UpdateConfig,
Networks,
} = generateConfigContainer(application);
const bindsMount = generateBindMounts(mounts);
@@ -134,7 +136,7 @@ export const mechanizeDockerContainer = async (
: {}),
Labels,
},
Networks: [{ Target: "dokploy-network" }],
Networks,
RestartPolicy,
Placement,
Resources: {

View File

@@ -210,6 +210,7 @@ export const generateConfigContainer = (application: ApplicationNested) => {
labelsSwarm,
replicas,
mounts,
networkSwarm,
} = application;
const haveMounts = mounts.length > 0;
@@ -265,6 +266,13 @@ export const generateConfigContainer = (application: ApplicationNested) => {
Order: "start-first",
},
}),
...(networkSwarm
? {
Networks: networkSwarm,
}
: {
Networks: [{ Target: "dokploy-network" }],
}),
};
};