
运维配置管理后端【免费下载链接】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),仅供参考