From cab78ca6506c82cbd57bf47611a5a8d541508376 Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Mon, 27 Jul 2026 20:35:20 -0700 Subject: [PATCH 1/7] feat(silverbullet): add new silverbullet_servers group --- inventory.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/inventory.yaml b/inventory.yaml index 0c53b87..74f5e63 100644 --- a/inventory.yaml +++ b/inventory.yaml @@ -34,4 +34,7 @@ all: new-bark: ntfy_servers: hosts: - new-bark: \ No newline at end of file + new-bark: + silverbullet_servers: + hosts: + new-bark: -- 2.54.0 From b3b72db2e6976fed418b27fff7347cebc79bde77 Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Mon, 27 Jul 2026 20:35:40 -0700 Subject: [PATCH 2/7] feat(silverbullet): Add new SilverBullet Setup task --- site.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/site.yaml b/site.yaml index 2385154..caf4de6 100644 --- a/site.yaml +++ b/site.yaml @@ -44,3 +44,11 @@ tags: - ntfy - comms + +- name: SilverBullet Setup + hosts: silverbullet_servers + roles: + - silverbullet_server + tags: + - silverbullet + - docs -- 2.54.0 From 17c862c1321a388ed0ed321cfa18c2a4b1b0982e Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Mon, 27 Jul 2026 20:35:56 -0700 Subject: [PATCH 3/7] docs(silverbullet): Added new README for silverbullet role --- roles/silverbullet_server/README.md | 84 +++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 roles/silverbullet_server/README.md diff --git a/roles/silverbullet_server/README.md b/roles/silverbullet_server/README.md new file mode 100644 index 0000000..39eb473 --- /dev/null +++ b/roles/silverbullet_server/README.md @@ -0,0 +1,84 @@ +# Role: SilverBullet Server +Sets up and deploys SilverBullet container +For more information about SilverBullet check out [their website](https://silverbullet.md/) + +## Tags +- silverbullet +- docs + +## Required Variables +Below is an annotated breakdown of the required variables and their structure for this role + +> [!WARNING] +> Any variable marked `# !SENSITIVE` **should not** be stored in plain text under any circumstance + +### SilverBullet Info +Defines settings for the SilverBullet Server. +Most of these variables are optional, and have predefined defaults in the role itself, however it is possible to define custom variables in `host_vars` files. +Any variable marked as optional has a default value defined in `defaults/main.yaml` for this role + +```yaml +# (optional): Name of the silverbullet container +# This name is also the name of the service created by the quadlet file, +# as well as the name of the .container file +# default: silverbullet +# format: snake_case +silverbullet_name: + +# (optional): Image of the silverbullet container +# This can be any image from any register that podman supports +# default: ghcr.io/silverbulletmd/silverbullet:latest +# format: URL +silverbullet_image: + +# (optional): Port of the silverbullet webui +# this is used for traefik labels to allow for access to the webui +# the default value is defined by the silverbullet container itself. For information on changing it, view the documentation for your image +# default: 3000 +# format: int +silverbullet_port: + +# (optional): Username of the silverbullet user +# this is the default user created for silverbullet +# note, this value has a default, but it is highly recommended to change it via `host_vars` +# default: jdelpilar +# format: username +silverbullet_user: + +# (optional): password for the above created user +# note, this value has a default, but it is highly recommended to change it via `host_vars` +# !SENSITIVE +# default: generated password +# format: password +silverbullet_pass: + +# (optional): url of the silverbullet instance +# this is used to set the url in traefik +# default: silverbullet.delpilar.net +# format: url +silverbullet_url: +``` + +## Templates + +### silverbullet.container.j2 +This template creates a `.container` file for silverbullet +By default this template supports the following additional variables not listed above. +- silver_bullet_volumes: used to define additional mounted volumes + - format: : +- silver_bullet_env: used to define additional environment variables used by the container + - format: dict(:) + +## Execution +> [!NOTE] +> This role restarts any containers where the `.container` file is changed. As such, please ensure that all work is saved and all users are made aware of any potential downtime. + +To run this role without running any other roles, please use this command +```bash +ansible-playbook site.yaml --tags silverbullet +``` + +To run all roles with the `docs` tag at once, please use this command +```bash +ansible-playbook site.yaml --tags docs +``` -- 2.54.0 From 6ce723e245567a68dc00a69ecabada511be17609 Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Mon, 27 Jul 2026 20:36:18 -0700 Subject: [PATCH 4/7] feat(silverbullet) Added new handlers for silverbullet role --- roles/silverbullet_server/handlers/main.yaml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 roles/silverbullet_server/handlers/main.yaml diff --git a/roles/silverbullet_server/handlers/main.yaml b/roles/silverbullet_server/handlers/main.yaml new file mode 100644 index 0000000..4f3b877 --- /dev/null +++ b/roles/silverbullet_server/handlers/main.yaml @@ -0,0 +1,6 @@ +- name: Restart changed Silverbullet Services + ansible.builtin.systemd: + name: "{{ silverbullet_name }}" + state: restarted + scope: user + daemon_reload: true -- 2.54.0 From 6f4c6b2513ad939d580c225ee81cc934104e72f9 Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Mon, 27 Jul 2026 20:36:36 -0700 Subject: [PATCH 5/7] feat(silverbullet): added new defaults file for silverbullet role --- roles/silverbullet_server/defaults/main.yaml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 roles/silverbullet_server/defaults/main.yaml diff --git a/roles/silverbullet_server/defaults/main.yaml b/roles/silverbullet_server/defaults/main.yaml new file mode 100644 index 0000000..b2a9f34 --- /dev/null +++ b/roles/silverbullet_server/defaults/main.yaml @@ -0,0 +1,14 @@ +--- +silverbullet_name: silverbullet +silverbullet_image: ghcr.io/silverbulletmd/silverbullet:latest +silverbullet_port: 3000 +silverbullet_user: jdelpilar +silverbullet_pass: !vault | + $ANSIBLE_VAULT;1.1;AES256 + 37643331363732343135383232666363326464313534316264316261613161333633306239336365 + 3430613632323734616233303336363331646364303530660a373639323639656664336236303837 + 35613464313563303565666638643463326431616665613837353264346132636133396636383232 + 6430343764626363310a323033333662656532386131663734613436663665356164396662613636 + 38383863313064313563306439653434646533353363373338306633393562373235 +silverbullet_enable_traefik: true +silverbullet_url: silverbullet.delpilar.net -- 2.54.0 From 9df9c32330fe3465ad4e71ab6b6b4fac30b0075b Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Mon, 27 Jul 2026 20:36:50 -0700 Subject: [PATCH 6/7] feat(silverbullet): added new silverbullet container file template --- .../templates/silverbullet.container.j2 | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 roles/silverbullet_server/templates/silverbullet.container.j2 diff --git a/roles/silverbullet_server/templates/silverbullet.container.j2 b/roles/silverbullet_server/templates/silverbullet.container.j2 new file mode 100644 index 0000000..932bed6 --- /dev/null +++ b/roles/silverbullet_server/templates/silverbullet.container.j2 @@ -0,0 +1,50 @@ +# {{ ansible_managed }} +[Unit] +After=network-online.target + +StartLimitBurst=10 +StartLimitIntervalSec=120 + +[Container] +ContainerName={{ silverbullet_name }} +Image={{ silverbullet_image }} + +Network=services-net +PublishPort={{ silverbullet_port }}:3000 + +AutoUpdate=registry + +Label=category=management +Label=owner={{ container_owner | default('jdelpilar') }} + +{% if silverbullet_enable_traefik %} +Label=traefik.enable=true +Label=traefik.http.routers.{{ silverbullet_name }}.rule=Host(`{{ silverbullet_url | default(silverbullet_name + "." + base_domain, true) }}`) +Label=traefik.http.routers.{{ silverbullet_name }}.entrypoints={{ traefik_entrypoint | default('websecure', true) }} +Label=traefik.http.routers.{{ silverbullet_name }}.tls.certresolver={{ traefik_resolver | default('cloudflare', true) }} +Label=traefik.http.services.{{ silverbullet_name }}.loadbalancer.server.port={{ silverbullet_port | default(3000, true) }} +Label=traefik.docker.network=services-net +Label=traefik.http.routers.{{ silverbullet_name }}.tls=true +{% endif %} + +Volume={{ podman_config_base_dir }}/{{ silverbullet_name }}/space:/space +{% if silverbullet_volumes is defined %} +{% for volume in silverbullet_volumes %} +Volume={{ volume }} +{% endfor %} +{% endif %} + +Environment=TZ={{ timezone | default('America/Los_Angeles') }} +Environment=SB_USER={{ silverbullet_user }}:{{ silverbullet_pass }} +{% if silverbullet_env is defined %} +{% for key, value in silverbullet_env.items() | sort %} +Environment={{ key }}={{ value }} +{% endfor %} +{% endif %} + +[Service] +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=default.target -- 2.54.0 From acaaa445ccc3b75c0951eb92b27e7fd87abcaebb Mon Sep 17 00:00:00 2001 From: Jordan Del Pilar Date: Mon, 27 Jul 2026 20:37:03 -0700 Subject: [PATCH 7/7] feat(silverbullet): created new silverbullet role and main tasks file --- roles/silverbullet_server/tasks/main.yaml | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 roles/silverbullet_server/tasks/main.yaml diff --git a/roles/silverbullet_server/tasks/main.yaml b/roles/silverbullet_server/tasks/main.yaml new file mode 100644 index 0000000..962df90 --- /dev/null +++ b/roles/silverbullet_server/tasks/main.yaml @@ -0,0 +1,24 @@ +--- +- name: Create SilverBullet Directory + ansible.builtin.file: + path: "{{ podman_config_base_dir }}/{{ silverbullet_name }}/space" + state: directory + mode: "0755" + +- name: Create SilverBullet Quadlet + ansible.builtin.template: + src: silverbullet.container.j2 + dest: "{{ podman_quadlet_base_dir }}/services/{{ silverbullet_name }}.container" + owner: "{{ ansible_user }}" + mode: "644" + notify: Restart changed Silverbullet Services + +- name: Flush Handlers + ansible.builtin.meta: flush_handlers + +- name: Start SilverBullet + ansible.builtin.systemd: + name: "{{ silverbullet_name }}" + state: started + scope: user + daemon_reload: true -- 2.54.0