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

Download history 66/week @ 2024-05-01 97/week @ 2024-05-08 201/week @ 2024-05-15 186/week @ 2024-05-22 307/week @ 2024-05-29 147/week @ 2024-06-05 288/week @ 2024-06-12 188/week @ 2024-06-19 70/week @ 2024-06-26 128/week @ 2024-07-03 140/week @ 2024-07-10 231/week @ 2024-07-17 205/week @ 2024-07-24 286/week @ 2024-07-31 168/week @ 2024-08-07 317/week @ 2024-08-14

1,121 monthly downloads
3 crates 中使用

Apache-2.0

1.5MB
45K SLoC

Nmstate 是一个库,附带命令行工具,以声明方式管理主机网络设置。网络状态由预定义的架构描述。当前状态和对其的更改(期望状态)都符合该架构。

Nmstate 致力于满足企业通过北向声明式 API 和南向的多供应商支持来管理主机网络的需求。NetworkManager 作为主要供应商提供支持,以在重启后提供持久网络配置。还提供了内核模式作为技术预览,以在网络管理器不运行的情况下应用网络配置。

所有 [NetworkState] 及其子组件都实现了 serde 的 DeserializeSerialize,因此,您可以直接从文件(例如 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