difftreelog
fix primop registration
in: trunk
5 files changed
crates/fleet-base/src/opts.rsdiffbeforeafterboth--- a/crates/fleet-base/src/opts.rs
+++ b/crates/fleet-base/src/opts.rs
@@ -22,7 +22,7 @@
use crate::{
fleetdata::FleetData,
- host::{Config, ConfigHost, FleetConfigInternals},
+ host::{Config, ConfigHost, FleetConfigInternals}, primops::init_primops,
};
#[derive(Clone)]
@@ -213,6 +213,8 @@
std::fs::read_to_string(&fleet_data_path).context("reading fleet state (fleet.nix)")?;
let data = Arc::new(Mutex::new(FleetData::from_str(&bytes)?));
+ init_primops(data.clone());
+
let mut fetch_settings = FetchSettings::new();
fetch_settings.set(c"warn-dirty", c"false");
crates/fleet-base/src/primops.rsdiffbeforeafterboth--- a/crates/fleet-base/src/primops.rs
+++ b/crates/fleet-base/src/primops.rs
@@ -2,6 +2,7 @@
use std::sync::{Arc, Mutex};
use nix_eval::{NativeFn, Value};
+use tracing::info;
use crate::fleetdata::{FleetData, FleetSecrets};
@@ -23,21 +24,9 @@
struct FsSecretsBackend {}
pub fn init_primops(secrets: Arc<Mutex<FleetData>>) {
- NativeFn::new(
- c"fleet_ensure_host_secret",
- c"Ensure secret existence for a host, regenerating it in case of some mismatch",
- [c"host", c"secret", c"generator"],
- |[host, secret, generator]| {
- todo!("ensure secret");
- Ok(Value::new_attrs(HashMap::from_iter([(
- "raw",
- Value::new_str("rawData"),
- )])))
- },
- )
- .register();
+ info!("initializing primops");
NativeFn::new(
- c"fleet_ensure_host_secret",
+ c"__fleetEnsureHostSecret",
c"Ensure secret existence for a host, regenerating it in case of some mismatch",
[c"host", c"secret", c"generator"],
|[host, secret, generator]| {
crates/nix-eval/src/lib.rsdiffbeforeafterboth966 let mut args = args.into_iter().map(|v| v.as_ptr()).collect_vec();966 let mut args = args.into_iter().map(|v| v.as_ptr()).collect_vec();967 args.push(null());967 args.push(null());968 let args = args.as_mut_ptr();968 let args = args.as_mut_ptr();969 let primop = with_default_context(|c, _| unsafe {969 let primop = unsafe {970 alloc_primop(970 alloc_primop(971 c,971 null_mut(),972 f,972 f,973 N as i32,973 N as i32,974 name.as_ptr(),974 name.as_ptr(),975 args,975 args,976 doc.as_ptr(),976 doc.as_ptr(),977 Box::into_raw(closure).cast(),977 Box::into_raw(closure).cast(),978 )978 )979 })979 };980 .expect("primop allocation should not fail");980981 assert!(!primop.is_null(), "primop allocation should not fail");981982982 Self(primop)983 Self(primop)983 }984 }984 pub fn register(self) {985 pub fn register(self) {985 with_default_context(|c, _| unsafe { register_primop(c, self.0) })986 unsafe { register_primop(null_mut(), self.0) };986 .expect("primop registration should not fail");987 }987 }988}988}989989999#[test_log::test]999#[test_log::test]1000fn test_native() -> Result<()> {1000fn test_native() -> Result<()> {1001 init_libraries();1001 init_libraries();1002 NativeFn::new(1003 c"__uppercaseSuffix2",1004 c"make string uppercase and add suffix",1005 [c"str", c"suffix"],1006 |[str, suffix]: [&Value; 2]| {1007 let str = str.to_string()?;1008 let suffix = suffix.to_string()?;1009 Ok(Value::new_str(&format!("{}{suffix}", str.to_uppercase())))1010 },1011 )1012 .register();100210131003 let mut fetch_settings = FetchSettings::new();1014 let mut fetch_settings = FetchSettings::new();1004 fetch_settings.set(c"warn-dirty", c"false");1015 fetch_settings.set(c"warn-dirty", c"false");103610471037 let test_result: String = nix_go_json!(test_data.testPrimop(uppercase_suffix));1048 let test_result: String = nix_go_json!(test_data.testPrimop(uppercase_suffix));1038 assert_eq!(test_result, "PREFIX_BODY_SUFFIX");1049 assert_eq!(test_result, "PREFIX_BODY_SUFFIX");1050 let test_result: String = nix_go_json!(builtins.uppercaseSuffix2("test")("suffix"));1051 assert_eq!(test_result, "TESTsuffix");103910521040 let nix_ctx = NixContext::new();1053 let nix_ctx = NixContext::new();1041 let store = GLOBAL_STATE.store.parse_path(s.as_c_str())?;1054 let store = GLOBAL_STATE.store.parse_path(s.as_c_str())?;crates/nix-eval/src/macros.rsdiffbeforeafterboth--- a/crates/nix-eval/src/macros.rs
+++ b/crates/nix-eval/src/macros.rs
@@ -47,11 +47,7 @@
nix_expr_inner!(@field(out) $($tt)*);
out
}};
- ($v:literal) => {{
- use $crate::macros::NixExprBuilder;
- NixExprBuilder::string($v)
- }};
- ({$v:expr}) => {{
+ ($v:expr) => {{
$crate::Value::serialized(&$v)?
}}
}
modules/nixos/secrets.nixdiffbeforeafterboth--- a/modules/nixos/secrets.nix
+++ b/modules/nixos/secrets.nix
@@ -103,7 +103,7 @@
};
};
config = {
- parts = builtins.fleet_ensure_host_secret sysConfig.networking.hostName secretName config.generator;
+ parts = builtins.fleetEnsureHostSecret sysConfig.networking.hostName secretName config.generator;
};
}
);