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