8 Commits
Author SHA1 Message Date
cyberops7 bbaf955ea5 Make RKE2 scripts pass shellcheck (severity=warning) and hygiene hooks
The lint CI runs pre-commit on changed files, so touching these scripts
surfaced pre-existing warnings. Address them without changing behavior:
- Quote array elements (SC2206) and command substitutions (SC2046).
- Disable SC2087 on the ssh heredocs (vars are intentionally expanded
  client-side) and SC1090 on 'source ~/.bashrc' (not followable).
- Keep unused config knobs (KVVERSION, interface) with a targeted
  SC2034 disable; drop the genuinely-unused allnomaster1 array.
- Strip trailing whitespace.

Verified: shellcheck --severity=warning clean and pre-commit green
(ShellCheck v0.10.0) on both files; bash -n syntax OK.
2026-07-08 23:32:34 -06:00
cyberops7 0cb8910004 Fix rancher-lb LoadBalancer wait-loop in RKE2 scripts
The wait-loop was missing '-o' before the jsonpath template, so
'jsonpath={...}' was parsed as a service name and the query errored
to empty output, causing the loop to never wait. It also queried
.status.conditions[Pending], a shape Services do not have.

Poll the rancher-lb service and block until MetalLB assigns an
external IP instead.
2026-07-08 22:57:55 -06:00
cyberops7 6c94afa975 docs: document dummy-credential convention; annotate examples
Add CONTRIBUTING.md explaining the linting setup and how to mark the
repo's intentional dummy credentials so gitleaks does not flag them:
inline `# gitleaks:allow` for lint-clean, comment-capable files, and a
.gitleaksignore baseline otherwise.

Annotate the dummy credentials in four already-lint-clean example files
inline, as the preferred convention going forward.

- DIUN/docker-compose.yaml
- Headscale/Tailscale-Client/docker-compose,yaml
- Homepage/Homepage/services.yaml
- Kubernetes/Traefik-PiHole/Helm/Traefik/Dashboard/secret-dashboard.yaml
2026-07-05 14:33:50 -06:00
cyberops7 d5dadb5f4b ci: lint and secret-scan pull requests
Add a GitHub Actions workflow that runs the project's pre-commit hooks
against the files changed in each PR, plus a gitleaks secret scan over
the PR's commits. Both block on findings.

Enrich the existing .pre-commit-config.yaml with general hygiene checks
and four linters (shellcheck, yamllint, actionlint, gitleaks), add a
lenient yamllint config tuned for the repo's existing YAML, and add a
gitleaks config that keeps the full default ruleset while baselining the
repo's pre-existing intentional dummy credentials.

Linting is scoped to changed files, so the checks pass on the current
tree and only hold new or edited files to standard.

- .github/workflows/lint.yml: pull_request workflow, read-only token,
  two jobs (pre-commit on changed files + gitleaks on the commit range)
- .pre-commit-config.yaml: keep existing hooks; add hygiene checks,
  shellcheck (--severity=warning), yamllint, actionlint, gitleaks
- .yamllint.yaml: lenient ruleset
- .gitleaks.toml: default rules + allowlist for .env/example placeholders
- .gitleaksignore: baseline of pre-existing intentional dummy credentials
2026-07-05 14:33:50 -06:00
cyberops7andGitHub 8de0775282 Fix RKE2 MetalLB L2Advertisement to honor custom lb_pool_name (#135) (#168)
* Fix RKE2 MetalLB L2Advertisement to honor custom lb_pool_name (#135)

The apply-manifests role rendered the IPAddressPool from a template using
lb_pool_name, but applied the L2Advertisement from a hardcoded remote file
where the pool name was baked in as 'first-pool'. Setting lb_pool_name to
anything else left the L2Advertisement pointing at a non-existent pool, so
MetalLB assigned LoadBalancer IPs but never advertised them (services got an
external IP but were unreachable).

Template the L2Advertisement locally from lb_pool_name, mirroring the
IPAddressPool pattern, so both manifests always reference the same pool.

* Add explicit become: true to apply-manifests kubectl tasks

These tasks set become_user without a task-level become, tripping
ansible-lint's partial-become rule. become is already enabled globally via
ansible_become in group_vars/all.yaml, so the tasks already escalate to the
ansible user — but that is invisible to the linter (and to anyone reading the
task in isolation). Make it explicit with become: true alongside become_user.

Behavior-neutral: verified with ansible-playbook -vvv that the escalation
target is unchanged (sudo -u ansible; chown ansible on the temp files), so
kubectl still runs as the ansible user that owns ~/.kube/config.
2026-07-02 00:34:00 -06:00
cyberops7andGitHub fc18bfe3d7 fix: correct misspelled docker-compose filename in Tailscale-Client (#167)
Rename docker-compose,yaml (comma) to docker-compose.yaml (dot) so the
Tailscale client compose file follows the standard naming convention.

Fixes #43
2026-07-01 21:33:06 -06:00
cyberops7 d86eb06702 traefik v3 requires updating the CRDs API group version 2024-05-02 21:27:05 -06:00
cyberops7 9ca2135eb5 Adding Ingress TLS notes to README 2024-01-25 21:59:02 -07:00