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
接下来,您需要等待服务器启动并可通过 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.
的答案
我正在尝试使用带有 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
接下来,您需要等待服务器启动并可通过 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.
的答案