运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载导读win_iis是 SaltStack 的 Windows 状态模块用于通过 Salt 的声明式 SLS 状态文件自动化管理 Microsoft IISInternet Information Services——包括网站、应用程序池、绑定、证书绑定、Web 应用、虚拟目录及 Web.config 级别的安全配置。本文以官方参考文档 doc/ref/states/all/salt.states.win_iis.rst 为核心骨架逐函数讲解 15 个状态函数的参数、YAML 用法与返回结构并结合 salt/states/win_iis.py 与底层执行模块 salt/modules/win_iis.py 的源码剖析其实现原理、幂等判定逻辑与测试依据帮助读者在 Windows minion 上直接落地一套可复用的 IIS 运维状态。模块概述与加载机制win_iis状态模块自 Salt 2016.3.0 版本引入位于 salt/states/win_iis.py其 Sphinx 参考页 doc/ref/states/all/salt.states.win_iis.rst 通过automodule指令自动生成 API 文档。模块内部通过__virtualname__ win_iis定义虚拟名并在__virtual__()中执行加载校验def __virtual__(): if win_iis.create_site in __salt__: return __virtualname__ return (False, win_iis module could not be loaded)也就是说只有当前 minion 的__salt__中已加载了同名的执行模块win_iis.create_site等函数存在时该状态模块才会被 Salt 加载否则加载失败并提示 win_iis module could not be loaded。底层依赖执行模块与 PowerShell状态的每个函数最终都调用 salt/modules/win_iis.py 中对应的执行函数。该执行模块__virtual__的加载条件更严格仅限 Windows 平台salt.utils.platform.is_windows()系统已安装 PowerShell通过cmd.shell_info(powershell, True)检测PowerShell 已加载WebAdministration模块即 IIS 管理功能已安装。所有实际变更操作最终都会拼装成 PowerShell cmdlet如New-Item、New-WebBinding、Set-ItemProperty、Remove-WebSite等通过_srvmgr辅助函数以 JSON 模式执行并解析返回。这意味着本模块的运维对象是IIS 7.x 及以上的 WebAdministration 管理命名空间如IIS:\Sites、IIS:\AppPools、IIS:\SslBindings。状态函数通用行为模式从 salt/states/win_iis.py 源码可以归纳出所有状态函数统一的执行模型返回结构固定为{name: ..., changes: {}, comment: , result: None}先调用底层__salt__[win_iis.list_*]查询当前实际状态幂等判定的事实来源若目标已存在且配置匹配 → 返回result: Truecomment 提示 already present若__opts__[test]为真即 Salt 的testTrue演练模式→ 返回result: Nonechanges 中标注将要发生的变化不实际执行否则调用底层create/remove/set_*执行变更并如实返回执行结果。这一查询-比对-变更-验证模式是理解下面每个函数行为的关键。网站Site管理deployed确保网站已部署win_iis.deployed用于保证指定名称的网站存在于 IIS 中。参数如下参数类型默认值说明namestr必填IIS 站点名称sourcepathstr必填站点的物理路径如C:\inetpub\site0apppoolstr站点绑定的应用程序池名称hostheaderstr绑定的主机头Host Headeripaddressstr*绑定的 IP 地址portint80绑定的 TCP 端口protocolstrhttp绑定协议http/https/ftp仅传必填参数的用法默认使用 IIS 分配的默认应用程序池site0-deployed: win_iis.deployed: - name: site0 - sourcepath: C:\inetpub\site0指定全部参数的用法site0-deployed: win_iis.deployed: - name: site0 - sourcepath: C:\inetpub\site0 - apppool: site0 - hostheader: site0.local - ipaddress: * - port: 443 - protocol: https实现要点源自源码状态层通过win_iis.list_sites()判断站点是否存在仅以站点名称为幂等依据。官方文档明确提示该函数只校验站点名称即使站点已存在且配置不同也会返回True不会修改已存在站点的配置。底层 create_site 使用New-Item -Path IIS:\Sites\name -PhysicalPath path -Bindings {protocol...;bindingInformation...}创建站点绑定信息由_get_binding_info拼装为IP:端口:主机头格式如*:80:site0.local。如果指定了apppool底层会先检查该池是否存在不存在则调用create_apppool自动创建再通过Set-ItemProperty -Name ApplicationPool将池绑定到站点。protocol参数会被强制转小写并校验仅接受(ftp, http, https)见模块级常量_VALID_PROTOCOLS非法值抛出SaltInvocationError。remove_site删除网站win_iis.remove_site删除指定网站defaultwebsite-remove: win_iis.remove_site: - name: Default Web Site实现要点状态层先以list_sites()判定站点不存在时返回 Site has already been removed。底层 remove_site 实际使用Remove-WebSite -Name name执行删除需注意删除站点不会同时删除该站点使用的应用程序池模块注释明确说明。绑定Binding管理create_binding创建 Web 绑定win_iis.create_binding为已有站点添加 Web 绑定可视为 HTTP/HTTPS 监听配置。参数参数类型默认值说明namestr必填状态的 ID无实际语义仅为 SLS 标识sitestr必填IIS 站点名hostheaderstr绑定的主机头ipaddressstr*绑定的 IP 地址portint80绑定的 TCP 端口protocolstrhttp绑定协议sslflagsint0表示证书类型与存储方式的标志位仅传必填参数site0-https-binding: win_iis.create_binding: - site: site0指定全部参数site0-https-binding: win_iis.create_binding: - site: site0 - hostheader: site0.local - ipaddress: * - port: 443 - protocol: https - sslflags: 0实现要点源码佐证幂等判定键是ipaddress:port:hostheader三要素组合由_get_binding_info生成而不是整个绑定对象官方文档注明即使绑定已存在且其他配置不同也会返回True不会改动已有绑定。底层 create_binding 调用New-WebBinding -Name site -HostHeader ... -IpAddress ... -Port ... -Protocol ...并可选传递-SslFlags。sslflags取值范围为0..3模块常量_VALID_SSL_FLAGS tuple(range(0, 4))0 表示证书存储在个人存储my store、无 SNI超出范围抛出SaltInvocationError。创建后会通过list_bindings回读验证。remove_binding删除 Web 绑定仅传必填参数删除 site0 上默认的*:80:绑定site0-https-binding-remove: win_iis.remove_binding: - site: site0指定全部参数site0-https-binding-remove: win_iis.remove_binding: - site: site0 - hostheader: site0.local - ipaddress: * - port: 443实现要点状态层以binding_info是否存在于list_bindings(site)判定是否已删除底层 remove_binding 使用Remove-WebBinding -Name site -BindingInformation ip:port:hostheader删除。证书绑定Certificate Binding管理create_cert_binding为绑定分配证书win_iis.create_cert_binding将证书按指纹 Thumbprint关联到已有的 Web 绑定上。前置条件目标 Web 绑定必须已经存在。参数类型默认值说明namestr必填证书指纹Thumbprintsitestr必填IIS 站点名hostheaderstr绑定的主机头ipaddressstr*绑定的 IP 地址portint443绑定的 TCP 端口sslflagsint0证书类型与存储标志site0-cert-binding: win_iis.create_cert_binding: - name: 9988776655443322111000AAABBBCCCDDDEEEFFF - site: site0指定全部参数site0-cert-binding: win_iis.create_cert_binding: - name: 9988776655443322111000AAABBBCCCDDDEEEFFF - site: site0 - hostheader: site0.local - ipaddress: 192.168.1.199 - port: 443 - sslflags: 1实现要点源码佐证底层 create_cert_binding 会做多层校验①绑定必须已存在②证书必须已存在于本地计算机证书库_list_certs读取Cert:\LocalMachine\My③若绑定已分配同名证书指纹则视为已满足若分配了不同的指纹状态层会返回result: False并提示 Certificate binding already present with a different thumbprint避免静默替换证书。对 IIS 7.5 及更早版本_iisVersion() 8由于不支持 HTTPS 的 SNI证书绑定路径会自动去掉主机头部分并使用0.0.0.0替代*见源码中iis7path的处理分支IIS 8 使用New-Item -Path IIS:\SslBindings\ip!port!hostheader -Thumbprint name -SSLFlags flags。证书指纹会被统一转为大写后比较。该函数自 Salt 2016.11.0 引入。remove_cert_binding移除绑定上的证书site0-cert-binding-remove: win_iis.remove_cert_binding: - name: 9988776655443322111000AAABBBCCCDDDEEEFFF - site: site0指定全部参数site0-cert-binding-remove: win_iis.remove_cert_binding: - name: 9988776655443322111000AAABBBCCCDDDEEEFFF - site: site0 - hostheader: site0.local - ipaddress: 192.168.1.199 - port: 443实现要点该函数只移除绑定上的证书不会删除 Web 绑定本身。状态层通过list_cert_bindings(site)比对binding_info与当前证书指纹底层 remove_cert_binding 使用 PowerShell 在IIS:\Sites下定位绑定的Binding对象并调用其RemoveSslCertificate()方法注释说明因为IIS:\SslBindings下的子项在某些情况下不返回主机头信息故改用IIS:\Sites查询。应用程序池Application Pool管理create_apppool创建应用程序池site0-apppool: win_iis.create_apppool: - name: site0实现要点状态层仅以应用程序池名称为幂等依据同名已存在即返回True不会修改现有池的其他配置。底层 create_apppool 调用New-WebAppPool -Name name。remove_apppool删除应用程序池defaultapppool-remove: win_iis.remove_apppool: - name: DefaultAppPool实现要点底层 remove_apppool 调用Remove-WebAppPool -Name name状态层先经list_apppools()判定是否已删除。container_setting批量设置容器配置项win_iis.container_setting用于设置 IIS 容器Container的属性值。支持的容器类型container参数AppPools、Sites、SslBindings。site0-apppool-setting: win_iis.container_setting: - name: site0 - container: AppPools - settings: managedPipelineMode: Integrated processModel.maxProcesses: 1 processModel.userName: TestUser processModel.password: TestPassword processModel.identityType: SpecificUserSites容器示例site0-site-setting: win_iis.container_setting: - name: site0 - container: Sites - settings: logFile.logFormat: W3C logFile.period: Daily limits.maxUrlSegments: 32实现要点源码佐证状态层通过win_iis.get_container_setting读取当前值逐个设置项比较若所有值已匹配则返回TrueSettings already contain the provided values.。若settings为空直接返回Truecomment 为 No settings to change provided.。密码脱敏processModel.password在 changes 中始终以XXX-REDACTED-XXX显示绝不回显明文密码见状态层 509-513 行与 537-553 行的处理逻辑。identityType 映射processModel.identityType的数字值会被映射为字符串再比较映射表为{0: LocalSystem, 1: LocalService, 2: NetworkService, 3: SpecificUser, 4: ApplicationPoolIdentity}避免因数字 vs 字符串导致误判差异底层 set_container_setting 中还有反向映射字符串转数字以兼容 Server 2008 的存储格式。执行后状态层会回读新值并逐项验证把未能生效的设置放入failures此时返回result: Falsecomment 为 Some settings failed to change.。单元测试 tests/pytests/unit/states/test_win_iis.py 中的test_container_settings_password_redacted系列用例覆盖了密码脱敏、test 模式与失败回退三种路径。Web 应用Application管理create_app创建 Web 应用win_iis.create_app在指定站点下创建 Web 应用Application。参数name应用名、site站点名、sourcepath物理路径、apppool可选应用程序池名。site0-v1-app: win_iis.create_app: - name: v1 - site: site0 - sourcepath: C:\inetpub\site0\v1指定全部参数site0-v1-app: win_iis.create_app: - name: v1 - site: site0 - sourcepath: C:\inetpub\site0\v1 - apppool: site0实现要点状态层以应用名为幂等依据底层 create_app 使用New-WebApplication -Name name -Site site -PhysicalPath path [-ApplicationPool apppool]创建指定apppool时同样遵循池不存在则自动创建的规则。remove_app删除 Web 应用site0-v1-app-remove: win_iis.remove_app: - name: v1 - site: site0set_app修改 Web 应用配置win_iis.set_app自 Salt 2017.7.0 引入用于修改已存在的 Web 应用配置。官方文档提示该函数只配置已存在的应用且参数大小写敏感。可用设置项physicalPath—— Web 应用的物理路径applicationPool—— 应用所属的应用程序池userName—— connectAs 连接用户password—— connectAs 用户的密码site0-webapp-setting: win_iis.set_app: - name: app0 - site: Default Web Site - settings: userName: domain\user password: pass physicalPath: c:\inetpub\wwwroot applicationPool: appPool0实现要点状态层先经win_iis.get_webapp_settings读取当前值并比对再调用win_iis.set_webapp_settings执行执行后回读验证未生效的设置进入failures并使result为False。虚拟目录Virtual Directory管理create_vdir创建虚拟目录参数name虚拟目录名、site站点名、sourcepath物理路径、app所属 Web 应用默认/即站点根目录。site0-foo-vdir: win_iis.create_vdir: - name: foo - site: site0 - sourcepath: C:\inetpub\vdirs\foo指定全部参数挂在应用v1下site0-foo-vdir: win_iis.create_vdir: - name: foo - site: site0 - sourcepath: C:\inetpub\vdirs\foo - app: v1remove_vdir删除虚拟目录site0-foo-vdir-remove: win_iis.remove_vdir: - name: foo - site: site0指定全部参数site0-foo-vdir-remove: win_iis.remove_vdir: - name: foo - site: site0 - app: v1实现要点状态层以list_vdirs(site, app)为幂等判定依据底层 create_vdir 调用New-WebVirtualDirectory -Name name -Site site -PhysicalPath path [-Application app]。模块级常量_DEFAULT_APP /即默认应用根路径。Web 配置Web.config 级管理webconfiguration_settings细粒度安全配置win_iis.webconfiguration_settings是功能最强大的状态函数可直接修改 IIS 的配置节对应 Web.config / applicationHost.config 层面的属性适合批量下发安全基线。参数说明nameIIS PSPath 路径可选值如MACHINE、MACHINE/WEBROOT、IIS:\、IIS:\Sites\sitename等决定配置作用域机器级、站点级settings字典的字典。外层键是配置节 filter如system.web/authentication/forms内层键是配置属性名与值。集合匹配语法若需匹配集合Collection中的特定项键可使用Collection[{name: site0}].logFile.directory这种形式。MACHINE/WEBROOT级示例机器级表单与 Cookie 安全MACHINE-WEBROOT-level-security: win_iis.webconfiguration_settings: - name: MACHINE/WEBROOT - settings: system.web/authentication/forms: requireSSL: True protection: All credentials.passwordFormat: SHA1 system.web/httpCookies: httpOnlyCookies: TrueIIS:\Sites\site0站点级示例HTTP 错误与请求过滤site0-IIS-Sites-level-security: win_iis.webconfiguration_settings: - name: IIS:\Sites\site0 - settings: system.webServer/httpErrors: errorMode: DetailedLocalOnly system.webServer/security/requestFiltering: allowDoubleEscaping: False verbs.Collection: - verb: TRACE allowed: False fileExtensions.allowUnlisted: FalseIIS:\级集合匹配示例为指定站点设置日志目录site0-IIS-level-security: win_iis.webconfiguration_settings: - name: IIS:\ - settings: system.applicationHost/sites: Collection[{name: site0}].logFile.directory: C:\logs\iis\site0实现要点源码佐证状态层先把settings扁平化为[{filter: ..., name: ..., value: ...}]列表调用win_iis.get_webconfiguration_settings读取当前值做差异比对。对以Collection结尾的属性名会以列表逐项映射的方式比较list(map(dict, ...))对新引入、当前值列表中没有对应项的设置视为新增变更old为{}。执行后同样回读验证失败的设置计入failures并返回result: False。底层 set_webconfiguration_settings 通过Set-WebConfigurationProperty -Filter filter -Name name -Value value -PSPath path批量执行。底层模块还提供了_collection_match_to_index、_prepare_settings等辅助函数将Collection[{...}]语法转换为集合下标并在 tests/pytests/unit/modules/test_win_iis.py 中有专门单元测试覆盖。单元测试 tests/pytests/unit/states/test_win_iis.py 的test_webconfiguration_settings_collection/test_webconfiguration_settings_collection_failure分别验证了集合配置的成功与失败路径。测试与验证围绕win_iis状态模块仓库提供了双层测试状态层单元测试tests/pytests/unit/states/test_win_iis.py通过patch.dict模拟__salt__与__opts__验证返回结构、密码脱敏、集合配置比较、失败归集等状态逻辑用例含test_container_settings_password_redacted、test_webconfiguration_settings_collection等。执行模块单元测试tests/pytests/unit/modules/test_win_iis.py覆盖create_apppool、create_site、remove_site、create_binding、create_cert_binding、get/set_container_setting、get/set_webconfiguration_settings等全部底层函数包括test_create_site_failed、test_create_binding_failed、test_set_webconfiguration_settings_failed等失败路径。实战建议与注意事项综合文档与源码在 Windows minion 上使用win_iis状态时建议注意以下边界幂等判定粒度有限deployed、create_binding、create_apppool、create_app、create_vdir等函数只按对象名称或绑定三元组判定不比对完整配置若需确保配置完全一致应配合container_setting、set_app、webconfiguration_settings等设置型函数使用。test 模式安全演练所有状态函数均尊重 Salt 的testTrue模式__opts__[test]演练时返回result: None与将发生的变更不会实际改动 IIS。密码安全container_setting与set_app涉及的密码在返回的 changes 中一律脱敏为XXX-REDACTED-XXX不会在日志或事件总线上泄露明文。协议与 SSL 标志校验protocol仅支持http/https/ftpsslflags仅支持0..3非法输入会被底层执行模块直接抛出SaltInvocationError。IIS 版本差异证书绑定的处理逻辑针对 IIS 7.5 及更早版本做了 SNI 兼容分支部署到旧版 Windows Server 时无需手工调整绑定路径。平台前提本模块仅适用于已安装 IIS含 PowerShell WebAdministration 模块的 Windows minion在非 Windows 或未安装 IIS 的机器上状态模块将无法加载。通过将这些状态函数编排进 SLS 文件并配合 Salt 的 highstate 调度即可把 IIS 站点、应用池、绑定、证书与安全基线全部纳入声明式配置管理实现可重复、可审计的 Windows Web 服务器运维。赞分享运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载相关推荐Flipper Zero 固件 JS SDKgui/dialog 对话框视图的完整实战指南Flipper Zero 固件 JS SDKgui/dialog 对话框视图的完整实战指南 本篇基于 Flipper Zero 固件仓库中的 JS Dialo运维配置管理后端Salt cron 状态模块完全指南用 Salt States 声明式管理 Unix crontabSalt cron 状态模块完全指南用 Salt States 声明式管理 Unix crontab 导读 cron 状态模块是 SaltStack 中用于声运维配置管理后端SaltStack apache_conf 状态模块实战指南用 Salt 声明式管理 Apache 配置文件启停SaltStack apache_conf 状态模块实战指南用 Salt 声明式管理 Apache 配置文件启停 导读 本文围绕 Salt 仓库中的 apac运维配置管理后端上一篇gopass 使用指南下一篇mort 开源项目安装与使用教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
