initial upload

This commit is contained in:
Mikael Frykholm 2024-04-18 09:35:35 +02:00
parent 646c40daf1
commit 20dd385bed
Signed by: mifr
GPG key ID: 1467F9D69135C236
3 changed files with 149 additions and 0 deletions

56
bootstrap-ceph.sh Normal file
View file

@ -0,0 +1,56 @@
#!/bin/bash
uuid=$(uuidgen)
#ceph likes to use short name
nodename=$(hostname -s
cat << EOF > /etc/ceph/ceph.conf
[global]
# specify public network
public network = 89.47.190.28/23
# specify UUID genarated above
fsid = ${uuid}
# specify IP address of Monitor Daemon
mon host = 89.47.190.28
# specify Hostname of Monitor Daemon
mon initial members = ${nodename}
osd pool default crush rule = -1
[mon.${nodename}]
# specify Hostname of Monitor Daemon
host = internal-sto4-test-ceph-0.platform.sunet.se
# specify IP address of Monitor Daemon
mon addr = 89.47.190.28
# allow to delete pools
mon allow pool delete = true
EOF
# generate secret key for Cluster monitoring
ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'
ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
# generate key for bootstrap
ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd' --cap mgr 'allow r'
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
ceph-authtool /etc/ceph/ceph.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring
sudo -u ceph mkdir /var/lib/ceph/mon/ceph-${nodename}
monmaptool --create --add ${nodename} 89.47.190.28 --fsid ${uuid} /etc/ceph/monmap
ceph-mon --cluster ceph --mkfs -i i${nodename} --monmap /etc/ceph/monmap --keyring /etc/ceph/ceph.mon.keyring
chown -R ceph /var/lib/ceph/mon/ceph-${nodename} /var/lib/ceph/bootstrap-osd
#mgr
mkdir /var/lib/ceph/mgr/ceph-${nodename}
ceph auth get-or-create mgr.${nodename} mon 'allow profile mgr' osd 'allow *' mds 'allow *'
ceph auth get-or-create mgr.${nodename} | tee /etc/ceph/ceph.mgr.admin.keyring
cp /etc/ceph/ceph.mgr.admin.keyring /var/lib/ceph/mgr/ceph-${nodename}/keyring
chown ceph:ceph /etc/ceph/ceph.mgr.admin.keyring
chown -R ceph:ceph /var/lib/ceph/mgr/ceph-${nodename}
systemctl enable --now ceph-mgr@${nodename}
systemctl enable ceph-mon
#systemctl start ceph-mon
#set some global stuff
ceph mon enable-msgr2
ceph mgr module enable pg_autoscaler
ceph config set mon auth_allow_insecure_global_id_reclaim false
#Create storage disk
ceph-volume lvm create --data /dev/sda2

63
main.tf Normal file
View file

@ -0,0 +1,63 @@
# Define required providers
terraform {
required_version = ">= 0.14.0"
required_providers {
openstack = {
source = "terraform-provider-openstack/openstack"
version = "~> 1.53.0"
}
}
}
# Configure the OpenStack Provider
provider "openstack" {
cloud = "dco-platform"
}
resource "openstack_networking_secgroup_v2" "ssh-jump-tofu" {
description = "SSH from jumphost rule for SWAMID machine - managed by tofu"
name = "ssh-jump-tofu"
delete_default_rules = false
}
resource "openstack_networking_secgroup_rule_v2" "v4-jump" {
for_each = var.jump_hosts
direction = "ingress"
ethertype = "IPv4"
port_range_min = 22
port_range_max = 22
protocol = "tcp"
remote_ip_prefix = each.value["v4"]
security_group_id = openstack_networking_secgroup_v2.ssh-jump-tofu.id
}
resource "openstack_networking_secgroup_rule_v2" "v6-jump" {
for_each = var.jump_hosts
direction = "ingress"
ethertype = "IPv6"
port_range_min = 22
port_range_max = 22
protocol = "tcp"
remote_ip_prefix = each.value["v6"]
security_group_id = openstack_networking_secgroup_v2.ssh-jump-tofu.id
}
resource "openstack_compute_instance_v2" "ceph-nodes" {
count = var.instance_count
name = "${var.instance_name}-${count.index}.${var.dns_suffix}"
flavor_name = "${var.instance_type}"
key_pair = "mifr-yubi"
security_groups = ["ssh-jump-tofu",]
image_name = "debian-12"
region = "dco1"
user_data = "#cloud-config\ngrowpart:\nmode: false"
block_device {
boot_index = 0
delete_on_termination = true
destination_type = "local"
source_type = "image"
uuid = "d26c1ad1-90a2-4086-b1d9-08a5f6fe05cb"
volume_size = 20
}
network {
name = "public"
}
}

30
vars.tf Normal file
View file

@ -0,0 +1,30 @@
variable "jump_hosts" {
type = map(object({
v4 = string
v6 = string
}))
default = {
"hoppjerka.sunet.se" = {
v4 = "130.242.125.68/32"
v6 = "2001:6b0:8:4::68/128"
}
"joppherka.sunet.se" = {
v4 = "130.242.121.73/32"
v6 = "2001:6b0:7:6::73/128"
}
}
}
variable "instance_count" {
default = "1"
}
variable "instance_type" {
default = "l2.c8r16.100"
}
variable "instance_name" {
default = "internal-sto4-test-ceph"
}
variable "dns_suffix" {
default = "platform.sunet.se"
}