View difference between Paste ID: bGmE7ZQ3 and kgTcTgEL
SHOW: | | - or go back to the newest paste.
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