Ansible在playbook中执行任务之前等待初始化主机

Ansible在playbook中执行任务之前等待初始化主机,ansible,Ansible,在我的主机中,初始化CLI会话需要大约20秒的时间,。。。在执行cli之前 我正试图通过playbook ansible执行命令: --- - name: Run show sub command hosts: em gather_facts: no remote_user: duypn tasks: - name: wait for SSH to respond on all hosts local_action: wait_for host=em por

在我的主机中,初始化CLI会话需要大约20秒的时间,。。。在执行cli之前

我正试图通过playbook ansible执行命令:

---
- name: Run show sub command
  hosts: em
  gather_facts: no
  remote_user: duypn



  tasks:
   - name: wait for SSH to respond on all hosts
     local_action: wait_for host=em port=22 delay=60 state=started

   - name: run show sub command
     raw: show sub id=xxxxx;display=term-type
10分钟后,ansible给我的输出不是show sub命令的结果:

...
["CLI Session initializing..", "Autocompleter initializing..", "CLI>This session has been IDLE for too long.", 
...

我很高兴听到你的建议。谢谢:

我没有拷贝粘贴解决方案,但我学到了一件事,那就是在ssh“启动”后休眠,让机器完成它的工作。这可能会给你一个正确的方向

- name: Wait for SSH to come up
  local_action: wait_for
                host={{ item.public_ip }}
                port=22
                state=started
  with_items: "{{ ec2.instances }}"

- name: waiting for a few seconds to let the machine start
  pause:
    seconds: 20

所以我遇到了同样的问题,我就是这样解决的:

  ---

  - name:               "Get instances info"
      ec2_instance_facts:
          aws_access_key:   "{{ aws_access_key }}"
          aws_secret_key:   "{{ aws_secret_key }}"
          region:           "{{ aws_region }}"
          filters:
            vpc-id :         "{{ vpc_id }}"
            private-ip-address: "{{ ansible_ssh_host }}"
      delegate_to:         localhost
      register:            my_ec2


    - name:                "Waiting for {{ hostname }} to response"
      wait_for:
        host:              "{{ item.public_ip_address }}"
        state:             "{{ state }}"
        sleep:             1
        port:              22
      delegate_to:         localhost
      with_items:
           - "{{ my_ec2.instances }}"
这就是名为aws_ec2_status的剧本

我运行的剧本如下所示:

---
# Create an ec2 instance in aws

- hosts:                nodes
  gather_facts:         false
  serial:               1
  vars:
    state:              "present"
  roles:
   - aws_create_ec2


- hosts:                nodes
  gather_facts:         no
  vars:
    state:              "started"
  roles:
    - aws_ec2_status
我将创建和检查拆分为两个不同的剧本的原因是,我希望剧本创建实例,而不是等到一个实例准备好后再创建另一个实例。 但是如果第二个实例依赖于第一个实例,那么您应该合并它们


如果您想查看我的aws\u create\u ec2手册,请告知。

Tks了解您的解决方案。我试过了,但效果一样。我只是想知道每个剧本是建立ssh连接还是每个任务都建立ssh连接?这取决于您如何配置它。默认情况下,ssh连接将被重用,除非您在ansible.cfg中使用ssh_args=-o ControlMaster=no另外指定。这将每次启动一个新的ssh连接,并使Ansible慢得多。我很高兴听到你的回答。那么,在每个playbook上只创建一个ssh连接的具体配置是什么呢?我不确定它只会为每个playbook创建一个连接,但是您可以按照这里的文档中所述启用管道