Ansible 在本地执行命令,然后在远程服务器上执行

Ansible execute command locally and then on remote server

我正在尝试使用带有 ipmitools 的 ansible shell 模块启动服务器,然后在该服务器启动后对其进行配置更改。

安装了ansible的服务器也有ipmitools。

在带有 ansible 的服务器上,我需要执行 ipmitools 来启动目标服务器,然后在其上执行剧本。

有没有办法在服务器上执行本地 ipmi 命令运行 ansible 通过 ansible 启动目标服务器,然后在目标服务器上通过 ssh 执行所有剧本。

您可以通过提供 delegate_to 参数在本地 运行 任何命令。

- shell: ipmitools ...
  delegate_to: localhost

如果 ansible 抱怨通过 ssh 连接到 localhost,您需要在清单中添加一个条目,如下所示:

localhost              ansible_connection=local

host_vars/localhost:

ansible_connection: local

behavioral parameters

接下来,您需要等待服务器启动并可通过 ssh 访问。 Here 是一篇来自 Ansible 的文章,涵盖了这个主题,这是他们列出的任务:

- name: Wait for Server to Restart
  local_action:
    wait_for
    host={{ inventory_hostname }}
    port=22
    delay=15
    timeout=300
  sudo: false

如果这不起作用(因为它是一篇较旧的文章,我想我以前对这个解决方案有过疑问)你可以查看 this SO question.

的答案