Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 21 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
# sd-workshop2 2022-1
# sd-workshop2 2023-1
sd workshop2

- Completar la lógica de la applicación de pagos de tal manera que al hacer un pago através del microservicio de pagos, el monto de las facturas sea correctamente debitado, es decir, actualmente si una factura debe 1000 y yo hago un pago por 400 a esa factura, el microservicio invoice me sobreescribe el 1000 por 400 en vez de mostrarme el saldo restante 1000-400=600.
- Completar la lógica de la aplicación de tal manera que haya 3 estados para las facturas. 0=debe 1=pagadoparcialmente 2=pagado
- Hacer que las applicaciones se puedan registrar con consul
- Debe ser un pull request a este repositorio sd-workshop2
Montar un Sistema de Archivos Distribuido con Glusterfs entre 3 máquinas y automatizar su configuración a través del Vagrantfile, para que quede listo con tan solo hacer vagrat up.

Bonus:
- Subir las imagenes de la app a Docker hub
- Crear un script en bash que lance toda la aplicación.
# Entrega Juan Fernando Angulo
El montaje funciona de la siguien manera:
1. En el Vagranfile se definen 3 maquinas, cada una con un disco adjunto, y de las cuales una de ellas (maser) será dónde se cree el volumen compartido con las otras dos maquinas (node1 y node2).
2. Para hacer las configuraciones extras para que funcione el Sistema de Archivos Distribuido, se definieron las instrucciones necesarias a ejecutar en cada máquina dentro de un script de bash externo llamado post-provisioning.sh que se encuentra ubicado en la carpeta de scripts.
3. Puesto que estas configuraciones extras se deben ejecutar una vez que las tres máquinas han sido creadas y esten corriendo, para asegurar esto utilicé un trigger en el Vagrantfile que ejecuta el script post-provisioning.sh después de provisionar cada máquina, y dentro del script a través de un condicional, me aseguro de ejecutar el resto de instrucciones solo cuando las tres máquinas están corriendo.
![Trigger](https://github.com/Juanferas/sd-workshop2/blob/master/screenshots/Script_trigger.PNG "Trigger")
4. Para la ejecucción de las instrucciones, envío los comandos a cada máquina a través de ssh, proporcionando la llave privada de cada máquina para que me deje conectar.
![post-provisioning.sh](https://github.com/Juanferas/sd-workshop2/blob/master/screenshots/post-provisioning_script.png "post-provisioning.sh")
5. Y listo, el Sistema de Archivos Distribuido con Glusterfs ya se encuentra configurado para las trés máquinas y montado en la ruta /mnt.

## Evidencias
A continuación se adjuntan evidencias del funcionamiento durante la ejecución del comando vagrant up y posterior a este:
- Al inicio las máquinas no se han creado y se ejecuta vagrant up.
![Estado inicial](https://github.com/Juanferas/sd-workshop2/blob/master/screenshots/Initial_status.png "Estado incial")
- Al final de la ejecución del vagrant up, justo después de terminar de provisionar la última máquina, se observa que se inicia la ejecución del post-provisioning.sh script y se ve el resultado de cada comando a través de la consola, para al final indicar que el montaje ha terminado exitosamente.
![Montaje exitoso](https://github.com/Juanferas/sd-workshop2/blob/master/screenshots/Glusterfs_mounted.png "Montaje exitoso")
- Para probar que el montaje efectivamente fue exitoso, entramos a la máquina master, revisamos que el punto de montaje se encuentra vacío y creamos unos cuantos archivos de prueba en él, revisamos que se crearon, entramos a las otras dos máquinas y revisamos también.
![Prueba funcionamiento](https://github.com/Juanferas/sd-workshop2/blob/master/screenshots/Working_test.png "Prueba funcionamiento")
Como se comprobó, el montaje se hizo correctamente y el Sistema de Archivos Distribuido funciona.
59 changes: 59 additions & 0 deletions Vagrantfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# -*- mode: ruby -*-
# vi: set ft=ruby :

firstDisk = "./firstDirk.vdi"
secondDisk = "./secondDirk.vdi"
thirdDisk = "./thirdDirk.vdi"

Vagrant.configure("2") do |config|

config.vm.define "node1" do |node1|
node1.vm.box = "centos/7"
node1.vm.hostname = "node-1"
node1.vm.network "private_network", ip: "192.168.56.12"
node1.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "512", "--cpus", "1", "--name", "node-1"]
unless File.exist?(secondDisk)
vb.customize ['createhd', '--filename', secondDisk, '--variant', 'Fixed', '--size', 5 * 1024]
end
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', secondDisk]
end
node1.vm.provision "shell", path: "scripts/glusterfs.sh"
node1.vm.provision "shell", path: "scripts/configuration.sh"
end

config.vm.define "node2" do |node2|
node2.vm.box = "centos/7"
node2.vm.hostname = "node-2"
node2.vm.network "private_network", ip: "192.168.56.13"
node2.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "512", "--cpus", "1", "--name", "node-2"]
unless File.exist?(thirdDisk)
vb.customize ['createhd', '--filename', thirdDisk, '--variant', 'Fixed', '--size', 5 * 1024]
end
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', thirdDisk]
end
node2.vm.provision "shell", path: "scripts/glusterfs.sh"
node2.vm.provision "shell", path: "scripts/configuration.sh"
end

config.vm.define "master" do |server|
server.vm.box = "centos/7"
server.vm.network "private_network", ip: "192.168.56.11"
server.vm.provider "virtualbox" do |vb|
vb.customize ["modifyvm", :id, "--memory", "512", "--cpus", "1", "--name", "master-node"]
unless File.exist?(firstDisk)
vb.customize ["createhd", "--filename", firstDisk, "--variant", "Fixed", "--size", 5*1024]
end
vb.customize ["storageattach", :id, "--storagectl", "IDE", "--port", 1, "--device", 0, "--type", "hdd", '--medium', firstDisk]
end
server.vm.provision "shell", path: "scripts/glusterfs.sh"
server.vm.provision "shell", path: "scripts/configuration.sh"
end

# Ejecución de script de post-provisionamiento
config.trigger.after :up do |trigger|
trigger.run = {path: "scripts/post-provisioning.sh"}
end

end
Binary file added screenshots/Glusterfs_mounted.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/Initial_status.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/Script_trigger.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/Working_test.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/post-provisioning_script.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions scripts/configuration.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
echo "192.168.56.11 master" >> /etc/hosts
echo "192.168.56.12 node1" >> /etc/hosts
echo "192.168.56.13 node2" >> /etc/hosts
13 changes: 13 additions & 0 deletions scripts/glusterfs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
yum install -y centos-release-gluster
yum install -y glusterfs-server
yum install -y xfsprogs

service glusterd start

sfdisk /dev/sdb << EOF
;
EOF

mkfs.xfs /dev/sdb1
mkdir -p /gluster/data
mount /dev/sdb1 /gluster/data/
17 changes: 17 additions & 0 deletions scripts/post-provisioning.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/bin/bash

if [ $(vagrant status | grep "not created" | wc -l) -ge 1 ]
then
echo "[!] Aún no están corriendo ni han sido provisionadas todas la maquinas"
else
echo -e "[+] Todas las maquinas han sido provisionadas y están corriendo\n\nEjecutando configuraciones extras para el Sistema de Archivos Distribuido..."
# Extraer las llaves privadas para realizar la conexión SSH
master_private_key=$(vagrant ssh-config master | grep "IdentityFile" | sed 's/IdentityFile//' | xargs)
node1_private_key=$(echo $master_private_key | sed "s/master/node1/")
node2_private_key=$(echo $master_private_key | sed "s/master/node2/")
# Ejecutar los scripts de post-provisioning en cada máquina a través de SSH
ssh -i "$master_private_key" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -y vagrant@192.168.56.11 "sudo gluster peer probe node1; sudo gluster peer probe node2; sudo gluster pool list; sudo gluster volume create gv0 replica 3 master:/gluster/data/gv0 node1:/gluster/data/gv0 node2:/gluster/data/gv0; sudo gluster volume start gv0; sudo gluster volume status; sudo mount.glusterfs master:/gv0 /mnt"
ssh -i "$node1_private_key" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -y vagrant@192.168.56.12 "sudo mount.glusterfs localhost:/gv0 /mnt"
ssh -i "$node2_private_key" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -y vagrant@192.168.56.13 "sudo mount.glusterfs localhost:/gv0 /mnt"
echo -e "[+] Script de post-provisionamiento ejecutado correctamente :)\n\nEl punto de montaje es /mnt"
fi