From d24116dfe58b67768388372caa50392c4fc8c1d7 Mon Sep 17 00:00:00 2001
From: Nicolas Dandrimont <nicolas@dandrimont.eu>
Date: Fri, 20 Dec 2019 18:42:06 +0100
Subject: [PATCH] Add definitions for cassandra servers

Implements T2033
---
 azure/terraform/cassandra.plan             | Bin 0 -> 15025 bytes
 azure/terraform/cassandra.tf               | 179 +++++++++++++++++++++
 azure/terraform/templates/firstboot.sh.tpl |  73 ++++++---
 3 files changed, 234 insertions(+), 18 deletions(-)
 create mode 100644 azure/terraform/cassandra.plan
 create mode 100644 azure/terraform/cassandra.tf

diff --git a/azure/terraform/cassandra.plan b/azure/terraform/cassandra.plan
new file mode 100644
index 0000000000000000000000000000000000000000..9dcba614cb424ea7102a24c81c4fadf360d90a9a
GIT binary patch
literal 15025
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

literal 0
HcmV?d00001

diff --git a/azure/terraform/cassandra.tf b/azure/terraform/cassandra.tf
new file mode 100644
index 0000000..113cb8f
--- /dev/null
+++ b/azure/terraform/cassandra.tf
@@ -0,0 +1,179 @@
+variable "cassandra_servers" {
+  default = 1
+}
+
+variable "cassandra_disk_size" {
+  default = 1024
+}
+
+variable "cassandra_disks_per_server" {
+  default = 4
+}
+
+resource "azurerm_resource_group" "euwest-cassandra" {
+  name     = "euwest-cassandra"
+  location = "westeurope"
+
+  tags = {
+    environment = "Cassandra"
+  }
+}
+
+locals {
+  cassandra_servers = {
+    for i in range(var.cassandra_servers):
+    format("cassandra%02d", i + 1) => {
+      datadisks = {
+        for i in range(var.cassandra_disks_per_server):
+        format("datadisk%02d", i + 1) => {
+          lun  = i + 1
+          path = format("/dev/disk/azure/scsi1/lun%d", i + 1)
+        }
+      }
+    }
+  }
+}
+
+
+resource "azurerm_network_interface" "cassandra-interface" {
+  for_each                      = local.cassandra_servers
+
+  name                          = format("%s-interface", each.key)
+  location                      = "westeurope"
+  resource_group_name           = azurerm_resource_group.euwest-cassandra.name
+  network_security_group_id     = data.azurerm_network_security_group.worker-nsg.id
+
+  enable_accelerated_networking = true
+
+  ip_configuration {
+    name                          = "vaultNicConfiguration"
+    subnet_id                     = data.azurerm_subnet.default.id
+    public_ip_address_id          = ""
+    private_ip_address_allocation = "Dynamic"
+  }
+
+  depends_on                = [azurerm_resource_group.euwest-cassandra]
+}
+
+
+resource "azurerm_virtual_machine" "cassandra-server" {
+  for_each              = local.cassandra_servers
+
+  depends_on            = [azurerm_resource_group.euwest-cassandra]
+
+  name                  = each.key
+  location              = "westeurope"
+  resource_group_name   = azurerm_resource_group.euwest-cassandra.name
+  network_interface_ids = [azurerm_network_interface.cassandra-interface[each.key].id]
+  vm_size               = "Standard_DS13_v2"
+
+  delete_os_disk_on_termination    = true
+  delete_data_disks_on_termination = true
+
+  boot_diagnostics {
+    enabled     = true
+    storage_uri = var.boot_diagnostics_uri
+  }
+
+  storage_os_disk {
+    name              = format("%s-osdisk", each.key)
+    caching           = "ReadWrite"
+    create_option     = "FromImage"
+    managed_disk_type = "Premium_LRS"
+  }
+
+  dynamic storage_data_disk {
+    for_each = each.value.datadisks
+
+    content {
+      name              = format("%s-%s", each.key, storage_data_disk.key)
+      caching           = "None"
+      create_option     = "Empty"
+      managed_disk_type = "Premium_LRS"
+      disk_size_gb      = var.cassandra_disk_size
+      lun               = storage_data_disk.value.lun
+    }
+  }
+
+  storage_image_reference {
+    publisher = "debian"
+    offer     = "debian-10"
+    sku       = "10"
+    version   = "latest"
+  }
+
+  os_profile {
+    computer_name  = each.key
+    admin_username = var.user_admin
+  }
+
+  os_profile_linux_config {
+    disable_password_authentication = true
+    ssh_keys {
+      path     = "/home/${var.user_admin}/.ssh/authorized_keys"
+      key_data = var.ssh_key_data_olasd
+    }
+  }
+
+  provisioner "remote-exec" {
+    inline = [
+      "sudo mkdir /root/.ssh",
+      "echo ${var.ssh_key_data_ardumont} | sudo tee -a /root/.ssh/authorized_keys",
+      "echo ${var.ssh_key_data_olasd} | sudo tee -a /root/.ssh/authorized_keys",
+    ]
+
+    connection {
+      type = "ssh"
+      user = var.user_admin
+      host = azurerm_network_interface.cassandra-interface[self.name].private_ip_address
+    }
+  }
+
+  provisioner "file" {
+    content     = templatefile("templates/firstboot.sh.tpl", {
+      hostname   = self.name
+      fqdn       = format("%s.euwest.azure.internal.softwareheritage.org", self.name)
+      ip_address = azurerm_network_interface.cassandra-interface[self.name].private_ip_address
+      facter_location = "azure_euwest",
+      disks = [
+        for disk in local.cassandra_servers[self.name].datadisks: {
+          base_disk = disk.path
+        }
+      ]
+      raids = [{
+        path          = "/dev/md0"
+        level         = 0
+        chunk         = "128K"
+        members       = [for disk in local.cassandra_servers[self.name].datadisks: format("%s-part1", disk.path)]
+        mountpoint    = "/srv/cassandra"
+        filesystem    = "ext4"
+        mount_options = "defaults"
+      }]
+    })
+    destination = var.firstboot_script
+
+    connection {
+      type = "ssh"
+      user = "root"
+      host = azurerm_network_interface.cassandra-interface[self.name].private_ip_address
+    }
+  }
+
+  provisioner "remote-exec" {
+    inline = [
+      "userdel -f ${var.user_admin}",
+      "chmod +x ${var.firstboot_script}",
+      "cat ${var.firstboot_script}",
+      "${var.firstboot_script}",
+    ]
+    connection {
+      type = "ssh"
+      user = "root"
+      host = azurerm_network_interface.cassandra-interface[self.name].private_ip_address
+    }
+  }
+
+  tags = {
+    environment = "Cassandra"
+  }
+}
diff --git a/azure/terraform/templates/firstboot.sh.tpl b/azure/terraform/templates/firstboot.sh.tpl
index 77057e7..9a2cb9b 100644
--- a/azure/terraform/templates/firstboot.sh.tpl
+++ b/azure/terraform/templates/firstboot.sh.tpl
@@ -12,19 +12,8 @@ FQDN=${fqdn}
 IP=${ip_address}
 FACTER_LOCATION=${facter_location}
 
-%{ for disk in disks }
-# Make one large partition on ${disk.base_disk}
-echo ';' | sudo sfdisk --label gpt ${disk.base_disk}
-
-mkfs.${disk.filesystem} ${disk.base_disk}1
-
-mkdir -p ${disk.mountpoint}
-
-uuid=$(blkid -o value -s UUID ${disk.base_disk}1)
-echo "UUID=\"$uuid\" ${disk.mountpoint} ${disk.filesystem} ${disk.mount_options} 0 0" >> /etc/fstab
-%{ endfor }
 
-mount -a
+# Handle base system configuration
 
 apt-get -y install lsb-release
 debian_suite=$(lsb_release -cs)
@@ -43,9 +32,53 @@ echo $HOSTNAME > /etc/hostname
 hostnamectl set-hostname $HOSTNAME
 echo "$IP $FQDN $HOSTNAME" >> /etc/hosts
 
+
+# Handle disk configuration
+
+%{ for disk in disks }
+# Make one large partition on ${disk.base_disk}
+echo ';' | sudo sfdisk --label gpt ${disk.base_disk}
+
+%{ if lookup(disk, "filesystem", "") != "" }
+mkfs.${disk.filesystem} ${disk.base_disk}1
+
+mkdir -p ${disk.mountpoint}
+
+uuid=$(blkid -o value -s UUID ${disk.base_disk}1)
+echo "UUID=\"$uuid\" ${disk.mountpoint} ${disk.filesystem} ${disk.mount_options} 0 0" >> /etc/fstab
+%{ endif }
+%{ endfor }
+
+%{ if length(raids) != 0 }
+
+apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --no-install-recommends install mdadm
+
+%{ for raid in raids }
+
+mdadm --create ${raid.path} \
+      --level=${raid.level} \
+      --raid-devices ${length(raid.members)} \
+      %{ if raid.chunk != "" }--chunk=${raid.chunk}%{ endif } \
+      %{~ for member in raid.members } ${member} %{ endfor ~}
+
+%{ if lookup(raid, "filesystem", "") != "" }
+mkfs.${raid.filesystem} ${raid.path}
+
+mkdir -p ${raid.mountpoint}
+
+uuid=$(blkid -o value -s UUID ${raid.path})
+echo "UUID=\"$uuid\" ${raid.mountpoint} ${raid.filesystem} ${raid.mount_options} 0 0" >> /etc/fstab
+%{ endif }
+%{ endfor }
+
+/usr/share/mdadm/mkconf > /etc/mdadm/mdadm.conf
+update-initramfs -k all -u
+%{ endif }
+
+mount -a
+
 # install puppet dependencies
-apt-get -y install -t $${debian_suite}-backports facter
-apt-get -y install puppet
+apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" --no-install-recommends install puppet gnupg
 
 # do not need the service live as we need to install some more setup first
 service puppet stop
@@ -58,8 +91,12 @@ echo location=$FACTER_LOCATION > /etc/facter/facts.d/location.txt
 # first time around, this will:
 # - update the node's puppet agent configuration defining the puppet master
 # - generate the certificates with the appropriate fqdn
-# - unfortunately, for now, this fails though, when not being able to
-#   install the apt-transport-https package
-puppet agent --server $PUPPET_MASTER --waitforcert 60 --test
+puppet_exit=0
+
+puppet agent --server $PUPPET_MASTER --waitforcert 60 --test --vardir /var/lib/puppet --detailed-exitcodes || puppet_exit=$?
+
+if [ $puppet_exit -ne 2 ]; then
+    exit $puppet_exit
+fi
 
-#reboot
+# reboot
-- 
GitLab