4.1 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is ceph-ansible — Ansible playbooks, roles, and custom modules for deploying and managing Ceph clusters. The project is in maintenance mode; new deployments are encouraged to use cephadm instead. Supports Ceph releases from Dumpling (0.67) through Squid (19), with both containerized (Docker/Podman) and non-containerized deployment modes.
Common Commands
Linting
tox -e flake8
Max line length is 160 characters. Scans ./library, ./module_utils/, and ./tests/.
Unit Tests
cd tests && py.test library/ module_utils/
Functional Tests (via Tox + Vagrant)
tox -e centos-container-all_daemons
tox -e ubuntu-non_container-all_daemons
tox -e rocky-container-lvm_osds
Pattern: {os}-{container|non_container}-{scenario}. See tox.ini for all ~100+ environments.
RPM Building
make # builds SRPMs
make rpm # builds full RPMs
make clean
After changing role defaults
./generate_group_vars_sample.sh
The group_vars/ sample files are version-controlled and must be regenerated when roles/ceph-defaults/defaults/main.yml changes.
Architecture
Playbook Entry Points
site.yml— primary orchestration playbook; imports roles in dependency order for all daemon types (mons → osds → mgrs → clients → rgws → mdss → nfs → rbdmirrors → monitoring)infrastructure-playbooks/— operational playbooks run independently:purge-cluster.yml,rolling_update.yml,shrink-*.yml,add-*.yml,cephadm-adopt.yml, etc.
Role Dependency Chain
Most roles follow this pattern:
ceph-defaults → ceph-facts → ceph-handler → ceph-validate → ceph-common → ceph-config → <daemon-specific role>
ceph-defaults is the canonical source for all configurable variables — check there before adding new variables.
Custom Modules (library/)
Python Ansible modules that wrap ceph CLI commands or the Ceph Python SDK:
ceph_key.py— CephX authentication key managementceph_pool.py— pool create/modify/deleteceph_crush.py/ceph_crush_rule.py— CRUSH map managementceph_ec_profile.py— erasure coding profilesceph_fs.py— CephFS filesystem managementceph_config.py— cluster config (ceph config set/get)ceph_osd_flag.py— OSD flags (noout, noscrub, etc.)ceph_mgr_module.py— mgr module enable/disableceph_volume.py— OSD provisioning viaceph-volumeceph_orch_apply.py— cephadm orchestrator
All modules share common container-execution utilities in module_utils/ca_common.py, which handles wrapping commands with docker exec or podman exec when running in containerized mode.
Filter Plugins (plugins/filter/)
dict2dict.py— dict transformationipaddrs_in_ranges.py— IP address filtering for network-aware config
Variable Precedence
group_vars/all.yml.sample— user-facing documented defaults (generated from role defaults)roles/ceph-defaults/defaults/main.yml— authoritative defaults- Host/group vars in inventory — user overrides
Container vs. Non-Container
The boolean containerized_deployment variable (default: false) controls execution paths throughout roles and modules. When true, commands are prefixed with the container runtime and daemon container name. Both paths must be maintained in module code.
Key Conventions
- Commit format: subject line (imperative mood) + blank line + body wrapped at 80 chars +
Signed-off-by:line. Scope prefix encouraged (e.g.,ceph-osd: fix ...). Reference issues withFixes: #XXXX. - CI: Jenkins runs on each PR. Add
[skip ci]to PR title to bypass. Mergify handles merging (requires approval + CI pass). - Python style: flake8, max 160 chars, no E501/W503.
- Ansible collections required:
ansible.utils,community.general,ansible.posix,openstack.ansible-config_template— install withansible-galaxy collection install -r requirements.yml.