Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time

Vagrant, hypervisors, debian automated install and other rants

What is Vagrant?

  • Vagrant provides easy to configure, reproducible, and portable work environments.

Why Vagrant is useful?

  • Drafting and testing ansible scripts

Installing Vagrant

# apt-get install vagrant
  • This command will also pull virtualbox

Getting a Vagrant box

Downloading a box on the system

$ vagrant box add debian/jessie64

Starting up a Vagrant box

  • Add file named Vagrantfile with the following content
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure("2") do |config|
    config.vm.box = "debian/jessie64"
end

Starting up a Vagrant box

  • From the directory where Vagrant file is located
  • Bring up the box:
$ vagrant up

media/01-vagrant-vbox.png

Display vagrant machine ssh configuration

$ vagrant ssh-config
Host default
    HostName 127.0.0.1
    User vagrant
    Port 2222
    UserKnownHostsFile /dev/null
    StrictHostKeyChecking no
    PasswordAuthentication no
    IdentityFile /home/alex/git/gtalug/2016-10-11-ansible/2-testing/01-base/.vagrant/machines/default/virtualbox/private_key
    IdentitiesOnly yes
    LogLevel FATAL

Log into vagrant box

$ vagrant ssh

Ansible machine configuration ansible.cfg

[defaults]
hostfile = hosts
remote_user = vagrant
private_key_file = .vagrant/machines/default/virtualbox/private_key
host_key_checking = False

Ansible hosts file

[test]
testserver ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222

Testing SSH connectivity

$ ansible test -m ping
testserver | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Running script on vagrant box

$ ansible-playbook -vvv base-packages.yaml

Using different hypervisors

  • This works however virtualbox is not a preferred hypervisor.
  • It is not possible to run more than one hypervisor at a time.

Installing OpenSource hypervisor providers

# apt-get install vagrant-libvirt vagrant-mutate
  • vagrant-libvirt -- libvirt available in stretch and newer
  • vagrant-mutate -- convert original images to libvirt

If packages aren't available

$ vagrant plugin install vagrant-libvirt vagrant-mutate

Download vagrant libvirt box

Install libvirt version of the machine

# apt-get install vagrant-libvirt
$ vagrant box add debian/jessie64 --provider=libvirt

libvirt Vagrantfile configuration

VAGRANTFILE_API_VERSION = "2"
Vagrant.configure("2") do |config|
    config.vm.provider :libvirt do |libvirt|
        libvirt.uri = 'qemu+unix:///system'
        libvirt.host = 'localhost'
        libvirt.username = 'alex'
        libvirt.connect_via_ssh = true
    end
    config.vm.define :libvirt_vm do |machine|
        machine.vm.box = "debian/jessie64"
    end
end

Start up vagrant libvirt box

$vagrant up --provider=libvirt

media/02-vagrant-libvirt.png

Vagrant ssh config for virtualbox is different

$ vagrant ssh-config
Host libvirt_vm
  HostName 192.168.121.237
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/alex/git/gtalug/2016-10-11-ansible/2-testing/02-vagrant-libvirt/.vagrant/machines/libvirt_vm/libvirt/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ProxyCommand ssh 'localhost' -l 'alex' -i '/home/alex/.ssh/id_rsa' nc %h %p

Update ansible.cfg settings

  • Set a new path to private_key_file
private_key_file = .vagrant/machines/libvirt_vm/libvirt/private_key

Update hosts settings

vagrant_libvirt ansible_ssh_host=192.168.121.237 ansible_ssh_port=22

Run ansible ping command

$ ansible test -m ping
testserver | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Creating preseed file

  • Install debian system answering all the install questions
  • Install debian-installer package on the system
  • Extract the answers

Preseed Answers extraction

# debconf-get-selections --installer > ${HOME}/preseed.cfg
# debconf-get-selections >> ${HOME}/preseed.cfg

Getting from bare metal to Ansible with Debian automated install

  • Ugly shell script in *gen_iso.sh
  • Creates iso with preseed file based on debian-8.6.0-amd64-CD-1.iso

Running an installation with preseed.cfg

  • See the video.

Getting foot in the door

  • First run copy ssh pubkey and some other things on a new system
$ ansible-playbook --ask-pass --ask-become-pass --ssh_port=2222 -i<hostname>, -vvv base_packages.yaml
  • Backup command if script fails and you need to debug it
$ ansible-playbook -i<hostname>, -vvv base_packages.yaml

Comma after hostname is important

Loading Debian Preseed in USB/CD images