From bccd3e8a4c57a8d5ba55fdce5caf0cb7a127c709 Mon Sep 17 00:00:00 2001 From: Ryan DeShone Date: Thu, 8 Sep 2022 20:54:55 -0400 Subject: [PATCH] Configure and start service --- REFERENCE.md | 11 +++++++++++ manifests/configure.pp | 16 ++++++++++++++++ manifests/init.pp | 8 ++++++++ manifests/install.pp | 6 ++++++ manifests/service.pp | 11 +++++++++++ metadata.json | 4 ++++ spec/classes/configure_spec.rb | 13 +++++++++++++ spec/classes/service_spec.rb | 13 +++++++++++++ templates/klipper.service.erb | 23 +++++++++++++++++++++++ 9 files changed, 105 insertions(+) create mode 100644 manifests/configure.pp create mode 100644 manifests/service.pp create mode 100644 spec/classes/configure_spec.rb create mode 100644 spec/classes/service_spec.rb create mode 100644 templates/klipper.service.erb diff --git a/REFERENCE.md b/REFERENCE.md index d6ff418..df7449f 100644 --- a/REFERENCE.md +++ b/REFERENCE.md @@ -12,7 +12,9 @@ #### Private Classes +* `klipper::configure`: Handles configuration of klipper * `klipper::install`: Perform baseline install of Klipper +* `klipper::service`: Manage the klipper service ## Classes @@ -37,6 +39,7 @@ The following parameters are available in the `klipper` class: * [`user`](#user) * [`python_dir`](#python_dir) * [`config_dir`](#config_dir) +* [`log_path`](#log_path) ##### `src_path` @@ -78,3 +81,11 @@ The path to place klipper config files Default value: `"/home/${klipper::user}/klipper_config"` +##### `log_path` + +Data type: `Stdlib::Absolutepath` + +Where to store the klipper logs + +Default value: `"/home/${klipper::user}/klipper_logs"` + diff --git a/manifests/configure.pp b/manifests/configure.pp new file mode 100644 index 0000000..b783537 --- /dev/null +++ b/manifests/configure.pp @@ -0,0 +1,16 @@ +# @summary Handles configuration of klipper +# +# @api private +# +class klipper::configure { + file { $klipper::config_dir: + ensure => directory, + owner => $klipper::user, + mode => '0755', + } + file { "${klipper::config_dir}/printer.cfg": + ensure => file, + owner => $klipper::user, + mode => '0644', + } +} diff --git a/manifests/init.pp b/manifests/init.pp index 307c70f..0638797 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -10,6 +10,7 @@ # @param user The account to run klipper under # @param python_dir The path to place the klipper python virtualenv # @param config_dir The path to place klipper config files +# @param log_path Where to store the klipper logs # class klipper ( String $version = 'present', @@ -17,6 +18,13 @@ class klipper ( Stdlib::Absolutepath $src_path = "/home/${klipper::user}/klipper", Stdlib::Absolutepath $python_dir = "/home/${klipper::user}/klippy-env", Stdlib::Absolutepath $config_dir = "/home/${klipper::user}/klipper_config", + Stdlib::Absolutepath $log_path = "/home/${klipper::user}/klipper_logs", ) { contain klipper::install + contain klipper::configure + contain klipper::service + + Class['klipper::install'] + -> Class['klipper::configure'] + -> Class['klipper::service'] } diff --git a/manifests/install.pp b/manifests/install.pp index 0c57786..1d3c47b 100644 --- a/manifests/install.pp +++ b/manifests/install.pp @@ -47,4 +47,10 @@ class klipper::install { subscribe => Vcsrepo[$klipper::src_path], user => $klipper::user, } + + file { $klipper::log_path: + ensure => directory, + owner => $klipper::user, + mode => '0755', + } } diff --git a/manifests/service.pp b/manifests/service.pp new file mode 100644 index 0000000..a38352e --- /dev/null +++ b/manifests/service.pp @@ -0,0 +1,11 @@ +# @summary Manage the klipper service +# +# @api private +# +class klipper::service { + systemd::unit_file { 'klipper.service': + content => template('klipper/klipper.service.erb'), + enable => true, + active => true, + } +} diff --git a/metadata.json b/metadata.json index 78785f7..f053943 100644 --- a/metadata.json +++ b/metadata.json @@ -13,6 +13,10 @@ { "name": "puppetlabs-vcsrepo", "version_requirement": ">= 5.0.0 < 6.0.0" + }, + { + "name": "puppet-systemd", + "version_requirement": ">= 3.1.0 < 4.0.0" } ], "operatingsystem_support": [ diff --git a/spec/classes/configure_spec.rb b/spec/classes/configure_spec.rb new file mode 100644 index 0000000..b1b43b1 --- /dev/null +++ b/spec/classes/configure_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'klipper::configure' do + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) { os_facts } + + it { is_expected.to compile } + end + end +end diff --git a/spec/classes/service_spec.rb b/spec/classes/service_spec.rb new file mode 100644 index 0000000..2b736c7 --- /dev/null +++ b/spec/classes/service_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'klipper::service' do + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) { os_facts } + + it { is_expected.to compile } + end + end +end diff --git a/templates/klipper.service.erb b/templates/klipper.service.erb new file mode 100644 index 0000000..037f9dc --- /dev/null +++ b/templates/klipper.service.erb @@ -0,0 +1,23 @@ +# MANAGED BY PUPPET +# Systemd Klipper Service + +[Unit] +Description=Systemd Klipper Service +Documentation=https://www.klipper3d.org/ +After=network.target +Wants=udev.target + +[Install] +WantedBy=multi-user.target + +[Service] +Environment=KLIPPER_CONFIG=<%= scope['klipper::config_dir'] %>/printer.cfg +Environment=KLIPPER_LOG=<%= scope['klipper::log_path'] %>/klippy.log +Environment=KLIPPER_SOCKET=/tmp/klippy_uds +Environment=KLIPPER_PRINTER=/tmp/printer +Type=simple +User=<%= scope['klipper::user'] %> +RemainAfterExit=yes +ExecStart=<%= scope['klipper::python_dir'] %>/bin/python <%= scope['klipper::src_path'] %>/klippy/klippy.py ${KLIPPER_CONFIG} -I ${KLIPPER_PRINTER} -l ${KLIPPER_LOG} -a ${KLIPPER_SOCKET} +Restart=always +RestartSec=10 \ No newline at end of file