summaryrefslogtreecommitdiffstats
path: root/modules/base
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2018-11-13 01:36:48 -0500
committerJesse Luehrs <doy@tozt.net>2018-11-13 01:36:48 -0500
commit4152be7e1de0797a2a8d4116a2165a2ba7bbecd4 (patch)
tree49c8b2b590c447e21ae71e48eaa4da8a1cfb15e8 /modules/base
parentc3659899860d8519deec2c1f8993e4262e5f7f6c (diff)
downloadpuppet-tozt-4152be7e1de0797a2a8d4116a2165a2ba7bbecd4.tar.gz
puppet-tozt-4152be7e1de0797a2a8d4116a2165a2ba7bbecd4.zip
factor out configuration common to all of my machines
Diffstat (limited to 'modules/base')
-rw-r--r--modules/base/files/hosts6
-rw-r--r--modules/base/files/puppet-tozt6
-rw-r--r--modules/base/manifests/bootstrap.pp14
-rw-r--r--modules/base/manifests/init.pp14
-rw-r--r--modules/base/manifests/makepkg.pp7
-rw-r--r--modules/base/manifests/operatingsystem.pp20
-rw-r--r--modules/base/manifests/services.pp5
-rw-r--r--modules/base/manifests/tools.pp20
-rw-r--r--modules/base/manifests/user.pp136
-rw-r--r--modules/base/manifests/users.pp13
10 files changed, 241 insertions, 0 deletions
diff --git a/modules/base/files/hosts b/modules/base/files/hosts
new file mode 100644
index 0000000..40a877c
--- /dev/null
+++ b/modules/base/files/hosts
@@ -0,0 +1,6 @@
+127.0.0.1 localhost
+127.0.1.1 tozt.localdomain tozt
+
+10.19.49.101 hush.algo
+10.19.49.103 phone.algo
+10.19.49.104 tozt.algo
diff --git a/modules/base/files/puppet-tozt b/modules/base/files/puppet-tozt
new file mode 100644
index 0000000..6d06998
--- /dev/null
+++ b/modules/base/files/puppet-tozt
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+set -eu
+set -o pipefail
+
+(cd /usr/local/share/puppet-tozt && sudo git pull)
+sudo puppet apply --show_diff --modulepath=/usr/local/share/puppet-tozt/modules /usr/local/share/puppet-tozt/manifests
diff --git a/modules/base/manifests/bootstrap.pp b/modules/base/manifests/bootstrap.pp
new file mode 100644
index 0000000..c0593a3
--- /dev/null
+++ b/modules/base/manifests/bootstrap.pp
@@ -0,0 +1,14 @@
+class bootstrap {
+ package {
+ [
+ "puppet",
+ "rsync",
+ ]:
+ ensure => installed,
+ }
+
+ file { '/usr/local/bin/puppet-tozt':
+ source => 'puppet:///modules/base/puppet-tozt',
+ mode => '0755';
+ }
+}
diff --git a/modules/base/manifests/init.pp b/modules/base/manifests/init.pp
new file mode 100644
index 0000000..c9e477d
--- /dev/null
+++ b/modules/base/manifests/init.pp
@@ -0,0 +1,14 @@
+class base($default_user, $persistent_data) {
+ contain base::bootstrap
+ contain base::operatingsystem
+ contain base::services
+ contain base::tools
+
+ class { 'base::users':
+ default_user => $default_user,
+ persistent_data => $persistent_data;
+ }
+ class { 'base::makepkg':
+ default_user => $default_user;
+ }
+}
diff --git a/modules/base/manifests/makepkg.pp b/modules/base/manifests/makepkg.pp
new file mode 100644
index 0000000..0d725a2
--- /dev/null
+++ b/modules/base/manifests/makepkg.pp
@@ -0,0 +1,7 @@
+class base::makepkg($default_user) {
+ Package::Makepkg {
+ build_user => $default_user,
+ }
+
+ Base::User[$default_user] -> Package::Makepkg<| build_user == $default_user |>
+}
diff --git a/modules/base/manifests/operatingsystem.pp b/modules/base/manifests/operatingsystem.pp
new file mode 100644
index 0000000..cc18994
--- /dev/null
+++ b/modules/base/manifests/operatingsystem.pp
@@ -0,0 +1,20 @@
+class operatingsystem {
+ file {
+ "/etc/locale.gen":
+ content => "en_US.UTF-8 UTF-8\n",
+ notify => Exec["regen locale data"];
+ "/etc/locale.conf":
+ content => "LANG=en_US.UTF-8\n",
+ require => [
+ File["/etc/locale.gen"],
+ Exec["regen locale data"],
+ ];
+ "/etc/hosts":
+ source => "puppet:///modules/base/hosts";
+ }
+
+ exec { "regen locale data":
+ command => "/usr/bin/locale-gen",
+ refreshonly => true;
+ }
+}
diff --git a/modules/base/manifests/services.pp b/modules/base/manifests/services.pp
new file mode 100644
index 0000000..46e8f38
--- /dev/null
+++ b/modules/base/manifests/services.pp
@@ -0,0 +1,5 @@
+class base::services {
+ include fail2ban
+ include locate
+ include ntp
+}
diff --git a/modules/base/manifests/tools.pp b/modules/base/manifests/tools.pp
new file mode 100644
index 0000000..053ebd2
--- /dev/null
+++ b/modules/base/manifests/tools.pp
@@ -0,0 +1,20 @@
+class base::tools {
+ include mail::sender
+ include yaourt
+
+ package {
+ [
+ "bc",
+ "exa",
+ "fzf",
+ "htop",
+ "lsof",
+ "mutt",
+ "ncdu",
+ "strace",
+ "the_silver_searcher",
+ "tmux",
+ ]:
+ ensure => 'installed';
+ }
+}
diff --git a/modules/base/manifests/user.pp b/modules/base/manifests/user.pp
new file mode 100644
index 0000000..b1bd792
--- /dev/null
+++ b/modules/base/manifests/user.pp
@@ -0,0 +1,136 @@
+define base::user(
+ $pwhash,
+ $user=$name,
+ $group=$user,
+ $home=undef,
+ $extra_groups=[],
+ $homedir_mode='0700',
+ $shell='/usr/bin/zsh',
+ $persistent_data=undef,
+) {
+ $_home = $home ? {
+ undef => $user ? {
+ 'root' => '/root',
+ default => "/home/$user",
+ },
+ default => $home,
+ }
+
+ include tozt::persistent
+
+ group { $group:
+ ensure => present;
+ }
+
+ user { $user:
+ ensure => 'present',
+ gid => $group,
+ groups => $extra_groups,
+ home => $_home,
+ shell => $shell,
+ password => $pwhash,
+ require => Group[$group];
+ }
+
+ file {
+ $_home:
+ ensure => 'directory',
+ owner => $user,
+ group => $group,
+ mode => $homedir_mode,
+ require => [
+ User[$user],
+ Group[$group],
+ ];
+ "${_home}/coding":
+ ensure => 'directory',
+ owner => $user,
+ group => $group,
+ mode => $homedir_mode,
+ require => [
+ User[$user],
+ Group[$group],
+ File[$_home],
+ ];
+ }
+
+ if $persistent_data == undef {
+ file {
+ "${_home}/.cargo":
+ ensure => 'directory',
+ owner => $user,
+ group => $group,
+ mode => $homedir_mode,
+ require => [
+ User[$user],
+ Group[$group],
+ ];
+ "${_home}/.rustup":
+ ensure => 'directory',
+ owner => $user,
+ group => $group,
+ mode => $homedir_mode,
+ require => [
+ User[$user],
+ Group[$group],
+ ];
+ }
+ }
+ else {
+ file {
+ "$persistent_data/cargo/${user}":
+ ensure => 'directory',
+ owner => $user,
+ group => $group,
+ mode => $homedir_mode,
+ require => [
+ User[$user],
+ Group[$group],
+ ];
+ "$persistent_data/rustup/${user}":
+ ensure => 'directory',
+ owner => $user,
+ group => $group,
+ mode => $homedir_mode,
+ require => [
+ User[$user],
+ Group[$group],
+ ];
+ "${_home}/.cargo":
+ ensure => link,
+ target => "$persistent_data/cargo/${user}",
+ owner => $user,
+ group => $group,
+ require => [
+ User[$user],
+ Group[$group],
+ File["${_home}"],
+ ];
+ "${_home}/.rustup":
+ ensure => link,
+ target => "$persistent_data/rustup/${user}",
+ owner => $user,
+ group => $group,
+ require => [
+ User[$user],
+ Group[$group],
+ File["${_home}"],
+ ];
+ }
+ }
+
+ rust::user { $user:
+ }
+ conf::user { $user:
+ }
+
+ if $user != 'root' {
+ sudo::user { $user:
+ }
+ }
+
+ if $shell == '/usr/bin/zsh' {
+ include zsh
+ Class['zsh'] -> User[$user]
+ }
+}
diff --git a/modules/base/manifests/users.pp b/modules/base/manifests/users.pp
new file mode 100644
index 0000000..4725959
--- /dev/null
+++ b/modules/base/manifests/users.pp
@@ -0,0 +1,13 @@
+class base::users($default_user, $persistent_data) {
+ base::user { 'root':
+ pwhash => secret::value('passwd/root'),
+ persistent_data => $persistent_data;
+ }
+
+ base::user { $default_user:
+ pwhash => secret::value("passwd/$default_user"),
+ extra_groups => ['wheel'],
+ homedir_mode => '0701',
+ persistent_data => $persistent_data;
+ }
+}