74 lines
2.6 KiB
Rust
74 lines
2.6 KiB
Rust
//! 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<dyn Error>> {
|
|
// 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::<bool>(script)?;
|
|
println!("Script execution successful: {}", result);
|
|
|
|
Ok(())
|
|
} |