PowerFlex:在主机上运行脚本(又称操作系统修补)功能说明
Summary: 该功能用于在托管 MDM 或 SDS 组件的服务器上运行用户提供的脚本。 该功能可用于 PowerFlex 系统外部的任何用途,例如运行一组 Linux shell 命令、给操作系统打补丁等。
Instructions
UI — PFMP 前 (PowerFlex 4.x)
前提条件
必需 — 主脚本位于 /opt/emc/scaleio/lia/bin/ 目录中,具有执行权限。
- 脚本名称必须是 patch_script
可选 — 验证脚本位于 /opt/emc/scaleio/lia/bin/ 目录中,具有执行权限。
- 脚本名称必须是 verification_script
> 此功能仅在 Linux(RHEL 和 SLES)上受支持。
>此该功能会在执行结束时检查退出代码是否为 0(零)。
>退出代码和脚本运行可在 LIA 日志中找到。
>在使用网关运行此过程之前,客户应负责测试 patch_script 和 verification_script。
> 功能位置:Maintain → System Logs and Analysis → Run Script on Hosts。
步骤和流程
在以下位置运行脚本:
1.整个系统 — 所有 PowerFlex 节点
默认情况下,脚本在第一个主机的保护域 (PD) 上运行,然后移至第二个主机,依此类推。
禁用 In parallel on different Protection Domains — 默认情况下,该复选框处于清除状态。
启用 In parallel on different Protection Domains — 选择此选项后,patch_script 将在所有 PD 上并行运行。
不带 MDM 的物理磁盘排在最前面,群集节点排在最后。
2.保护域 — 某个特定 PD
没有 MDM 的 PD 排在最前面,MDM 群集节点排在最后。
3.故障集 — 某个特定 FS。
没有 MDM 的 FS 排在最前面,MDM 群集节点排在最后。
4.SDS — 单个 SDS 节点
运行配置:
1.Stop the process on script failure。
1.1 启用 Stop process on script failure — 默认情况下,该复选框处于选中状态。
如果 patch_script(以及 verification_script,如果选中)退出并显示除 0(零)以外的任何其他代码,整个运行将失败并停止。
1.2 禁用 Stop process on script failure。
如果 patch_script 失败,该节点的执行将失败,系统将移至下一个节点并在该节点上运行 patch_script。
2.Script timeout — 等待 patch_script 完成的时间有多长?
运行脚本具有可配置的超时值,该值由用户选择。
默认情况下配置为 15 分钟 → 在早于 PowerFlex 3.6 的版本中,由于一个 bug,超时被硬编码为 15 分钟。
脚本运行超时后,整个运行将失败并停止。
3.Verification script — 是否要在 patch_script 运行后运行 verification_script?
3.1 Run — patch_script 将运行,完成后,verification_script 将运行,具体取决于 patch_script 运行后的操作是重新启动还是不重新启动(第 4 部分)。
3.2 Do not Run — patch_script 将运行,完成后,整个运行将停止并成功完成。
4.Post script action — patch_script 运行后是否要重新启动节点?
4.1 Reboot — patch_script 完成运行,退出并显示代码 0(零)后,节点将重新启动,停止还是继续,取决于您选择 verification_script 是否选择运行(第 3 部分)。
如果网关位于要重新启动的节点上,节点将不会重新启动,操作成功,并且会显示一个弹出窗口,提醒我们手动重新启动节点。
4.2 Do not reboot — patch_script 完成运行,退出并显示代码 0(零)后,节点将不会重新启动,停止或继续取决于您选择 verification_script 是否运行(第 3 部分)。
在主机上运行脚本:
按下“Run Script on Hosts”—> 验证阶段开始。
此阶段向每个节点的 LIA 发送请求,以验证 patch_script 和 verification_script(如果选中)文件是否存在于以下位置: /opt/emc/scaleio/lia/bin/。
代码逻辑选择要运行的随机节点列表(根据上述条件)。
开始执行阶段:
按下“Start execution phase”按钮。
1.网关进行以下验证:
a. 确保没有失败容量。
b.确保有效的备用容量。
c.确保有效的群集状态。
d.确保没有其他 SDS 处于维护模式。
2.使 SDS 进入维护模式。
3.运行 patch_script — 成功运行后,该文件将被删除,并在同一目录中创建它的备份文件。
名称为 backup_patch_script
4.重新启动主机(如果选中)
5.运行 verification_script(如果选中)— 成功运行后,该文件将被删除,并在同一目录中创建它的备份文件,名称为 backup_verification_script。
6.使 SDS 退出维护模式。
7.操作已成功完成。
RESTAPI — PFMP 后 (PowerFlex 4.x)
- 在所有或部分系统节点上运行补丁脚本,此外可选择重新启动以及运行验证脚本。该操作具有一定程度的并行性。
- 脚本文件应存储在节点的文件夹中:/opt/emc/scaleio/lia/bin。或者,可以由 GW 上传到节点。脚本可以从 GW 本地文件夹获取,也可以从 HTTP/HTTPS 共享下载。
- 可以提供 SdsIds 和/或 mdmIds 的列表,以显式选择要运行的节点。
- 文件名是硬编码的,不能更改:patch_script 和 verification_script
REST 命令
- /im/types/Configuration/actions/liaRunOsPatching
必需参数
- 以下参数之一是必需的:pdIds/fsIds/sdsIds/mdmIds / executeOnAllSdss / executeOnAllMdms
pdIds— 在属于以下保护域 (PD ID) 的所有节点上运行,十进制格式fsIds— 在属于以下故障集 (FS ID) 的所有节点上运行,十进制格式sdsIds— 在按 ID 列出的所有 SDS 上运行,十进制格式mdmIds— 在按 ID 列出的所有 MDM 上运行,十进制格式executeOnAllSdss— 在所有 SDS 上运行(true/false)executeOnAllMdms— 在所有 MDM 上运行(true/false)
可选参数
isRebootRequired— 每个节点在运行补丁脚本后是否应该重新启动(值:true/false)isVerificationScriptRequired— 验证脚本是否应该在每个节点上运行(值:true/false)isRunningInParallelOnPds— 操作是否应该在属于不同 PD 的节点上以并行方式运行(值:true/false)isStopProcessingOnScriptFailure— 当脚本失败时,是否应该停止整个操作(值:true/false)TimeoutMs— 运行补丁脚本的超时,以毫秒为单位isUploadFileNeeded— GW 是否应该将脚本上传到节点(值:true/false)
当 isUploadFileNeeded 为“true”时,以下字段是相关字段:
patchScriptFilePath— 补丁脚本的本地文件夹名称或 http/https URLverificationScriptFilePath— 验证脚本的本地文件夹名称或 http/https URLmaintenanceModeType— 维护模式类型(值:IMM/PMM)verificationScriptTimeoutSec— 验证脚本超时,以秒为单位rebootTimeoutSec— 节点重新启动超时,以秒为单位
请注意,在运行 liaRunOsPatching 命令之前,您应该先登录并获取系统配置,请参阅下面的示例。
命令示例
*token 变量包含从 /auth/login 或 /api/gatewayLogin 返回的 Keycloak 令牌。
**<ip-address> — 包含要运行的脚本的 http 服务器的 IP 地址
获取系统配置的 json,这将是 patch 命令的有效负载(必须手动将 liaPassword 和 mdmPassword 从 null 替换为某个字符串)。
将此命令(包含固定密码)的输出插入到 config.json 文件中:
curl -s -X POST -k -H "Content-Type: application/json" -d '{ "mdmIps":["1.2.3.4","5.6,7,8"], "mdmUser":"<mdm_username>", "mdmPassword":"<mdm_password>", "securityConfiguration":{ "allowNonSecureCommunicationWithMdm":"true", "allowNonSecureCommunicationWithLia":"true", "disableNonMgmtComponentsAuth":"false" } }' -H "Authorization: Bearer ${token}" https://<m&o-ip-address>/im/types/Configuration/instances
运行 patch 命令:
curl -v -k -X -i POST -H "Content-Type:application/json" -H "Authorization: Bearer ${token}"
"https:/<m&o-ip-address>/im/types/Configuration/actions/liaRunOsPatching?executeOnAllSdss=true &isRebootRequired=true&isVerificationScriptRequired=true&patchScriptFilePath=https://<ip-address>/patch_script&verificationScriptFilePath=https://<ip-address>/verification_script&maintenanceModeType=IMM&rebootTimeoutSec=30" -d @config.json
Additional Information
日志
网关:
- /opt/emc/scaleio/gateway/logs/scaleio.log
- /opt/emc/scaleio/gateway/logs/scaleio-trace.log
LIA:
/opt/emc/scaleio/lia/logs/trc.x
提示 — 用于在故障处理或测试时将脚本保留在节点中的特殊开关:
- Edit file /opt/emc/scaleio/gateway/webapps/ROOT/WEB-INF/classes/gatewayInternal.properties
- 找到字段“ospatching.delete.scripts=false”
- 更改为 true 以进行故障处理(默认值为 false)