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

5

我正在尝试使用ansible shell模块和ipmitools启动服务器,一旦服务器启动,就对其进行配置更改。

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

在安装了ansible的服务器上,我需要执行ipmitools来启动目标服务器,然后在目标服务器上执行playbooks。

是否有一种方法可以在运行ansible的服务器上执行本地ipmi命令以通过ansible启动目标服务器,然后通过ssh在目标服务器上执行所有playbooks。

1个回答

6

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

- shell: ipmitools ...
  delegate_to: localhost

如果ansible在通过ssh连接localhost时出现问题,您需要在清单中添加一个条目,如下所示:
localhost              ansible_connection=local

或者在host_vars/localhost目录下:

ansible_connection: local

请参见行为参数
接下来,您需要等待服务器启动并通过ssh访问。这里是Ansible的一篇文章,涵盖了这个主题,并列出了以下任务:在此处
- name: Wait for Server to Restart
  local_action:
    wait_for
    host={{ inventory_hostname }}
    port=22
    delay=15
    timeout=300
  sudo: false

如果这个方法不起作用(因为这是一篇较旧的文章,我认为以前我曾经遇到过这个问题),您可以查看此SO问题的答案。


1
谢谢 @udondan,它几乎工作了,除了我想使用 wait_for 模块在“host={{item.ipaddress}}”或“host=[webservers]”上循环,这可能吗?https://paste.fedoraproject.org/250894/14385919/ 但返回“一个或多个未定义的变量:'item' 未定义”。 - Kevin Parker
1
抱歉,我的错,我错过了“with_items”:谢谢,现在它可以工作了 :) - Kevin Parker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接