diff --git a/docker/ubuntu-swarm-mode/Vagrantfile b/docker/ubuntu-swarm-mode/Vagrantfile new file mode 100644 index 0000000..241a188 --- /dev/null +++ b/docker/ubuntu-swarm-mode/Vagrantfile @@ -0,0 +1,74 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# Specify minimum Vagrant version and Vagrant API version +Vagrant.require_version '>= 1.6.0' +VAGRANTFILE_API_VERSION = '2' + +# Require 'yaml' module +require 'yaml' + +# Read YAML file with VM details (box, CPU, RAM, IP addresses) +# Edit machines.yml to change VM configuration details +machines = YAML.load_file(File.join(File.dirname(__FILE__), 'machines.yml')) + +# Create and configure the VMs +Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| + + # Always use Vagrant's default insecure key + config.ssh.insert_key = false + + # Iterate through entries in YAML file to create VMs + machines.each do |machine| + + # Configure the VMs per details in machines.yml + config.vm.define machine['name'] do |srv| + + # Don't check for box updates + srv.vm.box_check_update = false + + # Specify the hostname of the VM + srv.vm.hostname = machine['name'] + + # Specify the Vagrant box to use (use VMware box by default) + srv.vm.box = machine['box']['vmw'] + + # Configure default synced folder (disable by default) + if machine['sync_disabled'] != nil + srv.vm.synced_folder '.', '/vagrant', disabled: machine['sync_disabled'] + else + srv.vm.synced_folder '.', '/vagrant', disabled: true + end #if machine['sync_disabled'] + + # Iterate through networks as per settings in machines.yml + machine['nics'].each do |net| + if net['ip_addr'] == 'dhcp' + srv.vm.network net['type'], type: net['ip_addr'] + else + srv.vm.network net['type'], ip: net['ip_addr'] + end # if net['ip_addr'] + end # machine['nics'].each + + # Configure CPU & RAM per settings in machines.yml (Fusion) + srv.vm.provider 'vmware_fusion' do |vmw| + vmw.vmx['memsize'] = machine['ram'] + vmw.vmx['numvcpus'] = machine['vcpu'] + if machine['nested'] == true + vmw.vmx['vhv.enable'] = 'TRUE' + end #if machine['nested'] + end # srv.vm.provider 'vmware_fusion' + + # Configure CPU & RAM per settings in machines.yml (VirtualBox) + srv.vm.provider 'virtualbox' do |vb, override| + vb.memory = machine['ram'] + vb.cpus = machine['vcpu'] + override.vm.box = machine['box']['vb'] + end # srv.vm.provider 'virtualbox' + end # config.vm.define + + # Run simple Ansible playbook + config.vm.provision 'ansible' do |ansible| + ansible.playbook = 'provision.yml' + end # config.vm.provision + end # machines.each +end # Vagrant.configure diff --git a/docker/ubuntu-swarm-mode/ansible.cfg b/docker/ubuntu-swarm-mode/ansible.cfg new file mode 100644 index 0000000..e753432 --- /dev/null +++ b/docker/ubuntu-swarm-mode/ansible.cfg @@ -0,0 +1,8 @@ +[defaults] +inventory = .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory +private_key_file = ~/.vagrant.d/insecure_private_key +remote_user = vagrant +host_key_checking = false + +[ssh_connection] +ssh_args = -o IdentityFile=/home/slowe/.vagrant.d/insecure_private_key -o PubKeyAuthentication=yes -o ControlMaster=auto -o ControlPersist=60s -o ControlPath=~/.ansible/cp/ansible-ssh-%h-%p-%r diff --git a/docker/ubuntu-swarm-mode/create-swarm.yml b/docker/ubuntu-swarm-mode/create-swarm.yml new file mode 100644 index 0000000..6ab2202 --- /dev/null +++ b/docker/ubuntu-swarm-mode/create-swarm.yml @@ -0,0 +1,59 @@ +--- +- hosts: "all" + become: "yes" + remote_user: "vagrant" + + tasks: + - name: "Install Pip" + package: + name: "python-pip" + state: "present" + + - name: "Install some Python modules" + pip: + name: "{{ item }}" + state: "present" + with_items: + - "urllib3" + - "pyopenssl" + - "ndg-httpsclient" + - "pyasn1" + + - name: "Install Docker APT Key" + apt_key: + url: "https://download.docker.com/linux/ubuntu/gpg" + state: "present" + + - name: "Add Docker repository" + apt_repository: + repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu trusty stable" + state: "present" + update_cache: "yes" + + - name: "Install Docker CE" + package: + name: "docker-ce" + state: "present" + + - name: "Add user to Docker group" + user: + name: "{{ ansible_ssh_user }}" + group: "docker" + append: "yes" + + - name: "Initialize Docker Swarm from manager" + command: "docker swarm init --advertise-addr {{ ansible_default_ipv4.address }}" + when: "ansible.hostname == manager" + + - name: "Register Swarm join token" + command: "docker swarm join-token -q worker" + register: swarm_token + when: "ansible.hostname == manager" + + - name: "Establish Swarm join token as a host fact" + set_fact: swarmtoken="{{ swarm_token.stdout }}" + when: "ansible.hostname == manager" + + - name: "Join worker nodes to Swarm cluster" + command: "docker swarm join --advertise-addr {{ ansible_default_ipv4.address }} --token {{ hostvars[groups['tag_role_manager'][0]].swarmtoken }} {{ hostvars[groups['tag_role_manager'][0]].ansible_default_ipv4.address }}:2377" + when: "ansible.hostname != manager" diff --git a/docker/ubuntu-swarm-mode/destroy-swarm.yml b/docker/ubuntu-swarm-mode/destroy-swarm.yml new file mode 100644 index 0000000..e7466a4 --- /dev/null +++ b/docker/ubuntu-swarm-mode/destroy-swarm.yml @@ -0,0 +1,8 @@ +--- +- hosts: "all" + become: "yes" + remote_user: "vagrant" + + tasks: + - name: "Leave Swarm cluster" + command: "docker swarm leave --force" diff --git a/docker/ubuntu-swarm-mode/machines.yml b/docker/ubuntu-swarm-mode/machines.yml new file mode 100644 index 0000000..64d3907 --- /dev/null +++ b/docker/ubuntu-swarm-mode/machines.yml @@ -0,0 +1,46 @@ +--- +- box: + vmw: "bento/ubuntu-14.04" + vb: "ubuntu/trusty64" + name: "manager" + nics: + - type: "private_network" + ip_addr: "192.168.100.100" + ram: "512" + vcpu: "1" +- box: + vmw: "bento/ubuntu-14.04" + vb: "ubuntu/trusty64" + name: "worker-01" + nics: + - type: "private_network" + ip_addr: "192.168.100.101" + ram: "512" + vcpu: "1" +- box: + vmw: "bento/ubuntu-14.04" + vb: "ubuntu/trusty64" + name: "worker-02" + nics: + - type: "private_network" + ip_addr: "192.168.100.102" + ram: "512" + vcpu: "1" +- box: + vmw: "bento/ubuntu-14.04" + vb: "ubuntu/trusty64" + name: "worker-03" + nics: + - type: "private_network" + ip_addr: "192.168.100.103" + ram: "512" + vcpu: "1" +- box: + vmw: "bento/ubuntu-14.04" + vb: "ubuntu/trusty64" + name: "worker-04" + nics: + - type: "private_network" + ip_addr: "192.168.100.104" + ram: "512" + vcpu: "1" diff --git a/docker/ubuntu-swarm-mode/provision.yml b/docker/ubuntu-swarm-mode/provision.yml new file mode 100644 index 0000000..e0fba5b --- /dev/null +++ b/docker/ubuntu-swarm-mode/provision.yml @@ -0,0 +1,10 @@ +--- +- hosts: "all" + become: "yes" + remote_user: "vagrant" + + tasks: + - name: "Install Pip" + package: + name: "python-pip" + state: "present"