david-pesticcio

Docker swarm cluster

Sep 15th, 2021 (edited)
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # -*- mode: ruby -*-
  2. # vi: set ft=ruby :
  3.  
  4. machines=[
  5.   {
  6.     :hostname => "manager",
  7.     :ip => "192.168.99.100",
  8.     :box => "shekeriev/centos-8-minimal",
  9.     :ram => 1024,
  10.   },
  11.   {
  12.     :hostname => "worker-1",
  13.     :ip => "192.168.99.101",
  14.     :box => "shekeriev/centos-8-minimal",
  15.     :ram => 1024,
  16.   },
  17.   {
  18.     :hostname => "worker-2",
  19.     :ip => "192.168.99.102",
  20.     :box => "shekeriev/centos-8-minimal",
  21.     :ram => 1024,
  22.   }
  23. ]
  24.  
  25. $install_docker_script = <<SCRIPT
  26.   echo "* Add Docker repository ..."
  27.   dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  28.  
  29.   echo "* Add the missing dependency ..."
  30.   dnf install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.13-3.1.el7.x86_64.rpm
  31.  
  32.   echo "* Install Docker ..."
  33.   dnf install -y docker-ce docker-ce-cli
  34.  
  35.   echo "* Enable and start Docker ..."
  36.   systemctl enable docker
  37.   systemctl start docker
  38.  
  39.   echo "*Disable Firewall..."
  40.   systemctl stop firewalld
  41.  
  42.   echo "* Add vagrant user to docker group ..."
  43.   usermod -aG docker vagrant
  44. SCRIPT
  45.  
  46. $manager_script = <<SCRIPT
  47. if [ "$#" -eq 1 ]; then
  48.    echo "Docker swarm init..."
  49.    echo Arguments: $*
  50.    docker swarm init --advertise-addr $1
  51.    docker swarm join-token -q worker > /vagrant/swarm-token-worker
  52. else
  53.    echo "Illegal number of parameters"
  54. fi
  55. SCRIPT
  56.  
  57. $node_script = <<SCRIPT
  58. echo "Arguments: $*"
  59. if [ "$#" -eq 2 ]; then
  60.    echo "Docker swarm join..."
  61.    cat /vagrant/swarm-token-worker
  62.    docker swarm join --token `cat /vagrant/swarm-token-worker` --advertise-addr $1 $2:2377
  63. else
  64.    echo "Illegal number of parameters"
  65. fi
  66. SCRIPT
  67.  
  68. Vagrant.configure("2") do |config|
  69.   machines.each do |machine|
  70.     config.vm.define machine[:hostname] do |node|
  71.       node.vm.box = machine[:box]
  72.       node.vm.hostname = machine[:hostname]
  73.       node.vm.network "private_network", ip: machine[:ip]
  74.       node.vm.network "forwarded_port", guest: 8080, host: 8080, auto_correct: true
  75.       node.vm.provision "shell", inline: $install_docker_script
  76.       node.vm.synced_folder "web", "/home/vagrant/web"
  77.       node.vm.provision "shell", inline: "docker image build ./web/php -t my-web"
  78.       node.vm.provision "shell", inline: "docker image build ./web/mysql -t my-db"
  79.       node.vm.provision "shell", inline: "systemctl restart docker"
  80.      
  81.       if machine[:hostname] == "manager"
  82.         MANAGER_IP = machine[:ip]
  83.         node.vm.provision "shell", inline: $manager_script, :args => ["#{machine[:ip]}"], privileged: true
  84.         node.vm.provision "file", source: "./docker-compose.yml", destination: "/home/vagrant/docker-compose.yml"
  85.       else
  86.         node.vm.provision "shell", inline: $node_script,:args => ["#{machine[:ip]}", "#{MANAGER_IP}"], privileged: true
  87.       end
  88.       node.vm.provider "virtualbox" do |vb|
  89.         vb.customize ["modifyvm", :id, "--memory", machine[:ram]]
  90.       end
  91.     end
  92.   end
  93. end
  94.  
Add Comment
Please, Sign In to add comment