From 04135ffe0656a1d4ed561b9c88864bfa66e8365a Mon Sep 17 00:00:00 2001 From: Dirk Goetz Date: Mon, 16 Oct 2017 17:02:00 +0200 Subject: [PATCH] updates to latest releases adds Ansible for configuration management adds Monitoring integration plugin disables ABRT because of incompatibility --- COPYING.md | 2 +- README.md | 6 +- Setup.md | 27 +- Vagrantfile | 16 +- _files/share/finish.sh | 3 + _files/share/monitoring/finish.sh | 9 + _files/share/monitoring/icingaweb2.conf | 27 + .../monitoring/monitoring.localdomain.pp | 254 +++++++ advanced/03_api.md | 2 +- architecture/02_smart_proxy.md | 10 +- configmanagement/02_puppet.md | 53 +- configmanagement/03_ansible.md | 340 +++++++++ configmanagement/03_configgroups.md | 15 - .../Pre/Training/02_Forthcoming_Training.md | 5 +- installation/01_requirements.md | 13 +- installation/04_installation.md | 64 +- katello/01_overview.md | 6 + plugins/00_overview.md | 1 + plugins/{07_abrt.md => 07_abrt.md.disable} | 2 +- plugins/08_openscap.md | 27 +- plugins/10_remote_execution.md | 17 +- plugins/12_monitoring.md | 118 ++++ provisioning/02_configuration.md | 39 +- provisioning/03_pxe.md | 24 +- provisioning/04_compute_resource.md | 4 +- provisioning/05_discovery.md | 26 +- provisioning/06_bootdisk.md | 3 + showoff.json | 2 +- static/file/training/_images/environment.png | Bin 53202 -> 50729 bytes .../_images/foreman_notification.png | Bin 0 -> 16128 bytes .../_images/foreman_usersshkey.png | Bin 0 -> 12927 bytes static/index.html | 664 +++++++++++++----- training/01_training.md | 1 + .../{03_enviroment.md => 03_environment.md} | 3 + training/_images/environment.png | Bin 53202 -> 50729 bytes usermanagement/01_ldap.md | 58 +- usermanagement/03_permissions.md | 8 +- usermanagement/05_email.md | 19 + usermanagement/06_sshkeys.md | 20 + .../_images/foreman_notification.png | Bin 0 -> 16128 bytes usermanagement/_images/foreman_usersshkey.png | Bin 0 -> 12927 bytes 41 files changed, 1502 insertions(+), 386 deletions(-) create mode 100644 _files/share/monitoring/finish.sh create mode 100644 _files/share/monitoring/icingaweb2.conf create mode 100644 _files/share/monitoring/monitoring.localdomain.pp create mode 100644 configmanagement/03_ansible.md delete mode 100644 configmanagement/03_configgroups.md rename plugins/{07_abrt.md => 07_abrt.md.disable} (98%) create mode 100644 plugins/12_monitoring.md create mode 100644 static/file/usermanagement/_images/foreman_notification.png create mode 100644 static/file/usermanagement/_images/foreman_usersshkey.png rename training/{03_enviroment.md => 03_environment.md} (88%) create mode 100644 usermanagement/06_sshkeys.md create mode 100644 usermanagement/_images/foreman_notification.png create mode 100644 usermanagement/_images/foreman_usersshkey.png diff --git a/COPYING.md b/COPYING.md index 8b8f33a..3a7ce2d 100644 --- a/COPYING.md +++ b/COPYING.md @@ -1,3 +1,3 @@ Copyright (c) 2016 NETWAYS GmbH -Material is licensed under (http://creativecommons.org/licenses/by-sa/4.0/)[http://creativecommons.org/licenses/by-sa/4.0/] +Material is licensed under [http://creativecommons.org/licenses/by-sa/4.0/](http://creativecommons.org/licenses/by-sa/4.0/) diff --git a/README.md b/README.md index 6339a96..e1b82bd 100644 --- a/README.md +++ b/README.md @@ -18,9 +18,9 @@ In addition to the sources you can find the rendered material on [netways.github.io](https://netways.github.io/foreman-training) * [Presentation](https://netways.github.io/foreman-training) -* [Handouts](https://github.com/NETWAYS/foreman-training/releases/download/v1.2/foreman-training-handouts.pdf) -* [Exercises](https://github.com/NETWAYS/foreman-training/releases/download/v1.2/foreman-training-exercises.pdf) -* [Solutions](https://github.com/NETWAYS/foreman-training/releases/download/v1.2/foreman-training-solutions.pdf) +* [Handouts](https://github.com/NETWAYS/foreman-training/releases/download/v1.3/foreman-training-handouts.pdf) +* [Exercises](https://github.com/NETWAYS/foreman-training/releases/download/v1.3/foreman-training-exercises.pdf) +* [Solutions](https://github.com/NETWAYS/foreman-training/releases/download/v1.3/foreman-training-solutions.pdf) ## Provide your own training diff --git a/Setup.md b/Setup.md index 394e189..eedf309 100644 --- a/Setup.md +++ b/Setup.md @@ -1,6 +1,6 @@ # Setup -## Virtual machine +## Virtual machine foreman.localdomain To setup a new version of the virtual machine install CentOS from ISO, only configuration required is setting the network interface to manual, ip address 10.0.0.2, netmask 255.255.0.0, gateway 10.0.0.1, @@ -8,10 +8,19 @@ dns 10.0.0.1. Afterwards run the finish.sh provided in the _files directory to setup host entries and openldap. +## Virtual machine monitoring.localdomain + +To setup a new version of the virtual machine install CentOS from ISO, only configuration required is +setting the network interface to manual, ip address 10.0.0.3, netmask 255.255.0.0, gateway 10.0.0.1, +dns 10.0.0.1. + +Afterwards copy the files from _files/monitoring into /root/ and run the finish.sh to setup host including +Icinga 2, Icinga Web 2 and Director with preparations for the exercise. + ## Local mirror A Vagrant file is provided in the directory to setup a local mirror of CentOS 7 x86_64, EPEL 7 x86_64 -Puppetlabs EPEL 7 x86_64, Foreman EPEL 7 x86_64 and the Discovery Image. This machine will require about +Puppet EPEL 7 x86_64, Foreman EPEL 7 x86_64 and the Discovery Image. This machine will require about 25GB. ## Katello Demo @@ -20,7 +29,7 @@ To setup the Katello demo follow this guide (it requires vagrant and ansible to # git clone https://github.com/Katello/forklift.git # cd forklift - # vagrant up centos7-katello-3.2 + # vagrant up centos7-katello-3.4 This will setup your Katello server, login with the provided credentials and add the following content: @@ -37,17 +46,9 @@ This will setup your Katello server, login with the provided credentials and add * Assigned to Life Cycle Environment "Test" and Content View "CentOS7" * Subscription to Repository "CentOS7-Base-x86_64" -Use this information to deploy some docker containers as Content Hosts: - - # cd docker/clients/ - # cp docker-compose.yml.example docker-compose.yml - # vi docker-compose.yml - # docker-compose scale el7=5 - -Or register the system to itself: +Register the system to itself: - # vagrant ssh centos7-katello-3.2 - # yum -y install https://fedorapeople.org/groups/katello/releases/yum/3.2/client/el7/x86_64/katello-client-repos-latest.rpm + # vagrant ssh centos7-katello-3.4 # yum -y install katello-agent http://$(hostname -f)/pub/katello-ca-consumer-latest.noarch.rpm # subscription-manager register --org Default_Organization --activationkey="CentOS7-Test" diff --git a/Vagrantfile b/Vagrantfile index e531b4c..504676c 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -12,7 +12,7 @@ Vagrant.configure(2) do |config| # Every Vagrant development environment requires a box. You can search for # boxes at https://atlas.hashicorp.com/search. - config.vm.box = "https://download.gluster.org/pub/gluster/purpleidea/vagrant/centos-7.1/centos-7.1.box" + config.vm.box = "centos/7" config.vm.hostname = "mirror" config.vm.synced_folder ".", "/vagrant", type: "rsync" @@ -68,19 +68,17 @@ Vagrant.configure(2) do |config| # documentation for more information about their specific syntax and use. config.vm.provision "shell", inline: <<-SHELL sleep 10 - sudo yum -y install rsync httpd + sudo yum -y install rsync httpd wget sudo systemctl enable httpd.service sudo systemctl start httpd.service # CentOS 7 - sudo mkdir -p /var/www/html/centos/7.2.1511/os/ - sudo ln -s /var/www/html/centos/7.2.1511 /var/www/html/centos/7 - sudo rsync -avSHP --delete --exclude "local*" --exclude "isos" mirror.eu.oneandone.net::centos/7.2.1511/os/ /var/www/html/centos/7.2.1511/os/ + sudo mkdir -p /var/www/html/centos/7.4.1708/os/ + sudo ln -s /var/www/html/centos/7.4.1708 /var/www/html/centos/7 + sudo rsync -avSHP --delete --exclude "local*" --exclude "isos" mirror.eu.oneandone.net::centos/7.4.1708/os/ /var/www/html/centos/7.4.1708/os/ sudo mkdir -p /var/www/html/epel/7/x86_64/ sudo rsync -vaH --exclude="debug*" --numeric-ids --delete --delete-after --delay-updates rsync://rsync.hrz.tu-chemnitz.de/fedora-epel/7/x86_64/ /var/www/html/epel/7/x86_64/ - sudo mkdir -p /var/www/html/puppetlabs/el/7/dependencies/x86_64/ - sudo rsync -av --copy-links --del rsync://yum.puppetlabs.com/packages/yum/el/7/dependencies/x86_64/ /var/www/html/puppetlabs/el/7/dependencies/x86_64/ - sudo mkdir -p /var/www/html/puppetlabs/el/7/products/x86_64/ - sudo rsync -av --copy-links --del rsync://yum.puppetlabs.com/packages/yum/el/7/products/x86_64/ /var/www/html/puppetlabs/el/7/products/x86_64/ + sudo mkdir -p /var/www/html/puppet5/el/7/x86_64/ + sudo rsync -av --copy-links --del rsync://yum.puppet.com/packages/yum/puppet5/el/7/x86_64/ /var/www/html/puppet5/el/7/x86_64/ sudo mkdir -p /var/www/html/foreman/releases/latest/el7/x86_64/ sudo rsync -av --copy-links --del rsync://yum.theforeman.org/yum/releases/latest/el7/x86_64/ /var/www/html/foreman/releases/latest/el7/x86_64/ sudo mkdir -p /var/www/html/foreman/plugins/latest/el7/x86_64/ diff --git a/_files/share/finish.sh b/_files/share/finish.sh index adce24f..4236b84 100644 --- a/_files/share/finish.sh +++ b/_files/share/finish.sh @@ -1,6 +1,7 @@ echo "foreman.localdomain" > /etc/hostname echo "10.0.0.1 host.localdomain host" >> /etc/hosts echo "10.0.0.2 foreman.localdomain foreman" >> /etc/hosts +echo "10.0.0.3 monitoring.localdomain monitoring" >> /etc/hosts yum install -y openldap-servers openldap-clients @@ -77,3 +78,5 @@ ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif ldapadd -x -D "cn=admin,dc=localdomain" -w netways -f domain.ldif ldapadd -x -D "cn=admin,dc=localdomain" -w netways -f users.ldif +systemctl disable firewalld +systemctl stop firewalld diff --git a/_files/share/monitoring/finish.sh b/_files/share/monitoring/finish.sh new file mode 100644 index 0000000..286406d --- /dev/null +++ b/_files/share/monitoring/finish.sh @@ -0,0 +1,9 @@ +#!/bin/bash +yum install epel-release -y +yum install http://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm -y +yum install puppet-agent -y +/opt/puppetlabs/bin/puppet module install puppetlabs-apache +/opt/puppetlabs/bin/puppet module install puppetlabs-mysql +/opt/puppetlabs/bin/puppet module install icinga-icinga2 +/opt/puppetlabs/bin/puppet module install icinga-icingaweb2 +/opt/puppetlabs/bin/puppet apply monitoring.localdomain.pp diff --git a/_files/share/monitoring/icingaweb2.conf b/_files/share/monitoring/icingaweb2.conf new file mode 100644 index 0000000..5777a98 --- /dev/null +++ b/_files/share/monitoring/icingaweb2.conf @@ -0,0 +1,27 @@ +Alias /icingaweb2 "/usr/share/icingaweb2/public" + + + Options SymLinksIfOwnerMatch + AllowOverride None + + SetEnv ICINGAWEB_CONFIGDIR "/etc/icingaweb2" + + EnableSendfile Off + + + RewriteEngine on + RewriteBase /icingaweb2/ + RewriteCond %{REMOTE_ADDR} ^10\.0\.0\.2 + RewriteRule ^(.*)$ - [E=REMOTE_USER:foreman] + RewriteCond %{REQUEST_FILENAME} -s [OR] + RewriteCond %{REQUEST_FILENAME} -l [OR] + RewriteCond %{REQUEST_FILENAME} -d + RewriteRule ^.*$ - [NC,L] + RewriteRule ^.*$ index.php [NC,L] + + + + DirectoryIndex error_norewrite.html + ErrorDocument 404 /error_norewrite.html + + diff --git a/_files/share/monitoring/monitoring.localdomain.pp b/_files/share/monitoring/monitoring.localdomain.pp new file mode 100644 index 0000000..7eb5396 --- /dev/null +++ b/_files/share/monitoring/monitoring.localdomain.pp @@ -0,0 +1,254 @@ +# yum install epel-release -y +# yum install http://yum.puppetlabs.com/puppet5/puppet5-release-el-7.noarch.rpm -y +# yum install puppet-agent -y +# puppet module install puppetlabs-apache +# puppet module install puppetlabs-mysql +# puppet module install icinga-icinga2 +# puppet module install icinga-icingaweb2 + +Exec { + path => '/usr/bin:/usr/sbin', +} + +# Yum update + +exec { 'yumupdate': + command => 'yum -y -q update', + unless => 'yum check-update -q', + path => '/usr/bin:/usr/sbin', +} + +# Install basic packages + +package { [ 'vim-enhanced', 'yum-utils' ]: + ensure => 'installed', + require => Exec['yumupdate'] +} + +# Remove old kernels + +exec { 'package-cleanup --oldkernels --count=1 -q': + unless => 'package-cleanup --oldkernels --count=1 -q', + path => '/usr/bin:/usr/sbin', +} + +# Set hostname + +exec { 'hostnamectl set-hostname monitoring.localdomain': + unless => 'hostname | grep monitoring.localdomain', + path => '/usr/bin:/usr/sbin', +} + +host { 'foreman.localdomain': + ip => '10.0.0.2', + host_aliases => 'foreman' +} + +host { 'monitoring.localdomain': + ip => '10.0.0.3', + host_aliases => 'monitoring' +} + +# Manage user "root" + +user { 'root': + ensure => 'present', + password => '$6$1t.s4Ppq$om1Rvc9FGMnPCkJhSD7JAnWd30DaxhYsGTQJMq8qAh6AotB8JIaqRIJFCCvskYruEN3Z/aaBMvI42B5B/22sy.', +} + +# Set SELinux to permissive + +file_line { '/etc/sysconfig/selinux': + ensure => 'present', + path => '/etc/sysconfig/selinux', + match => "^SELINUX=.*$", + line => 'SELINUX=permissive', +} + +exec { 'setenforce 0': + unless => 'getenforce | grep Permissive', + path => '/usr/bin:/usr/sbin', +} + +# Stop firewalld + +service { 'firewalld': + ensure => 'stopped', + enable => false, +} + +# MariaDB + +include ::mysql::server + +mysql::db { 'icinga': + user => 'icinga', + password => 'icinga', + host => 'localhost', + grant => ['SELECT', 'INSERT', 'UPDATE', 'DELETE', 'DROP', 'CREATE VIEW', 'CREATE', 'INDEX', 'EXECUTE', 'ALTER'], +} + +mysql::db { 'icingaweb2': + user => 'icingaweb2', + password => 'icingaweb2', + host => 'localhost', + grant => ['SELECT', 'INSERT', 'UPDATE', 'DELETE', 'DROP', 'CREATE VIEW', 'CREATE', 'INDEX', 'EXECUTE', 'ALTER', 'REFERENCES'], +} + +mysql::db { 'director': + user => 'director', + password => 'director', + host => 'localhost', + grant => ['ALL'], +} + +# Plugins + +package { [ 'nagios-plugins-all' ]: + ensure => 'installed', + require => Exec['yumupdate'], +} + +# Icinga 2 + +class { '::icinga2': + manage_repo => true, + confd => false, + features => ['checker', 'mainlog', 'command'], +} + +class { '::icinga2::feature::idomysql': + user => 'icinga', + password => 'icinga', + database => 'icinga', + import_schema => true, + require => Mysql::Db['icinga'], +} + +class { '::icinga2::pki::ca': +} + +class { '::icinga2::feature::api': + accept_commands => true, + accept_config => true, + endpoints => { + 'monitoring.localdomain' => {}, + }, + zones => { + 'master' => { + 'endpoints' => ['monitoring.localdomain'], + }, + }, + pki => 'none', +} + +icinga2::object::zone { 'director-global': + global => true, +} + +file { '/etc/icinga2/zones.d/master': + ensure => directory, +} + +icinga2::object::apiuser { 'director': + password => 'director', + permissions => [ '*' ], + target => '/etc/icinga2/zones.d/master/apiusers.conf', +} + +icinga2::object::apiuser { 'foreman': + password => 'foreman', + permissions => [ '*' ], + target => '/etc/icinga2/zones.d/master/apiusers.conf', +} + +# Apache + +class { 'apache': + mpm_module => 'prefork', +} + +class { 'apache::mod::php': } + +file {'/etc/httpd/conf.d/icingaweb2.conf': + source => '/root/icingaweb2.conf', + require => Class['apache'], + notify => Service['httpd'], +} + +augeas { 'php.ini': + context => '/files/etc/php.ini/PHP', + changes => ['set date.timezone Europe/Berlin',], + require => Class['apache'], +} + +# Icinga Web 2 (Login: icinga/icinga) + +package {'php-mysql': + ensure => installed, +} + +class {'icingaweb2': + import_schema => true, + db_type => 'mysql', + db_host => 'localhost', + db_username => 'icingaweb2', + db_password => 'icingaweb2', + require => Mysql::Db['icingaweb2'], +} + +icingaweb2::config::authmethod {'External': + backend => 'external', +} + +icingaweb2::config::role {'Foreman': + users => 'foreman', + permissions => 'module/director, director/api, director/*' +} + +class {'icingaweb2::module::monitoring': + ido_host => 'localhost', + ido_db_name => 'icinga', + ido_db_username => 'icinga', + ido_db_password => 'icinga', + commandtransports => { + icinga2 => { + transport => 'local' + } + }, +} + +package { 'git': + ensure => installed, +} + +class {'icingaweb2::module::director': + db_host => 'localhost', + db_name => 'director', + db_username => 'director', + db_password => 'director', + import_schema => true, + kickstart => true, + endpoint => 'monitoring.localdomain', + api_username => 'director', + api_password => 'director', + require => Mysql::Db['director'] +} + +exec { 'Create host template foreman_host': + command => 'icingacli director host create foreman_host --object_type template --check_command hostalive', + unless => 'icingacli director host exists foreman_host', +} + +exec { 'Create service template ssh': + command => 'icingacli director service create ssh --object_type template --check_command ssh', + unless => 'icingacli director service exists ssh', +} + +exec { 'Create service apply ssh': + command => 'icingacli director service create ssh --object_type apply --imports ssh --assign_filter "host.vars.osfamily=%22Redhat%22 || host.vars.osfamily=%22Debian%22"', +} + +exec { 'Deploy configuration': + command => 'icingacli director config deploy', +} diff --git a/advanced/03_api.md b/advanced/03_api.md index 65da03b..69b9acd 100644 --- a/advanced/03_api.md +++ b/advanced/03_api.md @@ -24,7 +24,7 @@ in the WebGUI but they have to be URL encoded. Usage explainations can be found at http://theforeman.org/manuals/latest/index.html#5.1API -API documentation is located at http://theforeman.org/api/1.10/index.html +API documentation is located at http://theforeman.org/api/1.16/index.html ~~~ENDSECTION~~~ diff --git a/architecture/02_smart_proxy.md b/architecture/02_smart_proxy.md index b0c08b1..1f06bcd 100644 --- a/architecture/02_smart_proxy.md +++ b/architecture/02_smart_proxy.md @@ -9,7 +9,7 @@ * DHCP - ISC DHCP, MS DHCP Servers, Libvirt * DNS - Bind, PowerDNS, Route53, MS DNS Server, Libvirt * BMC - IPMI - * Puppet & Puppet CA / Salt / Chef + * Puppet & Puppet CA / Salt / Chef / Ansible * Realm - FreeIPA * TFTP @@ -57,7 +57,7 @@ Directory focused on Linux) is supported. * Libvirt: * not for productive use - * uses virsh to manage dnsmasq for libvirt + * uses libvirt API to manage dnsmasq for libvirt ~~~SECTION:notes~~~ @@ -78,7 +78,7 @@ On Linux typically a ISC compatible implementation is used to manage DHCP which via OMAPI. For Microsoft DHCP installation of the Smart Proxy on Windows Server system is required which needs netsh command installed and the user running the service needs administrative privileges, but the server does not need to be the DHCP server. For testing enviroments also an implementation for Libvirt -using virsh to manage the dnsmasq underneath is available, a productive use is not recommended. +using libvirt API to manage the dnsmasq underneath is available, a productive use is not recommended. ~~~ENDSECTION~~~ @@ -105,12 +105,12 @@ using virsh to manage the dnsmasq underneath is available, a productive use is n * Libvirt: * not for productive use - * uses virsh to manage dnsmasq for libvirt + * uses libvirt API to manage dnsmasq for libvirt ~~~SECTION:notes~~~ * Foreman does support IPv6 from 1.12 onwards -* No support for additional records like CNAME +* No support for additional records like CNAME (Support in Smart Proxy exists, GUI WIP) ~~~ENDSECTION~~~ diff --git a/configmanagement/02_puppet.md b/configmanagement/02_puppet.md index 3b1d2e3..568df4b 100644 --- a/configmanagement/02_puppet.md +++ b/configmanagement/02_puppet.md @@ -85,7 +85,7 @@ Image copyright by Puppetlabs. **** Foreman integrates Puppet in several ways and also integrates itself into Puppet. Communication from the WebGUI to Puppet is handled -using the Smart proxy from Puppet. It allows to import Puppet modules known to Puppet and to trigger Puppet agent runs using several protocols. +using the Smart proxy for Puppet. It allows to import Puppet modules known to Puppet and to trigger Puppet agent runs using several protocols. The Smart Proxy Puppet CA integrates certificate handling into provisioning so auto signing of the agents certificate requests during build is allowed and also allows to manage the complete CA in the WebGUI. @@ -123,7 +123,7 @@ for an not already existing system. Also Puppet is integrated as a reporting tar **** -* Place Puppet modules found in "/home/training" on host.localdomain into "/etc/puppet/environments/production" on foreman.localdomain +* Place Puppet modules found in "/home/training" on host.localdomain into "/etc/puppetlabs/code/environments/production" on foreman.localdomain * Import the Puppet classes in Foreman using "Configure > Classes" #### Optional: @@ -136,18 +136,18 @@ for an not already existing system. Also Puppet is integrated as a reporting tar !SLIDE supplemental solutions -# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Proposed Solution +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Import of Puppet classes **** -## Import of Puppet classes +## Make Puppet code available to Puppet and Foreman **** -### Place Puppet modules found in "/home/training" on host.localdomain into "/etc/puppet/environments/production" on foreman.localdomain +### Place Puppet modules found in "/home/training" on host.localdomain into "/etc/puppetlabs/code/environments/production" on foreman.localdomain # scp -r host.localdomain:/home/training/puppetmodules.tar.gz /tmp - # cd /etc/puppet/environments/production + # cd /etc/puppetlabs/code/environments/production # tar xvzf /tmp/puppetmodules.tar.gz ### Import the Puppet classes in Foreman using "Configure > Classes" @@ -246,7 +246,7 @@ from unprivileged users. !SLIDE supplemental solutions -# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Proposed Solution +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Parameterize and assign Puppet classes **** @@ -297,7 +297,7 @@ to save your changes. !SLIDE supplemental solutions -# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Proposed Solution +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Trigger Puppet agent run and inspect the report **** @@ -324,6 +324,23 @@ Other entry points to the reports are the dashboard showing the last reports wit Reports overview which filters by default only on the eventful reports. +!SLIDE smbullets small +# Config Groups + +* Allows to group classes +* Assign like single classes + +~~~SECTION:handouts~~~ + +**** + +Config Groups allow to group classes and assign them in the same way you would use single classes. +This follows the same ideas like the very popular Roles-Profiles-Pattern used in Puppet to simplify +assignment via another layer of abstraction. + +~~~ENDSECTION~~~ + + !SLIDE smbullets small # Triggering an Puppet agent run @@ -416,23 +433,3 @@ The hash is best used with a defined resource and create_resource function or wi Next release of the function will also allow to provide a filter for reducing the data for easier handling. ~~~ENDSECTION~~~ - - -!SLIDE smbullets small -# Replace Puppet's default lookup - -* Puppet uses Hiera as default lookup for parameters -* Can be replaced with Foreman -* Requires two plugins - * Param lookup - Exposes parameters via API - * Data binding - Replaces Puppet's lookup - -~~~SECTION:handouts~~~ - -**** - -You can replace Puppet's default lookup with Foreman by installing Param lookup and Data binding plugin. This allows to -use the Roles-Profiles-Pattern or similar concepts which do not directly assign classes and still use Foreman to configure -parameters. - -~~~ENDSECTION~~~ diff --git a/configmanagement/03_ansible.md b/configmanagement/03_ansible.md new file mode 100644 index 0000000..cb2a252 --- /dev/null +++ b/configmanagement/03_ansible.md @@ -0,0 +1,340 @@ +!SLIDE smbullets small +# Ansible + +* Written in python +* Runs on Linux, Unix, Windows +* Describes desired state in yaml files + +
+    ---
+    - name: Install package vim
+      become: true
+      yum: name={{ item }} state=installed
+      with_items:
+      - vim-enhanced
+
+ +* Workflow + * Roles or Playbook stored on a system with Ansible installed + * Inventory is managed for Ansible + * Ansible connects to a system and collects system information + * Ansible runs tasks on the system + * Ansible can report back to other tools via callback plugin + +~~~SECTION:handouts~~~ + +**** + +Ansible is written in python and its control machine runs on Linux while it is possible to manage Linux, Unix and Windows. + +~~~PAGEBREAK~~~ + +For configuration it uses yaml format for simple playbooks and some additional structure for roles. An example for one +task is shown above. Those files are stored on one or more control machines which also need an inventory as a static +file or script for dynamic inventory. There is no agent required as it utilizes SSH (or winrm for Windows), so the control machine +connects to one or more systems to collect system information and run tasks on them. Afterwards callback plugins are used to report +back to other tools. + +~~~ENDSECTION~~~ + +~~~ENDSECTION~~~ + +!SLIDE smbullets small +# Foreman Ansible Integration + +* Foreman -> Ansible + * Smart proxy Ansible allows to import Ansible roles + * Smart proxy Ansible allows to play Ansible roles + +* Ansible -> Foreman + * Ansible uploads facts to Foreman via callback + * Ansible transfers reports to Foreman via callback + * Ansible uses Foreman as dynamic inventory + +~~~SECTION:notes~~~ + +Role import is broken in the Smart proxy but works still in the Foreman integration +Playing roles is broken in Foreman integration but works using Smart proxy + +~~~ENDSECTION~~~ + +~~~SECTION:handouts~~~ + +**** + +Foreman can integrate Ansible in several ways and can also integrate itself into Ansible. Communication from the WebGUI to Ansible is handled +using the Smart proxy for Ansible. It allows to import Ansible roles known to Ansible and to play Ansible roles. + +On the Ansible control machine a callback plugin can be activated to upload facts and reports to Foreman. Forthermore a script could be deployed +to use Foreman as dynamic inventory. + +~~~ENDSECTION~~~ + + +!SLIDE smbullets small +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Ansible Callback + +* Objective: + * Install Ansible and configure the callback plugin for Foreman +* Steps: + * Install Ansible + * Configure callback plugin + * Add your host to the inventory + * Create and distribute a SSH key + * Download the role "reallyenglish.ntpd" + * Create a playbook and run it + +!SLIDE supplemental exercises +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Ansible Callback + +## Objective: + +**** + +* Install Ansible and configure the callback plugin for Foreman + +## Steps: + +**** + +* Install Ansible using yum + +Ansible is available from centos-extras repository, the callback plugin also requires python-requests. + +* Configure callback plugin + +The callback plugin is part of Ansible since 2.2, so only needs to be enabled in the configuration. +The plugin itself requires environment variables to be set for configuration. + +* Add your host to the inventory + +We will use the static configuration for now, dynamic inventory will be introduced later. + +* Create and distribute a SSH key + +Use `ssh-keygen` and `ssh-copy-id`. + +* Download the role "reallyenglish.ntpd" + +Ansible roles can be downloaded from Ansible Galaxy using the CLI. + +* Create a playbook and run it + +The playbook only requires an array of hosts and roles. + +#### Expected result: + +* Playbook is played successfully and report is uploaded to Foreman. + + +!SLIDE supplemental solutions +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Ansible Callback + +**** + +## Install Ansible and configure the callback plugin for Foreman + +**** + +### Install Ansible using yum + + # yum install ansible python-requests + +### Configure callback plugin + + # vi /etc/ansible/ansible.cfg + callback_whitelist = foreman + bin_ansible_callbacks = True + # vi .bash_profile + export FOREMAN_URL="https://foreman.localdomain" + export FOREMAN_SSL_CERT="/etc/puppetlabs/puppet/certs/foreman.localdomain.pem" + export FOREMAN_SSL_KEY="/etc/puppetlabs/puppet/private_keys/foreman.localdomain.pem" + export FOREMAN_SSL_VERIFY="false" + # . .bash_profile + +### Add your host to the inventory + + # echo "foreman.localdomain" >> /etc/ansible/hosts + +### Create and distribute a SSH key + + # ssh-keygen + [Enter] + [Enter] + [Enter] + # ssh-copy-id foreman.localdomain + +### Download the role "reallyenglish.ntpd" + + # ansible-galaxy install reallyenglish.ntpd + +### Create a playbook and run it + + # vi playbook.yml + --- + - hosts: foreman.localdomain + roles: + - reallyenglish.ntpd + # ansible-playbook playbook.yml + + +!SLIDE smbullets small +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Ansible Dynamic Inventory + +* Objective: + * Configure Ansible Dynamic Inventory +* Steps: + * Download Dynamic Inventory and sample configuration + * Adjust configuration + * Test Dynamic Inventory +* Optional: + * Distribute the SSH key and change the playbook to all hosts + + +!SLIDE supplemental exercises +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Ansible Dynamic Inventory + +## Objective: + +**** + +* Configure Ansible Dynamic Inventory + +## Steps: + +**** + +* Download Dynamic Inventory and sample configuration + +Dynamic Inventory scripts are not included in the package, but available at Github: https://github.com/ansible/ansible/tree/devel/contrib/inventory + +* Adjust configuration + +Configuration has to include Foreman url, user and password. + +* Test Dynamic Inventory + +You can run the script directly to the output and use it with the parameter `-i` during playbook runs. + + +!SLIDE supplemental solutions +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Ansible Dynamic Inventory + +**** + +## Configure Ansible Dynamic Inventory + +**** + +### Download Dynamic Inventory and sample configuration + + # wget -p /etc/ansible/ http://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/foreman.ini + # wget -p /etc/ansible/ http://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/foreman.py + # chmod +x /etc/ansible/foreman.py + +### Adjust configuration + + # vi /etc/ansible/foreman.ini + [foreman] + url = https://foreman.localdomain + user = admin + password = netways + ssl_verify = False + +### Test Dynamic Inventory + + # /etc/ansible/foreman.py + # ansible-playbook -i /etc/ansible/foreman.py playbook.yml + + +!SLIDE smbullets small +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Graphical Integration + +* Objective: + * Configure Foreman Plugin and Smart Proxy Plugin +* Steps: + * Install Foreman Plugin and Smart Proxy Plugin + * Import roles and assign them + * Configure settings in Foreman + * Prepare Smart proxy to play roles + * Play roles using the webinterface + +~~~SECTION:handouts~~~ + +**** + +Graphical integration has some bugs and requires improvements which are worked on. +Also integration with the callback plugin is not easy as it utilizes environment variables for configuration. + +~~~ENDSECTION~~~ + +!SLIDE supplemental exercises +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Graphical Integration + +## Objective: + +**** + +* Configure Foreman Plugin and Smart Proxy Plugin + +## Steps: + +**** + +* Install Foreman Plugin and Smart Proxy Plugin using foreman-installer +* Import roles and assign them + +This requires to adjust the Ansible configuration to include only a single roles_path. + +* Configure settings in Foreman + +You can configure the account used, the password and how to get superuser privileges. +You can override configuration with host parameters. +In production do not use root, but keep it now. + +* Prepare Smart proxy to play roles + +Smart Proxy needs a SSH configuration to disable host key checking and an Ansible directory +to play roles. + +* Play roles using the webinterface + + +!SLIDE supplemental solutions +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure Graphical Integration + +**** + +## Configure Foreman Plugin and Smart Proxy Plugin + +**** + +* Install Foreman Plugin and Smart Proxy Plugin using foreman-installer + + # foreman-installer --enable-foreman-plugin-ansible --enable-foreman-proxy-plugin-ansible + +* Import roles and assign them + +Adjust the Ansible configuration to include only a single roles_path. + + # vi /etc/ansible/ansible.cfg + roles_path = /etc/ansible/roles + +Navigate to "Configure > Roles" and import using "Import from Foreman host". +Afterwards navigate to the host and edit them to assign the roles in the new "Ansible Roles" tab. + +* Configure settings in Foreman + +Navigate to "Administer > Settings", on the "Ansible" tab set the password. + +* Prepare Smart proxy to play roles + + # install -o foreman-proxy -g foreman-proxy -m 0755 -d ~foreman-proxy/.ansible + # install -o foreman-proxy -g foreman-proxy -m 0755 -d ~foreman-proxy/.ssh + # sudo -u foreman-proxy vi ~foreman-proxy/.ssh/config + Host * + StrictHostKeyChecking on + +* Play roles using the webinterface + +Navigate to the host and press "Ansible roles". It is also avaiable as action from the Host overview for bulk requests. diff --git a/configmanagement/03_configgroups.md b/configmanagement/03_configgroups.md deleted file mode 100644 index 9e16d78..0000000 --- a/configmanagement/03_configgroups.md +++ /dev/null @@ -1,15 +0,0 @@ -!SLIDE smbullets small -# Config Groups - -* Allows to group classes -* Assign like single classes - -~~~SECTION:handouts~~~ - -**** - -Config Groups allow to group classes and assign them in the same way you would use single classes. -This follows the same ideas like the very popular Roles-Profiles-Pattern used in Puppet to simplify -assignment via another layer of abstraction. - -~~~ENDSECTION~~~ diff --git a/global/Pre/Training/02_Forthcoming_Training.md b/global/Pre/Training/02_Forthcoming_Training.md index 996aac4..d03c1da 100644 --- a/global/Pre/Training/02_Forthcoming_Training.md +++ b/global/Pre/Training/02_Forthcoming_Training.md @@ -1,8 +1,9 @@ !SLIDE small noprint # Forthcoming Hands-on Training -* 27.06.2017 - 28.06.2017 [NETWAYS](https://www.netways.de/events_schulungen/foreman/) (German) -* 26.09.2017 - 27.09.2017 [NETWAYS](https://www.netways.de/events_schulungen/foreman/) (German) +* 06.03.2018 - 07.03.2018 [NETWAYS](https://www.netways.de/schulungen/foreman/) (German) +* 03.07.2018 - 04.07.2018 [NETWAYS](https://www.netways.de/schulungen/foreman/) (German) +* 20.11.2018 - 21.11.2018 [NETWAYS](https://www.netways.de/schulungen/foreman/) (German) !SLIDE center noprint diff --git a/installation/01_requirements.md b/installation/01_requirements.md index 5757bde..fdd9334 100644 --- a/installation/01_requirements.md +++ b/installation/01_requirements.md @@ -1,11 +1,11 @@ !SLIDE smbullets small # Requirements - Operating System -* Red Hat Enterprise Linux 6 & 7 +* Red Hat Enterprise Linux 7 * EPEL repository * Optional and RHSCL Channel * optionally: Puppetlabs Repository -* CentOS, Scientific Linux, Oracle Linux 6 & 7 +* CentOS, Scientific Linux, Oracle Linux 7 * EPEL repository * SCLorg SIG repository * optionally: Puppetlabs Repository @@ -25,9 +25,6 @@ On the mentioned operating systems packages are provided by the project, a insta is not recommended. On all platforms all updates should be applied before installation. Using the Puppetlabs Repository providing an up-to-date version of Puppet is preferred. -Please note that support for Foreman on Red Hat Enterprise Linux 6 and all its derivates is deprecated -and upgrading to 7 is recommended. - ~~~ENDSECTION~~~ !SLIDE smbullets small noprint @@ -45,9 +42,10 @@ Puppet version | Foreman installer | Smart proxy | Report/fact proce 3.5.x | 1.4.3 or higher | 1.4.2 or higher | Supported | Supported 3.6.0+ | 1.4.3 or higher | 1.5.1 or higher | Supported | Supported 4.x | 1.12 or higher | 1.12 or higher | Supported | Supported +5.x | 1.16 or higher | 1.16 or higher | Supported | Supported * Puppet Enterprise is not supported -* All-in-one and FHS packaging model are both supported for Puppet 4 +* All-in-one and FHS packaging model are both supported for Puppet 4 and 5 * Puppet Master and Puppet Server are both supported * Facter 1.x is supported, 2.x requires Foreman >= 1.4.2 * Structured Facts are supported with Foreman >= 1.12 @@ -81,9 +79,10 @@ Puppet version | Foreman installer | Smart proxy | Report/fact processors | An up-to-date version of Puppet 3.x is recommended while other versions will work. Puppet 4.x support is introduced with Foreman 1.12, supporting All-in-one and Filesystem-Hierarchy-Standard packaging standard. +Puppet 5.x support was added with Foreman 1.16 in the same way. Puppet Enterprise is not supported, but can work with manual tweaking of the setup. -Both versions of the central server in a Puppet environment are supported. If the All-in-on package of Puppet 4 +Both versions of the central server in a Puppet environment are supported. If the All-in-on package of Puppet 4 or 5 is found it will use the Puppet Server, in all other cases it will setup Puppet Master using Apache and Passenger. Facter 1.x is supported, Facter 2.x is supported by requires at least Foreman 1.4.2. Support for structured diff --git a/installation/04_installation.md b/installation/04_installation.md index 2d8f025..5f203b3 100644 --- a/installation/04_installation.md +++ b/installation/04_installation.md @@ -4,7 +4,7 @@ * Objective: * Prepare the installation of Foreman * Steps: - * Make Puppetlabs repository available + * Make Puppet vendor repository for Puppet 5 available * Make EPEL repository available * Make Foreman repository available * Install foreman-installer @@ -23,12 +23,12 @@ **** -* Make Puppetlabs repository available +* Make Puppet vendor repository available -Install the release package provided by the Puppetlabs repository to make it available for package -installation of open source version of Puppet. +Install the release package provided by the Puppet vendor repository to make it available for package +installation of open source version of Puppet. We will use Puppet 5. -URL: http://yum.puppetlabs.com +URL: http://yum.puppet.com/puppet5 * Make EPEL repository available @@ -69,19 +69,12 @@ The Foreman installer is installed and "foreman-installer --help" could be run f **** -### Make Puppetlabs repository available +### Make Puppet vendor repository available -Install the release package provided by the Puppetlabs repository to make it available for package +Install the release package provided by the Puppet vendor repository to make it available for package installation of open source version of Puppet. - # yum install http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm -y - -In the training we will stick with Puppet 3 and the Puppet Master because it does require much less -initial resources allowing us to run more virtual machines in parallel. If you really want to run -Puppet 4, increase the memory of the virtual machine at least to 3 GB and install the Puppet Collection -repository. - - # yum install http://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm -y + # yum install https://yum.puppet.com/puppet5/puppet5-release-el-7.noarch.rpm -y ### Make EPEL repository available @@ -279,6 +272,7 @@ Press 'Submit' to store the configuration. * Login to Foreman * Navigate to 'Infrastructure > Smart proxies' * Add the subnet 'foreman' by importing from the Smart Proxy + * Adjust additional settings via 'Infrastructure > Subnets' ~~~SECTION:notes~~~ @@ -303,6 +297,7 @@ Press 'Submit' to store the configuration. * Login to Foreman * Navigate to 'Infrastructure > Smart proxies' * Add the subnet 'foreman' by importing from the Smart Proxy +* Adjust additional settings via 'Infrastructure > Subnets' #### Notes: @@ -328,18 +323,27 @@ With the provided credentials login to 'https://foreman.localdomain' using your Select 'Import IPv4 subnets' from the drop down menu next to the Smart Proxy 'foreman.localdomain' and in the dialog insert: +* Name: 'foreman' +* Protocol: IPv4 +* Network address: '10.0.0.0' +* Network mask: '255.255.0.0' +* Network prefix: '16' +* Gateway address: '10.0.0.1' +* Primary DNS server: '10.0.0.2' +* Secondary DNS server: keep empty +* IPAM: 'DHCP' +* VLAN ID: keep empty +* Boot mode: 'DHCP' + +Press 'Submit' to store the configuration. + +### Adjust additional settings via 'Infrastructure > Subnets' + +Afterwards we have to return to the configuration via 'Infrastructure > Subnets' to add the IP range: + * Subnet tab: - * Name: 'foreman' - * Protocol: IPv4 - * Network address: '10.0.0.0' - * Network mask: '255.255.0.0' - * Network prefix: '16' - * Gateway address: '10.0.0.1' - * Primary DNS server: '10.0.0.2' - * Secondary DNS server: keep empty - * IPAM: 'DHCP' - * VLAN ID: keep empty - * Boot mode: 'DHCP' + * Start of IP range: '10.0.0.100' + * End of IP range: '10.0.0.200' * Domain tab: * Select 'localdomain' @@ -349,12 +353,4 @@ Select 'Import IPv4 subnets' from the drop down menu next to the Smart Proxy 'fo * TFTP Proxy: 'foreman.localdomain' * DNS Proxy: 'foreman.localdomain' -Press 'Submit' to store the configuration. - -Afterwards we have to return to the configuration to add the IP range: - -* Subnet tab: - * Start of IP range: '10.0.0.100' - * End of IP range: '10.0.0.200' - Press 'Submit' to store the configuration with this change. diff --git a/katello/01_overview.md b/katello/01_overview.md index 510db47..245f5dc 100644 --- a/katello/01_overview.md +++ b/katello/01_overview.md @@ -16,6 +16,12 @@ * Multitenancy is enabled by default * Upstream project for Red Hat Network Satellite 6 +~~~SECTION:notes~~~ + +Debian Support is WIP: https://github.com/Katello/katello/pull/6877 + +~~~ENDSECTION~~~ +
Katello Logo
diff --git a/plugins/00_overview.md b/plugins/00_overview.md index 046ad46..0b5aa1c 100644 --- a/plugins/00_overview.md +++ b/plugins/00_overview.md @@ -14,6 +14,7 @@ * Authenticate a Smart proxy * Add to the database * Create their own logging + * Create their own notification * Extend Smart Proxy * Additional providers for existing services diff --git a/plugins/07_abrt.md b/plugins/07_abrt.md.disable similarity index 98% rename from plugins/07_abrt.md rename to plugins/07_abrt.md.disable index 216551f..c736858 100644 --- a/plugins/07_abrt.md +++ b/plugins/07_abrt.md.disable @@ -123,7 +123,7 @@ Edit the Configuration file "/etc/libreport/plugins/ureport.conf" to include the Add the Puppet CA as trusted CA. - # cp /var/lib/puppet/ssl/certs/ca.pem /etc/pki/ca-trust/source/anchors/ + # cp /etc/puppetlabs/puppet/ssl/certs/ca.pem /etc/pki/ca-trust/source/anchors/ # update-ca-trust Restart the ABRT services diff --git a/plugins/08_openscap.md b/plugins/08_openscap.md index eb20278..bce0c5b 100644 --- a/plugins/08_openscap.md +++ b/plugins/08_openscap.md @@ -29,7 +29,8 @@ the "National Institute of Standards and Technology" (NIST). Not used by Foreman for now is the Anaconda Plugin OpenSCAP which can also add security compliance as part of the installation process. -With Foreman 1.11 the Plugin got a rewrite to remove the dependency on "scaptimony"! +With Foreman 1.11 the Plugin got a rewrite to remove the dependency on "scaptimony"! With Foreman 1.15 the Plugin was +enhanced to support tailoring files. More details on: https://github.com/theforeman/foreman_openscap @@ -47,6 +48,14 @@ More details on: https://github.com/theforeman/foreman_openscap * Initiate a Puppet agent run on the host * Create a report on the host and upload it to the Smart proxy * Upload the report from the Smart proxy to the Foreman +* Optional: + * Customize the Policy with a tailor file + +~~~SECTION:notes~~~ + +Guide generation is broken: http://projects.theforeman.org/issues/20222 + +~~~ENDSECTION~~~ !SLIDE supplemental exercises # Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: OpenSCAP @@ -68,6 +77,12 @@ More details on: https://github.com/theforeman/foreman_openscap * Create a report on the host and upload it to the Smart proxy * Upload the report from the Smart proxy to the Foreman +## Optional: + +**** + +* Customize the Policy with a tailor file created with SCAP workbench + #### Expected result: Compliance Report is available in the Foreman WebGUI. @@ -102,7 +117,7 @@ Content files are provided by the package "scap-security-guide" and located in " The Foreman plugin requires the datastream files which have "ds" in their name. You can upload them via "Hosts > SCAP content" and name it "Centos-7". -Content files are avaiable now so navigate to "Hosts > Policies" to create a "New Compliance Policy". +Content files are avaiable now so navigate to "Hosts > Policies" to create a "New Policy". Name it "Centos-7-Common", choose SCAP Content "Centos-7" and XCCDF Profile "Common Profile for General-Purpose System", schedule it "Weekly" on "Sunday" and assign it to Hostgroup "SCAP". @@ -134,3 +149,11 @@ immediately. Now you should find a status in the WebGUI in the Host details and the report at "Hosts > Reports". Navigate to that report and then press the "Report at" column to inspect it. + +### Customize the Policy with a tailor file created with SCAP workbench + +Open SCAP workbench on your laptop, choose the CentOS7 content and select the Common Profile. Press Customize and name +the Profile. In the new dialog select or unselect checks and click OK. Afterwards save the tailor file via "File > Save Customization Only". +Upload this file to Foreman in the "Hosts > Tailoring Files" dialog and then edit the policy and rerun the Puppet agent and +Upload of the report. + diff --git a/plugins/10_remote_execution.md b/plugins/10_remote_execution.md index 0637911..811ac09 100644 --- a/plugins/10_remote_execution.md +++ b/plugins/10_remote_execution.md @@ -12,6 +12,7 @@ * Trigger configuration management runs immediately * Execute one-time or irregular commands * Orchestrate operations on servers + * OpenSCAP scans on demand ~~~SECTION:notes~~~ @@ -36,6 +37,8 @@ It is usefully to trigger configuration management runs immediately to get an ad execute one-time or irregular commands and also to orchestrate operations like updates on your servers. It also allows to schedule jobs or reoccurring execution. +With the OpenSCAP plugin installed in addition a option to run scans on demand is added. + More details on: http://theforeman.org/plugins/foreman_remote_execution/ ~~~ENDSECTION~~~ @@ -49,6 +52,8 @@ More details on: http://theforeman.org/plugins/foreman_remote_execution/ * Install the Foreman Plugin Remote Execution * Bring out the SSH key * Initiate the Puppet run +* Optional: + * Run OpenSCAP scan !SLIDE supplemental exercises # Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Remote Execution @@ -67,6 +72,12 @@ More details on: http://theforeman.org/plugins/foreman_remote_execution/ * Bring out the SSH key * Initiate the Puppet run +## Optional: + +**** + +* Run OpenSCAP scan + #### Expected result: Puppet run is executed on the remote system and report is uploaded @@ -104,10 +115,14 @@ Or get it via the Smart proxy: Before running any job make sure Foreman knows about the Smart proxy providing the features "Dynflow" and "SSH" by refreshing it. -Navigate to the host and press "Run Job". For multiple hosts the action is also available in the action menu +Navigate to the host and press "Schedule Remote Job". For multiple hosts the action is also available in the action menu of the "All Hosts" view. To Trigger the Puppet agent run, select the Job Category "Puppet" which has the "Puppet Run Once" as default Job. Press "Submit" to execute it and watch for the execution. +### Optional: Run OpenSCAP scan + +Navigate to the host and press "Run OpenSCAP scan". It will automatically choose the Policy in this way. + !SLIDE smbullets small # Remote Execution - Job Templates diff --git a/plugins/12_monitoring.md b/plugins/12_monitoring.md new file mode 100644 index 0000000..92b8fec --- /dev/null +++ b/plugins/12_monitoring.md @@ -0,0 +1,118 @@ +!SLIDE smbullets small +# Monitoring + +* Integrates a monitoring solution + * Shows monitoring status in Foreman + * Manages monitoring objects during provisioning + +* Supported monitoring solutions + * Icinga 2 + * Icinga 2 and Icinga Web 2 Director + +* _Use case:_ + * Integrate monitoring into provisioning + * Get state for running systems from Foreman + +~~~SECTION:handouts~~~ + +**** + +The Monitoring integration is done via a Foreman plugin for the graphical part and a +Smart proxy plugin for the communication. So it shows a global and detailed monitoring +status for hosts, manages monitoring objects during provisioning and deprovisioning and +allows to set downtimes. + +For now it only supports Icinga 2 as monitoring solution and if requiring a more comfortable +administration Icinga 2 and in addition its graphical frontend Icinga Web 2 Director. + +More details on:
+* https://github.com/theforeman/foreman_monitoring
+* https://github.com/theforeman/smart_proxy_monitoring
+ +~~~ENDSECTION~~~ + +!SLIDE smbullets small +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Monitoring Integration + +* Objective: + * Integrate Monitoring into Foreman +* Steps: + * Install Foreman plugin and Smart proxy plugin + * Configure Smart proxy to communicate with Icinga 2 and Icinga Web 2 Director + * Configure Foreman default actions for monitoring + * Active integration for one host + * Verify monitoring integration + +!SLIDE supplemental exercises +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Monitoring Integration + +## Objective: + +**** + +* Integrate Monitoring into Foreman + +## Steps: + +**** + +* Install Foreman plugin and Smart proxy plugin using foreman-installer + +Active Icinga 2 and Icinga Web 2 Director provider. + +* Configure Smart proxy to communicate with Icinga 2 and Icinga Web 2 Director +* Configure Foreman default actions for monitoring +* Active integration for one host +* Verify monitoring integration at http://monitoring.localdomain/icingaweb2 + +Credentials are icinga:icinga. + +!SLIDE supplemental solutions +# Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Expire Hosts + +**** + +## Set a host to expire + +**** + +### Install Foreman plugin and Smart proxy plugin + + # foreman-installer --enable-foreman-plugin-monitoring \ + --enable-foreman-proxy-plugin-monitoring \ + --foreman-proxy-plugin-monitoring-providers icinga2 \ + --foreman-proxy-plugin-monitoring-providers icingadirector + +### Configure Smart proxy to communicate with Icinga 2 and Icinga Web 2 Director + + # scp monitoring.localdomain:/etc/icinga2/pki/ca.crt /etc/foreman-proxy/monitoring/ca.crt + # vi /etc/foreman-proxy/settings.d/monitoring_icinga2.yml + :enabled: true + :server: monitoring.localdomain + :api_cacert: /etc/foreman-proxy/monitoring/ca.crt + :api_user: foreman + :api_password: foreman + :verify_ssl: false + # vi /etc/foreman-proxy/settings.d/monitoring_icingadirector.yml + :enabled: true + :director_url: http://monitoring.localdomain/icingaweb2/director + :director_cacert: /etc/foreman-proxy/monitoring/ca.crt + :director_user: foreman + :director_password: foreman + :verify_ssl: false + # sed -i -e "s/RestClient::NotFound/RestClient::ResourceNotFound/g" \ + /usr/share/gems/gems/smart_proxy_monitoring-0.1.0/lib/smart_proxy_monitoring/director/director_client.rb + +### Configure Foreman default actions for monitoring + +Navigate to "Administer > Settings" and on the Monitoring tab you can choose your default actions. + +### Active integration for one host + +Navigate to a host and edit it to include a "Monitoring Proxy". + +### Verify monitoring integration at http://monitoring.localdomain/icingaweb2 + +Open the Icinga Web 2 interface with your browser http://monitoring.localdomain/icingaweb2 and login with icinga:icinga. +In the "Icinga Director" module you should see the host created and a service assigned to it. Start a deployment and you +will get a monitoring status in Foreman after checks are executed. diff --git a/provisioning/02_configuration.md b/provisioning/02_configuration.md index 9f3a612..d6be2b7 100644 --- a/provisioning/02_configuration.md +++ b/provisioning/02_configuration.md @@ -22,12 +22,11 @@ to find the boot media and software packages, partition tables and provisioning * ERB-Templates allow scripting and inclusion of snippets * Types: - * PXELinux + * PXELinux / PXEGrub / PXEGrub2 / iPXE * Provision * Finish * user_data * Script - * iPXE * Selected on best match: * Host group and Environment * Host group @@ -47,12 +46,13 @@ files or it will bloat up one file to render it unmaintainable. Depending on different provisioning mechanisms and methods other kinds of templates are required. -* PXELinux - Deployed to the TFTP server to ensure the Host boots the correct installer with the correct kernel options +* PXELinux - Deployed to the TFTP server to ensure the Host boots the correct installer with the correct kernel options for BIOS boot +* PXEGrub / PXEGrub2 - Used in PXE environments in place of PXELinux for EFI boot +* iPXE - Used in {g,i}PXE environments in place of PXELinux * Provision - The main unattended installation file, e.g. Kickstart or Preseed * Finish - A post-install script used to make custom actions after the main provisioning is complete * user_data - Similar to a Finish script, this can be assigned to hosts built on user_data-capable images (e.g. Openstack, EC2, etc) * Script - An arbitrary script, not used by default, useful for certain custom tasks -* iPXE - Used in {g,i}PXE environments in place of PXELinux Templates can be associated to operating systems, host groups, environments or combinations of host group and environment. It will then select the templates to use on best match. @@ -72,7 +72,7 @@ Partition tables are handled separately to allow the usage of the same host temp * Associate the PXELinux template "Kickstart default PXELinux" with CentOS * Associate the Provision template "Kickstart RHEL default" with CentOS * Associate the operating system with the Partition table "Kickstart default", Installation media "CentOS mirror", -select the Templates, set Parameter "enable-puppetlabs-repo" to "true" and change Minor version to "2.1511" +select the Templates and set Parameter "enable-puppetlabs-puppet5-repo" to "true" !SLIDE supplemental exercises # Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Prepare PXE installation of CentOS @@ -91,7 +91,7 @@ select the Templates, set Parameter "enable-puppetlabs-repo" to "true" and chang * Associate the PXELinux template "Kickstart default PXELinux" with CentOS * Associate the Provision template "Kickstart RHEL default" with CentOS * Associate the operating system with the Partition table "Kickstart default", Installation media "CentOS mirror", -select the Templates and set parameter "enable-puppetlabs-repo" to "true" +select the Templates and set parameter "enable-puppetlabs-puppet5-repo" to "true" !SLIDE supplemental solutions @@ -122,17 +122,14 @@ Navigate to "Hosts > Provisioning templates" and search "Kickstart RHEL default" Click it and in the dialog on the "Association" tab move the entry for CentOS to the "Selected Items". Click on "Submit". -### Associate the operating system with the Partition table "Kickstart default", Installation media "CentOS mirror", select the Templates and set parameter "enable-puppetlabs-repo" to "true" +### Associate the operating system with the Partition table "Kickstart default", Installation media "CentOS mirror", select the Templates and set parameter "enable-puppetlabs-puppet5-repo" to "true" Navigate to "Hosts > Operating systems" and search the CentOS entry. Click it and in the dialog on the "Partition table" tab select "Kickstart default", on the tab "Installation media" select "CentOS mirror", on the "Templates" tab select the templates associated earlier and on the "Parameters" tab -add the parameter "enable-puppetlabs-repo" with value "true". +add the parameter "enable-puppetlabs-puppet5-repo" with value "true". Click on "Submit". -If using Puppet 4 the parameter "enable-puppetlabs-pc1-repo" will add the required Puppet Collection also to the newly deployed -systems. - !SLIDE smbullets small # Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Prepare PXE installation of Debian @@ -141,11 +138,11 @@ systems. * Prepare the installation of Debian using PXE * Steps: * Change the Installation media "Debian mirror" to the local repo - * Create the Operating system "Debian" with Major version "8", Description "Debian jessie", Family "Debian", Release name "jessie" + * Create the Operating system "Debian" with Major version "9", Description "Debian stretch", Family "Debian", Release name "stretch" * Associate the PXELinux template "Preseed default PXELinux" with Debian * Associate the Provision template "Preseed default" with Debian * Associate the finish template "Preseed default finish" with Debian - * Associate the operating system with the Templates and set Architecture "x86_64", Partition table "Preseed custom LVM" and "Preseed default", Installation media "Debian mirror" + * Associate the operating system with the Templates and set Architecture "x86_64", Partition table "Preseed custom LVM" and "Preseed default", Installation media "Debian mirror" and set parameter "enable-puppetlabs-puppet5-repo" to "true" ~~~SECTION:handouts~~~ @@ -167,11 +164,11 @@ systems. **** * Change the Installation media "Debian mirror" to the local repo -* Create the Operating system "Debian" with Major version "8", Description "Debian jessie", Family "Debian", Release name "jessie" +* Create the Operating system "Debian" with Major version "9", Description "Debian stretch", Family "Debian", Release name "stretch" * Associate the PXELinux template "Preseed default PXELinux" with Debian * Associate the Provision template "Preseed default" with Debian * Associate the finish template "Preseed default finish" with Debian -* Associate the operating system with the Templates and set Architecture "x86_64", Partition table "Preseed custom LVM" and "Preseed default", Installation media "Debian mirror" +* Associate the operating system with the Templates and set Architecture "x86_64", Partition table "Preseed custom LVM" and "Preseed default", Installation media "Debian mirror" and set parameter "enable-puppetlabs-puppet5-repo" to "true" !SLIDE supplemental solutions @@ -188,11 +185,11 @@ systems. Navigate to "Hosts > Installation media", select the entry "Debian mirror", change the "Path" to the URL the trainer provided. -### Create the Operating system "Debian" with Major version "8", Description "Debian jessie", Family "Debian", Release name "jessie" +### Create the Operating system "Debian" with Major version "9", Description "Debian stretch", Family "Debian", Release name "stretch" -Navigate to "Hosts > Operating systems" and click on "New operating system". -In the dialog on the "Operating System" tab set the "Name" to "Debian", "Major version" to "8", -"Description" to "Debian jessie", "Family" to "Debian", "Release name" to "jessie". +Navigate to "Hosts > Operating systems" and click on "Create operating system". +In the dialog on the "Operating System" tab set the "Name" to "Debian", "Major version" to "9", +"Description" to "Debian stretch", "Family" to "Debian", "Release name" to "stretch". Click on "Submit". ### Associate the PXELinux template "Preseed default PXELinux" with Debian @@ -213,12 +210,12 @@ Navigate to "Hosts > Provisioning templates" and search "Preseed default finish" Click it and in the dialog on the "Association" tab move the entry for Debian to the "Selected Items". Click on "Submit". -### Associate the operating system with the Templates and set Architecture "x86_64", Partition table "Preseed custom LVM" and "Preseed default", Installation media "Debian mirror" +### Associate the operating system with the Templates and set Architecture "x86_64", Partition table "Preseed custom LVM" and "Preseed default", Installation media "Debian mirror" and set parameter "enable-puppetlabs-puppet5-repo" to "true" Navigate to "Hosts > Operating systems" and search the Debian entry. Click it and in the dialog on the "Operating System" tab select the "Architecture" to "x86_64", on the "Partition table" tab select "Preseed custom LVM" and "Preseed default", on the tab "Installation media" select "Debian mirror", on the -"Templates" tab select the templates associated earlier. +"Templates" tab select the templates associated earlier and add the parameter "enable-puppetlabs-puppet5-repo" with value "true". Click on "Submit". diff --git a/provisioning/03_pxe.md b/provisioning/03_pxe.md index 7152249..b97588a 100644 --- a/provisioning/03_pxe.md +++ b/provisioning/03_pxe.md @@ -56,7 +56,7 @@ The Foreman manual provides some more detailed workflow diagrams: http://thefore * Open "Virtual Machine Manager" application * Select "New virtual machine" from the menu or by pressing the button * Select PXE boot - * Select "Linux" and "Red Hat Enterprise Linux 7.2" for CentOS or "Debian jessie" for Debian according to your preferences + * Select "Linux" and "Red Hat Enterprise Linux 7.4" for CentOS or "Debian stretch" for Debian according to your preferences * Keep the minimum requirements for RAM, CPU and Disk * Name your VM "pxe" and select the network "foreman" * Create the VM and immediately pause it so in the next lab the required configuration in Foreman can be created @@ -65,6 +65,7 @@ The Foreman manual provides some more detailed workflow diagrams: http://thefore * If a student did not pause the system, he has to add the NIC as Boot media and change the boot order, shutdown the machine and start it up again later +* CentOS will require 1.5 GB at least ~~~ENDSECTION~~~ @@ -84,7 +85,7 @@ and start it up again later * Open "Virtual Machine Manager" application * Select "New virtual machine" from the menu or by pressing the button * Select PXE boot -* Select "Linux" and "Red Hat Enterprise Linux 7.2" for CentOS or "Debian jessie" for Debian according to your preferences +* Select "Linux" and "Red Hat Enterprise Linux 7.4" for CentOS or "Debian stretch" for Debian according to your preferences * Keep the minimum requirements for RAM, CPU and Disk * Name your VM "pxe" and select the network "foreman" * Create the VM and immediately pause it so in the next lab the required configuration in Foreman can be created @@ -109,14 +110,15 @@ Open the "Virtual Machine Manager" application from the Gnome Application menu In the first step of the wizard select the network boot -### Select "Linux" and "Red Hat Enterprise Linux 7.2" for CentOS or "Debian jessie" for Debian according to your preferences +### Select "Linux" and "Red Hat Enterprise Linux 7.4" for CentOS or "Debian stretch" for Debian according to your preferences -In the second step choose "Linux" as operating system type and accoding to your preferences as version "Red Hat Enterprise Linux 7.2" -for CentOS or "Debian jessie" for Debian. For later labs you will also have to choose an operating system, deploy at least one of every kind. +In the second step choose "Linux" as operating system type and accoding to your preferences as version "Red Hat Enterprise Linux 7.4" +for CentOS or "Debian stretch" for Debian. For later labs you will also have to choose an operating system, deploy at least one of every kind. ### Keep the minimum requirements for RAM, CPU and Disk In the third step stick with the minimum requirements for RAM and CPU because several system will be deployed. +CentOS installer will require at least 1.5 GB instead of the default. In the forth step keep the disk as small as possible but it will not matter as long as it is thin provisioned. ### Name your virtual machine "pxe" and select the network "foreman" @@ -140,8 +142,8 @@ Verbesserung: (This Change needs a shutdown of the VM, it applys only to the VM * Steps: * Open Foreman's host dialog using "Host > New Host" * On the Host tab name it "pxe" and select the Environment, Puppet CA and Master - * On the Interface tab click edit to configure the interface with the MAC address, identifier "eth0", select Domain and Subnet and keep the suggested IP address. * On the Operating system tab select the Architecture, Operating System, Media, Partition table and set a Root password. + * On the Interface tab click edit to configure the interface with the MAC address, identifier "eth0", select Domain and Subnet and keep the suggested IP address. * Unpause the VM ~~~SECTION:handouts~~~ @@ -176,9 +178,9 @@ in the Provisioning tab as Root password. This is an MD5 hash for being supporte * Open Foreman's host dialog using "Host > New Host" * On the Host tab name it "pxe" and select the Environment "production", Puppet CA "foreman.localdomain" and Puppet Master "foreman.localdomain" -* On the Interface tab click edit to configure the interface with the MAC address of the system created before, identifier "eth0", select Domain "localdomain" and Subnet "foreman" and keep the suggested IP address * On the Operating system tab select the Architecture "x86_64", Operating System, Media, Partition table depending on your choice earlier +* On the Interface tab click edit to configure the interface with the MAC address of the system created before, identifier "eth0", select Domain and set a Root password of your choice * Unpause the virtual machine @@ -196,16 +198,16 @@ and set a Root password of your choice ### On the Host tab name it "pxe" and select the Environment "production", Puppet CA "foreman.localdomain" and Puppet Master "foreman.localdomain" +### On the Operating system tab select the Architecture "x86_64", Operating System, Media, Partition table depending on your choice earlier and set a Root password of your choice + +Use "foreman1" if you have no preference for the root password. + ### On the Interface tab click edit to configure the interface with the MAC address of the system created before, identifier "eth0", select Domain "localdomain" and Subnet "foreman" and keep the suggested IP address On the Interface tab click edit to configure the interface with the MAC address of the system created before (which could be found on the Details view on the NIC or if paused in the console), identifier "eth0", select Domain "localdomain" and Subnet "foreman" and keep the suggested IP address which will be the first one free in the range of the subnet. -### On the Operating system tab select the Architecture "x86_64", Operating System, Media, Partition table depending on your choice earlier and set a Root password of your choice - -Use "foreman1" if you have no preference for the root password. - ### Unpause the virtual machine When you unpause the virtual machine it will get the suggested IP address and the boot media and will start the unattended installation. diff --git a/provisioning/04_compute_resource.md b/provisioning/04_compute_resource.md index ec58d59..012f2eb 100644 --- a/provisioning/04_compute_resource.md +++ b/provisioning/04_compute_resource.md @@ -47,7 +47,7 @@ Then the virtual machine is powered on and it works the same way like simple PXE **** The Compute resource does not only provide the possibility to provision virtual machines, it also allows access to power management of -unmanaged systems and to deleted them from the virtualization platform. Also assiocating an unmanaged system to an already existing one +unmanaged systems and to deleted them from the virtualization platform. Also associating an unmanaged system to an already existing one is possible. ~~~ENDSECTION~~~ @@ -106,7 +106,7 @@ If you know the password of the account in the remote system ssh-copy-id simplif ### Configure the Compute resource in Foreman Web GUI -Navigate to "Infrastructure > Compute resources" and click on "New Compute Resource". +Navigate to "Infrastructure > Compute resources" and click on "Create Compute Resource". In the following dialog insert: diff --git a/provisioning/05_discovery.md b/provisioning/05_discovery.md index 34838f7..7f67756 100644 --- a/provisioning/05_discovery.md +++ b/provisioning/05_discovery.md @@ -90,11 +90,16 @@ Navigate to "Monitor > Dashboard" and select from "Manage > Add widgets" the "Di * Open "Virtual Machine Manager" application * Select "New virtual machine" from the menu or by pressing the button * Select PXE boot - * Select "Linux" and "Red Hat Enterprise Linux 7.2" for CentOS or "Debian jessie" for Debian according to your preferences + * Select "Linux" and "Red Hat Enterprise Linux 7.4" for CentOS or "Debian stretch" for Debian according to your preferences * Keep the minimum requirements for RAM, CPU and Disk * Name your virtual machine "discovery" and select the network "foreman" * Create the virtual machine and when the PXE menu appears select "Foreman Discovery Image" +~~~SECTION:notes~~~ + +Bug http://projects.theforeman.org/issues/21239 breaks this exercise, use of a Hostgroup to provide defaults can workaround this. + +~~~ENDSECTION~~~ !SLIDE supplemental exercises # Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Create a virtual machine "discovery" @@ -112,7 +117,7 @@ Navigate to "Monitor > Dashboard" and select from "Manage > Add widgets" the "Di * Open "Virtual Machine Manager" application * Select "New virtual machine" from the menu or by pressing the button * Select PXE boot -* Select "Linux" and "Red Hat Enterprise Linux 7.2" for CentOS or "Debian jessie" for Debian according to your preferences +* Select "Linux" and "Red Hat Enterprise Linux 7.4" for CentOS or "Debian stretch" for Debian according to your preferences * Keep the minimum requirements for RAM, CPU and Disk * Name your virtual machine "discovery" and select the network "foreman" * Create the virtual machine and when the PXE menu appears select "Foreman Discovery Image" @@ -141,10 +146,10 @@ Open the "Virtual Machine Manager" application from the Gnome Application menu In the first step of the wizard select the network boot -### Select "Linux" and "Red Hat Enterprise Linux 7.2" for CentOS or "Debian jessie" for Debian according to your preferences +### Select "Linux" and "Red Hat Enterprise Linux 7.4" for CentOS or "Debian stretch" for Debian according to your preferences -In the second step choose "Linux" as operating system type and accoding to your preferences as version "Red Hat Enterprise Linux 7.2" -for CentOS or "Debian jessie" for Debian. For later labs you will also have to choose an operating system, deploy at least one of every kind. +In the second step choose "Linux" as operating system type and accoding to your preferences as version "Red Hat Enterprise Linux 7.4" +for CentOS or "Debian stretch" for Debian. For later labs you will also have to choose an operating system, deploy at least one of every kind. ### Keep the minimum requirements for RAM, CPU and Disk @@ -168,18 +173,13 @@ appears in the Foreman Web GUI in the "Discovery widget" named after the mac add * Objective: * Configure the system "discovery" in Foreman and start installation * Steps: - * Select the newly discoverd host from the widget + * Select the newly discovered host from the widget * On the Discovered host view select the action "Provision" and then "Create Host" * On the Host tab name it "discovery" and select the Environment, Puppet CA and Master * On the Interface tab click edit to configure the interface add the Domain "localdomain" * On the Operating system tab select the Architecture, Operating System, Media, Partition table and set a Root password * Submit to start the installation -~~~SECTION:notes~~~ - -Bug http://projects.theforeman.org/issues/17651 breaks this exercise, use of a Hostgroup to provide defaults can workaround this. - -~~~ENDSECTION~~~ !SLIDE supplemental exercises # Lab ~~~SECTION:MAJOR~~~.~~~SECTION:MINOR~~~: Configure the system "discovery" in Foreman @@ -194,7 +194,7 @@ Bug http://projects.theforeman.org/issues/17651 breaks this exercise, use of a H **** -* Select the newly discoverd host form the widget +* Select the newly discovered host form the widget * On the Discovered host view select the action "Provision" and then "Create Host" * On the Host tab name it "discovery" and select the Environment, Puppet CA and Master * On the Interface tab click edit to configure the interface add the Domain "localdomain" @@ -211,7 +211,7 @@ Bug http://projects.theforeman.org/issues/17651 breaks this exercise, use of a H **** -### Select the newly discoverd host from the widget +### Select the newly discovered host from the widget ### On the Discovered host view select the action "Provision" and then "Create Host" diff --git a/provisioning/06_bootdisk.md b/provisioning/06_bootdisk.md index 93af56f..7986b83 100644 --- a/provisioning/06_bootdisk.md +++ b/provisioning/06_bootdisk.md @@ -7,6 +7,7 @@ * Generic image * Subnet image * Based on iPXE for environments without control over network +* Adds disk based provisioning to Compute resources ~~~SECTION:handouts~~~ @@ -29,6 +30,8 @@ providing the correct installer via TFTP and Provisioning configuration to load. The subnet image is basicly the same as the generic image but uses another TFTP server specified for the subnet. +Depending on the Compute resource used the plugin adds disk based provisioning. + ~~~ENDSECTION~~~ diff --git a/showoff.json b/showoff.json index 92d64ca..b212cd1 100644 --- a/showoff.json +++ b/showoff.json @@ -2,7 +2,7 @@ "name": "Foreman | Lifecyclemanagement for Server", "location": "Nuremberg", "author": "Dirk Götz", - "release": "1.2", + "release": "1.3", "favicon": "image/global/favicon.ico", diff --git a/static/file/training/_images/environment.png b/static/file/training/_images/environment.png index 356f64dcbb90ac114fa38d5fb38d3e06067daf27..fdd401eb0b3ee33a136cb070d881aaeacc9766ad 100644 GIT binary patch literal 50729 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

v6Y^6WN^?$gr0h@mG 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

GNlnFJ-LXMJco6 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%0D%B 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 BS?vG- diff --git a/static/file/usermanagement/_images/foreman_notification.png b/static/file/usermanagement/_images/foreman_notification.png new file mode 100644 index 0000000000000000000000000000000000000000..963ba972e5ec8135128738efc02821b54f6e237f GIT binary patch literal 16128 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 NaS`cHCBnLX{|~b@cnJUi literal 0 HcmV?d00001 diff --git a/static/file/usermanagement/_images/foreman_usersshkey.png b/static/file/usermanagement/_images/foreman_usersshkey.png new file mode 100644 index 0000000000000000000000000000000000000000..2811e9176b06ce076409c01a15a8e6887ec12cfc GIT binary patch literal 12927 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 N5R(=CEv)bVKLDR>lLP<& literal 0 HcmV?d00001 diff --git a/static/index.html b/static/index.html index 62954a4..ad784d6 100644 --- a/static/index.html +++ b/static/index.html @@ -128,13 +128,13 @@

Author

Provided by:

-

NETWAYS Logo

+

NETWAYS Logo

www.netways.de - github.com/NETWAYS - @netways

To Support:

-

Foreman Logo

+

Foreman Logo

www.theforeman.org - github.com/theforeman - @ForemanProject

@@ -153,8 +153,9 @@

Author

Forthcoming Hands-on Training

    -
  • 27.06.2017 - 28.06.2017 NETWAYS (German)
  • -
  • 26.09.2017 - 27.09.2017 NETWAYS (German)
  • +
  • 06.03.2018 - 07.03.2018 NETWAYS (German)
  • +
  • 03.07.2018 - 04.07.2018 NETWAYS (German)
  • +
  • 20.11.2018 - 21.11.2018 NETWAYS (German)
-
-
+
+

Training Environment

-
Training Environment
+
Training Environment
@@ -402,7 +404,7 @@

Foreman Project

Architecture

-

Foreman - Architecture

+

Foreman - Architecture

@@ -448,7 +450,7 @@

Foreman

-Foreman Loginscreen +Foreman Loginscreen
@@ -517,7 +519,7 @@

Smart Proxy

  • DHCP - ISC DHCP, MS DHCP Servers, Libvirt
  • DNS - Bind, PowerDNS, Route53, MS DNS Server, Libvirt
  • BMC - IPMI
  • -
  • Puppet & Puppet CA / Salt / Chef
  • +
  • Puppet & Puppet CA / Salt / Chef / Ansible
  • Realm - FreeIPA
  • TFTP
  • @@ -592,7 +594,7 @@

    Smart Proxy - DHCP

    • not for productive use
    • -
    • uses virsh to manage dnsmasq for libvirt
    • +
    • uses libvirt API to manage dnsmasq for libvirt
    @@ -618,7 +620,7 @@

    Smart Proxy - DHCP

    via OMAPI. For Microsoft DHCP installation of the Smart Proxy on Windows Server system is required which needs netsh command installed and the user running the service needs administrative privileges, but the server does not need to be the DHCP server. For testing enviroments also an implementation for Libvirt -using virsh to manage the dnsmasq underneath is available, a productive use is not recommended.

    +using libvirt API to manage the dnsmasq underneath is available, a productive use is not recommended.

    @@ -675,7 +677,7 @@

    Smart Proxy - DNS

    • not for productive use
    • -
    • uses virsh to manage dnsmasq for libvirt
    • +
    • uses libvirt API to manage dnsmasq for libvirt
    @@ -684,7 +686,7 @@

    Smart Proxy - DNS

    • Foreman does support IPv6 from 1.12 onwards
    • -
    • No support for additional records like CNAME
    • +
    • No support for additional records like CNAME (Support in Smart Proxy exists, GUI WIP)
    @@ -945,7 +947,7 @@

    3 Installation

    Requirements - Operating System

      -
    • Red Hat Enterprise Linux 6 & 7 +
    • Red Hat Enterprise Linux 7
      • EPEL repository
      • @@ -953,7 +955,7 @@

        Requirements - Operating System

      • optionally: Puppetlabs Repository
    • -
    • CentOS, Scientific Linux, Oracle Linux 6 & 7 +
    • CentOS, Scientific Linux, Oracle Linux 7
      • EPEL repository
      • @@ -986,9 +988,6 @@

        Requirements - Operating System

        is not recommended. On all platforms all updates should be applied before installation. Using the Puppetlabs Repository providing an up-to-date version of Puppet is preferred.

        -

        Please note that support for Foreman on Red Hat Enterprise Linux 6 and all its derivates is deprecated -and upgrading to 7 is recommended.

        -