290 lines
7.2 KiB
TypeScript
290 lines
7.2 KiB
TypeScript
import type { KuberConfig } from "./types";
|
|
import { LABELS } from "./const";
|
|
|
|
export default {
|
|
project: "kuber-system",
|
|
|
|
postRender(resources, context) {
|
|
const metadata = {
|
|
namespace: context.project,
|
|
labels: LABELS,
|
|
};
|
|
|
|
resources.push(
|
|
{
|
|
apiVersion: "v1",
|
|
kind: "ServiceAccount",
|
|
metadata: { ...metadata, name: "kuber-server" },
|
|
},
|
|
{
|
|
apiVersion: "rbac.authorization.k8s.io/v1",
|
|
kind: "Role",
|
|
metadata: { ...metadata, name: "kuber-server-auth" },
|
|
rules: [
|
|
{
|
|
apiGroups: [""],
|
|
resources: ["secrets", "configmaps", "pods", "pods/log"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: [""],
|
|
resources: ["serviceaccounts"],
|
|
resourceNames: ["kuber-server"],
|
|
verbs: ["get", "update", "patch"],
|
|
},
|
|
{
|
|
apiGroups: ["rbac.authorization.k8s.io"],
|
|
resources: ["roles", "rolebindings"],
|
|
resourceNames: ["kuber-server-auth"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["batch"],
|
|
resources: ["jobs"],
|
|
verbs: ["get", "list", "watch", "create", "delete"],
|
|
},
|
|
{
|
|
apiGroups: ["coordination.k8s.io"],
|
|
resources: ["leases"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
apiVersion: "rbac.authorization.k8s.io/v1",
|
|
kind: "RoleBinding",
|
|
metadata: { ...metadata, name: "kuber-server-auth" },
|
|
roleRef: {
|
|
apiGroup: "rbac.authorization.k8s.io",
|
|
kind: "Role",
|
|
name: "kuber-server-auth",
|
|
},
|
|
subjects: [
|
|
{
|
|
kind: "ServiceAccount",
|
|
name: "kuber-server",
|
|
namespace: context.project,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
apiVersion: "rbac.authorization.k8s.io/v1",
|
|
kind: "ClusterRole",
|
|
metadata: { name: "kuber-server-manager", labels: LABELS },
|
|
rules: [
|
|
{
|
|
apiGroups: [""],
|
|
resources: ["namespaces"],
|
|
verbs: ["get", "list", "create", "patch", "delete"],
|
|
},
|
|
{
|
|
apiGroups: [""],
|
|
resources: [
|
|
"services",
|
|
"configmaps",
|
|
"secrets",
|
|
"persistentvolumeclaims",
|
|
],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: [""],
|
|
resources: ["pods", "pods/log"],
|
|
verbs: ["get", "list", "watch"],
|
|
},
|
|
{
|
|
apiGroups: [""],
|
|
resources: ["pods/exec"],
|
|
verbs: ["get", "create"],
|
|
},
|
|
{
|
|
apiGroups: ["apps"],
|
|
resources: [
|
|
"deployments",
|
|
"replicasets",
|
|
"statefulsets",
|
|
"daemonsets",
|
|
],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["batch"],
|
|
resources: ["jobs", "cronjobs"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["networking.k8s.io"],
|
|
resources: ["ingresses", "networkpolicies"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["autoscaling"],
|
|
resources: ["horizontalpodautoscalers"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["policy"],
|
|
resources: ["poddisruptionbudgets"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["storage.k8s.io"],
|
|
resources: ["storageclasses"],
|
|
verbs: ["get", "list", "create", "patch"],
|
|
},
|
|
{
|
|
apiGroups: ["traefik.io"],
|
|
resources: ["ingressroutes", "middlewares"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["postgresql.cnpg.io"],
|
|
resources: ["clusters"],
|
|
verbs: ["get", "list", "patch"],
|
|
},
|
|
{
|
|
apiGroups: ["postgresql.cnpg.io"],
|
|
resources: ["databases"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["garage.rajsingh.info"],
|
|
resources: ["garagebuckets", "garagekeys"],
|
|
verbs: [
|
|
"get",
|
|
"list",
|
|
"watch",
|
|
"create",
|
|
"update",
|
|
"patch",
|
|
"delete",
|
|
],
|
|
},
|
|
{
|
|
apiGroups: ["rbac.authorization.k8s.io"],
|
|
resources: ["clusterroles", "clusterrolebindings"],
|
|
resourceNames: ["kuber-server-manager"],
|
|
verbs: ["get", "update", "patch"],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
apiVersion: "rbac.authorization.k8s.io/v1",
|
|
kind: "ClusterRoleBinding",
|
|
metadata: { name: "kuber-server-manager", labels: LABELS },
|
|
roleRef: {
|
|
apiGroup: "rbac.authorization.k8s.io",
|
|
kind: "ClusterRole",
|
|
name: "kuber-server-manager",
|
|
},
|
|
subjects: [
|
|
{
|
|
kind: "ServiceAccount",
|
|
name: "kuber-server",
|
|
namespace: context.project,
|
|
},
|
|
],
|
|
},
|
|
);
|
|
|
|
const password = process.env.KUBER_BOOTSTRAP_PASSWORD;
|
|
if (password) {
|
|
resources.push({
|
|
apiVersion: "v1",
|
|
kind: "Secret",
|
|
metadata: { ...metadata, name: "kuber-bootstrap" },
|
|
type: "Opaque",
|
|
stringData: { password },
|
|
});
|
|
}
|
|
},
|
|
} satisfies KuberConfig;
|