82 lines
2.0 KiB
TypeScript
82 lines
2.0 KiB
TypeScript
import { Construct } from "constructs";
|
|
import { TerraformStack } from "cdktf";
|
|
import { KubernetesProvider } from "@cdktf/provider-kubernetes/lib/provider";
|
|
import { NamespaceV1 } from "@cdktf/provider-kubernetes/lib/namespace-v1";
|
|
|
|
import { LonghornPvc } from "../utils";
|
|
import { JellyfinServer } from "./jellyfin";
|
|
import { SonarrServer } from "./sonarr";
|
|
import { RadarrServer } from "./radarr";
|
|
import { QBittorrentServer } from "./qbittorrent";
|
|
import { ProwlarrServer } from "./prowlarr";
|
|
|
|
export class MediaServices extends TerraformStack {
|
|
constructor(scope: Construct, id: string) {
|
|
super(scope, id);
|
|
|
|
const provider = new KubernetesProvider(this, "kubernetes", {
|
|
configPath: "~/.kube/config",
|
|
});
|
|
|
|
const namespace = "media";
|
|
|
|
// Create namespace
|
|
new NamespaceV1(this, "namespace", {
|
|
metadata: {
|
|
name: namespace,
|
|
},
|
|
});
|
|
|
|
// Shared PVCs
|
|
const mediaPvc = new LonghornPvc(this, "media-pvc", {
|
|
provider,
|
|
name: "media",
|
|
namespace,
|
|
size: "1Ti",
|
|
});
|
|
|
|
const downloadsPvc = new LonghornPvc(this, "downloads-pvc", {
|
|
provider,
|
|
name: "downloads",
|
|
namespace,
|
|
size: "450Gi",
|
|
});
|
|
|
|
// Deploy media services
|
|
new JellyfinServer(this, "jellyfin", {
|
|
provider,
|
|
namespace,
|
|
mediaPvcName: mediaPvc.name,
|
|
host: "media.dogar.dev",
|
|
});
|
|
|
|
new SonarrServer(this, "sonarr", {
|
|
provider,
|
|
namespace,
|
|
mediaPvcName: mediaPvc.name,
|
|
downloadsPvcName: downloadsPvc.name,
|
|
host: "sonarr.dogar.dev",
|
|
});
|
|
|
|
new RadarrServer(this, "radarr", {
|
|
provider,
|
|
namespace,
|
|
mediaPvcName: mediaPvc.name,
|
|
downloadsPvcName: downloadsPvc.name,
|
|
host: "radarr.dogar.dev",
|
|
});
|
|
|
|
new QBittorrentServer(this, "qbittorrent", {
|
|
provider,
|
|
namespace,
|
|
downloadsPvcName: downloadsPvc.name,
|
|
host: "torrent.dogar.dev",
|
|
});
|
|
|
|
new ProwlarrServer(this, "prowlarr", {
|
|
provider,
|
|
namespace,
|
|
});
|
|
}
|
|
}
|