From 84495b34a70352be52b429fbafe97429f7653c41 Mon Sep 17 00:00:00 2001 From: Joshua Hoblitt Date: Mon, 20 Nov 2023 16:04:32 -0700 Subject: [PATCH 1/5] add pi::cmdline & pi::cmdline::parameter --- .fixtures.yml | 3 ++- examples/cmdline.pp | 1 + examples/cmdline_parameter.pp | 3 +++ files/boot_cmdline.aug | 14 +++++++++++ manifests/cmdline.pp | 8 ++++++ manifests/cmdline/parameter.pp | 30 +++++++++++++++++++++++ manifests/init.pp | 6 ----- spec/acceptance/cmdline/parameter_spec.rb | 18 ++++++++++++++ spec/acceptance/cmdline_spec.rb | 13 ++++++++++ spec/classes/cmdline_spec.rb | 14 +++++++++++ 10 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 examples/cmdline.pp create mode 100644 examples/cmdline_parameter.pp create mode 100644 files/boot_cmdline.aug create mode 100644 manifests/cmdline.pp create mode 100644 manifests/cmdline/parameter.pp delete mode 100644 manifests/init.pp create mode 100644 spec/acceptance/cmdline/parameter_spec.rb create mode 100644 spec/acceptance/cmdline_spec.rb create mode 100644 spec/classes/cmdline_spec.rb diff --git a/.fixtures.yml b/.fixtures.yml index fb755ca..c5c50d9 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -3,4 +3,5 @@ --- fixtures: forge_modules: - stdlib: "camptocamp/augeas" + augeas: camptocamp/augeas + reboot: puppetlabs/reboot diff --git a/examples/cmdline.pp b/examples/cmdline.pp new file mode 100644 index 0000000..968b43e --- /dev/null +++ b/examples/cmdline.pp @@ -0,0 +1 @@ +include pi::cmdline diff --git a/examples/cmdline_parameter.pp b/examples/cmdline_parameter.pp new file mode 100644 index 0000000..d68a52d --- /dev/null +++ b/examples/cmdline_parameter.pp @@ -0,0 +1,3 @@ +pi::cmdline::parameter { '8250.nr_uarts=0': } +pi::cmdline::parameter { 'coherent_pool=1M': } +pi::cmdline::parameter { 'snd_bcm2835.enable_headphones=0': } diff --git a/files/boot_cmdline.aug b/files/boot_cmdline.aug new file mode 100644 index 0000000..9a8b9a9 --- /dev/null +++ b/files/boot_cmdline.aug @@ -0,0 +1,14 @@ +(* /boot/cmdline.txt module for Augeas *) + +module Boot_Cmdline = + autoload xfm + + let word = /[^ \n\t]+/ + let cmdline = [ seq "cmdline" . Util.indent . + [ label "parameter" . store word ] . + [ label "parameter" . Sep.space . store word ]* + . Util.eol ] + + let lns = cmdline + + let xfm = transform lns (incl "/boot/cmdline.txt") diff --git a/manifests/cmdline.pp b/manifests/cmdline.pp new file mode 100644 index 0000000..318bdbb --- /dev/null +++ b/manifests/cmdline.pp @@ -0,0 +1,8 @@ +# +# @summary Manages /boot/cmdline.txt parameters. +# +class pi::cmdline { + augeas::lens { 'boot_cmdline': + lens_content => file("${module_name}/boot_cmdline.aug"), + } +} diff --git a/manifests/cmdline/parameter.pp b/manifests/cmdline/parameter.pp new file mode 100644 index 0000000..f0ebf14 --- /dev/null +++ b/manifests/cmdline/parameter.pp @@ -0,0 +1,30 @@ +# @summary +# Manage a single /boot/cmdline.txt kernel parameter +# +# @param parameter +# The kernel parameter to manage. E.g. 8250.nr_uarts=1 +# +# Note that the management of parameters is not very intelligent. +# 8250.nr_uarts=1 and 8250.nr_uarts=2 would be treated as two different +# parameters. +# +define pi::cmdline::parameter ( + Optional[String[1]] $parameter = undef, +) { + include pi::cmdline + + $_real_parameter = $parameter ? { + undef => $name, + default => $parameter, + } + + augeas { $name: + context => '/files/boot/cmdline.txt/1', + lens => 'Boot_Cmdline.lns', + incl => '/boot/cmdline.txt', + changes => [ + "set parameter[. = '${_real_parameter}'] '${_real_parameter}'", + ], + require => Augeas::Lens['boot_cmdline'], + } +} diff --git a/manifests/init.pp b/manifests/init.pp deleted file mode 100644 index 3525ed8..0000000 --- a/manifests/init.pp +++ /dev/null @@ -1,6 +0,0 @@ -# -# @summary Manages Fruit Pi specific features. -# -class pi { - include augeas -} diff --git a/spec/acceptance/cmdline/parameter_spec.rb b/spec/acceptance/cmdline/parameter_spec.rb new file mode 100644 index 0000000..b10642d --- /dev/null +++ b/spec/acceptance/cmdline/parameter_spec.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +require 'spec_helper_acceptance' + +describe 'pi::cmdline::parameter define' do + context 'without any parameters' do + before(:context) do + shell('mkdir -p /boot') + create_remote_file('default', '/boot/cmdline.txt', 'console=serial0,115200 console=tty1 root=PARTUUID=4a435670-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles') + end + + include_examples 'the example', 'cmdline.pp' + + describe file('/boot/cmdline.txt') do + it { is_expected.to be_file } + end + end +end diff --git a/spec/acceptance/cmdline_spec.rb b/spec/acceptance/cmdline_spec.rb new file mode 100644 index 0000000..7b1d4ff --- /dev/null +++ b/spec/acceptance/cmdline_spec.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require 'spec_helper_acceptance' + +describe 'pi::cmdline class' do + context 'without any parameters' do + include_examples 'the example', 'cmdline.pp' + + describe file('/opt/puppetlabs/puppet/share/augeas/lenses/boot_cmdline.aug') do + it { is_expected.to be_file } + end + end +end diff --git a/spec/classes/cmdline_spec.rb b/spec/classes/cmdline_spec.rb new file mode 100644 index 0000000..0d29d2c --- /dev/null +++ b/spec/classes/cmdline_spec.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'pi::cmdline' do + on_supported_os.each do |os, os_facts| + context "on #{os}" do + # camptocamp/augeas 1.9.0 is using legacy facts + let(:facts) { override_facts(os_facts, osfamily: os_facts[:os]['family']) } + + it { is_expected.to compile.with_all_deps } + end + end +end From 35b29afe419fe34cdf00b79b67d08497891a7f06 Mon Sep 17 00:00:00 2001 From: Joshua Hoblitt Date: Tue, 21 Nov 2023 15:07:00 -0700 Subject: [PATCH 2/5] add pi::cmdline::parameters param --- .rubocop.yml | 2 ++ examples/cmdline_parameter.pp | 4 ++++ examples/parameters.pp | 8 ++++++++ manifests/cmdline.pp | 25 ++++++++++++++++++++++- manifests/cmdline/parameter.pp | 4 ++++ metadata.json | 4 ++++ spec/acceptance/cmdline/parameter_spec.rb | 16 +++++++++------ spec/acceptance/cmdline_spec.rb | 21 +++++++++++++++++++ spec/support/acceptance/cmdline.rb | 13 ++++++++++++ 9 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 examples/parameters.pp create mode 100644 spec/support/acceptance/cmdline.rb diff --git a/.rubocop.yml b/.rubocop.yml index 53ac189..1753a88 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -4,3 +4,5 @@ inherit_gem: voxpupuli-test: rubocop.yml +RSpec/BeforeAfterAll: + Enabled: false diff --git a/examples/cmdline_parameter.pp b/examples/cmdline_parameter.pp index d68a52d..b24cfe3 100644 --- a/examples/cmdline_parameter.pp +++ b/examples/cmdline_parameter.pp @@ -1,3 +1,7 @@ +class { 'pi::cmdline': + reboot => false, # reboots are problematic for acceptance testing +} + pi::cmdline::parameter { '8250.nr_uarts=0': } pi::cmdline::parameter { 'coherent_pool=1M': } pi::cmdline::parameter { 'snd_bcm2835.enable_headphones=0': } diff --git a/examples/parameters.pp b/examples/parameters.pp new file mode 100644 index 0000000..6732e93 --- /dev/null +++ b/examples/parameters.pp @@ -0,0 +1,8 @@ +class { 'pi::cmdline': + reboot => false, # reboots are problematic for acceptance testing + parameters => { + 'coherent_pool=1M' => {}, + 'bcm2708_fb.fbwidth=0' => {}, + 'bcm2708_fb.fbswap=1' => {}, + }, +} diff --git a/manifests/cmdline.pp b/manifests/cmdline.pp index 318bdbb..df787c8 100644 --- a/manifests/cmdline.pp +++ b/manifests/cmdline.pp @@ -1,8 +1,31 @@ # # @summary Manages /boot/cmdline.txt parameters. # -class pi::cmdline { +# @param parameters +# A hash of pi::cmdline::parameter resources to create. +# +# @param reboot +# Whether or not to force a reboot when `/boot/cmdline.txt` parameters change. +# +class pi::cmdline ( + Hash[String[1], Hash] $parameters = {}, + Boolean $reboot = true, +) { augeas::lens { 'boot_cmdline': lens_content => file("${module_name}/boot_cmdline.aug"), } + + $parameters.each | String $name, Hash $conf | { + pi::cmdline::parameter { $name: + * => $conf, + } + } + + if ($reboot) { + reboot { '/boot/cmdline.txt': + apply => finished, + message => 'Rebooting to apply /boot/config.txt changes', + when => refreshed, + } + } } diff --git a/manifests/cmdline/parameter.pp b/manifests/cmdline/parameter.pp index f0ebf14..098a463 100644 --- a/manifests/cmdline/parameter.pp +++ b/manifests/cmdline/parameter.pp @@ -27,4 +27,8 @@ ], require => Augeas::Lens['boot_cmdline'], } + + if Class['pi::cmdline']['reboot'] { + Augeas[$name] ~> Reboot['/boot/cmdline.txt'] + } } diff --git a/metadata.json b/metadata.json index 49b8079..a61eebe 100644 --- a/metadata.json +++ b/metadata.json @@ -9,6 +9,10 @@ { "name": "camptocamp/augeas", "version_requirement": ">= 1.0.0 < 2.0.0" + }, + { + "name": "puppetlabs/reboot", + "version_requirement": ">= 5.0.0 < 6.0.0" } ], "operatingsystem_support": [ diff --git a/spec/acceptance/cmdline/parameter_spec.rb b/spec/acceptance/cmdline/parameter_spec.rb index b10642d..9f1cded 100644 --- a/spec/acceptance/cmdline/parameter_spec.rb +++ b/spec/acceptance/cmdline/parameter_spec.rb @@ -4,15 +4,19 @@ describe 'pi::cmdline::parameter define' do context 'without any parameters' do - before(:context) do - shell('mkdir -p /boot') - create_remote_file('default', '/boot/cmdline.txt', 'console=serial0,115200 console=tty1 root=PARTUUID=4a435670-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles') - end - - include_examples 'the example', 'cmdline.pp' + include_context 'cmdline.txt test setup' + include_examples 'the example', 'cmdline_parameter.pp' describe file('/boot/cmdline.txt') do it { is_expected.to be_file } + + %w[ + 8250.nr_uarts=0 + coherent_pool=1M + snd_bcm2835.enable_headphones=0 + ].each do |param| + its(:content) { is_expected.to match param } + end end end end diff --git a/spec/acceptance/cmdline_spec.rb b/spec/acceptance/cmdline_spec.rb index 7b1d4ff..6cd728d 100644 --- a/spec/acceptance/cmdline_spec.rb +++ b/spec/acceptance/cmdline_spec.rb @@ -10,4 +10,25 @@ it { is_expected.to be_file } end end + + context 'with parameters =>' do + include_context 'cmdline.txt test setup' + include_examples 'the example', 'parameters.pp' + + describe file('/opt/puppetlabs/puppet/share/augeas/lenses/boot_cmdline.aug') do + it { is_expected.to be_file } + end + + describe file('/boot/cmdline.txt') do + it { is_expected.to be_file } + + %w[ + coherent_pool=1M + bcm2708_fb.fbwidth=0 + bcm2708_fb.fbswap=1 + ].each do |param| + its(:content) { is_expected.to match param } + end + end + end end diff --git a/spec/support/acceptance/cmdline.rb b/spec/support/acceptance/cmdline.rb new file mode 100644 index 0000000..4fae8fd --- /dev/null +++ b/spec/support/acceptance/cmdline.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +shared_context 'cmdline.txt test setup' do + before(:context) do + shell('mkdir -p /boot') + + create_remote_file('default', '/boot/cmdline.txt', 'console=serial0,115200 console=tty1 root=PARTUUID=4a435670-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles') + end + + after(:context) do + shell('rm -rf /boot/cmdline.txt') + end +end From 49d5db24811e00c78b10a5fa12f4a39db0456d98 Mon Sep 17 00:00:00 2001 From: Joshua Hoblitt Date: Tue, 21 Nov 2023 15:44:55 -0700 Subject: [PATCH 3/5] add pi::config & pi::config::fragment --- .fixtures.yml | 2 ++ examples/config.pp | 1 + examples/config_fragment.pp | 14 ++++++++ examples/fragments.pp | 20 +++++++++++ manifests/config.pp | 33 +++++++++++++++++++ manifests/config/fragment.pp | 30 +++++++++++++++++ metadata.json | 4 +++ spec/acceptance/config/fragment_spec.rb | 22 +++++++++++++ spec/acceptance/config_spec.rb | 29 ++++++++++++++++ spec/classes/config_spec.rb | 44 +++++++++++++++++++++++++ spec/defines/config/fragment_spec.rb | 41 +++++++++++++++++++++++ spec/support/acceptance/config.rb | 11 +++++++ 12 files changed, 251 insertions(+) create mode 100644 examples/config.pp create mode 100644 examples/config_fragment.pp create mode 100644 examples/fragments.pp create mode 100644 manifests/config.pp create mode 100644 manifests/config/fragment.pp create mode 100644 spec/acceptance/config/fragment_spec.rb create mode 100644 spec/acceptance/config_spec.rb create mode 100644 spec/classes/config_spec.rb create mode 100644 spec/defines/config/fragment_spec.rb create mode 100644 spec/support/acceptance/config.rb diff --git a/.fixtures.yml b/.fixtures.yml index c5c50d9..7262377 100644 --- a/.fixtures.yml +++ b/.fixtures.yml @@ -3,5 +3,7 @@ --- fixtures: forge_modules: + stdlib: puppetlabs/stdlib # dep of puppetlabs/concat augeas: camptocamp/augeas reboot: puppetlabs/reboot + concat: puppetlabs/concat diff --git a/examples/config.pp b/examples/config.pp new file mode 100644 index 0000000..2cbcee6 --- /dev/null +++ b/examples/config.pp @@ -0,0 +1 @@ +include pi::config diff --git a/examples/config_fragment.pp b/examples/config_fragment.pp new file mode 100644 index 0000000..5882865 --- /dev/null +++ b/examples/config_fragment.pp @@ -0,0 +1,14 @@ +class { 'pi::config': + reboot => false, # reboots are problematic for acceptance testing +} + +pi::config::fragment { 'disable_overscan=1': } +pi::config::fragment { 'dtparam=audio=on': + order => 1, +} +pi::config::fragment { 'hdmi_mode=1': + order => 99, +} +pi::config::fragment { 'foo': + content => "hdmi_safe=1\n", +} diff --git a/examples/fragments.pp b/examples/fragments.pp new file mode 100644 index 0000000..0184009 --- /dev/null +++ b/examples/fragments.pp @@ -0,0 +1,20 @@ +class { 'pi::config': + reboot => false, # reboots are problematic for acceptance testing + fragments => { + 'dtoverlay=pps-gpio,gpiopin=4' => { + 'order' => 99, + }, + 'dtparam=i2c_arm=on' => { + 'order' => 1, + }, + 'dtparam=spi=on' => {}, + 'serial port' => { + # lint:ignore:strict_indent + 'content' => @("CONTENT"), + enable_uart=1 + init_uart_baud=9600 + | CONTENT + # lint:endignore + }, + }, +} diff --git a/manifests/config.pp b/manifests/config.pp new file mode 100644 index 0000000..3fe94fb --- /dev/null +++ b/manifests/config.pp @@ -0,0 +1,33 @@ +# @summary +# Manages `/boot/config.txt` +# +# @param fragments +# A hash of profile::pi::config::fragments to be concatenated into +# `/boot/config.txt`. +# +# @param reboot +# Whether or not to force a reboot when `/boot/config.txt` changes. +# +class pi::config ( + Hash[String[1], Hash] $fragments = {}, + Boolean $reboot = true, +) { + concat { '/boot/config.txt': + ensure => present, + mode => '0755', # this is the default, +x seems odd + } + + $fragments.each | String $name, Hash $conf | { + pi::config::fragment { $name: + * => $conf, + } + } + + if ($reboot) { + reboot { '/boot/config.txt': + apply => finished, + message => 'Rebooting to apply /boot/config.txt changes', + when => refreshed, + } + } +} diff --git a/manifests/config/fragment.pp b/manifests/config/fragment.pp new file mode 100644 index 0000000..f85ca82 --- /dev/null +++ b/manifests/config/fragment.pp @@ -0,0 +1,30 @@ +# @summary +# Create a /boot/config.txt fragment +# +# @param content +# /boot/config.txt configuration fragment +# +# @param order +# Order of the fragment within /boot/config.txt +# +define pi::config::fragment ( + Optional[String[1]] $content = undef, + Integer[1] $order = 50, +) { + include pi::config + + $_real_content = $content ? { + undef => "${name}\n", + default => $content, + } + + concat::fragment { $name: + target => '/boot/config.txt', + content => $_real_content, + order => $order, + } + + if Class['pi::config']['reboot'] { + Concat::Fragment[$name] ~> Reboot['/boot/config.txt'] + } +} diff --git a/metadata.json b/metadata.json index a61eebe..9e748c0 100644 --- a/metadata.json +++ b/metadata.json @@ -13,6 +13,10 @@ { "name": "puppetlabs/reboot", "version_requirement": ">= 5.0.0 < 6.0.0" + }, + { + "name": "puppetlabs/concat", + "version_requirement": ">= 9.0.0 < 10.0.0" } ], "operatingsystem_support": [ diff --git a/spec/acceptance/config/fragment_spec.rb b/spec/acceptance/config/fragment_spec.rb new file mode 100644 index 0000000..1bb95f5 --- /dev/null +++ b/spec/acceptance/config/fragment_spec.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'spec_helper_acceptance' + +describe 'pi::config::fragment define' do + let(:config_txt) do + <<~CONFIG + dtparam=audio=on + disable_overscan=1 + hdmi_safe=1 + hdmi_mode=1 + CONFIG + end + + include_context 'config.txt test setup' + include_examples 'the example', 'config_fragment.pp' + + describe file('/boot/config.txt') do + it { is_expected.to be_file } + its(:content) { is_expected.to match config_txt } + end +end diff --git a/spec/acceptance/config_spec.rb b/spec/acceptance/config_spec.rb new file mode 100644 index 0000000..9b856aa --- /dev/null +++ b/spec/acceptance/config_spec.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require 'spec_helper_acceptance' + +describe 'pi::config class' do + context 'without any parameters' do + include_examples 'the example', 'config.pp' + end + + context 'with parameters =>' do + let(:config_txt) do + <<~CONFIG + dtparam=i2c_arm=on + dtparam=spi=on + enable_uart=1 + init_uart_baud=9600 + dtoverlay=pps-gpio,gpiopin=4 + CONFIG + end + + include_context 'config.txt test setup' + include_examples 'the example', 'fragments.pp' + + describe file('/boot/config.txt') do + it { is_expected.to be_file } + its(:content) { is_expected.to match config_txt } + end + end +end diff --git a/spec/classes/config_spec.rb b/spec/classes/config_spec.rb new file mode 100644 index 0000000..d05a265 --- /dev/null +++ b/spec/classes/config_spec.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'pi::config' do + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) { os_facts } + + it { is_expected.to compile.with_all_deps } + + it { is_expected.to contain_concat('/boot/config.txt').with_mode('0755') } + it { is_expected.to contain_reboot('/boot/config.txt') } + + context 'with fragments param' do + let(:params) do + { + fragments: { + 'foo' => { + 'content' => 'foo=bar', + }, + 'baz' => { + 'content' => 'baz=quix', + }, + }, + } + end + + it { is_expected.to contain_concat__fragment('foo').with_content('foo=bar') } + it { is_expected.to contain_concat__fragment('baz').with_content('baz=quix') } + end + + context 'with reboot => false' do + let(:params) do + { + reboot: false, + } + end + + it { is_expected.not_to contain_reboot('/boot/config.txt') } + end + end + end +end diff --git a/spec/defines/config/fragment_spec.rb b/spec/defines/config/fragment_spec.rb new file mode 100644 index 0000000..689083d --- /dev/null +++ b/spec/defines/config/fragment_spec.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe 'pi::config::fragment' do + on_supported_os.each do |os, os_facts| + context "on #{os}" do + let(:facts) { os_facts } + let(:title) { 'foo' } + let(:params) { { 'content' => 'foo=bar' } } + + it { is_expected.to compile.with_all_deps } + + it do + is_expected.to contain_concat__fragment('foo').with( + target: '/boot/config.txt', + content: 'foo=bar', + order: 50 + ).that_notifies('Reboot[/boot/config.txt]') + end + + context 'with reboot => false' do + let(:pre_condition) do + <<-PP + class { 'pi::config': + reboot => false, + } + PP + end + + it do + is_expected.to contain_concat__fragment('foo').with( + target: '/boot/config.txt', + content: 'foo=bar', + order: 50 + ) + end + end + end + end +end diff --git a/spec/support/acceptance/config.rb b/spec/support/acceptance/config.rb new file mode 100644 index 0000000..cad4a55 --- /dev/null +++ b/spec/support/acceptance/config.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +shared_context 'config.txt test setup' do + before(:context) do + shell('mkdir -p /boot') + end + + after(:context) do + shell('rm -rf /boot/config.txt') + end +end From 49eb915a834cccdf193b2622d0fdc58fb07056c4 Mon Sep 17 00:00:00 2001 From: Joshua Hoblitt Date: Tue, 21 Nov 2023 16:12:23 -0700 Subject: [PATCH 4/5] add examples to README.md --- .mdl_style.rb | 3 +- README.md | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/.mdl_style.rb b/.mdl_style.rb index 55e6b1e..d524fcb 100644 --- a/.mdl_style.rb +++ b/.mdl_style.rb @@ -4,5 +4,6 @@ rule "MD013", :code_blocks => false exclude_rule "MD003" exclude_rule "MD013" -exclude_rule "MD036" +exclude_rule "MD024" exclude_rule "MD034" +exclude_rule "MD036" diff --git a/README.md b/README.md index fb714a2..c1b0dd6 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,96 @@ Manages features specific to [raspberrypi](https://www.raspberrypi.org/) and related fruit flavored hardware. + +## /boot/cmdline.txt + +### puppet + +```puppet +class { 'pi::cmdline': + reboot => false, # reboots are problematic for acceptance testing + parameters => { + 'coherent_pool=1M' => {}, + 'bcm2708_fb.fbwidth=0' => {}, + 'bcm2708_fb.fbswap=1' => {}, + }, +} + +pi::cmdline::parameter { '8250.nr_uarts=0': } +pi::cmdline::parameter { 'coherent_pool=1M': } +pi::cmdline::parameter { 'snd_bcm2835.enable_headphones=0': } +``` + +### hiera + +```yaml +pi::cmdline::reboot: false +pi::cmdline::parameters: + coherent_pool=1M: {} + bcm2708_fb.fbwidth=0: {} + bcm2708_fb.fbswap=1: {} + 8250.nr_uarts=0: {} + coherent_pool=1M: {} + snd_bcm2835.enable_headphones=0: {} +``` + +## /boot/config.txt + +### puppet + +```puppet +class { 'pi::config': + reboot => false, # reboots are problematic for acceptance testing + fragments => { + 'dtoverlay=pps-gpio,gpiopin=4' => { + 'order' => 99, + }, + 'dtparam=i2c_arm=on' => { + 'order' => 1, + }, + 'dtparam=spi=on' => {}, + 'serial port' => { + # lint:ignore:strict_indent + 'content' => @("CONTENT"), + enable_uart=1 + init_uart_baud=9600 + | CONTENT + # lint:endignore + }, + }, +} + +pi::config::fragment { 'disable_overscan=1': } +pi::config::fragment { 'dtparam=audio=on': + order => 1, +} +pi::config::fragment { 'hdmi_mode=1': + order => 99, +} +pi::config::fragment { 'foo': + content => "hdmi_safe=1\n", +} +``` + +### hiera + +```yaml +pi::config::reboot: false +pi::config::fragments: + dtoverlay=pps-gpio,gpiopin=4': + order: 99 + dtparam=i2c_arm=on: + order: 1 + dtparam=spi=on: {} + 'serial port': + content: | + enable_uart=1 + init_uart_baud=9600 + disable_overscan=1: {} + dtparam=audio=on: + order: 1 + hdmi_mode=1: + order: 99 + foo: + content: "hdmi_safe=1\n" +``` From 2d1ec4bde7aeb6aa839255d305b871513aa81231 Mon Sep 17 00:00:00 2001 From: Joshua Hoblitt Date: Tue, 21 Nov 2023 16:17:34 -0700 Subject: [PATCH 5/5] add tags to metadata.json --- metadata.json | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/metadata.json b/metadata.json index 9e748c0..037c550 100644 --- a/metadata.json +++ b/metadata.json @@ -39,5 +39,18 @@ "name": "puppet", "version_requirement": ">= 7.0.0 < 9.0.0" } + ], + "tags": [ + "pi", + "rpi", + "raspberry", + "raspberry pi", + "banana pi", + "orange pi", + "/boot/config.txt", + "config.txt", + "/boot/cmdline.txt", + "cmdline.txt", + "raspbian" ] }