ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Salt Cloud 命令行完全指南:用 profile 与 map 在云上批量编排虚拟机

2026/9/23 1:22:47 拓冰建站 浏览量
Salt Cloud 命令行完全指南:用 profile 与 map 在云上批量编排虚拟机 运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载Salt Cloud 是 Salt 项目中用于在各类公有云上批量开通provision虚拟机的子系统它通过profile配置文件与map映射文件两套干净的声明式体系把多云环境下的建机、查询、销毁等操作统一收敛到salt-cloud这一个命令之下。本文以官方 CLI 参考文档 doc/ref/cli/salt-cloud.rst 为主体结合仓库中 conf/cloud、conf/cloud.profiles、conf/cloud.maps.d/cloud.map 等配置样例与 salt/cloud/cli.py 源码实现完整讲解salt-cloud的全部命令行参数、典型用法和底层执行逻辑。读完本文你将能够独立完成按 profile 建机、按 map 批量建机、查询云端节点、执行 provider 特有动作、安全销毁实例的完整实操闭环。命令概览与核心概念salt-cloud的设计目标很明确用一种统一的命令行界面屏蔽不同云厂商AWS/EC2、Rackspace/OpenStack、DigitalOcean、Linode 等之间的 API 差异。它的两条核心操作抽象是Profile配置文件描述一台虚拟机长什么样包括 provider、镜像image、规格size、部署脚本script等。定义于cloud.profiles文件或cloud.profiles.d/目录。Map映射文件描述一次要开哪些机器即把若干名字映射到某个 profile 下。定义于cloud.map文件或cloud.maps.d/目录默认约定位于/etc/salt/cloud.maps.d/见 conf/cloud.maps.d/cloud.map 顶部注释。官方 Synopsis 给出了命令的基础形态salt-cloud -m /etc/salt/cloud.map # 按 map 文件建全部机器 salt-cloud -m /etc/salt/cloud.map NAME # 按 map 文件只建 NAME salt-cloud -m /etc/salt/cloud.map NAME1 NAME2 # 按 map 文件建 NAME1、NAME2 salt-cloud -p PROFILE NAME # 按 profile 建一台 NAME salt-cloud -p PROFILE NAME1 NAME2 NAME3 NAME4 NAME5 NAME6 # 按 profile 批量建多台从源码结构看salt-cloud的执行入口在 salt/cloud/cli.py 的SaltCloud.run()方法中CLI 解析完成并做用户权限校验要求以 salt-master 同用户或 root 运行后会构造salt.cloud.Map映射器随后根据命令行选项分派到run_profile、run_map、query、destroy、do_function等具体路径。整个流程还会把命令行、cloud主配置、cloud.profiles配置合并到同一个 opts 字典中见 salt/cloud/cli.py 的模块注释。通用选项所有 salt-* 命令的公共底座salt-cloud通过.. include::机制复用了 CLI 文档集中的公共选项对应 doc/ref/cli/_includes/common-options.rst选项说明--version打印当前运行的 Salt 版本--versions-report显示程序依赖与版本号后退出-h, --help显示帮助信息并退出-c CONFIG_DIR, --config-dirCONFIG_DIR指定 Salt 配置目录默认大多数系统为/etc/salt该目录下包含 master、minion 与 cloud 相关配置执行选项建机、销毁与动作执行类选项控制 salt-cloud 真正动手做什么是日常使用频率最高的一组参数。-L LOCATION, --locationLOCATION指定要连接的 region/区域。例如针对 AWS 可传us-east-1之类的区域标识具体取值取决于对应云 driver 的实现avail_locations可列出可用区域。-a ACTION, --actionACTION对已存在的实例执行云厂商特有动作如 reboot、start、stop 等。该参数必须附带一个或多个实例名。在 salt/cloud/cli.py 中-a的分支会先收集实例名并把形如keyvalue的附加参数解析为 kwargs然后调用mapper.do_action(names, kwargs)执行动作salt-cloud -a reboot myvm1 myvm2 salt-cloud -a stop keypairnamemykey myvm1 # 附带的 keyvalue 会作为动作参数注意命令行里形如namevalue的参数不会被当作机器名而是被解析为动作的关键字参数见 salt/cloud/cli.py。-f FUNC-NAME PROVIDER, --functionFUNC-NAME PROVIDER执行一个不针对具体实例的、云厂商特有的函数如列出镜像、创建 keypair 等。该参数要求显式指定 provider例如nova。对应源码中的mapper.do_function(provider, function_name, kwargs)调用函数参数同样必须以keyvalue形式传入否则会报错提示salt-cloud -f show_image my-ec2-config imageami-54cf5c3d源码 salt/cloud/cli.py 会扫描所有剩余参数将含的解析进 kwargs并强制要求所有函数参数都以 kwargs 形式传递。-p PROFILE, --profilePROFILE从指定的 profiles 文件中选取单个 profile来创建命名云主机。profile 必须已在 profiles 文件中定义。这是最直接的按模板开一台机器的方式salt-cloud -p fedora_rackspace web1 web2 db1 db2上述命令会用fedora_rackspace这个 profile 同时创建 4 台机器。对应源码调用链为mapper.run_profile(profile, names)最终由Map.run_profile - Map.create - CloudClient.create逐台完成创建与 salt-bootstrap 部署。-m MAP, --mapMAP指定要使用的map 文件。单独使用不带其他选项时会确保 map 文件中声明的所有 VM 都被创建若同名 VM 已存在则自动跳过。这是批量编排的核心入口salt-cloud -m /path/to/cloud.map salt-cloud -m /path/to/cloud.map -P # 并行创建在 salt/cloud/cli.py 中map 分支会先调用mapper.map_data()生成执行计划dmap计划包含三类结果errorsprofile 配置错误、existing已存在将跳过的机器、create待创建的机器必要时还有destroy配合-d/-H时。执行前会把待建/待删清单打印出来请求确认除非加了-y。仓库中的示例 map 文件 conf/cloud.maps.d/cloud.map 展示了其格式——顶层键为 profile 名值为该 profile 下的主机名列表fedora_rs: - fedora1 - fedora2 - fedora3 - fedora4 - fedora5 ubuntu_rs: - ubuntu1 - ubuntu2 - ubuntu3 - ubuntu4 - ubuntu5-H, --hard配合 map 文件使用的危险选项。默认行为是确保 map 中所有机器存在加上-H后凡是存在于已配置云 provider 上、但未出现在 map 文件中的 VM 都会被销毁。文档明确警告这是破坏性操作务必谨慎使用salt-cloud -m /path/to/cloud.map -H # 删除 map 中未列出的所有 VM-d, --destroy传入一个或多个 VM 名称salt-cloud 会在已配置的云 provider 中搜索这些名称并销毁对应机器。破坏性操作需谨慎。可以与-m连用表示按 map 删除一批机器salt-cloud -d myvm1 myvm2 # 销毁指定机器 salt-cloud -m /path/to/cloud.map -d # 销毁 map 中列出的所有机器源码中-d分支要求-d与names 或 map二者取一配合使用且不允许同时提供 map 文件与实例名否则直接报错随后调用mapper.delete_map()针对 map或mapper.get_running_by_names()针对名字找出匹配机器打印待销毁清单并请求确认见 salt/cloud/cli.py。-P, --parallel默认批量建机会串行执行-P会让每台云 VM 的创建运行在独立进程中从而一次性并发构建大批机器salt-cloud -m /path/to/cloud.map -P文档特别提示部分云厂商的系统似乎并不适合这种创建洪峰大批量建机时要密切盯紧云厂商侧的状态。源码层面对应Map.create_multiprocessing/enter_mainloop等并发基础设施见 salt/cloud/init.py 中create_multiprocessing、destroy_multiprocessing等函数定义。-u, --update-bootstrap将salt-bootstrap 更新到最新的稳定版。该选项在 salt/cloud/cli.py 中会优先处理调用salt.utils.cloud.update_bootstrap()后直接输出结果并退出。salt-bootstrap 即用于在新机器上部署 salt-minion 的引导脚本仓库中的各类部署脚本位于 salt/cloud/deploy/如Ubuntu.sh、Fedora.sh、bootstrap-salt.sh等更新 bootstrap 即更新这些引导脚本的来源。-y, --assume-yes对所有确认问题默认回答 yes实现无人值守执行。对应源码print_confirm()中的判断——若assume_yes为真则直接放行否则打印清单并交互式等待输入Proceed? [N/y]见 salt/cloud/cli.py。-k, --keep-tmpdeploy.sh执行完成后不清理 /tmp/ 下的临时文件便于排查部署脚本问题。--show-deploy-args在返回的数据中包含部署 minion 时使用的选项用于审计/调试。--script-argsSCRIPT_ARGS以空格分隔的字符串形式向 bootstrap 脚本传递自定义脚本参数用于定制化部署salt-cloud -p myprofile myvm --script-argsgit vim查询选项掌握云端节点状态查询类选项不创建也不销毁任何资源只读取并展示云厂商返回的节点信息适合做盘点与巡检。-Q, --query对已配置的云 provider 执行一次查询返回正在运行的节点信息精简列表salt-cloud -Q-F, --full-query执行查询并打印所有云 VM 的全部可用信息。可与-m连用仅展示指定 map 内机器的信息salt-cloud -F salt-cloud -m /path/to/cloud.map -F-S, --select-query执行查询并打印经过筛选的节点信息比-Q详细、比-F精简。同样可与-m连用salt-cloud -S salt-cloud -m /path/to/cloud.map -S查询选项在 salt/cloud/cli.py 中统一分派selected_query_option对应-Q/-F/-S有 map 时走mapper.interpolated_map(query...)否则走mapper.map_providers_parallel(query...)。Map类中的query、full_query、select_query、min_query方法则分别映射到云 driver 的list_nodes、list_nodes_full、list_nodes_select、list_nodes_min参见 salt/cloud/init.py 与 salt/cloud/libcloudfuncs.py 中同名函数。注意官方在 CLI 中展示-Q/-F/-S与 map 的搭配示例salt-cloud -m /path/to/cloud.map -Q # 显示 map 中所有 VM 的状态--list-providers列出所有已配置的 provider。对应源码mapper.provider_list()。--list-profiles列出所有已配置的 profiles该选项自 2014.7.0 版本加入。可以传入具体云厂商如digitalocean查看该厂商关联的 profile也可以传all列出全部salt-cloud --list-profiles salt-cloud --list-profiles digitalocean salt-cloud --list-profiles all云资源清单查询locations / images / sizes这三个选项用于预览云厂商可用的资源目录是编写 profile 前调研环境的必备工具。它们的共同用法是传入具体 provider 名如linode、AWS或传all查询所有已配置 provider。salt-cloud --list-locationslinode # 列出 linode 可用区域 salt-cloud --list-locationsall # 列出所有 provider 的可用区域 salt-cloud --list-imageslinode # 列出 linode 可用镜像 salt-cloud --list-imagesall salt-cloud --list-sizesAWS # 列出 AWS 可用规格 salt-cloud --list-sizesall在源码中分别对应Map的location_list、image_list、size_list方法salt/cloud/init.py最终落到 libcloud 层的avail_locations、avail_images、avail_sizes见 salt/cloud/libcloudfuncs.py。这些查询信息正是写 profile 时location、image、size三个字段取值的重要来源。云凭据管理--set-passwordsalt-cloud --set-passwordUSERNAME PROVIDER为云 provider 配置密码并保存到系统的 keyring密钥环中。PROVIDER可以只写厂商名也可以写成厂商:驱动的精确形式salt-cloud --set-password bob rackspace # 模糊指定 salt-cloud --set-password bob rackspace:openstack # 精确到驱动官方文档明确标注该选项DEPRECATED!已弃用。从源码看其实现将凭据名称规范化为salt.cloud.provider.PROVIDER后调用salt.utils.cloud.store_password_in_keyring()写入 keyring见 salt/cloud/cli.py。由于已弃用新环境建议直接通过 cloud provider 配置文件中的password字段等方式管理凭据。输出选项控制返回数据的呈现salt-cloud通过 include 机制复用了输出选项见 doc/ref/cli/_includes/output-options.rst其中与多云场景最相关的有选项说明--out OUTPUTTER指定输出器可选highstate、json、key、pprint、raw、txt、yaml等输出器不支持该数据时会自动回退到pprint--out-indent N按 N 个空格缩进输出负值禁用缩进仅对支持缩进的输出器生效--out-fileFILE将输出写入指定文件--out-file-append以追加方式写入输出文件--no-color/--force-color禁用/强制彩色输出。彩色含义绿色成功红色失败蓝色变更与成功黄色预期将发生的配置变更--state-outputMODE覆盖 minion 的 state_output 配置可选full、terse、mixed、changes、filter并支持_id、_color后缀如full_id_color--state-verboseTrue/False覆盖 state_verbose 配置在多云脚本化场景中--outjson --out-file/tmp/cloud.json这类组合非常适合把查询/建机结果喂给上层自动化系统。完整实战从 profile 到批量建机将以上参数串联起来一个典型的 salt-cloud 使用流程如下。第 1 步配置 provider 凭据。在cloud.providers或cloud.providers.d/中声明云厂商连接信息仓库样例见 conf/cloud.providers.d/如ec2.conf、linode.conf、digitalocean.conf等。第 2 步定义 profile。在 conf/cloud.profiles 或cloud.profiles.d/中定义机器模板。仓库样例揭示了核心字段base_ec2: provider: my-ec2-config image: ami-e565ba8c size: t1.micro script: python-bootstrap minion: cheese: edam其中provider指向 providers 文件中定义的连接别名image与size可用上文--list-images/--list-sizes查询script指定使用 salt/cloud/deploy/ 下的部署脚本如python-bootstrap、Ubuntu、Fedoraminion下的键值会写入新机器的 minion 配置。第 3 步按 profile 单建或批量建机。salt-cloud -p fedora_rackspace web1 web2 db1 db2第 4 步用 map 做幂等批量编排。在 map 文件中声明要保证存在的机器集合见 conf/cloud.maps.d/cloud.map然后salt-cloud -m /path/to/cloud.map # 确保 map 内机器全部存在 salt-cloud -m /path/to/cloud.map -P # 并行创建 salt-cloud -m /path/to/cloud.map -Q # 查看 map 内机器状态 salt-cloud -m /path/to/cloud.map -d # 销毁 map 内机器 salt-cloud -m /path/to/cloud.map -H # 销毁 map 外机器危险第 5 步状态查询与清理。用-Q/-F/-S盘点云上资产用-d或-a执行销毁与实例级动作。所有破坏性操作执行前print_confirm()都会打印待操作清单并要求输入y确认除非加了-y这是防止误操作的关键防线见 salt/cloud/cli.py。执行模型与注意事项从 salt/cloud/cli.py 源码可以梳理出 salt-cloud 的执行模型权限要求若运行在 master 机器上必须以 salt-master 同用户身份运行否则需对配置目录有写权限否则启动即报错退出。配置合并CLI 参数、cloud主配置、master 配置用于 master 集成、cloud.profiles配置四路数据合并为一个 optsprofiles 最终挂在opts[profiles]下。map 执行计划map_data()生成errors/existing/create/destroy四类结果已存在机器自动跳过配置错误会先行展示。并发-P通过多进程方式并发建机/销毁默认串行以降低对云厂商 API 的压力。另外仓库的 conf/cloud 主配置文件中还提供了keysizeminion 密钥位数默认 2048、script默认部署脚本、log_level、delete_sshkeys、enable_cloud_grains等全局默认值这些都会影响salt-cloud的整体行为是调优建机流程的切入点。关联参考命令详细帮助salt-cloud --help在线版本见 doc/ref/cli/salt-cloud.rst云模块参考Salt Cloud 相关的通用功能文档 doc/ref/cli/相关命令手册salt(7)、salt-master(1)、salt-minion(1)见 doc/ref/cli/源码实现salt/cloud/cli.pyCLI 入口与参数分派、salt/cloud/init.pyMap/CloudClient 核心逻辑、salt/cloud/libcloudfuncs.pylibcloud 驱动通用层配置样例conf/cloud主配置、conf/cloud.profilesprofile 示例、conf/cloud.maps.d/cloud.mapmap 示例、conf/cloud.providers.d/provider 示例赞分享运维配置管理后端【免费下载链接】saltSoftware to automate the management and configuration of infrastructure and applications at scale.项目地址https://gitcode.com/gh_mirrors/sa/salt点击查看免费下载相关推荐Salt 项目 salt-run 命令完全指南在 Master 上执行 Salt Runner 的前端工具Salt 项目 salt run 命令完全指南在 Master 上执行 Salt Runner 的前端工具 salt run 是 Salt 项目Softwa运维配置管理后端Salt Cloud 的 Saltify 驱动用 SSH 为已有机器物理机/虚拟机批量安装并托管 Salt MinionSalt Cloud 的 Saltify 驱动用 SSH 为已有机器物理机/虚拟机批量安装并托管 Salt Minion Saltify 是 Salt C运维配置管理后端如何快速制作标准证件照HivisionIDPhotos AI离线证件照工具完整使用指南如何快速制作标准证件照HivisionIDPhotos AI离线证件照工具完整使用指南 HivisionIDPhotos 是一款轻量级 AI 证件照制作工具运维配置管理后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考