first steps for platform

This commit is contained in:
Thomas Rijpstra 2024-09-20 21:54:37 +02:00
parent c745eb76a3
commit a51635cebe
Signed by: thomas
SSH Key Fingerprint: SHA256:sFF5HPNPaaW14qykTkmRi1FGGO0YMUPBenlKOqepUpw
11 changed files with 107 additions and 149 deletions

View File

@ -1,47 +0,0 @@
terraform {
required_providers {
minio = {
source = "aminueza/minio"
version = "~> 2.5.0"
}
}
}
provider "minio" {
minio_server = "localhost:9123"
minio_region = "eu-central-1"
minio_user = data.vault_kv_secret_v2.minio_creds.data["access_key"]
minio_password = data.vault_kv_secret_v2.minio_creds.data["secret_key"]
}
resource "minio_s3_bucket" "platform" {
depends_on = [data.vault_kv_secret_v2.minio_creds]
bucket = "platform"
acl = "private"
}
resource "minio_iam_user" "platform" {
depends_on = [data.vault_kv_secret_v2.minio_creds]
name = "platform"
}
resource "minio_iam_policy" "platform" {
depends_on = [minio_s3_bucket.platform]
name = "platform-policy"
policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Effect = "Allow"
Action = ["s3:GetObject", "s3:PutObject"]
Resource = ["arn:aws:s3:::platform/*"]
}
]
})
}
resource "minio_iam_user_policy_attachment" "policy_attachment" {
depends_on = [minio_iam_user.platform, minio_iam_policy.platform]
user_name = minio_iam_user.platform.name
policy_name = minio_iam_policy.platform.name
}

View File

@ -1,17 +0,0 @@
output "vault_token" {
value = vault_token.platform.client_token
sensitive = true
}
output "minio_user" {
value = minio_iam_user.platform.id
}
output "minio_user_status" {
value = minio_iam_user.platform.status
}
output "minio_user_secret" {
value = minio_iam_user.platform.secret
sensitive = true
}

View File

@ -1,4 +0,0 @@
variable "vault_root_token" {
description = "Vault (root) token to create secrets"
type = string
}

View File

@ -1,34 +0,0 @@
provider "vault" {
address = "http://127.0.0.1:8200"
token = var.vault_root_token
}
data "vault_kv_secret_v2" "minio_creds" {
mount = "management"
name = "minio"
}
resource "vault_mount" "platform" {
path = "platform"
type = "kv"
options = { version = "2" }
description = "KV Version 2 secret engine mount for management"
}
resource "vault_policy" "platform" {
name = "platform"
policy = <<EOT
path "platform/*" {
capabilities = ["create", "read", "update", "delete", "list"]
}
# Add other necessary permissions
EOT
}
resource "vault_token" "platform" {
policies = [vault_policy.platform.name]
renewable = true
ttl = "720h" # 30 days
period = "720h" # Will be renewed every 30 days
}

View File

@ -1,39 +0,0 @@
# HCloud instance for creating a single node workload cluster
resource "hcloud_server" "quickstart_node" {
name = "${var.prefix}-worker"
image = "ubuntu-20.04"
server_type = var.instance_type
location = var.hcloud_location
ssh_keys = [hcloud_ssh_key.quickstart_ssh_key.id]
network {
network_id = hcloud_network.private.id
}
user_data = templatefile(
"userdata_node.template",
{
username = local.node_username
register_command = module.rancher_common.custom_cluster_command
}
)
provisioner "remote-exec" {
inline = [
"echo 'Waiting for cloud-init to complete...'",
"cloud-init status --wait > /dev/null",
"echo 'Completed cloud-init!'",
]
connection {
type = "ssh"
host = self.ipv4_address
user = local.node_username
private_key = tls_private_key.global_key.private_key_pem
}
}
depends_on = [
hcloud_network_subnet.private
]
}

View File

@ -0,0 +1,15 @@
provider "kubernetes" {
host = yamldecode(data.minio_s3_object.k8s_yaml.content).clusters[0].cluster.server
client_certificate = base64decode(yamldecode(data.minio_s3_object.k8s_yaml.content).users[0].user.client-certificate-data)
client_key = base64decode(yamldecode(data.minio_s3_object.k8s_yaml.content).users[0].user.client-key-data)
cluster_ca_certificate = base64decode(yamldecode(data.minio_s3_object.k8s_yaml.content).clusters[0].cluster.certificate-authority-data)
}
provider "helm" {
kubernetes {
host = yamldecode(data.minio_s3_object.k8s_yaml.content).clusters[0].cluster.server
client_certificate = base64decode(yamldecode(data.minio_s3_object.k8s_yaml.content).users[0].user.client-certificate-data)
client_key = base64decode(yamldecode(data.minio_s3_object.k8s_yaml.content).users[0].user.client-key-data)
cluster_ca_certificate = base64decode(yamldecode(data.minio_s3_object.k8s_yaml.content).clusters[0].cluster.certificate-authority-data)
}
}

View File

@ -0,0 +1,31 @@
terraform {
required_providers {
minio = {
source = "aminueza/minio"
version = "~> 2.5.0"
}
}
}
provider "minio" {
minio_server = var.minio_server
minio_region = var.region
minio_user = var.access_key
minio_password = var.secret_key
minio_ssl = true
}
data "minio_s3_object" "k8s_yaml" {
bucket_name = var.bucket
object_name = "kube_config_server.yaml"
}
data "minio_s3_object" "id_rsa" {
bucket_name = var.bucket
object_name = "id_rsa"
}
data "minio_s3_object" "id_rsa_pub" {
bucket_name = var.bucket
object_name = "id_rsa.pub"
}

View File

@ -1,8 +0,0 @@
# Create custom managed cluster for quickstart
resource "rancher2_cluster_v2" "quickstart_workload" {
provider = rancher2.admin
name = var.workload_cluster_name
kubernetes_version = var.workload_kubernetes_version
}

View File

@ -0,0 +1,47 @@
variable "endpoints" {
type = map(string)
}
variable "access_key" {
type = string
sensitive = true
}
variable "secret_key" {
type = string
sensitive = true
}
variable "bucket" {
type = string
}
variable "key" {
type = string
}
variable "region" {
type = string
}
variable "minio_server" {
type = string
}
variable "vault_addr" {
type = string
}
variable "vault_token" {
type = string
sensitive = true
}
variable "node_ip" {
type = string
}
variable "node_username" {
type = string
default = "root"
}

View File

@ -0,0 +1,14 @@
provider "vault" {
address = var.vault_addr
token = var.vault_token
}
data "vault_kv_secret_v2" "hcloud" {
mount = "management"
name = "hcloud"
}
data "vault_kv_secret_v2" "rancher" {
mount = "management"
name = "rancher"
}