2017-02-27 40 views
0

这是问题的声明:从Ansible配置的Ansible任务可以在没有SSH的远程主机上运行?

假设我是一个EC2实例A和运行Ansible脚本执行以下任务:

1. Create an EC2 instance B 
2. SSH into it 
3. Trigger an Ansible script which is on B, with the simple `ansible-playbook <pb_on_B>.yml` [B is being provisioned from an AMI] 

所以,会如果实例A收到发生什么任务3开始后终止?

在B中触发的Ansible脚本是否会完成?

+0

你为什么不测试它? – Malkocoglu

回答

3

[W]如果实例任务3被启动后会被终止会发生的帽子?

在B中触发的Ansible脚本是否会完成?

  • 你不能告诉会用100%的把握发生什么。

    这取决于壳配置(例如TMOUT在bash),SSH守护程序配置(TCPKeepAliveClientAliveInterval参数),定时,网络条件和A是否将关闭与会话(FIN)或降而不通知A.

  • 最有可能的剧本执行会被打断。

    如果B上的SSH守护程序无法联系A上的SSH客户端(例如打印出Ansible执行日志),并且它获取了TCP RST数据包,它将丢弃会话以终止SSH会话的子进程,包括shell和ansible-playbook。但是,会话可能会一直保持活动状态,直到超时并且剧本可能会在发生之前完成。

  • 如果ansible-playbook可执行文件是通过nohup command(或在screentmux会话)被调用,它不会在SSH会话切断(和shell会话关闭)中断。

    注意:当您使用nohup时,标准输出将被重定向到文件nohup.out。请参阅this question下的答案以了解选项。

    还在Unix.SE上检查this answer,其中描述了该命令的技术背景。

+0

谢谢你techraf。总是有帮助:)。但是,当我执行命令:“nohup ansible-playbook -vvv /home/ec2-user/demo_provision.yml”时,我得到了'未能运行命令'ansible-playbook':没有这样的文件或目录“,所以,有没有办法用'nohup'来运行一个可靠的操作手册?或者我使用'command'模块错误? – Dawny33

+0

'那么ansible-playbook'然后尝试完整路径。 – techraf

+0

工作。谢谢:) – Dawny33

1

如果这个想法是保存在实例b SSH会话,而不必担心实例的生命/死亡,你可以尝试和TMUX在实例B.运行ansible戏剧您的工作流程将进行修改,这样

  1. 创建EC2实例b
  2. SSH进去
  3. INSTAL TMUX - apt-get install tmux
  4. 启动TMUX会议tmux new -s ansible
  5. 触发Ansible脚本,在B ,用简单ansible-playbook <pb_on_B>.yml
2

Ansible配置的Ansible任务是否在没有SSH的远程主机上运行?

是的,ansible-pull

你应该要反转Ansible的架构,使节点检查到中央位置,而不是推送构造出来给他们,你可以。

ansible-pull是一个小脚本,它将从git检出配置指令的回购,然后针对该内容运行安全操作手册。

相关问题