Baseline install framework

This commit is contained in:
2022-09-08 20:31:57 -04:00
parent de9a0e3f72
commit 93a65223fc
7 changed files with 172 additions and 110 deletions

110
README.md
View File

@@ -1,117 +1,13 @@
# klipper # klipper
Welcome to your new module. A short overview of the generated parts can be found This module installs and does a baseline configuration of [Klipper](https://www.klipper3d.org/)
in the [PDK documentation][1].
The README template below provides a starting point with details about what
information to include in your README.
## Table of Contents
1. [Description](#description)
1. [Setup - The basics of getting started with klipper](#setup)
* [What klipper affects](#what-klipper-affects)
* [Setup requirements](#setup-requirements)
* [Beginning with klipper](#beginning-with-klipper)
1. [Usage - Configuration options and additional functionality](#usage)
1. [Limitations - OS compatibility, etc.](#limitations)
1. [Development - Guide for contributing to the module](#development)
## Description
Briefly tell users why they might want to use your module. Explain what your
module does and what kind of problems users can solve with it.
This should be a fairly short description helps the user decide if your module
is what they want.
## Setup
### What klipper affects **OPTIONAL**
If it's obvious what your module touches, you can skip this section. For
example, folks can probably figure out that your mysql_instance module affects
their MySQL instances.
If there's more that they should know about, though, this is the place to
mention:
* Files, packages, services, or operations that the module will alter, impact,
or execute.
* Dependencies that your module automatically installs.
* Warnings or other important notices.
### Setup Requirements **OPTIONAL**
If your module requires anything extra before setting up (pluginsync enabled,
another module, etc.), mention it here.
If your most recent release breaks compatibility or requires particular steps
for upgrading, you might want to include an additional "Upgrading" section here.
### Beginning with klipper
The very basic steps needed for a user to get the module up and running. This
can include setup steps, if necessary, or it can be an example of the most basic
use of the module.
## Usage ## Usage
Include usage examples for common use cases in the **Usage** section. Show your For the most basic usage, just include the base klipper class. This will install
users how to use your module to solve problems, and be sure to include code and configure klipper using the standard defaults for a Raspbian system.
examples. Include three to five examples of the most important or common tasks a
user can accomplish with your module. Show users how to accomplish more complex
tasks that involve different types, classes, and functions working in tandem.
## Reference
This section is deprecated. Instead, add reference information to your code as
Puppet Strings comments, and then use Strings to generate a REFERENCE.md in your
module. For details on how to add code comments and generate documentation with
Strings, see the [Puppet Strings documentation][2] and [style guide][3].
If you aren't ready to use Strings yet, manually create a REFERENCE.md in the
root of your module directory and list out each of your module's classes,
defined types, facts, functions, Puppet tasks, task plans, and resource types
and providers, along with the parameters for each.
For each element (class, defined type, function, and so on), list:
* The data type, if applicable.
* A description of what the element does.
* Valid values, if the data type doesn't make it obvious.
* Default value, if any.
For example:
```
### `pet::cat`
#### Parameters
##### `meow`
Enables vocalization in your cat. Valid options: 'string'.
Default: 'medium-loud'.
```
## Limitations ## Limitations
In the Limitations section, list any incompatibilities, known issues, or other In the Limitations section, list any incompatibilities, known issues, or other
warnings. warnings.
## Development
In the Development section, tell other users the ground rules for contributing
to your project and how they should submit their work.
## Release Notes/Contributors/Etc. **Optional**
If you aren't using changelog, put your release notes here (though you should
consider using changelog). You can also add any additional sections you feel are
necessary or important to include here. Please use the `##` header.
[1]: https://puppet.com/docs/pdk/latest/pdk_generating_modules.html
[2]: https://puppet.com/docs/puppet/latest/puppet_strings.html
[3]: https://puppet.com/docs/puppet/latest/puppet_strings_style.html

80
REFERENCE.md Normal file
View File

@@ -0,0 +1,80 @@
# Reference
<!-- DO NOT EDIT: This document was generated by Puppet Strings -->
## Table of Contents
### Classes
#### Public Classes
* [`klipper`](#klipper): Installs and manages klipper
#### Private Classes
* `klipper::install`: Perform baseline install of Klipper
## Classes
### <a name="klipper"></a>`klipper`
Installs and manages klipper
#### Examples
#####
```puppet
include klipper
```
#### Parameters
The following parameters are available in the `klipper` class:
* [`src_path`](#src_path)
* [`version`](#version)
* [`user`](#user)
* [`python_dir`](#python_dir)
* [`config_dir`](#config_dir)
##### <a name="src_path"></a>`src_path`
Data type: `Stdlib::Absolutepath`
The filesystem path to clone the klipper source code to
Default value: `"/home/${klipper::user}/klipper"`
##### <a name="version"></a>`version`
Data type: `String`
The version of klipper to install
Default value: `'present'`
##### <a name="user"></a>`user`
Data type: `String`
The account to run klipper under
Default value: `'pi'`
##### <a name="python_dir"></a>`python_dir`
Data type: `Stdlib::Absolutepath`
The path to place the klipper python virtualenv
Default value: `"/home/${klipper::user}/klippy-env"`
##### <a name="config_dir"></a>`config_dir`
Data type: `Stdlib::Absolutepath`
The path to place klipper config files
Default value: `"/home/${klipper::user}/klipper_config"`

View File

@@ -4,5 +4,19 @@
# #
# @example # @example
# include klipper # include klipper
class klipper { #
# @param src_path The filesystem path to clone the klipper source code to
# @param version The version of klipper to install
# @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
#
class klipper (
String $version = 'present',
String $user = 'pi',
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",
) {
contain klipper::install
} }

50
manifests/install.pp Normal file
View File

@@ -0,0 +1,50 @@
# @summary Perform baseline install of Klipper
#
# @api private
#
class klipper::install {
$_packages = [
'git',
'virtualenv',
'python-dev',
'libffi-dev',
'build-essential',
'libncurses-dev',
'libusb-dev',
'avrdude',
'gcc-avr',
'binutils-avr',
'avr-libc',
'stb32flash',
'dfu-util',
'libnweb-arm-none-eabi',
'gcc-arm-none-eabi',
'binutils-arm-none-eabi',
'libusb-1.0',
]
ensure_packages($_packages)
Exec {
path => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
}
vcsrepo { $klipper::src_path:
ensure => $klipper::version,
provider => 'git',
source => 'https://github.com/Klipper3d/klipper.git',
user => $klipper::user,
require => Package['git'],
}
-> exec { 'Initialize Klipper virtualenv':
command => "virtualenv -p python2 ${klipper::python_dir}",
creates => $klipper::python_dir,
user => $klipper::user,
}
~> exec { 'Install Klipper python modules':
command => "${klipper::python_dir}/bin/pip install -r ${klipper::python_dir}/scripts/klippy-requirements.txt",
refreshonly => true,
subscribe => Vcsrepo[$klipper::src_path],
user => $klipper::user,
}
}

View File

@@ -6,7 +6,14 @@
"license": "Apache-2.0", "license": "Apache-2.0",
"source": "", "source": "",
"dependencies": [ "dependencies": [
{
"name": "puppetlabs-stdlib",
"version_requirement": ">= 7.0.0 < 9.0.0"
},
{
"name": "puppetlabs-vcsrepo",
"version_requirement": ">= 5.0.0 < 6.0.0"
}
], ],
"operatingsystem_support": [ "operatingsystem_support": [
{ {

2
pdk.yaml Normal file
View File

@@ -0,0 +1,2 @@
---
ignore: []

View File

@@ -0,0 +1,13 @@
# frozen_string_literal: true
require 'spec_helper'
describe 'klipper::install' 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