//! Example of using the Rhai integration with SAL Buildah module //! //! This example demonstrates how to use the Rhai scripting language //! with the System Abstraction Layer (SAL) Buildah module. use rhai::Engine; use std::error::Error; fn main() -> Result<(), Box> { // Create a new Rhai engine let mut engine = Engine::new(); // Register println function engine.register_fn("println", |s: &str| println!("{}", s)); // Register SAL functions with the engine sal::rhai::register(&mut engine)?; // Run a Rhai script that uses SAL Buildah functions let script = r#" // List available images println("Listing available images:"); let images = buildah_images(); println("Found " + images.len() + " images"); // Create a container from an image (uncomment if you have a valid image) // let container = buildah_from("alpine:latest"); // println("Created container: " + container.stdout.trim()); // Build an image using options let build_options = buildah_new_build_options(); build_options.tag = "example-image:latest"; build_options.context_dir = "."; build_options.file = "example_Dockerfile"; println("Building image with options:"); println(" Tag: " + build_options.tag); println(" Context: " + build_options.context_dir); println(" Dockerfile: " + build_options.file); // Uncomment to actually build the image // let build_result = buildah_build(build_options); // println("Build result: " + build_result.success); // Create a container configuration let config_options = buildah_new_config_options(); config_options.author = "Rhai Example"; config_options.cmd = "/bin/sh -c 'echo Hello from Buildah'"; println("Container config options:"); println(" Author: " + config_options.author); println(" Command: " + config_options.cmd); // Commit options let commit_options = buildah_new_commit_options(); commit_options.format = "docker"; commit_options.squash = true; commit_options.rm = true; println("Commit options:"); println(" Format: " + commit_options.format); println(" Squash: " + commit_options.squash); println(" Remove container: " + commit_options.rm); // Return success true "#; // Evaluate the script let result = engine.eval::(script)?; println!("Script execution successful: {}", result); Ok(()) }