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 |