我想在运行我的 Ansible 剧本之前/之后自动设置 SLURM 集群中节点的状态(从空闲到耗尽以及在将剧本应用回空闲之后)。为此所需的scontrol
命令仅在集群的头节点上可用。然而,Ansible playbook 适用于集群的计算节点。有没有办法在当前连接的主机之外的另一台主机上运行远程命令?我可以考虑只使用内置shell
模块,然后通过 SSH 连接到头节点。但也许有更好的方法呢?
我已经在寻找现成的 Ansible 模块,但找不到适合我的用例的模块。现有的都专注于安装/配置 SLURM 集群。
然后我的想法是使用一个do-until
循环来设置新的集群节点状态,然后反复检查节点是否已经切换到新状态(因为仍然可能有正在运行的作业)。
我最终通过以下方式管理它:
请注意,我正在从本地客户端(不是在头节点本身)运行剧本。
我添加了一个
strategy: free
命令以允许尽可能快地在每个节点上执行,因为不太可能所有节点同时可用以应用配置。我添加了一个
pre_task
之前执行的并耗尽了一个节点:block
捆绑我所有任务的部分,并以一个always
部分结束,以确保即使某些任务失败,节点也会移回空闲状态。我在这里的假设是,未能应用配置不会破坏节点,最好让它再次可用,而不是阻止它,直到我有时间研究这个问题。