2. Vagrant

Warning

Na windows installer może się pod koniec instalacji wywalać. Wtedy trzeba uruchomić cmd jako Administrator i uruchomić installer z terminala.

2.1. Tworzenie maszyny

2.1.1. Uruchamianie maszyny

  1. Stwórz na pulpicie katalog szkolenie

  2. Przejdź za pomocą terminala do tego katalogu i wykonaj:

    vagrant init ubuntu/bionic64
    
  3. Spowoduje to wygenerowanie pliku, który po usunięciu komentarzy będzie wyglądał następująco:

    Vagrant.configure("2") do |config|
      config.vm.box = "ubuntu/bionic64"
    end
    
  4. Uruchom maszynę

    vagrant up
    
  5. Stworzy to maszynę z oficjalnego obrazu 64 bitowej wersji Ubuntu LTS (Long Time Support)

  6. Aby zalogować się na maszynę należy wykonać:

    vagrant ssh
    

Note

Standard tworzenia boxów Vagrant wymaga posiadanie w systemie użytkownika vagrant z hasłem vagrant

2.1.2. Update vagrant boxes

vagrant box update

2.1.3. Usuwanie maszyny

vagrant halt
vagrant destroy

2.1.4. Uruchamianie innego providera

vagrant up --provider virtualbox

2.2. Konfiguracja maszyny

2.2.1. Konfiguracja forwardingu portów

config.vm.network "forwarded_port", guest: 8080, host: 8080
config.vm.network "forwarded_port", guest: 9000, host: 9000

2.2.2. Synchronizowanie katalogów

config.vm.synced_folder ".", "/vagrant"

2.3. Konfiguracja zasobów

  • Poniższe polecenia wykonaj w pliku Vagrantfile

2.3.1. Słaby komputer

  • np. 2 CPU core, 4 GB RAM

Zalecana konfiguracja maszyny wirtualnej:

  • 1 CPU core
  • 1024 MB Ram

2.3.2. Średni komputer

Zalecana konfiguracja maszyny wirtualnej:

  • 66% CPU core
  • 66% MB RAM

2.3.3. Dobry komputer

Zalecana konfiguracja maszyny wirtualnej:

  • 75% CPU core
  • 75% MB RAM

2.4. Provisioning

2.4.1. Provisioning za pomocą shell

Vagrant.configure("2") do |config|
  config.vm.provision "shell" do |s|
    s.inline = "echo $1"
    s.args   = ["hello, world!"]
  end
end
config.vm.provision "shell", inline: <<- SHELL
    /usr/bin/whoami > /tmp/whoami
SHELL
Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "script.sh"
end
Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "https://example.com/provisioner.sh"
end

2.4.2. Provisioning za pomocą Puppet

config.vm.provision :puppet do |puppet|
    puppet.module_path = "puppet/modules"
    puppet.manifests_path = "puppet/manifests"
    puppet.manifest_file = "default.pp"
end

2.4.3. Finalna konfiguracja

Twoja konfuguracja Vagrant powinna wyglądać tak:

CPU = 1
RAM = 1024

Vagrant.configure("2") do |config|
    config.vm.hostname = "ubuntu.local"

    config.vm.box = "ubuntu/bionic64"
    # config.vm.box = "ubuntu-lts"
    # config.vm.box_url = "http://cloud-images.ubuntu.com/releases/18.04/release/ubuntu-18.04-server-cloudimg-amd64-vagrant.box"

    config.vm.network "forwarded_port", guest: 80, host: 8080
    config.vm.network "forwarded_port", guest: 443, host: 8443
    config.vm.synced_folder ".", "/var/www/host"

    config.vm.provider "virtualbox" do |v|
        v.name = "ubuntu.local"
        v.cpus = CPU
        v.memory = RAM
    end

    config.vm.provision "shell", path: "script.sh"

end
vagrant provision

2.5. Zadania do rozwiązania

2.5.1. Automatyzacja tworzenia wirtualnej maszyny

  • Użyj pliku Vagrantfile do przetrzymywania następującej konfiguracji

  • Stwórz maszynę z oficjalnego obrazu 64 bitowej wersji Ubuntu LTS (Long Time Support)

  • Ustaw hostname na ubuntu.local

  • Ustaw zasoby przydzielane maszynie wirtualnej w zależności od mocy komputera:

    • 75% CPU core,
    • 75% MB RAM
  • Ustaw forwarding portów:

    • 80 -> 8888
    • 443 -> 8443
    • 7990 -> 7990
    • 7999 -> 7999
    • 8080 -> 8080
    • 8081 -> 8081
    • 8090 -> 8090
    • 9000 -> 9000
    • 5432 -> 5432
    • 3306 -> 3306
  • Ustaw aby obecny katalog był synchronizowany na maszynie gościa w /var/www/host

  • Podnieś maszynę z Vagrantfile i rozpocznij pobieranie obrazu Ubuntu LTS

2.5.2. Vagrant + Puppet

  • Skopiuj dotychczasowe manifesty z poprzednich zadań (/etc/puppet/code/*) na swój komputer do katalogu puppet/code/
  • Skopiuj certyfikaty SSL, które wygenerowałeś na swój komputer do katalogu ssl/
  • Wyłącz maszynę vagrant halt, a następnie ją usuń vagrant destroy
  • Edytuj plik Vagrantfile i dopisz, by maszyna była stawiana z manifestów Puppet
  • W pliku Vagrantfile trzymaj jak najmniej logiki i wszystko rób za pomocą Puppet
  • Zrób by certyfikaty były przenoszone z twojego komputera na maszynę gościa (nie generuj nowych, tylko wykorzystaj stare!) oczywiście za pomocą Puppet, umieść to w pliku puppet/code/certificates.pp
  • Każdy z manifestów powinien być w osobnych plikach a jeden puppet/main.pp powinien includować pozostałe z katalogu puppet/code/*

Warning

Ubuntu 16.04 (LTS) nie zawiera w sobie puppeta, co jest sprzeczne z wymaganiem (standardem) vagrantowym. Trzeba go zainstalować za pomocą provisioningu shella, a później odpalać manifesty puppetowe.