# Class Grafana class grafana ( $admin_password, $ldap_config_file, $system_user = 'grafana', $container_name = 'grafana', $container_image_name = 'grafana/grafana-oss', $container_image_version = 'latest', $container_mount_data_folder = true, $container_data_folder = '/var/lib/grafana', $container_config_folder = '/etc/grafana', $container_logs_folder = '/var/log/grafana', $container_volume_name = 'grafana-storage', $container_port = '3000', $configuration = {}, # Refer to https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/ $ldap_config = {}, ) { $env = [ "GF_PATHS_CONFIG=${container_config_folder}/grafana.ini", "GF_PATHS_DATA=${$container_data_folder}", 'GF_PATHS_HOME=/usr/share/grafana', "GF_PATHS_LOGS=${container_logs_folder}", "GF_PATHS_PLUGINS=${container_data_folder}/plugins", "GF_PATHS_PROVISIONING=${container_config_folder}/provisioning", 'GF_LOG_MODE=console file', "GF_SECURITY_ADMIN_PASSWORD=${admin_password}", ] if (!$container_mount_data_folder) { podman::volume { $container_volume_name: } $flags = { publish => [ "${container_port}:3000", ], #sysctl => 'net.ipv6.conf.all.disable_ipv6=1', network => 'host', volume => [ "${container_volume_name}:/var/lib/grafana", ], env => $env, } } else { user { $system_user: uid => 472, } file { $container_data_folder: ensure => directory, owner => $system_user, } file { "${container_data_folder}/plugins": ensure => directory, owner => $system_user, require => File[$container_data_folder], } file { $container_logs_folder: ensure => directory, owner => $system_user, } file { $container_config_folder: ensure => directory, owner => $system_user, } $flags = { #network => 'grafana', publish => [ "${container_port}:3000", ], #sysctl => 'net.ipv6.conf.all.disable_ipv6=1', network => 'host', volume => [ "${container_data_folder}:/var/lib/grafana", "${container_config_folder}:/etc/grafana", "${container_logs_folder}:/var/log/grafana", ], env => $env, } file { "${container_config_folder}/grafana.ini": # content => template('grafana/grafana.ini.erb'), content => inifile::create_ini_settings($configuration), } } podman::container { $container_name: image => $container_image_name, flags => $flags, service_flags => { timeout => '180', }, } file { $ldap_config_file: content => to_toml($ldap_config), } }