Ship is a powerful configuration service that sails your HCL configurations to different formats (JSON, YAML, TOML) while providing a rich fleet of built-in functions for data transformation.
## Features
- **Built-in Functions**
- **String Operations**:
- `upper`, `lower`, `trim`, `trimspace`, `trimprefix`, `trimsuffix`
- String manipulation and formatting
- **Numeric Operations**:
- `abs`, `ceil`, `floor`, `max`, `min`, `sum`, `parseint`
- Mathematical calculations and number parsing
- **Array/Map Operations**:
- `join`, `split`, `range`, `merge`, `length`, `unique`, `compact`, `flatten`
- Collection manipulation and transformation
- **Cryptographic Functions**:
- `base64encode/decode`, `urlencode/decode`
- Multiple hash functions: `md5_hash`, `sha1_hash`, `sha256_hash`, `sha512_hash`
- UUID generation: `uuid_gen`, `uuidv5`
- **Date/Time Functions**:
- `timestamp`, `timeadd`, `parseduration`, `formatdate`
- Time manipulation and formatting
- **Network Functions**:
- `cidrnetmask`, `cidrrange`, `cidrhost`, `cidrsubnets`
- CIDR calculations and subnet operations
- **HTTP Client**:
- `http_get`, `http_post`, `http_json`, `http_put`
- RESTful API interactions
- **File Operations**:
- `file`, `filemd5`, `filesha1`, `filesha256`, `filesha512`
- File reading and hashing
- **Vault Integration**:
- `vault_kv` for HashiCorp Vault key-value store integration
## Configuration
The service is configured via a `config.hcl` file with the following structure:
```hcl
settings {
listen = "" # Service listen address
storage = "" # Storage path for HCL files
vault { # Optional Vault configuration
url = ""
token = ""
}
}
```
## API Usage
> [!CAUTION]
>
> ### Security Notes
>
> - The service should be configured with appropriate access controls
> - Vault token should be kept secure
> - Consider network security when exposing HTTP endpoints
> - File operations are restricted to the configured storage path
### Convert HCL File
```
GET /?lang=
```
Parameters:
- `path`: Path to the HCL file relative to the storage directory
- `lang`: Target format (`json`, `yaml`, `yml`, or `toml`)
The service will:
1. Read the HCL file
2. Process any variables and locals
3. Execute functions
4. Convert to the requested format
5. Return the result as a downloadable file
## Special HCL Blocks
The service supports several special HCL blocks:
- `locals`: For defining local variables
- `let/var/vars`: For variable definitions
- `const`: For constant values that cannot be overridden
- `meta`: For metadata about the configuration
## Error Handling
The service provides detailed error messages in the format:
```
(message)
(error)
```
## Development
To build and run the service:
1. Ensure you have Rust installed
2. Clone the repository
3. Run `cargo build` to compile
4. Create a `config.hcl` file
5. Run `cargo run` to start the service