This commit is contained in:
2024-01-26 20:00:54 +01:00
parent 6a83465591
commit 86051b28b0
4 changed files with 252 additions and 178 deletions

View File

@@ -10,6 +10,17 @@ locals {
"app.kubernetes.io/name" = var.component "app.kubernetes.io/name" = var.component
"app.kubernetes.io/instance" = var.instance "app.kubernetes.io/instance" = var.instance
} }
pvc_spec = merge({
"accessModes" = [var.storage.volume.accessMode]
"volumeMode" = var.storage.volume.type
"resources" = {
"requests" = {
"storage" = "${var.storage.volume.size}"
}
}
}, var.storage.volume.class != "" ?{
"storageClassName" = var.storage.volume.class
}:{})
} }
data "kubernetes_secret_v1" "authentik" { data "kubernetes_secret_v1" "authentik" {
@@ -54,11 +65,11 @@ data "kustomization_overlay" "data" {
- name: WOODPECKER_BACKEND_K8S_NAMESPACE - name: WOODPECKER_BACKEND_K8S_NAMESPACE
value: "${var.namespace}" value: "${var.namespace}"
- name: WOODPECKER_BACKEND_K8S_STORAGE_CLASS - name: WOODPECKER_BACKEND_K8S_STORAGE_CLASS
value: "${var.storage-agent.storageClass}" value: "${var.storage.volume.class}"
- name: WOODPECKER_BACKEND_K8S_STORAGE_RWX - name: WOODPECKER_BACKEND_K8S_STORAGE_RWX
value: "${var.storage-agent.writeMany}" value: "${var.storage.volume.accessMode=="ReadOnlyMany"?"true":"false"}"
- name: WOODPECKER_BACKEND_K8S_VOLUME_SIZE - name: WOODPECKER_BACKEND_K8S_VOLUME_SIZE
value: "${var.storage-agent.size}" value: "${var.storage.agent.size}"
- name: WOODPECKER_SERVER - name: WOODPECKER_SERVER
value: "woodpecker-server.${var.namespace}.svc:9000" value: "woodpecker-server.${var.namespace}.svc:9000"
EOF EOF
@@ -163,11 +174,7 @@ data "kustomization_overlay" "data" {
volumeClaimTemplates: volumeClaimTemplates:
- metadata: - metadata:
name: data name: data
spec: spec: ${jsonencode(local.pvc_spec)}
accessModes: [ "${var.storage-server.accessMode}" ]
resources:
requests:
storage: ${var.storage-server.size}
EOF EOF
} }
} }

View File

@@ -6,95 +6,31 @@ metadata:
name: woodpecker name: woodpecker
description: null description: null
options: options:
admin-users: domain_name:
default: woodpecker,admin default: your_company.com
examples: examples:
- woodpecker,admin - your_company.com
type: string
issuer:
default: letsencrypt-prod
examples:
- letsencrypt-prod
type: string type: string
sub_domain: sub_domain:
default: ci default: ci
examples: examples:
- ci - ci
type: string type: string
storage-server: issuer:
default: default: letsencrypt-prod
accessMode: ReadWriteOnce
size: 10Gi
examples: examples:
- accessMode: ReadWriteOnce - letsencrypt-prod
size: 10Gi
properties:
accessMode:
default: ReadWriteOnce
enum:
- ReadWriteOnce
- ReadOnlyMany
- ReadWriteMany
type: string
size:
default: 10Gi
type: string
type: object
timeouts:
default:
default: '60'
max: '120'
examples:
- default: '60'
max: '120'
properties:
default:
default: '60'
type: string
max:
default: '120'
type: string
type: object
storage-agent:
default:
size: 10Gi
storageClass: ''
writeMany: 'false'
examples:
- size: 10Gi
storageClass: ''
writeMany: 'false'
properties:
size:
default: 10Gi
type: string
storageClass:
default: ''
type: string
writeMany:
default: 'false'
type: string
type: object
domain_name:
default: your_company.com
examples:
- your_company.com
type: string
ingress_class:
default: traefik
examples:
- traefik
type: string
app_group:
default: dev
examples:
- dev
type: string type: string
domain: domain:
default: your-company default: your-company
examples: examples:
- your-company - your-company
type: string type: string
app_group:
default: dev
examples:
- dev
type: string
images: images:
default: default:
agent: agent:
@@ -192,6 +128,86 @@ options:
type: string type: string
type: object type: object
type: object type: object
storage:
default:
agent:
size: 10Gi
volume:
accessMode: ReadWriteOnce
class: ''
size: 10Gi
type: Filesystem
description: Configure this app storage
examples:
- agent:
size: 10Gi
volume:
accessMode: ReadWriteOnce
class: ''
size: 10Gi
type: Filesystem
properties:
agent:
default:
size: 10Gi
properties:
size:
default: 10Gi
type: string
type: object
volume:
default:
accessMode: ReadWriteOnce
class: ''
size: 10Gi
type: Filesystem
properties:
accessMode:
default: ReadWriteOnce
enum:
- ReadWriteOnce
- ReadOnlyMany
- ReadWriteMany
type: string
class:
default: ''
type: string
size:
default: 10Gi
type: string
type:
default: Filesystem
enum:
- Filesystem
- Block
type: string
type: object
type: object
timeouts:
default:
default: '60'
max: '120'
examples:
- default: '60'
max: '120'
properties:
default:
default: '60'
type: string
max:
default: '120'
type: string
type: object
ingress_class:
default: traefik
examples:
- traefik
type: string
admin-users:
default: woodpecker,admin
examples:
- woodpecker,admin
type: string
dependencies: dependencies:
- dist: null - dist: null
category: apps category: apps

View File

@@ -2,43 +2,67 @@ locals {
annotations = { annotations = {
"vynil.solidite.fr/meta" = var.component "vynil.solidite.fr/meta" = var.component
"vynil.solidite.fr/name" = var.namespace "vynil.solidite.fr/name" = var.namespace
"vynil.solidite.fr/domain" = var.domain_name }
"vynil.solidite.fr/issuer" = var.issuer annotations_default = {
"vynil.solidite.fr/ingress" = var.ingress_class "default.vynil.solidite.fr/sso_vynil" = var.sso_vynil
"default.vynil.solidite.fr/domain_name" = var.domain_name
"default.vynil.solidite.fr/timezone" = var.timezone
"default.vynil.solidite.fr/language" = var.language
"default.vynil.solidite.fr/domain" = var.domain
"default.vynil.solidite.fr/issuer" = var.issuer
"default.vynil.solidite.fr/ingress_class" = var.ingress_class
"default.vynil.solidite.fr/app_group" = var.app_group
"default.vynil.solidite.fr/backups.enable" = var.backups.enable
"default.vynil.solidite.fr/backups.use_barman" = var.backups.use_barman
"default.vynil.solidite.fr/backups.endpoint" = var.backups.endpoint
"default.vynil.solidite.fr/backups.secret_name" = var.backups.secret_name
"default.vynil.solidite.fr/backups.key_id_key" = var.backups.key_id_key
"default.vynil.solidite.fr/backups.secret_key" = var.backups.secret_key
"default.vynil.solidite.fr/backups.restic_key" = var.backups.restic_key
"default.vynil.solidite.fr/storage.volume.accessMode" = var.storage.volume.accessMode
"default.vynil.solidite.fr/storage.volume.class" = var.storage.volume.class
} }
global = { global = {
"domain" = var.namespace "sso_vynil" = var.sso_vynil
"domain_name" = var.domain_name "domain_name" = var.domain_name
"timezone" = var.timezone
"language" = var.language
"domain" = var.domain
"issuer" = var.issuer "issuer" = var.issuer
"ingress_class" = var.ingress_class "ingress_class" = var.ingress_class
"backups" = var.backups "app_group" = var.app_group
} }
default-mode = var.storage-classes.FilesystemReadWriteMany!=""?"ReadWriteMany":"ReadWriteOnce" global-backups = {
gitea = { for k, v in var.gitea : k => v if !contains(["enable","volume"],k) } "enable" = var.backups.enable
gitea-storage = { "use_barman" = var.backups.use_barman
"volume" = { "endpoint" = var.backups.endpoint
"size" = lookup(lookup(local.gitea, "volume",{}), "size", "20Gi") "secret_name" = var.backups.secret_name
"accessMode" = lookup(lookup(local.gitea, "volume",{}), "accessMode", local.default-mode) "key_id_key" = var.backups.key_id_key
"secret_key" = var.backups.secret_key
"restic_key" = var.backups.restic_key
} }
global-volume = {
"accessMode" = var.storage.volume.accessMode
"class" = var.storage.volume.class
} }
woodpecker = { for k, v in var.woodpecker : k => v if k!="enable" } gitea = merge(local.global,{ for k, v in var.gitea : k => v if !contains(["enable","storage","backups"],k) },{
woodpecker-storage = merge({ backups = merge(lookup(var.gitea, "backups", {}), local.global-backups)
"storage-server" = { storage = merge({ for k, v in lookup(var.gitea, "storage", {}) : k => v if !contains(["volume"],k) }, {
"size" = lookup(lookup(local.woodpecker, "storage-server",{}), "size", "10Gi") volume = merge(lookup(lookup(var.gitea, "storage", {}), "volume", {}), local.global-volume)
"accessMode" = lookup(lookup(local.woodpecker, "storage-server",{}), "accessMode", local.default-mode) })
} })
"storage-agent" = { woodpecker = merge(local.global,{ for k, v in var.woodpecker : k => v if !contains(["enable","storage","backups"],k) },{
"size" = lookup(lookup(local.woodpecker, "storage-agent",{}), "size", "10Gi") backups = merge(lookup(var.woodpecker, "backups", {}), local.global-backups)
"writeMany" = lookup(lookup(local.woodpecker, "storage-agent",{}), "writeMany", var.storage-classes.FilesystemReadWriteMany!=""?"true":"false") storage = merge({ for k, v in lookup(var.woodpecker, "storage", {}) : k => v if !contains(["volume"],k) }, {
"storageClass" = lookup(lookup(local.woodpecker, "storage-agent",{}), "storageClass", var.storage-classes.FilesystemReadWriteMany!=""?var.storage-classes.FilesystemReadWriteMany:var.storage-classes.FilesystemReadWriteOnce) volume = merge(lookup(lookup(var.woodpecker, "storage", {}), "volume", {}), local.global-volume)
} })
}, { for k, v in var.woodpecker : k => v if contains(["storage-server","storage-agent"],k) }) })
} }
resource "kubernetes_namespace_v1" "ci-ns" { resource "kubernetes_namespace_v1" "ci-ns" {
count = ( var.gitea.enable )? 1 : 0 count = ( var.gitea.enable )? 1 : 0
metadata { metadata {
annotations = local.annotations annotations = merge(local.annotations, local.annotations_default)
labels = merge(local.common-labels, local.annotations) labels = merge(local.common-labels, local.annotations)
name = "${var.namespace}-ci" name = "${var.namespace}-ci"
} }

View File

@@ -6,6 +6,11 @@ metadata:
name: domain-ci name: domain-ci
description: null description: null
options: options:
timezone:
default: Europe/Paris
examples:
- Europe/Paris
type: string
woodpecker: woodpecker:
default: default:
enable: false enable: false
@@ -18,11 +23,51 @@ options:
type: object type: object
x-vynil-category: apps x-vynil-category: apps
x-vynil-package: woodpecker x-vynil-package: woodpecker
ingress_class: sso_vynil:
default: traefik default: true
examples: examples:
- traefik - true
type: boolean
backups:
default:
enable: false
endpoint: ''
key_id_key: s3-id
restic_key: bck-password
secret_key: s3-secret
secret_name: backup-settings
use_barman: false
examples:
- enable: false
endpoint: ''
key_id_key: s3-id
restic_key: bck-password
secret_key: s3-secret
secret_name: backup-settings
use_barman: false
properties:
enable:
default: false
type: boolean
endpoint:
default: ''
type: string type: string
key_id_key:
default: s3-id
type: string
restic_key:
default: bck-password
type: string
secret_key:
default: s3-secret
type: string
secret_name:
default: backup-settings
type: string
use_barman:
default: false
type: boolean
type: object
gitea: gitea:
default: default:
enable: true enable: true
@@ -35,52 +80,21 @@ options:
type: object type: object
x-vynil-category: apps x-vynil-category: apps
x-vynil-package: gitea x-vynil-package: gitea
domain:
default: your-company
examples:
- your-company
type: string
domain_name:
default: your_company.com
examples:
- your_company.com
type: string
issuer: issuer:
default: letsencrypt-prod default: letsencrypt-prod
examples: examples:
- letsencrypt-prod - letsencrypt-prod
type: string type: string
x-vynil-enum-source: issuer language:
backups: default: fr_FR
default:
enable: false
endpoint: ''
key-id-key: s3-id
secret-key: s3-secret
secret-name: backup-settings
examples: examples:
- enable: false - fr_FR
endpoint: ''
key-id-key: s3-id
secret-key: s3-secret
secret-name: backup-settings
properties:
enable:
default: false
type: boolean
endpoint:
default: ''
type: string type: string
key-id-key: domain_name:
default: s3-id default: your-company.com
examples:
- your-company.com
type: string type: string
secret-key:
default: s3-secret
type: string
secret-name:
default: backup-settings
type: string
type: object
distributions: distributions:
default: default:
core: core core: core
@@ -96,31 +110,44 @@ options:
default: domain default: domain
type: string type: string
type: object type: object
storage-classes: storage:
default: default:
BlockReadWriteMany: '' volume:
BlockReadWriteOnce: '' accessMode: ReadWriteOnce
FilesystemReadWriteMany: '' class: ''
FilesystemReadWriteOnce: ''
examples: examples:
- BlockReadWriteMany: '' - volume:
BlockReadWriteOnce: '' accessMode: ReadWriteOnce
FilesystemReadWriteMany: '' class: ''
FilesystemReadWriteOnce: ''
properties: properties:
BlockReadWriteMany: volume:
default: '' default:
accessMode: ReadWriteOnce
class: ''
properties:
accessMode:
default: ReadWriteOnce
type: string type: string
BlockReadWriteOnce: class:
default: ''
type: string
FilesystemReadWriteMany:
default: ''
type: string
FilesystemReadWriteOnce:
default: '' default: ''
type: string type: string
type: object type: object
type: object
app_group:
default: infra
examples:
- infra
type: string
domain:
default: your-company
examples:
- your-company
type: string
ingress_class:
default: traefik
examples:
- traefik
type: string
dependencies: [] dependencies: []
providers: providers:
kubernetes: true kubernetes: true