Como he explicado en posts anteriores de Foreman, es un sistema dedicado a la gestión de ciclos de vida de los hosts. Pero no se queda solo ahí, además de interactuar con puppet, es capaz de integrar diferentes servicios, tales como; DNS, DHCP, FreeIPA, SSH, TFTPd, PXE… Y es compatible con diferentes herramientas como; OpenSCAP, Ansible, VMware, OpenStack, oVirt, Docker… De este modo hace que desde una herramienta se puedan controlar varios escenarios de un modo muy automatizado.
En este post, explicaré una instalación avanzada con todos los requisitos necesarios, y el como gestionar los módulos y demás opciones que nos brinda esta herramienta.
Instalación
Para la instalación utilizaremos un CentOS7
Preparación
Hosts
Editar el archivo /etc/hosts y poner la entrada correcta
vim /etc/hosts 192.168.0.250 foreman.ichasco.com foreman puppet
NTP
Instalar NTP y actualizar la hora
yum -y install ntp
systemctl start ntpd systemctl enable ntpd
ntpdate -s 2.es.pool.ntp.org
Memcached
Instalar memcached
yum -y install memcached
vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="128" OPTIONS="-l 127.0.0.1"
Iniciarlo y habilitarlo para el inicio del sistema
systemctl start memcached systemctl enable memcached
Selinux
vim /etc/sysconfig/selinux SELINUX=disabled
Firewalld
systemctl stop firewalld systemctl disable firewalld
Repositorios
Añadir los repos necesarios
yum install -y epel-release
yum -y install https://yum.puppet.com/puppet6-release-el-7.noarch.rpm
yum -y install https://yum.theforeman.org/releases/latest/el7/x86_64/foreman-release.rpm
Actualizar el sistema
yum -y update
reboot
Foreman
Instalar el paquete foreman-installer
yum install -y foreman-installer
Empezar con la configuración de foreman.
Nota: Con la opción -i se hace interactivo y elegir los parámetros y plugins que se quieren instalar.
Si se quiere editar mediante archivo de texto, su ruta es: “/etc/foreman-installer/scenarios.d/foreman-answers.yaml”
Para empezar con la instalación ejecutar:
foreman-installer -i
Ejemplo:
Main Config Menu 1. [✓] Configure foreman 2. [✓] Configure foreman_cli 3. [✓] Configure foreman_cli_openscap 4. [✓] Configure foreman_proxy 5. [✓] Configure puppet 6. [✓] Configure foreman_plugin_ansible 7. [✗] Configure foreman_plugin_azure 8. [✓] Configure foreman_plugin_bootdisk 9. [✗] Configure foreman_plugin_chef 10. [✓] Configure foreman_plugin_cockpit 11. [✗] Configure foreman_plugin_default_hostgroup 12. [✓] Configure foreman_plugin_dhcp_browser 13. [✗] Configure foreman_plugin_digitalocean 14. [✓] Configure foreman_plugin_discovery 15. [✓] Configure foreman_plugin_docker 16. [✗] Configure foreman_plugin_expire_hosts 17. [✗] Configure foreman_plugin_hooks 18. [✗] Configure foreman_plugin_host_extra_validator 19. [✓] Configure foreman_plugin_memcache 20. [✗] Configure foreman_plugin_monitoring 21. [✗] Configure foreman_plugin_omaha 22. [✓] Configure foreman_plugin_openscap 23. [✗] Configure foreman_plugin_ovirt_provision 24. [✗] Configure foreman_plugin_puppetdb 25. [✓] Configure foreman_plugin_remote_execution 26. [✗] Configure foreman_plugin_salt 27. [✓] Configure foreman_plugin_setup 28. [✓] Configure foreman_plugin_tasks 29. [✓] Configure foreman_plugin_templates 30. [✗] Configure foreman_compute_ec2 31. [✗] Configure foreman_compute_gce 32. [✗] Configure foreman_compute_libvirt 33. [✗] Configure foreman_compute_openstack 34. [✗] Configure foreman_compute_ovirt 35. [✗] Configure foreman_compute_rackspace 36. [✗] Configure foreman_compute_vmware 37. [✓] Configure foreman_proxy_plugin_abrt 38. [✓] Configure foreman_proxy_plugin_ansible 39. [✗] Configure foreman_proxy_plugin_chef 40. [✗] Configure foreman_proxy_plugin_dhcp_infoblox 41. [✓] Configure foreman_proxy_plugin_dhcp_remote_isc 42. [✓] Configure foreman_proxy_plugin_discovery 43. [✗] Configure foreman_proxy_plugin_dns_infoblox 44. [✗] Configure foreman_proxy_plugin_dns_powerdns 45. [✗] Configure foreman_proxy_plugin_dynflow 46. [✗] Configure foreman_proxy_plugin_monitoring 47. [✗] Configure foreman_proxy_plugin_omaha 48. [✓] Configure foreman_proxy_plugin_openscap 49. [✓] Configure foreman_proxy_plugin_pulp 50. [✓] Configure foreman_proxy_plugin_remote_execution_ssh 51. [✗] Configure foreman_proxy_plugin_salt 52. Display current config -- press enter/return to continue or q to stop -- 53. Save and run 54. Cancel run without Saving
Si se quiere cambiar algo, se puede cambiar. Y si no, seleccionar la opción 53 para que empiece la instalación.
Plugins
Algunos de los plugins instalados son:
- ansible: para control de ansible
- bootdisk: para poder crear ISOs a partir de las plantillas
- cockpit: control de hosts remotamente (logs, servicios, terminal, networking…)
- default_hostgroup: Añadir los hosts a un grupo predefinido si no tienen uno
- dhcp_browser: GUI para editar las leases del dhcp
- discovery:Para habilitar la detección MaaS
- docker: Para desplegar y gestionar dockers desde foreman
- memcache: Para incrementar el rendimiento cacheando peticiones
- openscap: Gestionar las vulnerabilidades de los hosts
- tasks: Plugin para gestión de tareas
- templates: Para sincronizar las community templates
- abrt: Plugin para centralizar el reporting de bugs de los hosts
- pulp: Plugin para gestión de repositorios y paquetes en sistemas basados en RHEL
- remote_execution_ssh: Para ejecutar comandos remotos a través de SSH
Nota: si algo falla revisar el log
less /var/log/foreman-installer/foreman.log
Una vez terminado todo el proceso de instalación, tiene que salir el siguiente mensaje:
Installing Done [100%] [...........................................................................................................................................................] Success! * Foreman is running at https://foreman.ichasco.com Initial credentials are admin / <contraseña> * Foreman Proxy is running at https://foreman.ichasco.com:8443 * Puppetmaster is running at port 8140 The full log is at /var/log/foreman-installer/foreman.log
Nota: En el caso de que falle, volver a lanzar foreman-installer porque puede que no haya configurado el proxy correctamente.
Habilitar los servicios necesarios
systemctl enable foreman systemctl enable puppetserver systemctl enable foreman-proxy systemctl enable tftp
Configuración
Primeros pasos
Para empezar a configurarlo, hay que acceder a la web:
https://[IP o DNS de foreman]
Para iniciar sesión, el usuario es el que nos indica al acabar la instalación.
Subredes
Para crear subredes, la forma correcta es editar el archivo de configuración de DHCP y luego importar las redes desde Foreman
vim /etc/dhcp/dhcpd.conf # subred2 subnet 192.168.1.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option routers 192.168.1.1; option domain-name-servers 192.168.1.1; }
Reiniciar el demonio dhcp
systemctl restart dhcpd
Y por último ir al apartado de foreman “Infraestructura –> Proxis inteligentes” e importar las subredes ipv4
Configurar la interfaz importada
Luego quedaría configurar los proxis y el range en el apartado de “Infraestructura –> Subredes”
Nota: Si se van a servir IPs de otra interfaz, hay que añadir la interfaz en /etc/sysconfig/dhcpd y reiniciar el servicio
NotaII: Si se crean redes diferentes a la principal, hay que crear también los archivos de DNS inverso
Desplegar hosts
Para desplegar hosts, seguir el siguiente post
Configuración de módulos
OpenScap
Cargar los SCAP Contents desde la terminal
foreman-rake foreman_openscap:bulk_upload:default
Instalar el modulo de scap de foreman
puppet module install theforeman-foreman_scap_client
Una vez instalado el módulo, hay que crear las policies
Crear la Nueva Policy
Empezar con la configuración
Ahora queda, configurar el modulo de openscap de foreman y desplegarlo en los hosts. Para eso, hay que ir a clases y editarlo
Y configurar los campos:
server --> foreman.ichasco.com port --> 8443 foreman_repo_gpg_chk --> 0 foreman_repo_rel --> 1.15
Una vez hecho esto, hay que desplegar el modulo sobre el host y ya se puede lanzar el informe de la siguiente manera. Ir al host sobre el que queremos ejecutarlo y darle a run OpenSCAP scan
Y para ver los resultados, hay que ir a “Hosts –> Informes”
Nota: hay que pasarle la ssh-key de root de foreman al host contra el que se va a lanzar el escaneo.
Cockpit
Añadir lo patches en los siguientes ficheros:
/opt/theforeman/tfm/root/usr/share/gems/gems/foreman_cockpit-2.0.2/app/controllers/concerns/foreman_cockpit/hosts_controller_extensions.rb /opt/theforeman/tfm/root/usr/share/gems/gems/foreman_cockpit-2.0.2/app/views/foreman_cockpit/hosts/_cockpit.html.erb
Para poder interactuar con los hosts, es necesario instalarles un agente. Se puede instalar el agente desde aquí o instalarlo mediante módulos de puppet en foreman y luego desplegarlo.
puppet module install petems-cockpit
Si se quiere hacer algún cambio en el cliente:
vim /usr/lib/systemd/system/cockpit.socket [Socket] ListenStream=0.0.0.0:9090
systemctl daemon-reload systemctl start cockpit systemctl stop firewalld
Memcached
vim /etc/foreman/plugins/foreman_memcache.yaml memcache: :hosts: - 127.0.0.1:11211 :options: :namespace: foreman :expires_in: 86400 :compress: true
systemctl restart httpd
Docker
DockerServer
Instalar en el Docker server
yum install -y docker
Habilitar el servicio
systemctl enable docker
Exponer el socket de docker
echo "OPTIONS='--selinux-enabled -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock'" >> /etc/sysconfig/docker
Deshabilitar y parar firewalld
systemctl stop firewalld systemctl disable firewalld
Iniciar docker
systemctl start docker
Ahora, en el apartado de compute resource, crear el recurso docker
Desplegar un contenedor
Para esto, hay que ir a “Contenedores –> Nuevo contenedor”, seleccionar el servidor de docker creado previamente y “Siguiente”
En el siguiente paso, desde “Central Docker” que es DockerHub, buscamos una imagen que nos interese y ponemos el tag.
Configurar el contenedor con las opciones que necesitemos
Por último, configurar el entorno y crear el contenedor
Y ya estaría creado
Para ver los contenedores gestionados, hay que ir a “Contenedores –> Todos los contenedores”
Troubleshootig/Tips
Los environmnets no cargan los files de los módulos correctos
Editar el environment.conf del environment y añadir lo siguiente para hacer un override de los módulos generales. Si se quieren añadir mas paths porque se llaman a otros módulos también añadir.
modulepath = ./modules:$basemodulepath
Hacer que foreman solo reparta IPs a los hosts gestionados por el
Para esto, hay que editar el archivo /etc/dhcp/dhcpd.conf y añadir la siguiente línea
deny unknown-clients;
Una vez hecho esto, reiniciar el servicio
systemctl restart dhcpd
Este post irá creciendo a medida que vaya encontrando cosas interesantes
Download debconf preconfiguration file failed for Ubuntu
Este error, viene por que el host intenta conectarse por http a foreman. Para solucionarlo, hay que habilitar la siguiente entrada en el installer:
foreman-installer --foreman-proxy-http=true
Desplegar puppet 6 en los hosts
Si se tiene instalado en foreman la versión 6 de puppet, es aplicar ciertos parámetros para que los hosts que se desplieguen, también incluyan esta versión, de lo contrario, llevarán la versión 5 y no funcionará la provisión.
Para esto y sin tocar las plantillas de aprovisionamiento, hay que añadir 2 parámetros en parámetros globales ( Configurar –> Parámetros globales)
Y hay que añadir los siguientes:
aio_enabled enable-puppet6 string
enable-puppetlabs-puppet6-repo true boolean
Links:
https://theforeman.org/training.html
https://github.com/NETWAYS/foreman-training
Puppet & Foreman : The scalable way
Also published on Medium.
Buenos dias,
Estoy intentando instalar foreman , y todo funciona bien, lo que no me queda claro en esta guia, (que por cierto felicidades por ella) es el tema del DHCP. Cuando hago la instalación con una Centos 7 la opción de DHCP no está activa, he leido mucho por internet, pero no veo ninguna guia para dotar a foreman de DHCP, hay alguna guia para ello? es complicado? ya que lo que he visto en internet no me deja nada claro.
Muchas gracias por todo y un saludo!
Buenas, es una opción de foreman cuando lo instalas (si lo instalas con la opción -i)
Tienes la siguientes opciones de configuración
dhcp: true
dhcp_listen_on: https
dhcp_managed: true
dhcp_provider: isc
dhcp_subnets: []
Lo puedes ver también en el fichero de respuestas de la instalación:
/etc/foreman-installer/scenarios.d/foreman-answers.yaml
Un saludo