27个稳定版本
新 2.2.35 | 2024年8月20日 |
---|---|
2.2.33 | 2024年6月13日 |
2.2.27 | 2024年3月20日 |
2.2.21 | 2023年12月14日 |
2.1.2 | 2022年7月12日 |
#117 in Unix APIs
1,121 monthly downloads
在 3 crates 中使用
1.5MB
45K SLoC
Nmstate 是一个库,附带命令行工具,以声明方式管理主机网络设置。网络状态由预定义的架构描述。当前状态和对其的更改(期望状态)都符合该架构。
Nmstate 致力于满足企业通过北向声明式 API 和南向的多供应商支持来管理主机网络的需求。NetworkManager 作为主要供应商提供支持,以在重启后提供持久网络配置。还提供了内核模式作为技术预览,以在网络管理器不运行的情况下应用网络配置。
所有 [NetworkState] 及其子组件都实现了 serde 的 Deserialize
和 Serialize
,因此,您可以直接从文件(例如 JSON、YAML 等)反序列化 [NetworkState],而不是手动构建。
特性
nmstate
包有以下 cargo 特性
gen_conf
-- 生成离线网络配置。query_apply
-- 查询并应用网络状态。
默认情况下,这两个特性都已启用。只有 Linux 平台支持 gen_conf
特性。在 Linux 和 MacOS 上都支持并测试了 query_apply
特性。
示例
检索当前网络状态
use nmstate::NetworkState;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut net_state = NetworkState::new();
// Use kernel mode
net_state.set_kernel_only(true);
net_state.retrieve()?;
println!("{}", serde_yaml::to_string(&net_state)?);
Ok(())
}
应用网络配置(例如,将静态 IP 分配给 eth1)
use nmstate::NetworkState;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut net_state: NetworkState = serde_yaml::from_str(
r#"---
interfaces:
- name: eth1
type: ethernet
state: up
mtu: 1500
ipv4:
address:
- ip: 192.0.2.252
prefix-length: 24
- ip: 192.0.2.251
prefix-length: 24
dhcp: false
enabled: true
ipv6:
address:
- ip: 2001:db8:2::1
prefix-length: 64
- ip: 2001:db8:1::1
prefix-length: 64
autoconf: false
dhcp: false
enabled: true
"#,
)?;
net_state.set_kernel_only(true);
net_state.apply()?;
Ok(())
}
依赖
~5–18MB
~267K SLoC