46
1password/1password.ts
Normal file
46
1password/1password.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import * as fs from "fs";
|
||||||
|
import { Construct } from "constructs";
|
||||||
|
import { Manifest } from "@cdktf/provider-kubernetes/lib/manifest";
|
||||||
|
import { KubernetesProvider } from "@cdktf/provider-kubernetes/lib/provider";
|
||||||
|
|
||||||
|
type OnePasswordSecret = {
|
||||||
|
name: string;
|
||||||
|
namespace: string;
|
||||||
|
itemPath: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
type OnePasswordOptions = {
|
||||||
|
provider: KubernetesProvider;
|
||||||
|
};
|
||||||
|
|
||||||
|
export class OnePassword extends Construct {
|
||||||
|
constructor(scope: Construct, id: string, options: OnePasswordOptions) {
|
||||||
|
super(scope, id);
|
||||||
|
|
||||||
|
const secrets: OnePasswordSecret[] = JSON.parse(
|
||||||
|
fs.readFileSync("1password/secrets.json", {
|
||||||
|
encoding: "utf8",
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
secrets.forEach((secret) => {
|
||||||
|
new Manifest(this, secret.name, {
|
||||||
|
provider: options.provider,
|
||||||
|
manifest: {
|
||||||
|
apiVersion: "onepassword.com/v1",
|
||||||
|
kind: "OnePasswordItem",
|
||||||
|
metadata: {
|
||||||
|
name: secret.name,
|
||||||
|
namespace: secret.namespace,
|
||||||
|
annotations: {
|
||||||
|
"operator.1password.io/auto-restart": "true",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
spec: {
|
||||||
|
itemPath: secret.itemPath,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
77
1password/secrets.json
Normal file
77
1password/secrets.json
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "gitea-admin",
|
||||||
|
"namespace": "gitea-system",
|
||||||
|
"itemPath": "vaults/Lab/items/gitea-admin"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gitea-postgres",
|
||||||
|
"namespace": "gitea-system",
|
||||||
|
"itemPath": "vaults/Lab/items/gitea-postgres"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pihole-admin",
|
||||||
|
"namespace": "pihole-system",
|
||||||
|
"itemPath": "vaults/Lab/items/pihole"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "postgres-password",
|
||||||
|
"namespace": "postgres-system",
|
||||||
|
"itemPath": "vaults/Lab/items/Postgres"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "runner-secret",
|
||||||
|
"namespace": "gitea-system",
|
||||||
|
"itemPath": "vaults/Lab/items/Gitea"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "cloudflare-token",
|
||||||
|
"namespace": "cert-manager",
|
||||||
|
"itemPath": "vaults/Lab/items/Cloudflare"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "authentik-postgres",
|
||||||
|
"namespace": "authentik-system",
|
||||||
|
"itemPath": "vaults/Lab/items/authentik-postgres"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "redis",
|
||||||
|
"namespace": "redis-system",
|
||||||
|
"itemPath": "vaults/Lab/items/redis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "authentik-redis",
|
||||||
|
"namespace": "authentik-system",
|
||||||
|
"itemPath": "vaults/Lab/items/redis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gitea-oauth",
|
||||||
|
"namespace": "gitea-system",
|
||||||
|
"itemPath": "vaults/Lab/items/gitea-oauth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gitea-elasticsearch",
|
||||||
|
"namespace": "gitea-system",
|
||||||
|
"itemPath": "vaults/Lab/items/gitea-elasticsearch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "gitea-redis",
|
||||||
|
"namespace": "gitea-system",
|
||||||
|
"itemPath": "vaults/Lab/items/gitea-redis"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "smtp-token",
|
||||||
|
"namespace": "gitea-system",
|
||||||
|
"itemPath": "vaults/Lab/items/smtp-token"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "longhorn-encryption",
|
||||||
|
"namespace": "longhorn-system",
|
||||||
|
"itemPath": "vaults/Lab/items/longhorn-encryption"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "longhorn-backup",
|
||||||
|
"namespace": "longhorn-system",
|
||||||
|
"itemPath": "vaults/Lab/items/longhorn-backup"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -1,160 +0,0 @@
|
|||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: gitea-admin
|
|
||||||
namespace: gitea-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/gitea-admin"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: gitea-postgres
|
|
||||||
namespace: gitea-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/gitea-postgres"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: pihole-admin
|
|
||||||
namespace: pihole-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/pihole"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: postgres-password
|
|
||||||
namespace: postgres-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/Postgres"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: runner-secret
|
|
||||||
namespace: gitea-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/Gitea"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: cloudflare-token
|
|
||||||
namespace: cert-manager
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/Cloudflare"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: authentik-postgres
|
|
||||||
namespace: authentik-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/authentik-postgres"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: redis
|
|
||||||
namespace: redis-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/redis"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: authentik-redis
|
|
||||||
namespace: authentik-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/redis"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: gitea-oauth
|
|
||||||
namespace: gitea-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/gitea-oauth"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: gitea-elasticsearch
|
|
||||||
namespace: gitea-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/gitea-elasticsearch"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: gitea-redis
|
|
||||||
namespace: gitea-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/gitea-redis"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: smtp-token
|
|
||||||
namespace: gitea-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/smtp-token"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: longhorn-encryption
|
|
||||||
namespace: longhorn-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/longhorn-encryption"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: longhorn-backup
|
|
||||||
namespace: longhorn-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/longhorn-backup"
|
|
||||||
---
|
|
||||||
apiVersion: onepassword.com/v1
|
|
||||||
kind: OnePasswordItem
|
|
||||||
metadata:
|
|
||||||
name: cloudflare-token
|
|
||||||
namespace: cloudflare-system
|
|
||||||
annotations:
|
|
||||||
operator.1password.io/auto-restart: "true"
|
|
||||||
spec:
|
|
||||||
itemPath: "vaults/Lab/items/Cloudflare"
|
|
||||||
11
main.ts
11
main.ts
@@ -3,9 +3,12 @@ import { cleanEnv, str } from "envalid";
|
|||||||
import { Construct } from "constructs";
|
import { Construct } from "constructs";
|
||||||
import { App, TerraformStack, S3Backend } from "cdktf";
|
import { App, TerraformStack, S3Backend } from "cdktf";
|
||||||
import { HelmProvider } from "@cdktf/provider-helm/lib/provider";
|
import { HelmProvider } from "@cdktf/provider-helm/lib/provider";
|
||||||
|
import { KubernetesProvider } from "@cdktf/provider-kubernetes/lib/provider";
|
||||||
|
|
||||||
import { GiteaServer } from "./gitea/server";
|
import { GiteaServer } from "./gitea/server";
|
||||||
|
|
||||||
|
import { OnePassword } from "./1password/1password";
|
||||||
|
|
||||||
dotenv.config();
|
dotenv.config();
|
||||||
|
|
||||||
const env = cleanEnv(process.env, {
|
const env = cleanEnv(process.env, {
|
||||||
@@ -19,6 +22,10 @@ class Homelab extends TerraformStack {
|
|||||||
constructor(scope: Construct, id: string) {
|
constructor(scope: Construct, id: string) {
|
||||||
super(scope, id);
|
super(scope, id);
|
||||||
|
|
||||||
|
const kubernetes = new KubernetesProvider(this, "kubernetes", {
|
||||||
|
configPath: "~/.kube/config",
|
||||||
|
});
|
||||||
|
|
||||||
const helm = new HelmProvider(this, "helm", {
|
const helm = new HelmProvider(this, "helm", {
|
||||||
kubernetes: {
|
kubernetes: {
|
||||||
configPath: "~/.kube/config",
|
configPath: "~/.kube/config",
|
||||||
@@ -31,6 +38,10 @@ class Homelab extends TerraformStack {
|
|||||||
provider: helm,
|
provider: helm,
|
||||||
version: "10.4.0",
|
version: "10.4.0",
|
||||||
});
|
});
|
||||||
|
|
||||||
|
new OnePassword(this, "one-password", {
|
||||||
|
provider: kubernetes,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user