Add source-controlled Puppet/Hiera contracts for edge2 Divoom-as-DM-device without replacing the live flowercore-divoom systemd deployment. Add Divoom TV Pi HDMI systemd/Puppet deployment artifacts, LF shell-script guardrails, and focused lint coverage for the additive non-K8s deploy shape. Co-Authored-By: Codex <codex@openai.com>
150 lines
5.0 KiB
Puppet
150 lines
5.0 KiB
Puppet
# 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'],
|
|
],
|
|
}
|
|
}
|
|
}
|