TheForeman is one of the best provisioning tools available. It’s purely open-sourced. And it natively supports puppet for provisioning the nodes. Foreman can talk to libvirt also, which makes us easy to create a VM and provision it on the way. In this blog i will be explaining on how to install Foreman from the source, how to integrate it with puppet to receive the logs and facts and make Foreman to use Libvirt for building VM’s.
Setting up Foreman
First will install the basic depenencies. Since i’m using the git repository of Foreman for installation, git package has to be installed. Moreover we also need a database for Foreman. I’m going to use Mysql for that.
$ apt-get install git mysql-server ruby-mysql libmysql-ruby1.9.1 libmysqlclient-dev libvirt-dev
Now clone the repository from github. The newer build’s works with Puppet 3.0.
$ git clone https://github.com/theforeman/foreman.git -b develop
Ensure that ”ruby and bundler” is installed in the machine.
$ bundle install --without postgresql sqlite
Now we can start configuring Foreman. Copy the sample config files.
$ cp config/settings.yaml.example config/settings.yaml $ cp config/database.yml.example config/database.yml
Now create a database for FOreman and add the database details in the
database.yml. Now add the puppet master details in the
settings.yaml. Since i’m going to use the Foreman in production mode, i’ve commented out the Development and test environment setting in
database.yml. Once the config files are set, we can now go ahead with db migration.
$ RAILS_ENV=production bundle exec rake db:migrate
Now we can check whether the server is fine or not by using the following command. The below command will start the Foreman with the builtin web server, and we can access the webui from
http://foreman_ip:3000 in the browser. By default there is no authentication set for the WebUI. But LDAP Authentication can be set for the WebUI. Details are availabe in the foreman’s documentation.
$ RAILS_ENV=production rails server
Once the Foreman server is working fine, we can configure puppet to send its logs and facts to foreman. In the puppet clients, add
report = true in the puppet.conf file. Now in the puppet master, we need to do a few stuffs.
Copy this foreman report file to puppet’s report library.
In my case it is
/usr/lib/ruby/vendor_ruby/puppet/reports/ and rename it to foreman.rb. Now add
reports=log, foreman in the puppet.conf file. Also add the foreman url in the foreman.rb file.
foreman_url='http://foreman:3000 # or use ip instead of foreman, if DNS/Host entry is not there for Foreman
Now for sending facts to puppet, we can put a cron job to execute the below command
$ rake puppet:import:hosts_and_facts RAILS_ENV=production
Now once the puppet clients starts running, they will send the logs to Foreman, and can be viewed in the WebUI.
Foreman and Libvirt
Now in the same machine i’ve installed libvirt and libvirt-ruby. Now create a user “foreman” and generate ssh-key for the user. Now copy the public key to the “authorized_keys” file of the root user. This is actually needed if your libvirt host is different.
Now go to the Foreman WebUI, Go to More —–> provisioning —–> Compute Resources. Now click on “New Compute Resource”, Add a name for the Resource, Select the provider as Libvirt, and URL is
qemu:///system, since libvirt and foreman resides on the same system. We can also test the connection to libvirt. IF the parameters we entered are fine, Foreman can talk to libvirt directly.