From 6b0c4d384d172c6cd867bc2e8e3f90e461bfa020 Mon Sep 17 00:00:00 2001
From: Vladimir Still <git@vstill.eu>
Date: Fri, 4 Feb 2022 14:08:15 +0100
Subject: [PATCH] ansible: Add rudimentary samba role

---
 ansible/roles/samba/defaults/main.yml         |  2 ++
 .../roles/samba/filter_plugins/formatters.py  | 26 ++++++++++++++
 ansible/roles/samba/tasks/main.yml            | 34 +++++++++++++++++++
 3 files changed, 62 insertions(+)
 create mode 100644 ansible/roles/samba/defaults/main.yml
 create mode 100644 ansible/roles/samba/filter_plugins/formatters.py
 create mode 100644 ansible/roles/samba/tasks/main.yml

diff --git a/ansible/roles/samba/defaults/main.yml b/ansible/roles/samba/defaults/main.yml
new file mode 100644
index 0000000..8d87fcc
--- /dev/null
+++ b/ansible/roles/samba/defaults/main.yml
@@ -0,0 +1,2 @@
+homes: false
+printers: false
diff --git a/ansible/roles/samba/filter_plugins/formatters.py b/ansible/roles/samba/filter_plugins/formatters.py
new file mode 100644
index 0000000..54a8294
--- /dev/null
+++ b/ansible/roles/samba/filter_plugins/formatters.py
@@ -0,0 +1,26 @@
+import jinja2.runtime
+
+def yesno(value, default="no") -> str:
+    if isinstance(value, jinja2.runtime.Undefined) or value is None:
+        return default
+    if value is True:
+        return "yes"
+    if value is False:
+        return "no"
+    raise ValueError(f"Value {value} not valid boolean")
+
+
+def smb_list(value) -> str:
+    if isinstance(value, list):
+        assert all(map(lambda x: isinstance(x, str), value)), "values must be strings"
+        return ", ".join(value)
+    if isinstance(value, str):
+        return value
+    if isinstance(value, jinja2.runtime.Undefined) or value is None:
+        return ""
+    raise ValueError(f"Value {value} is neither list of strings nor a string (or undefined)")
+
+
+class FilterModule(object):
+    def filters(self):
+        return {"yesno": yesno, "smb_list": smb_list}
diff --git a/ansible/roles/samba/tasks/main.yml b/ansible/roles/samba/tasks/main.yml
new file mode 100644
index 0000000..5119683
--- /dev/null
+++ b/ansible/roles/samba/tasks/main.yml
@@ -0,0 +1,34 @@
+- name: Install Samba
+  apt:
+    pkg:
+      - samba
+
+- name: Samba public group
+  group:
+    name: smb
+    system: true
+
+- name: Samba public user
+  user:
+    name: smb
+    group: smb
+    shell: /usr/sbin/nologin
+    home: /var/empty
+    system: true
+    create_home: false
+
+- name: Samba config
+  template:
+    dest: /etc/samba/smb.conf
+    src: smb.conf.j2
+    validate: testparm -s %s
+  register: samba_config
+
+- name: Reload Samba
+  systemd:
+    name: '{{item}}'
+    state: '{{"restarted" if samba_config.changed else "started"}}'
+    enabled: true
+  loop:
+    - smbd
+    - nmbd
-- 
GitLab