Drop the Rakefile for direct ansible-playbook
The tasks were unused, and the vars.yml task wrote a subset of the keys the playbooks consume. READMEs and the upgrade plan now show the direct commands.
Assisted-by: GLM-5.3 via pi
diff --git a/Gemfile b/Gemfile
deleted file mode 100644
index 998dc09..0000000
--- a/Gemfile
+++ /dev/null
@@ -1,5 +0,0 @@
-# frozen_string_literal: true
-
-source "https://rubygems.org"
-
-gem "rake"
diff --git a/Gemfile.lock b/Gemfile.lock
deleted file mode 100644
index eb7649c..0000000
--- a/Gemfile.lock
+++ /dev/null
@@ -1,13 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- rake (13.0.6)
-
-PLATFORMS
- arm64-darwin-22
-
-DEPENDENCIES
- rake
-
-BUNDLED WITH
- 2.4.1
diff --git a/README.md b/README.md
index 9076b06..a02b90d 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,8 @@
# boxen
+Playbooks run from the repository root against a single host:
+
+```sh
+ansible-playbook -l <host> <host>/<playbook>.yml
+```
+
diff --git a/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md b/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md
index c0b9f75..97a734a 100644
--- a/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md
+++ b/docs/lotus-land-story/2026-10-16-bullseye-to-bookworm.md
@@ -13,7 +13,8 @@ at 15, which only exists after the upgrade. Commit before, deploy after.
What rides along without changes: Grafana, VictoriaMetrics, Caddy,
Authelia, and the rest run as containers, and Vector runs as a
-`timberio/vector:*-debian` image. After the upgrade, `rake ansible`
+`timberio/vector:*-debian` image. After the upgrade, the main playbook
+(`ansible-playbook -l lotus-land-story lotus-land-story/main.yml`)
re-targets the facts-based deb822 repositories (docker, tailscale, redis)
to bookworm on its own.
@@ -49,7 +50,7 @@ to bookworm on its own.
bookworm-security main` — bookworm dropped the `/updates` suffix.
2. Re-target the third-party one-line repositories the same way, `sed -i
s/bullseye/bookworm/ /etc/apt/sources.list.d/*.list`, so bullseye
- builds don't constrain the dependency solve. `rake ansible` later
+ builds don't constrain the dependency solve. The main playbook later
replaces these files with deb822 sources.
3. `apt update && apt upgrade` (minimal first, no new packages), then
`apt full-upgrade`. Postgres stays at 13: the installed binaries
@@ -73,7 +74,7 @@ it to the volume.
volume: `sudo pg_createcluster 15 main -d
/mnt/lotus-land-story/postgresql-15 --start`.
3. Restore: `sudo -u postgres psql -f /tmp/all.sql postgres`.
-4. Run `rake ansible`. The repository changes apply: 15 paths,
+4. Run the main playbook. The repository changes apply: 15 paths,
`data_directory` pointing at `postgresql-15`, the tuning values
(already computed for 15 — see the pgtune comment in `postgres.yml`),
`listen.conf`, and the `pg_hba.conf` rules.
@@ -92,13 +93,7 @@ it to the volume.
the Grafana network panels render cadvisor data.
- `backup.sh` succeeds against the 15 cluster.
-## Cleanup and rollback
-
-After the first full `rake ansible`, delete the sed-edited `docker.list`
-from `/etc/apt/sources.list.d/`: `playbooks/docker.yml` writes the deb822 `docker.sources`
-and only removes the other historical filename, so the sed-edited
-one-liner would configure Docker twice. (The deeper fix is the existing
-"consolidate this into the other playbook" TODO in `main.yml`.)
+## Rollback
To roll back, restore the Linode snapshot and redeploy the pre-upgrade
commit. In place, starting the 13 cluster again reverses the database
diff --git a/lotus-land-story/README.md b/lotus-land-story/README.md
index 83d7987..50ce879 100644
--- a/lotus-land-story/README.md
+++ b/lotus-land-story/README.md
@@ -2,10 +2,10 @@
```
# setup
-export LOTUS_LAND_STORY_DOMAIN=...
+echo 'domain = "kejadlen.dev"' > terraform.tfvars
# terraform
-rake terraform
+terraform apply
# add the IP to ~/.ssh/config
@@ -13,10 +13,10 @@ rake terraform
ansible all -m ping
# ansible
-rake ansible
+ansible-playbook -l lotus-land-story lotus-land-story/main.yml
# manually connect to tailscale
# specific playbooks
-rake ansible[playbook]
+ansible-playbook -l lotus-land-story lotus-land-story/<playbook>.yml
```
diff --git a/lotus-land-story/Rakefile b/lotus-land-story/Rakefile
deleted file mode 100644
index 8181901..0000000
--- a/lotus-land-story/Rakefile
+++ /dev/null
@@ -1,59 +0,0 @@
-require "open3"
-require "yaml"
-
-DOMAIN = ENV.fetch("LOTUS_LAND_STORY_DOMAIN")
-
-task bootstrap: "pip:sync"
-
-namespace :pip do
- task :sync => "requirements.txt" do
- sh "pip-sync requirements.txt"
- end
-
- desc ""
- task :upgrade do
- out, _ = Open3.capture2e("pip-compile --upgrade --resolver=backtracking requirements.in")
- File.write("requirements.txt", out)
- end
-
- file "requirements.txt" => "requirements.in" do |t|
- out, _ = Open3.capture2e("pip-compile --resolver=backtracking requirements.in")
- File.write(t.name, out)
- end
-end
-
-desc ""
-task terraform: "terraform.tfvars" do
- sh "terraform apply"
-end
-
-desc ""
-task :ansible, %i[ playbook ] => "vars.yml" do |_, args|
- playbook = args.fetch(:playbook, "main")
-
- sh "ansible-playbook --limit=lotus-land-story #{playbook}.yml"
-end
-
-task "terraform.tfvars" do |t|
- File.write(t.name, "domain = \"#{DOMAIN}\"")
-end
-
-task "vars.yml" do |t|
- linode_volume = `terraform output -raw lotus_land_story_volume`
- miniflux_db_password = `op read "op://Private/Miniflux/db password"`.strip
- miniflux_password = `op read op://Private/Miniflux/password`.strip
-
- File.write(t.name, YAML.dump({
- "domain" => DOMAIN,
- "linode_volume" => linode_volume,
- "prometheus" => {
- "linode_api_token" => prometheus_linode_api_token,
- },
- "miniflux" => {
- "db_password" => miniflux_db_password,
- "password" => miniflux_password,
- },
- }))
-end
-
-task default: %i[ terraform ansible ]