diff options
Diffstat (limited to 'AGENTS.md')
| -rw-r--r-- | AGENTS.md | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..3c6cea7 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,83 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## RCM (Ruby Configuration Management) + +RCM is a Ruby-based configuration management system that uses a DSL (Domain Specific Language) to define and manage system configurations. It follows a KISS (Keep It Simple, Stupid) philosophy and is designed for personal use. + +## Development Commands + +```bash +# Install dependencies +bundle install + +# Run all tests +rake test + +# Run a specific test file +rake test TEST=test/lib/dslkeywords/file_test.rb + +# Execute a configuration task in the playground +cd playground +rake wireguard -- --debug # with debug output +rake wireguard -- --dry # dry run mode +``` + +## Architecture Overview + +### Core Components + +1. **DSL Entry Point** (`lib/dsl.rb`): + - Provides the `configure` and `configure_from_scratch` methods + - Manages resource scheduling and evaluation + - Tracks resource objects to prevent duplicates + +2. **Base Classes**: + - `Keyword` (`lib/dslkeywords/keyword.rb`): Base class for all DSL keywords + - `Resource` (`lib/dslkeywords/resource.rb`): Base class for manageable resources (files, packages, etc.) + - Resources support dependency management through `requires` declarations + +3. **Core Modules**: + - `Config` (`lib/config.rb`): Loads configuration from `config.toml` + - `Options` (`lib/options.rb`): Handles command-line options (--debug, --dry) + - `Log` (`lib/log.rb`): Provides logging functionality + - `Chained` (`lib/chained.rb`): Enables natural language DSL syntax + +4. **Resource Types** (in `lib/dslkeywords/`): + - `File`: File management with templating, line manipulation, and directory handling + - `Given`: Conditional execution based on system state + - `Notify`: Resource notification system + - `Package`: Package management (currently supports Fedora/DNF) + +### Key Design Patterns + +- **Dependency Resolution**: Resources can declare dependencies via `requires`, which are resolved before execution +- **Dry Run Support**: All resources support `--dry` mode for testing configurations +- **Backup System**: File operations create backups in `.rcmbackup/` directory +- **Chained DSL**: Natural language syntax like `given { hostname is :earth }` + +### Testing + +Tests use Minitest and are located in `test/`. Test files follow the pattern `*_test.rb` and typically: +- Create temporary files/directories with `.rcmtmp` suffix +- Clean up after themselves using `Minitest.after_run` +- Test individual DSL keywords and their functionality + +### Usage Example + +```ruby +configure do + given { hostname is :earth } + + file '/tmp/test/wg0.conf' do + manage directory # Creates parent directories + from template # ERB template processing + 'content with <%= 1 + 2 %>' + end + + file '/etc/hosts.test' do + line '192.168.1.101 foo' + end +end +```
\ No newline at end of file |
