Ansible add_host не работает, он пропускает хосты

Я использую Ansible для создания нового экземпляра EC2 и пытаюсь установить на него некоторые пакеты. Проблема в том, что я добавляю новый хост в группу хостов, но не вижу эту группу хостов в другой игре. Когда он достигает «Настроить экземпляр EC2», он говорит:

ИГРАТЬ [Настроить экземпляр EC2] **************************************************** ******************* пропуск: нет подходящих хостов

Вот код:

---
  - name: Provision an EC2 Instance
    hosts: localhost
    connection: local
    gather_facts: False
    tags: provisioning
    # Necessary Variables for creating/provisioning the EC2 Instance
    vars_files: 
      - vars/variables.yml
      - vars/aws_auth.yml

# Task that will be used to Launch/Create an EC2 Instance
tasks:
  -   name: Create security group
      ec2_group:
          aws_access_key: "{{ec2_access_key}}"
          aws_secret_key: "{{ec2_secret_key}}"
          name: "{{ project_name }}_security_group"
          description: "{{ project_name }} security group"
          region: "{{ aws_region }}"
          rules:
              - proto: tcp
                from_port: 22
                to_port: 22
                cidr_ip: 0.0.0.0/0
              - proto: tcp
                from_port: 80
                to_port: 80
                cidr_ip: 0.0.0.0/0
              - proto: tcp
                from_port: 443
                to_port: 443
                cidr_ip: 0.0.0.0/0
          rules_egress:
              - proto: all
                cidr_ip: 0.0.0.0/0
      register: basic_firewall

  -   name: Create an EC2 key
      ec2_key:
          aws_access_key: "{{ec2_access_key}}"
          aws_secret_key: "{{ec2_secret_key}}"
          name: "{{ project_name }}-{{ env }}-key"
          region: "{{ aws_region }}"
      register: ec2_key

  - name: save private key
    copy:
      content: "{{ ec2_key.key.private_key }}" 
      dest: "private_keys/aws-{{ env }}-private.pem" 
      mode: 0600
    when: ec2_key.changed

  -   name: Create an EC2 instance
      ec2:
          aws_access_key: "{{ec2_access_key}}"
          aws_secret_key: "{{ec2_secret_key}}"
          key_name: "{{ project_name }}-{{ env }}-key"
          region: "{{ aws_region }}"
          group_id: "{{ basic_firewall.group_id }}"
          instance_type: "{{ instance_type }}"
          image: "{{ ami }}"
          wait: yes
          instance_tags:
              env: "{{ env }}"
          count_tag: env
          exact_count: 1
      register: ec2

  - name: Add new instance to host group
    add_host:
      name: "{{ item.public_dns_name }}"
      groups: launched
    with_items: "{{ ec2.tagged_instances }}"

  - name: Wait for SSH to come up
    wait_for:
      host: "{{ item.public_dns_name }}"
      port: 22
      delay: 60
      timeout: 320
      state: started
    with_items: "{{ ec2.tagged_instances }}"

  - name: Refresh inventory to ensure new instaces exist in inventory
    meta: refresh_inventory

  - name: Configure EC2 instance
    hosts: launched
    gather_facts: False
    tasks:
      - debug: var=group_names
      - debug: msg="{{ inventory_hostname }}"
      - debug: var=hostvars[inventory_hostname]          
      - debug: msg="groups={{groups}}"
        run_once: true


      - name: install drush
        yum: name=drush state=present

      - name: install git
        yum: name=git state=present

      - name: download Drupal
        shell: drush dl drupal-7

Вот вывод add_host:

   "add_host": {
    "groups": [
        "launched"
    ], 
    "host_name": "xxx.us-east-2.compute.amazonaws.com", 
    "host_vars": {}
}, 

Вот значение ec2.tagged_instances:

    "tagged_instances": [
    {
        "ami_launch_index": "0", 
        "architecture": "x86_64", 
        "block_device_mapping": {
            "/dev/sda1": {
                "delete_on_termination": true, 
                "status": "attached", 
                "volume_id": "vol-0a095bd6e62ca6xxx"
            }
        }, 
        "dns_name": "xxx.us-east-2.compute.amazonaws.com", 
        "ebs_optimized": false, 
        "groups": {
            "sg-90a9bxxx": "xxx_automation_security_group"
        }, 
        "hypervisor": "xen", 
        "id": "i-0f39cd12657aad100", 
        "image_id": "ami-11aa8c74", 
        "instance_type": "t2.micro", 
        "kernel": null, 
        "key_name": "xxx_automation-staging-key", 
        "launch_time": "2017-07-19T00:12:52.000Z", 
        "placement": "us-east-2b", 
        "private_dns_name": "xxx.us-east-2.compute.internal", 
        "private_ip": "172.31.24.xxx", 
        "public_dns_name": "xxx.us-east-2.compute.amazonaws.com", 
        "public_ip": "18.220.52.xxx", 
        "ramdisk": null, 
        "region": "us-east-2", 
        "root_device_name": "/dev/sda1", 
        "root_device_type": "ebs", 
        "state": "running", 
        "state_code": 16, 
        "tags": {
            "env": "staging"
        }, 
        "tenancy": "default", 
        "virtualization_type": "hvm"
    }

person Salvador Limones    schedule 20.07.2017    source источник
comment
Пожалуйста, предоставьте весь вывод вашего выполнения ansible. Проблема, похоже, в предыдущих задачах.   -  person zigarn    schedule 20.07.2017
comment
Привет, techraf, я добавил значение ec2.tagged_instances и вывод add_host. Спасибо.   -  person Salvador Limones    schedule 20.07.2017
comment
Исправьте пожалуйста отступ, он вносит ненужную путаницу (есть люфт на таск-уровне, но так как сообщение об ошибке правильное, то это только в вопросе).   -  person techraf    schedule 20.07.2017
comment
Я знаю, что отступ нехороший. Редактор stackoverflow не так хорош для вставки кода yaml. Я постараюсь это исправить. Спасибо.   -  person Salvador Limones    schedule 20.07.2017


Ответы (1)


Удалите meta: refresh_inventory задачу из своей игры.

Это не требуется для инвентаризации в памяти и заставляет Ansible обновлять инвентарь на основе файлов и сценариев динамической инвентаризации. Это фактически очищает инвентарь в памяти, созданный на предыдущем шаге.

person techraf    schedule 20.07.2017
comment
Да, ты прав. Я не знаю, что я делал прошлой ночью. Было 3 часа ночи, и я думаю, что я не правильно думал. Спасибо за ответ! - person Salvador Limones; 20.07.2017