Salt Windows 网络状态管理:使用 salt.states.win_network 配置网卡 DNS、静态 IP 与网关
运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载Salt 的win_network状态模块虚拟名称network用于在 Windows 主机上声明式地管理网络接口覆盖 DNS 服务器、IPv4 地址和默认网关三类配置。本文以 salt/states/win_network.py 的官方文档与实现为核心讲解network.managed状态的完整参数、SLS 配置写法、校验与变更检测逻辑并结合底层执行模块 salt/modules/win_ip.py 说明实际生效的 PowerShell 调用链。读完本文你将能够在 Salt 的 state 系统中可靠地编排 Windows 网卡配置实现 DHCP 与静态网络的自动收敛。模块定位与适用前提win_network状态模块自 Salt 2014.1.0 版本引入专门针对 Windows 主机提供网卡配置能力。从源码可以看到模块通过__virtualname__ networksalt/states/win_network.py对外暴露这意味着在 SLS 中书写的关键字是network而非win_network。模块的加载做了严格的平台与依赖约束salt/states/win_network.py仅当运行环境为 Windowssalt.utils.platform.is_windows()且__salt__中已加载执行模块ip要求具备ip.get_interface函数。两者任一不满足模块都会返回(False, ip module could not be loaded)拒绝加载。因此在使用前请确认目标主机为 Windows 且win_ip执行模块可用可用salt -G os_family:Windows sys.doc ip或sys.list_modules检查。network.managed 状态参数详解managed是win_network模块唯一对外开放的状态函数salt/states/win_network.py签名如下managed(name, dns_protoNone, dns_serversNone, ip_protoNone, ip_addrsNone, gatewayNone, enabledTrue, **kwargs)各参数含义与约束如下参数类型默认值说明namestr必填要管理的网卡名称如Local Area Connection #2、Ethernet1dns_protostrNoneDNS 获取方式仅允许static或dhcp。设为static时配合dns_servers指定 DNS 列表设为dhcp时由 DHCP 下发 DNSdns_serverslistNone静态 DNS 服务器列表。传空列表[]表示清空现有 DNS 列表传None表示不做任何改动ip_protostrNoneIP 获取方式仅允许static或dhcp。设为static时配合ip_addrs和可选的gateway设置静态地址ip_addrslistNone静态 IPv4 地址列表格式为ip-address/subnet-length例如192.168.0.11/24gatewaystrNone网卡默认网关 IP仅在ip_proto: static时可设置enabledboolTrue设为False时确保该网卡处于禁用状态两个协议参数在官方文档中被明确标注为必须提供dns_proto与ip_proto均为必填。参数校验逻辑位于_validate辅助函数salt/states/win_network.py主要包括dns_proto/ip_proto必须是static或dhcp之一非法取值会让状态直接失败返回dns_proto must be one of the following: static, dhcp之类的报错dns_proto: dhcp时不允许同时设置dns_serversdns_servers必须格式化为列表且其中每个条目须通过salt.utils.validate.net.ipv4_addr校验否则报Invalid DNS server IPs: ...ip_proto: dhcp时不允许设置ip_addrs与gatewayip_proto: static时ip_addrs为必填、必须为列表且每个条目是合法 IPv4 地址gateway若提供必须是合法 IPv4 地址。SLS 配置示例从 DHCP 到静态网络全部使用 DHCP官方文档给出的最小配置——DNS 与 IP 均由 DHCP 下发Local Area Connection #2: network.managed: - dns_proto: dhcp - ip_proto: dhcp静态 DNS 与静态 IP同时配置静态 DNS 与静态 IPLocal Area Connection #2: network.managed: - dns_proto: static - dns_servers: - 8.8.8.8 - 8.8.4.4 - ip_proto: static - ip_addrs: - 10.2.3.4/24附加默认网关静态 IP 场景下可额外指定默认网关Local Area Connection #2: network.managed: - dns_proto: static - dns_servers: - 8.8.8.8 - 8.8.4.4 - ip_proto: static - ip_addrs: - 10.2.3.4/24 - gateway: 10.2.3.1清空静态 DNS官方文档强调传空列表[]用于清空现有 DNS 服务器列表而None表示不操作Ethernet1: network.managed: - dns_proto: static - dns_servers: [] - ip_proto: dhcp子网长度换算IP 地址必须以ip/subnet-lengthCIDR形式给出。若手头只有传统子网掩码可使用执行模块提供的便捷函数换算ip.get_subnet_length 255.255.255.0会返回24实现在 salt/modules/win_ip.py内部调用salt.utils.network.get_net_size非法掩码会抛SaltInvocationError。变更检测与幂等_changes 如何工作managed会先通过ip.get_interface读取网卡当前状态再调用_changessalt/states/win_network.py对比期望配置仅在存在差异时才执行修改。对比依据的是执行模块返回的「legacy 格式」字段包括DHCP enabledYes/No——用于判断当前 IP 协议类型Statically Configured DNS Servers——静态 DNS 配置DNS servers configured through DHCP——DHCP 下发的 DNSip_addrs——当前 IP/CIDR 列表由_addrdict_to_ip_addrs从IP AddressSubnet重新拼装Default Gateway——当前默认网关。对比逻辑要点当前 DNS 若为静态且与期望列表不同则记录dns_servers变更当前 DNS 若来自 DHCP 而目标切到static也会记录变更dns_proto与ip_proto不等时记录协议切换变更ip_addrs与gateway仅在目标为static时记录dns_servers为None字符串化后等于none时强制从变更集中移除保证「不传即不改」salt/states/win_network.py。由于每次运行都会先做真实差异比较network.managed天然具备幂等性配置已符合期望时返回result: True、comment: Interface ... is up to date不产生任何动作。状态执行流程与底层 PowerShell 调用链当存在需要应用的变更时非test模式managed按如下顺序调用执行模块函数salt/states/win_network.pyDNS 切到 DHCPip.set_dhcp_dns(name)DNS 切到静态ip.set_static_dns(name, *dns_servers)空列表会被特殊处理为[[]]以便按*args展开IP 切到 DHCPip.set_dhcp_ip(name)IP 切到静态对列表首地址调用ip.set_static_ip(name, addr, gatewaygateway, appendFalse)其余地址以gatewayNone, appendTrue追加这些执行模块函数salt/modules/win_ip.py最终通过salt.utils.win_pwsh.PowerShellSession驱动 PowerShell 完成系统级修改静态 IPset_static_ipsalt/modules/win_ip.py先查询网卡索引与现有 IPv4 地址若地址已存在则抛CommandExecutionError随后经set_interface设置ipv4_address与ipv4_gateways并通过Get-NetIPAddress读取结果验证。DHCP IPset_dhcp_ipsalt/modules/win_ip.py读取Get-NetIPInterface的Dhcp标志为 1 时直接返回{}表示无需改动否则启用 DHCP 并验证。静态 DNSset_static_dnssalt/modules/win_ip.py先用Get-DnsClientServerAddress读取当前服务器列表与目标集合一致时返回{}跳过操作否则用Set-DnsClientServerAddress -ServerAddresses写入并回读验证。DHCP DNSset_dhcp_dnssalt/modules/win_ip.py通过Set-DnsClientServerAddress -ResetServerAddresses实现「自动获取 DNS」清空后回读确认。应用完成后managed会重新读取ip.get_interface获取新状态用salt.utils.data.compare_dicts生成changes字典并再次用_changes核对是否收敛salt/states/win_network.py若仍存在差异则返回result: False注释为Failed to set desired configuration settings for interface ...。网卡启用/禁用与 test 模式行为enabled参数控制网卡本身的启用状态。状态函数先用ip.is_enabled探测当前状态salt/states/win_network.pyenabled: False且当前启用时test模式下返回result: None并提示Interface ... will be disabled实际执行调用ip.disable失败则注释Failed to disable interface ...enabled: False且已禁用时注释追加(already disabled)结果保持成功enabled: True且当前禁用时会先调用ip.enable启用网卡启用失败则直接返回失败并中止后续配置。test模式salt state.apply ... testTrue下不会做任何真实修改managed会逐条列出将要执行的变更如DNS protocol will be changed to: static、DNS servers will be set to the following: ...、Default gateway will be set to ...或Default gateway will be removed并返回result: Nonesalt/states/win_network.py。强烈建议在批量下发前先以 test 模式演练因为网卡配置一旦变更可能短暂中断管理通道尤其是通过该网卡建立的 salt-master 连接。单元测试与验证参考该状态的既有行为在 tests/pytests/unit/states/test_win_network.py 中有完整覆盖可作为理解语义的辅助参考主要用例包括test_managed_missing_parameters参数缺失时校验dns_proto/ip_proto的报错文案test_managed_test_true_changes/test_managed_test_true_no_changestest 模式下变更与无变更的返回test_managed_static_dns/test_managed_static_dns_clear/test_managed_static_dns_no_action静态 DNS 的设置、清空[]以及不传dns_servers时不做改动的行为test_managed_failed/test_managed应用失败与成功的完整返回结构。上述测试印证了关键约定dns_servers传None与不传等效均不产生动作传[]才会清空 DNS 列表。小结与使用建议salt.states.win_network用一个network.managed状态统一承载 Windows 网卡的 DNS、IP、网关与启停管理具备参数自校验、真实变更检测、test 模式预览与执行后复核收敛的完整闭环。实用建议归纳如下始终同时提供dns_proto与ip_proto取值限定static/dhcpIP 一律写成 CIDR如10.2.3.4/24必要时用ip.get_subnet_length换算掩码记住dns_servers: []清空、None不动的语义差异先跑testTrue再看真实变更避免静态网络切换导致管理链路中断若需在 Windows 主机上临时验证执行层行为可单独运行salt -G os_family:Windows ip.get_interface iface、ip.set_static_ip、ip.set_dhcp_dns等命令观察返回。进一步阅读可在仓库中查阅状态模块文档 doc/ref/states/all/salt.states.win_network.rstSphinxautomodule入口以及底层执行模块文档 doc/ref/modules/all/salt.modules.win_ip.rst。赞分享运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载相关推荐Salt 网络设备配置状态管理netconfig 状态模块完全指南Salt 网络设备配置状态管理netconfig 状态模块完全指南 导读 netconfig 是 Salt 中专门面向网络设备交换机、路由器、防火墙等配置运维配置管理后端amlogic-s9xxx-armbian静态IP配置教程固定网络地址与DNS设置amlogic s9xxx armbian静态IP配置教程固定网络地址与DNS设置 引言为何需要静态IP配置 在使用amlogic s9xxx armbi嵌入式开发工具构建工具操作系统技术栈迁移指南从国际标准到国密算法的完整实施路径技术栈迁移指南从国际标准到国密算法的完整实施路径 面对日益严峻的网络安全挑战和技术自主可控要求企业级应用正在加速从传统国际加密算法向国密算法技术栈迁移。Op密码学网络安全通信上一篇解决CosyVoice项目ONNX模型加载失败的完整指南从根源分析到部署优化下一篇Scira相关搜索基于当前查询的扩展搜索建议创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

工业互联网位置定位技术实战:AGV导航、UWB部署与精度验证全解析

工业互联网位置定位技术实战:AGV导航、UWB部署与精度验证全解析

简介:《工业互联网-位置定位技术》PPT课件面向工业互联网技术学习者、智能制造从业者及物流系统规划人员,系统讲解定位技术在智能仓储、自动化物流、机器人状态监控等场景中的核心作用,旨在帮助读者解决工业环境下的设备定位与导航选型难题&a…

2026/9/25 7:00:26 阅读更多 →
磁悬浮定位系统悬浮力全解析计算:从椭圆积分到参数灵敏度分析

磁悬浮定位系统悬浮力全解析计算:从椭圆积分到参数灵敏度分析

上个月我在Research Square挂出一篇预印本,核心是磁悬浮定位系统里永磁体与线圈之间悬浮力的全解析计算方法。说白了,这套方法想解决一个很实际的问题:设计初期要反复扫描磁体尺寸、线圈匝数、气隙等工作参数,但每改一个参数都跑有…

2026/9/25 6:59:24 阅读更多 →
07-U-Boot架构与启动流程全景

07-U-Boot架构与启动流程全景

前面几章把 SDK 的全貌、交叉工具链、编译流程都过了一遍,从这一章开始正式进入 U-Boot 阶段。U-Boot 是整个启动链上承上启下的一环–上接芯片内部的 BootROM,下接 Linux 内核,它要是跑不起来,后面内核、根文件系统全部免谈。这一章先不钻源码细节,而是站在高处把 U-Boot 的架…

2026/9/25 6:59:24 阅读更多 →

最新新闻

OpenRouter+Agent+CLI+MCP:从零搭建AI命令行代理工具链实战

OpenRouter+Agent+CLI+MCP:从零搭建AI命令行代理工具链实战

1. 从"treg"这个标题说起:一个被低估的CLI工具链整合思路第一次看到"treg"这个标题,我脑子里蹦出来的第一反应是"这又是什么缩写"。翻了一圈热词列表,OpenRouter、agent、CLI、MCP这几个词反复出现&#xff0c…

2026/9/25 10:07:01 阅读更多 →
开源代码评审新范式:规则驱动+LLM增强的多语言CR实践

开源代码评审新范式:规则驱动+LLM增强的多语言CR实践

1. 项目概述:这不是一个工具,而是一套可落地的开源代码评审范式“open-code-review”这个词乍看像某个GitHub仓库名,但实际它代表的是一种正在快速演进的工程实践——把传统依赖人工、靠经验、看心情的代码评审(Code Review&#…

2026/9/25 10:07:01 阅读更多 →
openclaw卸载终极大法:用不上、不想要、修不好,一次清干净

openclaw卸载终极大法:用不上、不想要、修不好,一次清干净

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 10:07:01 阅读更多 →
从本地踩坑到云端落地:FramePack+ComfyUI图生视频部署与调优实战

从本地踩坑到云端落地:FramePack+ComfyUI图生视频部署与调优实战

图生视频这件事,我从去年就开始折腾了。最开始是在本地那台带RTX 4060 Laptop的机器上跑,结果显存告急、驱动崩溃、D3D设备移除轮番上阵,折腾了整整一个周末才勉强跑通一个5秒的片段。后来转向云端GPU租用,才算真正把这条路走顺了…

2026/9/25 10:07:01 阅读更多 →
Status Deck:全栈开发者桌面仪表盘实战

Status Deck:全栈开发者桌面仪表盘实战

先说结论:Status Deck 是我给自己写的一个桌面仪表盘,跑在本机,全天候盯着我关心的那几件事——PR 有没有人 review、CI 有没有挂、本地那几个服务是不是还活着、磁盘还剩多少、今天的构建产物有没有偷偷胖一圈。它既不是在浏览器标签页里再开…

2026/9/25 10:07:01 阅读更多 →
以http开头的URL:从结构解析到故障排查实战

以http开头的URL:从结构解析到故障排查实战

写这种“以 http 为协议头开头的 url”的话题,很多人第一反应是:这有什么好说的?不就是http://开头的一串字符吗?但实际上,这些年我排查过不少线上问题,从 URL 编码错误导致接口 400,到明明看着…

2026/9/25 10:06:00 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →