# Class Grafana class grafana ( $admin_password, $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/ ) { $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_USER=${admin_password}", ] podman::network {'grafana': driver => 'bridge', internal => true, } if (!$container_mount_data_folder) { podman::volume{$container_volume_name:} $flags = { network => 'grafana', publish => [ "${container_port}:3000", ], #sysctl => 'net.ipv6.conf.all.disable_ipv6=1', volume => [ "${container_volume_name}:/var/lib/grafana", ], env => $env, } } else { user {'grafana': uid => 472, } file {$container_data_folder: ensure => directory, owner => 'grafana', } file {"${container_data_folder}/plugins": ensure => directory, owner => 'grafana', require => File[$container_data_folder], } file {$container_logs_folder: ensure => directory, owner => 'grafana', } file {$container_config_folder: ensure => directory, owner => 'grafana', } $flags = { network => 'grafana', publish => [ "${container_port}:3000", ], #sysctl => 'net.ipv6.conf.all.disable_ipv6=1', 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": ensure => present, content => template('grafana/grafana.ini.erb'), } } podman::container { $container_name: image => $container_image_name, flags => $flags, service_flags => { timeout => '180' }, } }