packer_rs 0.2.0

A Rust wrapper for HashiCorp Packer CLI
Documentation
# packer_rs

A simple Rust wrapper around HashiCorp Packer CLI. This lets you run Packer commands from your Rust code without dealing with raw command line stuff.

## Basic Usage

First, make sure you have the Packer CLI installed and available in your project directory (as `packer` on Linux/Mac or `packer.exe` on Windows).

Add this to your `Cargo.toml`:
```toml
[dependencies]
packer_rs = "0.1"
```

Here's a quick example:

```rust
use packer_rs::{Packer, BuildOptionsBuilder};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a new Packer instance
    let packer = Packer::new()?;
    
    // Set up some build options
    let options = BuildOptionsBuilder::default()
        .debug(true)
        .vars(vec![("region", "us-west-2")])
        .build()?;
    
    // Build your template
    packer.build("template.pkr.hcl", &options)?;
    
    Ok(())
}
```

## What You Can Do

The wrapper supports the main Packer commands:

- `build`: Build images from a template
- `init`: Set up a new template
- `validate`: Check if a template is valid
- `inspect`: Look at template details
- `fix`: Fix old templates
- `console`: Start Packer console
- `plugin`: Manage Packer plugins

## Build Options

When building templates, you can set various options using `BuildOptionsBuilder`:

```rust
let options = BuildOptionsBuilder::default()
    .debug(true)                // Enable debug mode
    .force(true)               // Force builds
    .parallel_builds(2)        // Run 2 builds at once
    .timestamp_ui(true)        // Show timestamps
    .vars(vec![                // Set variables
        ("region", "us-west-2"),
        ("instance_type", "t2.micro")
    ])
    .var_files(vec!["vars.json".into()])  // Load vars from files
    .build()?;
```

## Working Directory

You can set a different working directory for commands:

```rust
let packer = Packer::new()?
    .with_working_dir("./my-templates");
```

## Error Handling

The wrapper returns proper Rust errors that tell you what went wrong. Main error types:

- `NotFound`: Can't find the Packer executable
- `ExecutionError`: Command failed to run
- `ConfigError`: Something wrong with the configuration
- `IoError`: File system problems

## Contributing

Feel free to open issues or send pull requests if you find bugs or want to add features.

## License

MIT licensed. Do what you want with it.