# Drop into FlowerCore.Puppet site-modules/profile/manifests/pi/service/divoom_tv.pp. # Static files come from profile/pi/fc_divoom_tv/ after this bluejay-infra # bundle is vendored into the Puppet control repo. class profile::pi::service::divoom_tv ( Enum['present', 'absent'] $ensure = 'present', Boolean $service_enabled = false, Enum['running', 'stopped'] $service_ensure = 'stopped', String $service_name = 'flowercore-divoom-tv', String $user = 'fc-divoom-tv', String $group = 'fc-divoom-tv', String $install_dir = '/opt/flowercore/divoom-tv', String $state_dir = '/var/lib/fc-divoom-tv', String $log_dir = '/var/log/fc-divoom-tv', String $presentation_mode = 'PillarboxSquare', String $startup_scene = 'bluejay-clock', Boolean $reduced_motion = false, ) { include profile::workstation::safe_account_exclusion $safe_account = $profile::workstation::safe_account_exclusion::safe_account if $safe_account { notify { 'fc-divoom-tv safe-account exclusion': message => 'SAFE-ACCOUNT-EXCLUSION: Divoom TV Pi profile refused to apply on operator workstation', } } elsif $ensure == 'absent' { service { $service_name: ensure => stopped, enable => false, } file { [ "/etc/systemd/system/${service_name}.service", "/etc/systemd/system/${service_name}-hdmi.service", '/etc/udev/rules.d/99-flowercore-divoom-tv-hdmi.rules', '/usr/local/bin/flowercore-divoom-tv-prelaunch.sh', '/usr/local/bin/flowercore-divoom-tv-launch.sh', '/usr/local/bin/flowercore-divoom-tv-hdmi-respond.sh', '/etc/flowercore/divoom-tv.env', ]: ensure => absent, } } else { case $facts['os']['family'] { 'Debian': {} default: { fail("profile::pi::service::divoom_tv only supports Debian-family OS, got ${facts['os']['family']}") } } package { ['cage', 'libgbm1', 'libdrm2', 'libxkbcommon0', 'fonts-dejavu-core']: ensure => installed, } group { $group: ensure => present, system => true, } user { $user: ensure => present, system => true, gid => $group, home => $state_dir, managehome => false, shell => '/usr/sbin/nologin', require => Group[$group], } file { [$install_dir, $state_dir, $log_dir, '/etc/flowercore']: ensure => directory, owner => $user, group => $group, mode => '0755', } file { '/etc/flowercore/divoom-tv.env': ensure => file, owner => 'root', group => 'root', mode => '0644', content => "FC_DIVOOM_TV_PRESENTATION_MODE=${presentation_mode}\nFC_DIVOOM_TV_START_SCENE=${startup_scene}\nFC_DIVOOM_TV_REDUCED_MOTION=${reduced_motion}\n", require => File['/etc/flowercore'], } $script_map = { '/usr/local/bin/flowercore-divoom-tv-prelaunch.sh' => 'profile/pi/fc_divoom_tv/flowercore-divoom-tv-prelaunch.sh', '/usr/local/bin/flowercore-divoom-tv-launch.sh' => 'profile/pi/fc_divoom_tv/flowercore-divoom-tv-launch.sh', '/usr/local/bin/flowercore-divoom-tv-hdmi-respond.sh' => 'profile/pi/fc_divoom_tv/flowercore-divoom-tv-hdmi-respond.sh', } $script_map.each |$dest, $src| { file { $dest: ensure => file, owner => 'root', group => 'root', mode => '0755', source => "puppet:///modules/${src}", } } $unit_map = { "/etc/systemd/system/${service_name}.service" => 'profile/pi/fc_divoom_tv/flowercore-divoom-tv.service', "/etc/systemd/system/${service_name}-hdmi.service" => 'profile/pi/fc_divoom_tv/flowercore-divoom-tv-hdmi.service', } $unit_map.each |$dest, $src| { file { $dest: ensure => file, owner => 'root', group => 'root', mode => '0644', source => "puppet:///modules/${src}", notify => Exec['fc-divoom-tv-systemd-reload'], } } file { '/etc/udev/rules.d/99-flowercore-divoom-tv-hdmi.rules': ensure => file, owner => 'root', group => 'root', mode => '0644', source => 'puppet:///modules/profile/pi/fc_divoom_tv/99-flowercore-divoom-tv-hdmi.rules', notify => Exec['fc-divoom-tv-udev-reload'], } exec { 'fc-divoom-tv-systemd-reload': command => '/usr/bin/systemctl daemon-reload', refreshonly => true, path => ['/usr/bin', '/bin'], } exec { 'fc-divoom-tv-udev-reload': command => '/usr/bin/udevadm control --reload-rules', refreshonly => true, path => ['/usr/bin', '/bin'], } service { $service_name: ensure => $service_ensure, enable => $service_enabled, require => [ File["/etc/systemd/system/${service_name}.service"], File['/etc/flowercore/divoom-tv.env'], File['/usr/local/bin/flowercore-divoom-tv-prelaunch.sh'], File['/usr/local/bin/flowercore-divoom-tv-launch.sh'], Exec['fc-divoom-tv-systemd-reload'], ], } } }