尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Salt Proxy 执行模块:在 Minion 上自动部署与管理 salt-proxy 进程

Salt Proxy 执行模块:在 Minion 上自动部署与管理 salt-proxy 进程 运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载导读salt_proxy是 Salt 提供的执行模块execution module用于在普通 Minion 上自动部署、配置并守护salt-proxy代理进程从而让一台设备同时扮演控制节点与代理宿主的双重角色。在管理交换机、路由器等无法直接安装 Salt Minion 的网络设备场景中该模块是与 Proxy Minion 架构 配套的关键一环。阅读本文后你将掌握configure_proxy与is_running两个核心函数的完整用法、底层实现原理以及如何通过 State、Beacon 实现代理进程的自动化部署与自愈。模块定位Proxy Minion 体系的自动化部署入口Salt 的 Proxy Minion 机制允许通过代理进程与无法运行标准 Minion 的远程设备如网络交换机、物联网硬件通信。传统做法是手工在主机上启动salt-proxy --proxyidname进程而salt_proxy模块salt/modules/salt_proxy.pyversionadded:: 2015.8.3将这一过程代码化它由普通 Minion执行替宿主完成两件核心工作写入代理配置文件在 Salt 配置目录下生成proxy文件记录 master 地址启动代理进程以守护进程-d方式拉起salt-proxy --proxyidname。这意味着你可以在 master 上向任意 Minion 下发指令让它临时变成一个代理宿主从而把 proxy minion 的部署纳入 Salt 的统一自动化体系而不是逐台手工操作。configure_proxy一键完成配置写入与进程启动configure_proxy是模块的入口函数salt/modules/salt_proxy.py#L104-L146签名如下def configure_proxy(proxyname, startTrue):参数说明参数类型默认值说明proxynamestr必填该代理实例的名称必须与 master 端 pillar 中定义的 proxy ID 一致如p8000startboolTrue是否在配置写入后启动salt-proxy进程设为False时仅完成配置落盘调用方式在 master 上针对承载代理的普通 Minion示例中命名为deviceminion执行salt deviceminion salt_proxy.configure_proxy p8000执行流程与返回结构从源码看该函数依次调用两个内部辅助函数并把结果合并为标准的 Salt 返回字典_proxy_conf_file(proxyfile, test)salt/modules/salt_proxy.py#L42-L67检查CONFIG_DIR/proxy是否已存在。不存在则通过_write_proxy_confsalt/modules/salt_proxy.py#L20-L39写入内容master: master地址master 地址取自__grains__[master]已存在则跳过并记录 already exists。_proxy_process(proxyname, test)salt/modules/salt_proxy.py#L84-L101先调用_is_proxy_running探测同名进程若未运行则执行salt-proxy --proxyidproxyname -l info -d即以 info 级别日志、守护进程模式启动代理若startFalse则跳过进程启动步骤仅在 changes 中记录 Start is False, not starting salt-proxy process。最终返回{ result: status_file and status_proc, # 文件写入与进程启动是否全部成功 changes: {old: ..., new: ...}, # 变更前后信息 }其中changes.new会包含诸如Salt Proxy: Started proxy process for p8000的说明便于在 state 输出中直接观察本次变更内容。关键细节test 模式dry-run函数开头的test __opts__[test]salt/modules/salt_proxy.py#L125使模块天然支持 Salt 的 test 模式在testTrue时_proxy_conf_file与_proxy_process只记录将会发生什么如Salt Proxy: Update required to proxy conf ...不真正写文件、不启动进程方便先演练再执行。关键细节proxy 文件的位置proxy配置文件的落盘路径由os.path.join(salt.syspaths.CONFIG_DIR, proxy)决定salt/modules/salt_proxy.py#L128。CONFIG_DIR在 salt/syspaths.py 中按平台推导Linux 下通常为/etc/salt即最终生成/etc/salt/proxyWindows/macOS 等平台对应/usr/local/etc/salt、/var/local/salt/etc等路径。这也解释了为什么该模块通常要求以具备配置目录写权限的用户如 root运行。is_running检查指定代理进程是否存活is_runningsalt/modules/salt_proxy.py#L149-L167用于查询某个 proxy ID 对应的salt-proxy进程是否存在salt deviceminion salt_proxy.is_running p8000其底层由_is_proxy_runningsalt/modules/salt_proxy.py#L70-L81实现通过cmd.run_all执行进程匹配命令ps ax | grep salt-proxy --proxyidp8000 | grep -v grep返回结构为{result: True/False}proxyname经过shlex.quote转义salt/modules/salt_proxy.py#L74-L76避免特殊字符注入命令设置了 5 秒超时避免在极端情况下阻塞执行。该函数是 State 与 Beacon 判断是否需要拉起进程的依据也是日常巡检代理存活状态的最小化工具。实战场景一通过 State 在 Minion 上部署 Proxysalt_proxy执行模块被封装为同名 State 模块salt/states/salt_proxy.pyconfigure_proxy(name, proxynamep8000, startTrue)直接透传调用执行模块并把执行结果包装为标准 state 返回salt/states/salt_proxy.py#L31-L56。这样即可把代理部署写成可重复执行的 SLS官方教程 Proxy Minion States 给出了完整七步流程1. 在 master 的 pillar top 中为代理定义条目base: p8000: - p80002. 创建/srv/pillar/p8000.sls默认 pillar_roots 下proxy: # 根据实际 proxymodule 设置 proxytype proxytype: ssh_sample host: saltyVM username: salt password: badpass3. 在 state 树中创建salt_proxy.slssalt-proxy-configure: salt_proxy.configure_proxy: - proxyname: p8000 - start: True # 如果进程未运行则启动它4~5. 确保 master 与普通 minion 运行并在目标 minion 上执行# salt device_minion state.sls salt_proxy这会在device_minion上写入/etc/salt/proxy若不存在并启动salt-proxy进程。6. 在 master 上接受代理的密钥salt-key -y -a p80007. 现在即可直接对代理下发命令salt p8000 pkg.list_pkgs实战场景二通过 Beacon 实现代理进程自愈除了手动/State 触发Salt 还提供了salt_proxyBeaconsalt/beacons/salt_proxy.pyversionadded:: 2015.8.3让 minion 周期性地检查并自动拉起宕掉的代理进程。其配置方式beacons: salt_proxy: - proxies: p8000: {} p8001: {}Beacon 每次触发时调用beacon(config)salt/beacons/salt_proxy.py#L55-L72其核心逻辑_run_proxy_processessalt/beacons/salt_proxy.py#L15-L32对每个代理名执行salt_proxy.is_running(proxy)探测存活未存活则调用salt_proxy.configure_proxy(proxy, startTrue)重新拉起返回事件消息如Proxy p8000 is already running或Proxy p8000 was started。Beacon 的配置校验由validate(config)salt/beacons/salt_proxy.py#L35-L52负责配置必须是列表、必须包含proxies字典否则返回(False, 错误信息)。底层机制补充proxy 宿主相关配置项承载代理进程的主机同样需要一份 proxy 配置。仓库提供了完整模板 conf/proxy其中与代理托管最相关的选项包括proxy_merge_grains_in_module若 proxymodule 提供grains函数是否在常规 grains 加载时调用并合并结果proxy_keep_alive与proxy_keep_alive_interval2017.7.0 起启用后由调度任务定期调用 proxymodule 的alive函数检测与远端设备的连接异常则尝试重建连接proxy_always_alive2017.7.0 起默认代理初始化即打开与远端设备的连接部分 proxymodule 支持改为按命令开关会话append_minionid_config_dirs多代理/多 minion 同机运行时可为pki_dir、cachedir等目录追加 minion ID默认对 proxy 追加cachedir避免缓存互相污染。这些选项直接决定了salt-proxy进程运行时的连接生命周期与自愈行为是与salt_proxy模块配合使用的宿主侧配置基础。测试佐证模块行为如何被验证仓库对这套机制提供了单元与集成测试可作为理解行为的辅助证据单元测试 tests/pytests/unit/beacons/test_salt_proxy.py 通过 mocksalt_proxy.is_running与salt_proxy.configure_proxy验证 Beacon 的两条分支代理已运行返回 already running与代理未运行调用配置并返回 was started同时覆盖了非法配置的校验逻辑集成测试 tests/pytests/integration/proxy/test_shell.py 在真实代理链路上验证test.ping、pkg.list_pkgs、service.*等命令能够正常往返执行从端到端角度印证了代理启动后可被 master 调度这一核心链路。总结salt_proxy执行模块虽然只有两个公开函数却是 Salt Proxy Minion 自动化落地的最小闭环configure_proxy解决如何让代理跑起来is_running解决如何确认代理还活着。配合 State 模块 做声明式部署、配合 Beacon 做故障自愈即可把原本需要逐台手工启动的salt-proxy进程变成由 Salt 自身统一编排、可重复、可巡检的受管资源。若需深入理解 proxy minion 的完整设计可继续阅读 Proxy Minion 官方主题文档 及同目录下的 demo.rst、ssh.rst 等分篇。赞分享运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载相关推荐Salt 的 proxy 执行模块与状态模块跨平台 minion 代理设置自动化管理指南Salt 的 proxy 执行模块与状态模块跨平台 minion 代理设置自动化管理指南 导读 本文基于 Salt 仓库中的 salt.modules.pro运维配置管理后端Salt ssh_pkg 执行模块深度解析基于 SSH Proxy Minion 的包管理实现Salt ssh_pkg 执行模块深度解析基于 SSH Proxy Minion 的包管理实现 导读 ssh_pkg 是 Salt 项目中专门服务于 SSH运维配置管理后端Salt dummyproxy_pkg 执行模块全解析为 Proxy Minion 测试提供包管理能力Salt dummyproxy_pkg 执行模块全解析为 Proxy Minion 测试提供包管理能力 Salt 的 dummyproxy_pkg 是一个专为运维配置管理后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表