init: copy from lawndale-infra
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
85
.drone.yml
Normal file
85
.drone.yml
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: kubernetes
|
||||||
|
name: Terraform root module
|
||||||
|
|
||||||
|
environment:
|
||||||
|
TF_IN_AUTOMATION: "1"
|
||||||
|
GIT_SSH_COMMAND: "ssh -o StrictHostKeyChecking=no -i $${PWD}/id_rsa"
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
ref:
|
||||||
|
- refs/heads/main
|
||||||
|
- refs/pull/*/head
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: terraform init
|
||||||
|
image: hashicorp/terraform:1.1.8
|
||||||
|
commands:
|
||||||
|
- echo "$${CI_SSH_KEY}" | base64 -d > id_rsa
|
||||||
|
- chmod 600 id_rsa
|
||||||
|
- terraform init
|
||||||
|
environment:
|
||||||
|
CI_SSH_KEY:
|
||||||
|
from_secret: ci-ssh-key
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
from_secret: terraform-aws-key-id
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
from_secret: terraform-aws-secret-access-key
|
||||||
|
|
||||||
|
- name: terraform plan
|
||||||
|
image: hashicorp/terraform:1.1.8
|
||||||
|
commands:
|
||||||
|
- terraform plan -out .tfplan
|
||||||
|
environment:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
from_secret: terraform-aws-key-id
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
from_secret: terraform-aws-secret-access-key
|
||||||
|
KUBE_TOKEN:
|
||||||
|
from_secret: lawndale-k8s-ci-token
|
||||||
|
|
||||||
|
- name: terraform apply
|
||||||
|
when:
|
||||||
|
branch:
|
||||||
|
- main
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
image: hashicorp/terraform:1.1.8
|
||||||
|
commands:
|
||||||
|
- terraform apply .tfplan
|
||||||
|
environment:
|
||||||
|
AWS_ACCESS_KEY_ID:
|
||||||
|
from_secret: terraform-aws-key-id
|
||||||
|
AWS_SECRET_ACCESS_KEY:
|
||||||
|
from_secret: terraform-aws-secret-access-key
|
||||||
|
KUBE_TOKEN:
|
||||||
|
from_secret: lawndale-k8s-ci-token
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: kubernetes
|
||||||
|
name: Check docs and format
|
||||||
|
|
||||||
|
environment:
|
||||||
|
TF_IN_AUTOMATION: "1"
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
ref:
|
||||||
|
- refs/pull/*/head
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: format and generate docs
|
||||||
|
image: hashicorp/terraform:1.1.8
|
||||||
|
commands:
|
||||||
|
- apk add bash wget
|
||||||
|
- wget -q https://github.com/terraform-docs/terraform-docs/releases/download/v0.16.0/terraform-docs-v0.16.0-linux-amd64.tar.gz -O - | tar -xz terraform-docs -C /usr/local/bin
|
||||||
|
- terraform fmt
|
||||||
|
- terraform-docs .
|
||||||
|
- git diff --exit-code
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: signature
|
||||||
|
hmac: 368164860598a6980892222216f3b14f9effbe392f5b13616df251115ae82719
|
||||||
|
|
||||||
|
...
|
||||||
34
.gitignore
vendored
Normal file
34
.gitignore
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# Local .terraform directories
|
||||||
|
**/.terraform/*
|
||||||
|
|
||||||
|
# .tfstate files
|
||||||
|
*.tfstate
|
||||||
|
*.tfstate.*
|
||||||
|
|
||||||
|
# Crash log files
|
||||||
|
crash.log
|
||||||
|
crash.*.log
|
||||||
|
|
||||||
|
# Exclude all .tfvars files, which are likely to contain sensitive data, such as
|
||||||
|
# password, private keys, and other secrets. These should not be part of version
|
||||||
|
# control as they are data points which are potentially sensitive and subject
|
||||||
|
# to change depending on the environment.
|
||||||
|
*.tfvars
|
||||||
|
*.tfvars.json
|
||||||
|
|
||||||
|
# Ignore override files as they are usually used to override resources locally and so
|
||||||
|
# are not checked in
|
||||||
|
override.tf
|
||||||
|
override.tf.json
|
||||||
|
*_override.tf
|
||||||
|
*_override.tf.json
|
||||||
|
|
||||||
|
# Include override files you do wish to add to version control using negated pattern
|
||||||
|
# !example_override.tf
|
||||||
|
|
||||||
|
# Include tfplan files to ignore the plan output of command: terraform plan -out=tfplan
|
||||||
|
# example: *tfplan*
|
||||||
|
|
||||||
|
# Ignore CLI configuration files
|
||||||
|
.terraformrc
|
||||||
|
terraform.rc
|
||||||
5
.terraform-docs.yml
Normal file
5
.terraform-docs.yml
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
formatter: markdown document
|
||||||
|
|
||||||
|
output:
|
||||||
|
mode: inject
|
||||||
|
file: README.md
|
||||||
69
README.md
Normal file
69
README.md
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
# Terraform module for Gitea deployment
|
||||||
|
[](https://drone.thomasklein.me/thomasklein/terraform-app-gitea)
|
||||||
|
|
||||||
|
This module manages the gitea installation on lawndale.
|
||||||
|
|
||||||
|
|
||||||
|
<!-- BEGIN_TF_DOCS -->
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
The following requirements are needed by this module:
|
||||||
|
|
||||||
|
- <a name="requirement_aws"></a> [aws](#requirement\_aws) (~> 4.9.0)
|
||||||
|
|
||||||
|
- <a name="requirement_helm"></a> [helm](#requirement\_helm) (~> 2.5.1)
|
||||||
|
|
||||||
|
- <a name="requirement_kubernetes"></a> [kubernetes](#requirement\_kubernetes) (~> 2.11.0)
|
||||||
|
|
||||||
|
## Providers
|
||||||
|
|
||||||
|
The following providers are used by this module:
|
||||||
|
|
||||||
|
- <a name="provider_aws"></a> [aws](#provider\_aws) (~> 4.9.0)
|
||||||
|
|
||||||
|
- <a name="provider_helm"></a> [helm](#provider\_helm) (~> 2.5.1)
|
||||||
|
|
||||||
|
- <a name="provider_kubernetes"></a> [kubernetes](#provider\_kubernetes) (~> 2.11.0)
|
||||||
|
|
||||||
|
- <a name="provider_random"></a> [random](#provider\_random)
|
||||||
|
|
||||||
|
## Modules
|
||||||
|
|
||||||
|
The following Modules are called:
|
||||||
|
|
||||||
|
### <a name="module_gitea_persistance"></a> [gitea\_persistance](#module\_gitea\_persistance)
|
||||||
|
|
||||||
|
Source: git@git.thomasklein.me:thomasklein/terraform-modules//9p-persistent-volume
|
||||||
|
|
||||||
|
Version:
|
||||||
|
|
||||||
|
### <a name="module_postgres_persistance"></a> [postgres\_persistance](#module\_postgres\_persistance)
|
||||||
|
|
||||||
|
Source: git@git.thomasklein.me:thomasklein/terraform-modules//9p-persistent-volume
|
||||||
|
|
||||||
|
Version:
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
The following resources are used by this module:
|
||||||
|
|
||||||
|
- [aws_cognito_user_pool_client.gitea](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cognito_user_pool_client) (resource)
|
||||||
|
- [helm_release.this](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) (resource)
|
||||||
|
- [kubernetes_manifest.ingress_tcp_route](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/manifest) (resource)
|
||||||
|
- [kubernetes_namespace.this](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace) (resource)
|
||||||
|
- [random_password.gitea_admin](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) (resource)
|
||||||
|
- [aws_cognito_user_pools.thomasklein_infra](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/cognito_user_pools) (data source)
|
||||||
|
- [aws_region.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) (data source)
|
||||||
|
|
||||||
|
## Required Inputs
|
||||||
|
|
||||||
|
No required inputs.
|
||||||
|
|
||||||
|
## Optional Inputs
|
||||||
|
|
||||||
|
No optional inputs.
|
||||||
|
|
||||||
|
## Outputs
|
||||||
|
|
||||||
|
No outputs.
|
||||||
|
<!-- END_TF_DOCS -->
|
||||||
10
backend.tf
Normal file
10
backend.tf
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
terraform {
|
||||||
|
backend "s3" {
|
||||||
|
bucket = "thomasklein-global-states"
|
||||||
|
key = "apps/lawndale/gitea"
|
||||||
|
region = "eu-central-1"
|
||||||
|
encrypt = true
|
||||||
|
kms_key_id = "a767a3ce-c505-44c0-9f93-6f53678c69c7"
|
||||||
|
dynamodb_table = "thomasklein-global-state-locks"
|
||||||
|
}
|
||||||
|
}
|
||||||
121
gitea.tf
Normal file
121
gitea.tf
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
resource "kubernetes_namespace" "this" {
|
||||||
|
metadata {
|
||||||
|
name = "gitea"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "helm_release" "this" {
|
||||||
|
name = "gitea"
|
||||||
|
namespace = kubernetes_namespace.this.metadata.0.name
|
||||||
|
|
||||||
|
repository = "https://dl.gitea.io/charts/"
|
||||||
|
chart = "gitea"
|
||||||
|
version = "5.0.0"
|
||||||
|
|
||||||
|
create_namespace = false
|
||||||
|
|
||||||
|
values = [
|
||||||
|
jsonencode({
|
||||||
|
ingress = {
|
||||||
|
enabled = true
|
||||||
|
annotations = {
|
||||||
|
"kubernetes.io/ingress.class" = "traefik"
|
||||||
|
"traefik.ingress.kubernetes.io/router.entrypoints" = "websecure"
|
||||||
|
"traefik.ingress.kubernetes.io/router.tls" = "true"
|
||||||
|
"traefik.ingress.kubernetes.io/router.tls.certresolver" = "acme-thomasklein-me"
|
||||||
|
"traefik.ingress.kubernetes.io/router.tls.domains.0.main" = local.ingress_domain
|
||||||
|
}
|
||||||
|
hosts = [
|
||||||
|
{
|
||||||
|
host = local.ingress_domain
|
||||||
|
paths = [
|
||||||
|
{
|
||||||
|
path = "/"
|
||||||
|
pathType = "Prefix"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
jsonencode({
|
||||||
|
gitea = {
|
||||||
|
oauth = [
|
||||||
|
{
|
||||||
|
name = "Cognito"
|
||||||
|
provider = "openidConnect"
|
||||||
|
autoDiscoverUrl = "https://cognito-idp.${data.aws_region.current.name}.amazonaws.com/${data.aws_cognito_user_pools.thomasklein_infra.ids[0]}/.well-known/openid-configuration"
|
||||||
|
#useCustomUrls =
|
||||||
|
#customAuthUrl =
|
||||||
|
#customTokenUrl =
|
||||||
|
#customProfileUrl =
|
||||||
|
#customEmailUrl =
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
jsonencode({
|
||||||
|
gitea = {
|
||||||
|
config = {
|
||||||
|
# APP_NAME = ""
|
||||||
|
server = {
|
||||||
|
ROOT_URL = "https://${local.ingress_domain}/"
|
||||||
|
}
|
||||||
|
indexer = {
|
||||||
|
ISSUE_INDEXER_TYPE = "db" # bleve doesn't like 9p filesystems :/
|
||||||
|
}
|
||||||
|
metrics = {
|
||||||
|
ENABLED = false ## the metrics not really worth it
|
||||||
|
}
|
||||||
|
service = {
|
||||||
|
DISABLE_REGISTRATION = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
admin = {
|
||||||
|
username = "thomasklein"
|
||||||
|
email = "kiss.tamas94@gmail.com"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
jsonencode({
|
||||||
|
persistence = {
|
||||||
|
enabled = true
|
||||||
|
existingClaim = module.gitea_persistance.pvc_name
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
jsonencode({
|
||||||
|
postgresql = {
|
||||||
|
enabled = true
|
||||||
|
persistence = {
|
||||||
|
enabled = true
|
||||||
|
existingClaim = module.postgres_persistance.pvc_name
|
||||||
|
}
|
||||||
|
podSecurityContext = {
|
||||||
|
enabled = true
|
||||||
|
}
|
||||||
|
volumePermissions = {
|
||||||
|
enabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
]
|
||||||
|
|
||||||
|
set_sensitive {
|
||||||
|
name = "gitea.oauth[0].key"
|
||||||
|
value = aws_cognito_user_pool_client.gitea.id
|
||||||
|
}
|
||||||
|
set_sensitive {
|
||||||
|
name = "gitea.oauth[0].secret"
|
||||||
|
value = aws_cognito_user_pool_client.gitea.client_secret
|
||||||
|
}
|
||||||
|
|
||||||
|
set_sensitive {
|
||||||
|
name = "gitea.admin.password"
|
||||||
|
value = random_password.gitea_admin.result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "random_password" "gitea_admin" {
|
||||||
|
length = 16
|
||||||
|
special = true
|
||||||
|
}
|
||||||
5
locals.tf
Normal file
5
locals.tf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
locals {
|
||||||
|
ingress_domain = "git.thomasklein.me"
|
||||||
|
}
|
||||||
|
|
||||||
|
data "aws_region" "current" {}
|
||||||
18
oauth.tf
Normal file
18
oauth.tf
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
data "aws_cognito_user_pools" "thomasklein_infra" {
|
||||||
|
name = "thomasklein-infra"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_cognito_user_pool_client" "gitea" {
|
||||||
|
name = "gitea"
|
||||||
|
|
||||||
|
user_pool_id = data.aws_cognito_user_pools.thomasklein_infra.ids[0]
|
||||||
|
|
||||||
|
allowed_oauth_flows_user_pool_client = true
|
||||||
|
allowed_oauth_flows = ["code"]
|
||||||
|
allowed_oauth_scopes = ["profile", "email", "openid"]
|
||||||
|
|
||||||
|
supported_identity_providers = ["COGNITO"]
|
||||||
|
|
||||||
|
generate_secret = true
|
||||||
|
callback_urls = ["https://${local.ingress_domain}/user/oauth2/Cognito/callback"]
|
||||||
|
}
|
||||||
28
provider.tf
Normal file
28
provider.tf
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
terraform {
|
||||||
|
required_providers {
|
||||||
|
aws = {
|
||||||
|
source = "hashicorp/aws"
|
||||||
|
version = "~> 4.9.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
helm = {
|
||||||
|
source = "hashicorp/helm"
|
||||||
|
version = "~> 2.5.1"
|
||||||
|
}
|
||||||
|
|
||||||
|
kubernetes = {
|
||||||
|
source = "hashicorp/kubernetes"
|
||||||
|
version = "~> 2.11.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
provider "aws" {
|
||||||
|
# Configuration options
|
||||||
|
default_tags {
|
||||||
|
tags = {
|
||||||
|
"managed-by" = "terraform"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
26
ssh-ingresstcproute.tf
Normal file
26
ssh-ingresstcproute.tf
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
resource "kubernetes_manifest" "ingress_tcp_route" {
|
||||||
|
manifest = {
|
||||||
|
apiVersion = "traefik.containo.us/v1alpha1"
|
||||||
|
kind = "IngressRouteTCP"
|
||||||
|
metadata = {
|
||||||
|
name = "gitea-ssh"
|
||||||
|
namespace = kubernetes_namespace.this.metadata.0.name
|
||||||
|
}
|
||||||
|
spec = {
|
||||||
|
entryPoints = [
|
||||||
|
"gitssh",
|
||||||
|
]
|
||||||
|
routes: [
|
||||||
|
{
|
||||||
|
match = "HostSNI(`*`)"
|
||||||
|
services = [
|
||||||
|
{
|
||||||
|
name = "gitea-ssh"
|
||||||
|
port = 22
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
21
volume.tf
Normal file
21
volume.tf
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# This is actually a self reference as these modules would only be available IF
|
||||||
|
# This lawndale gitea instance is running and available.
|
||||||
|
# Here it would be wiser to reference a mirror of this repository
|
||||||
|
# TODO: setup repository mirror for terraform-modules
|
||||||
|
# TODO: user mirrored repository
|
||||||
|
|
||||||
|
module "gitea_persistance" {
|
||||||
|
source = "git@git.thomasklein.me:thomasklein/terraform-modules//9p-persistent-volume"
|
||||||
|
|
||||||
|
namespace = kubernetes_namespace.this.metadata.0.name
|
||||||
|
name = "gitea"
|
||||||
|
volume_storage_capacity = "5Gi"
|
||||||
|
}
|
||||||
|
|
||||||
|
module "postgres_persistance" {
|
||||||
|
source = "git@git.thomasklein.me:thomasklein/terraform-modules//9p-persistent-volume"
|
||||||
|
|
||||||
|
namespace = kubernetes_namespace.this.metadata.0.name
|
||||||
|
name = "gitea-postgres"
|
||||||
|
volume_storage_capacity = "5Gi"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user