Bei uns in der Firma wird ab sofort ein Systemadministrator gesucht. Alle weiteren Infos gibt es auf http://www.intranda.com/uber-uns/jobs
Puppet: Hiera und Defined Types
puppetlabs apache vhost hiera howto
Das waren in etwa die Stichworte in der Suche als ich versucht habe meine mit dem puppetlabs/apache Modul definierten Apache vhosts aus der site.pp nach hiera zu migrieren. Es wollte nämlich einfach nicht klappen. Nach einiger Zeit bin ich dann darauf gestoßen, dass es sich bei dem apache::vhost um einen sogenannten Defined Type handelt. Diese sind sehr ähnlich zu Klassen, lassen sich aber im Gegensatz zu diesen mehrfach auf einem Node definieren.
Das automatische Parameter-Lookup wie bei den Klassen funktioniert bei Defined Types hingegen nicht. Lösung ist die create_resources() Funktion. Aber damit ich das später auch noch verstehe wenn ich hier in den Blogeintrag hineingucke schreibe ich ein praktisches Beispiel auf.
Ein Apache vhost in der site.pp:
node 'www.example.org' inherits default { apache::vhost {'www.example.org': servername => 'www.example.org', serveraliases => [ 'example.org' ], serveradmin => 'webmaster@example.org', port => '80', docroot => '/var/www/example.org/www/', } |
wird in hiera zu:
--- apache::vhost: 'www.example.org': servername: 'www.example.org' serveraliases: - 'example.org' serveradmin: 'webmaster@example.org' port: '80' docroot: '/var/www/example.org/www/' |
und damit dieser Eintrag auch ausgewertet und der vhost erzeugt wird sieht die site.pp danach wie folgt aus:
node 'www.example.org' inherits default { $myApacheVhosts = hiera('apache::vhost', {}) create_resources('apache::vhost', $myApacheVhosts) } |
Ich empfehle hier wärmstens das Chapter 3 – Using Hiera von Puppet Lunch. Ich habe lange im Netz gesucht und bin schließlich dort fündig geworden.
apt/aptitude: Was die Buchstaben vorne beim Paketstatus bedeuten
Vieles kennt man ja. Was „h“ war musste ich grad nachlesen und weil die Übersicht so praktisch ist kopiere ich sie mir hierher damit ich sie in Zukunft besser finde
The first character is the package’s current state. The second character is the action which will be taken on the package. The third character indicates whether the package was automatically installed, and the fourth character indicates whether the package is trusted.
Values of the „current state“ flag
- i – the package is installed and all its dependencies are satisfied.
- c – the package was removed, but its configuration files are still present.
- p – the package and all its configuration files were removed, or the package was never installed.
- v – the package is virtual.
- B – the package has broken dependencies.
- u – the package has been unpacked but not configured.
- C – half-configured: the package’s configuration was interrupted.
- H – half-installed: the package’s installation was interrupted.
Values of the „action“ flag
- i – the package will be installed.
- u – the package will be upgraded.
- d – the package will be deleted: it will be removed, but its configuration files will remain on the system.
- p – the package will be purged: it and its configuration files will be removed.
- h – the package will be held back: it will be kept at its current version, even if a newer version becomes available, until the hold is cancelled.
- F – An upgrade of the package has been forbidden.
- r – the package will be reinstalled.
- B – the package is “broken”: some of its dependencies will not be satisfied. aptitude will not allow you to install, remove, or upgrade anything while you have broken packages.
Quelle: http://algebraicthunk.net/~dburrows/projects/aptitude/doc/en/ch02s02s02.html#figureActionFlag
Puppet: Testen in einer Testumgebung – Hallo Vagrant
Wenn ich mit Puppet arbeite passiert dieses leider viel zu häufig direkt auf dem Livesystem. Das ist natürlich Mist und darf so nicht sein. Eine Lösung ist Vagrant. Damit können sehr einfach „Wegwerf-VMs“ erzeugt werden um die Puppetkonfiguration zu testen. Wie das geht möchte ich in diesem Blogeintrag kurz festhalten.
Als Vorbereitung ist auf meinem PC das Paket virtualbox aus den Standardrepositories und Vagrant von deren Webseite installiert.
Um nun eine VirtualBox mit Ubuntu 12.04 LTS 64bit über Vagrant zu starten sind nur wenige Schritte notwendig:
mkdir ~/vagrant cd ~/vagrant touch HELLO_I_WAS_HERE vagrant init puppetlabs/debian-7.4-64-puppet vagrant up |
Die Ausgabe sollte ungefähr so aussehen:
user@host:~/vagrant$ vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Box 'hashicorp/precise64' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 ==> default: Loading metadata for box 'hashicorp/precise64' default: URL: https://vagrantcloud.com/hashicorp/precise64 ==> default: Adding box 'hashicorp/precise64' (v1.1.0) for provider: virtualbox default: Downloading: https://vagrantcloud.com/hashicorp/precise64/version/2/provider/virtualbox.box ==> default: Successfully added box 'hashicorp/precise64' (v1.1.0) for 'virtualbox'! ==> default: Importing base box 'hashicorp/precise64'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'hashicorp/precise64' is up to date... ==> default: Setting the name of the VM: vagrant_default_1408706120277_30417 ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 => 2222 (adapter 1) ==> 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: vagrant default: SSH auth method: private 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: 4.2.0 default: VirtualBox Version: 4.1 ==> default: Mounting shared folders... default: /vagrant => /home/user/vagrant user@host:~/vagrant$ |
Mit dem Befehl vagrant ssh kann nun eine SSH-Verbindung zu der VM hergestellt werden. Der Ordner ~/vagrant in dem wir uns befinden ist in der VM unter /vagrant/ verfügbar:
user@host:~/vagrant$ vagrant ssh Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64) * Documentation: https://help.ubuntu.com/ New release '14.04.1 LTS' available. Run 'do-release-upgrade' to upgrade to it. Welcome to your Vagrant-built virtual machine. Last login: Fri Sep 14 06:23:18 2012 from 10.0.2.2 vagrant@precise64:~$ ls -l /vagrant total 20 -rw-r--r-- 1 vagrant vagrant 0 Aug 22 11:30 HELLO_I_WAS_HERE -rw-r--r-- 1 vagrant vagrant 4826 Aug 22 11:11 Vagrantfile vagrant@precise64:~$ |
Die VM kann mit vagrant destroy wieder gelöscht werden.
In der Datei Vagrantfile wird die VM konfiguriert. Das praktische ist, dass dort Puppet eingebunden werden kann, so dass beim Hochfahren der VM dieses gleich ausgeführt wird. Um nun meine Konfiguration zu testen kopiere ich das puppet Verzeichnis in den Ordner vagrant. Kopieren ist wichtig, ich habe zuerst einen symbolischen Link erzeugt, aber die VM kann dem ja nicht folgen 8-)
scp -r puppetmaster:/etc/puppet ~/vagrant/ |
Anschließend sind in der Vagrantfile zwei Optionen zu konfigurieren. Erstens den Hostnamen der VM, damit wenn Puppet ausgeführt wird dieser korrekt ist und die richtigen Einstellungen übernommen werden. Zweitens den Pfad zu dem von puppet benötigten Manifest und den Modulen:
config.vm.hostname = "mynode.example.org" config.vm.provision "puppet" do |puppet| puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "site.pp" puppet.module_path = "puppet/modules" #puppet.options = "--verbose --debug" end |
Beim Starten der VM wird Puppet dann automatisch ausgeführt. Läuft die VM bereits kann das mit dem Befehl vagrant provision erneut angestoßen werden.
Auf diese Art- und Weise kann die Puppetkonfiguration in einer VM getestet werden bis alles so ist wie ich es haben möchte.
Zum Schluss:
-
Die Virtualbox wird standardmäßig im headless Mode gestartet. Wer über die Applikation eine GUI möchte muss dafür den folgenden Codeschnippsel in seine Vagrantfile hinzufügen:
config.vm.provider "virtualbox" do |v| v.gui = true end
-
Damit beim ersten hochfahren der VM als erstes die Paketquellen aktualisiert werden die Datei bootstrap.sh mit dem folgenden Inhalt in dem Verzeichnis ~/vagrant/ ablegen:
#!/bin/bash apt-get update
und danach in der Vagrantfile VOR den puppet Block die folgende Zeile einfügen:
config.vm.provision :shell, path: "bootstrap.sh"
- Webseite des Projektes: www.vagrantup.com
- Viele fertige Vagrant Boxes gibt es in der Vagrant Cloud: vagrantcloud.com
- Für die vielen Einstellmöglichkeiten in der Vagrantfile gibt es eine Dokumentation unter: docs.vagrantup.com