Zum Inhalt

Vagrant und Ansible – von der Basebox zur fertigen VM Pt. II

In Teil 1 habe ich kurz erklärt, worum es sich bei Vagrant und Ansible überhaupt handelt. Jetzt will ich euch erklären, wie man es installiert und benutzt, dabei macht Vagrant den Anfang.

Den Installer von Vagrant kann man sich hier für die jeweilige Plattform herunterladen, ich habe mir den Installer für Mac OS gezogen und ausgeführt. Für die Tests brauchen wir dazu auch noch Virtualbox, dies kann man hier herunterladen.

Wie wir bereits wissen, wird Vagrant dazu benutzt um aus einer Basebox eine VM zu erstellen. Woher kommt nun jedoch die Basebox und was muss ich dafür alles tun? Man kann sich seine Basebox entweder selber erstellen, zum Beispiels über Tools wie veewee und packer oder „von Hand“, oder man sucht sich im Vagrant Atlas die passende Basebox heraus.

Wenn man sich nun für eine Basebox entschieden hat, ich nehme für dieses Tutorial die Ubuntu Xenial Basebox, kann man prinzipiell auch schon beginnen.

Ich empfehle die folgenden Schritte alle in einem eigens für das Tutorial angelegten Verzeichnis durchzuführen.

Um nun Vagrant in diesem Verzeichnis zu initialisieren, führt man im Projektverzeichnis den folgenden Befehl via Kommandozeile aus:

vagrant init ubuntu/xenial64

Auf der Konsole bekommen man dann die folgende Ausgabe:

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Im Vagrantfile stehen alle relevanten Informationen über die zu erstellende virtuelle Maschine. Dabei kann man selber unzähle Parameter festlegen, wie zum Beispiel die Anzahl der CPU Kerne, die Menge an RAM, das Netzwerk und vieles mehr. Für den Anfang begnügen wir uns mit den Standardsettings.

Der Inhalt des Vagrantfile sieht wie folgt aus

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  # The most common configuration options are documented and commented below.
  # For a complete reference, please see the online documentation at
  # https://docs.vagrantup.com.

  # Every Vagrant development environment requires a box. You can search for
  # boxes at https://atlas.hashicorp.com/search.
  config.vm.box = "ubuntu/xenial64"

  # Disable automatic box update checking. If you disable this, then
  # boxes will only be checked for updates when the user runs
  # `vagrant box outdated`. This is not recommended.
  # config.vm.box_check_update = false

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # config.vm.network "forwarded_port", guest: 80, host: 8080

  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  # config.vm.network "private_network", ip: "192.168.33.10"

  # Create a public network, which generally matched to bridged network.
  # Bridged networks make the machine appear as another physical device on
  # your network.
  # config.vm.network "public_network"

  # Share an additional folder to the guest VM. The first argument is
  # the path on the host to the actual folder. The second argument is
  # the path on the guest to mount the folder. And the optional third
  # argument is a set of non-required options.
  # config.vm.synced_folder "../data", "/vagrant_data"

  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  # config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.

  # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
  # such as FTP and Heroku are also available. See the documentation at
  # https://docs.vagrantup.com/v2/push/atlas.html for more information.
  # config.push.define "atlas" do |push|
  #   push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
  # end

  # Enable provisioning with a shell script. Additional provisioners such as
  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
  # documentation for more information about their specific syntax and use.
  # config.vm.provision "shell", inline: <

Mit Vagrant.configure("2") do |config| wird im Vagrantfile der Konfigurationsteil „eingeleitet“. Darunter stehen alle relevanten Einstellungen für die spätere VM. Über config.vm.box = "ubuntu/xenial64" wird beispielsweise festgelegt, welche Basebox genutzt werden soll. Der Parameter vb.memory = "1024" im Abschnitt config.vm.provider "virtualbox" do |vb| würde die Menge an RAM der virtuellen Maschine festlegen. Auf die weiteren Parameter würde ich später eingehen, kommen wir jetzt zum Start der neuen virtuellen Maschine via:

vagrant up

Danach sollte auf der Konsole in etwa folgende Ausgabe erscheinen:

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/xenial64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/xenial64'
    default: URL: https://atlas.hashicorp.com/ubuntu/xenial64
==> default: Adding box 'ubuntu/xenial64' (v20170523.1.0) for provider: virtualbox
    default: Downloading: https://atlas.hashicorp.com/ubuntu/boxes/xenial64/versions/20170523.1.0/providers/virtualbox.box
==> default: Successfully added box 'ubuntu/xenial64' (v20170523.1.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: Setting the name of the VM: vagrant_default_1495714711788_38663
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: ubuntu
    default: SSH auth method: password
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.0.40
    default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
    default: /vagrant => /projects/simonkulessa.de/vagrant

Wenn die Basebox nun erfolgreich erstellt wurde, könnt ihr euch per

vagrant ssh

mit der virtuellen Maschine verbinden. Bei meinen letzten Tests unter Windows (7) kam es mangels installiertem ssh/cygwin zu Fehlern bei der SSH Verbindung, die SSH Verbindung zur VM via Putty war jedoch möglich.

Dies soll es als grobe Einführung für heute erst mal gewesen sein, mehr zu Vagrant und Ansible dann in Part III.

Published inAllgemein

2 Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.