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

时间:2017-02-27 12:57:41

标签: ssh amazon-ec2 ansible

以下是问题陈述:

假设我在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]

那么,如果在任务3开始后实例A被终止会发生什么?

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

3 个答案:

答案 0 :(得分:3)

  如果在任务3开始后实例A被终止,那么

会发生什么?

     

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

  • 你无法确定100%确定会发生什么。

    这取决于shell配置(例如bash中的APIResults< T >),SSH守护程序配置(TMOUTTCPKeepAlive参数),时间,网络条件以及A是否会关闭会话with(ClientAliveInterval)或drop而不通知A。

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

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

  • 如果通过nohup command(或ansible-playbookansible-playbook会话)调用screen可执行文件,则不会被中断SSH会话断开(和shell会话关闭)。

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

    同时检查Unix.SE上的this answer,其中描述了命令背后的技术细节。

答案 1 :(得分:2)

  

Ansible提供的Ansible任务是否可以在没有SSH的远程主机上运行?

是的,ansible-pull

  

如果您想要反转Ansible的体系结构,以便节点检入中心位置,而不是将配置推送到它们,您可以。

     

ansible-pull是一个小脚本,它将从git中检出配置指令的repo,然后针对该内容运行ansible-playbook。

答案 2 :(得分:1)

如果想要保留实例B中的SSH会话,而不必担心实例A的生命/死亡,您可以尝试在实例B的tmux中运行您的ansible播放。您的工作流将像这样修改

  1. 创建EC2实例B
  2. SSH进入
  3. 安装tmux - apt-get install tmux
  4. 启动tmux会话tmux new -s ansible
  5. 使用简单的ansible-playbook <pb_on_B>.yml
  6. 触发B上的Ansible脚本