wip
This commit is contained in:
@@ -25,7 +25,7 @@ fn map_to_vmspec(spec: Map) -> Result<VmSpec, Box<EvalAltResult>> {
|
||||
let memory_mb = get_int(&spec, "memory_mb").unwrap_or(512) as u32;
|
||||
let cmdline = get_string(&spec, "cmdline");
|
||||
let extra_args = get_string_array(&spec, "extra_args");
|
||||
|
||||
|
||||
Ok(VmSpec {
|
||||
id,
|
||||
kernel_path,
|
||||
@@ -37,6 +37,7 @@ fn map_to_vmspec(spec: Map) -> Result<VmSpec, Box<EvalAltResult>> {
|
||||
memory_mb,
|
||||
cmdline,
|
||||
extra_args,
|
||||
net_profile: None,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -76,6 +77,8 @@ fn vmspec_to_map(s: &VmSpec) -> Map {
|
||||
} else {
|
||||
m.insert("extra_args".into(), Dynamic::UNIT);
|
||||
}
|
||||
// net_profile not exposed in Rhai yet; return UNIT for now
|
||||
m.insert("net_profile".into(), Dynamic::UNIT);
|
||||
m
|
||||
}
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
use crate::cloudhv::builder::CloudHvBuilder;
|
||||
use crate::hostcheck::host_check_deps;
|
||||
use crate::image_prep::{image_prepare, Flavor as ImgFlavor, ImagePrepOptions, NetPlanOpts};
|
||||
use rhai::{Engine, EvalAltResult, Map};
|
||||
use rhai::{Engine, EvalAltResult, Map, Array};
|
||||
|
||||
fn builder_new(id: &str) -> CloudHvBuilder {
|
||||
CloudHvBuilder::new(id)
|
||||
@@ -47,6 +47,30 @@ fn builder_no_default_net(mut b: CloudHvBuilder) -> CloudHvBuilder {
|
||||
b
|
||||
}
|
||||
|
||||
// New networking profile helpers
|
||||
fn builder_network_default_nat(mut b: CloudHvBuilder) -> CloudHvBuilder {
|
||||
b.network_default_nat();
|
||||
b
|
||||
}
|
||||
fn builder_network_none(mut b: CloudHvBuilder) -> CloudHvBuilder {
|
||||
b.network_none();
|
||||
b
|
||||
}
|
||||
fn builder_network_bridge_only(mut b: CloudHvBuilder) -> CloudHvBuilder {
|
||||
b.network_bridge_only();
|
||||
b
|
||||
}
|
||||
fn builder_network_custom(mut b: CloudHvBuilder, args: Array) -> CloudHvBuilder {
|
||||
let mut v: Vec<String> = Vec::new();
|
||||
for it in args {
|
||||
if it.is_string() {
|
||||
v.push(it.clone().cast::<String>());
|
||||
}
|
||||
}
|
||||
b.network_custom_cli(v);
|
||||
b
|
||||
}
|
||||
|
||||
fn builder_launch(mut b: CloudHvBuilder) -> Result<String, Box<EvalAltResult>> {
|
||||
b.launch().map_err(|e| {
|
||||
Box::new(EvalAltResult::ErrorRuntime(
|
||||
@@ -102,6 +126,8 @@ fn vm_easy_launch(flavor: &str, id: &str, memory_mb: i64, vcpus: i64) -> Result<
|
||||
if vcpus > 0 {
|
||||
b.vcpus(vcpus as u32);
|
||||
}
|
||||
// Default profile: NAT with IPv6 via Mycelium (opt-out via env)
|
||||
b.network_default_nat();
|
||||
b.launch().map_err(|e| {
|
||||
Box::new(EvalAltResult::ErrorRuntime(
|
||||
format!("vm_easy_launch failed at launch: {}", e).into(),
|
||||
@@ -125,6 +151,11 @@ pub fn register_cloudhv_builder_module(engine: &mut Engine) -> Result<(), Box<Ev
|
||||
engine.register_fn("cmdline", builder_cmdline);
|
||||
engine.register_fn("extra_arg", builder_extra_arg);
|
||||
engine.register_fn("no_default_net", builder_no_default_net);
|
||||
// Networking profiles
|
||||
engine.register_fn("network_default_nat", builder_network_default_nat);
|
||||
engine.register_fn("network_none", builder_network_none);
|
||||
engine.register_fn("network_bridge_only", builder_network_bridge_only);
|
||||
engine.register_fn("network_custom", builder_network_custom);
|
||||
|
||||
// Action
|
||||
engine.register_fn("launch", builder_launch);
|
||||
|
Reference in New Issue
Block a user