Как пометить том частным IP-адресом экземпляра, к которому он подключен, с помощью Ansible

Я пытаюсь смонтировать кучу томов с помощью модуля монтирования Ansible на нескольких экземплярах (с определенными именами), и мне нужен способ убедиться, что я могу убедиться, что анализируемый том направляется в нужный экземпляр для монтирования,

Проблема, с которой я столкнулся, заключается в том, что если у меня есть два хоста и информация об экземплярах этих хостов (включая идентификаторы томов), он попытается подключить все тома к обоим хостам, когда на самом деле мне нужна проверка, которая предотвратит тот.

Я хотел бы иметь возможность пометить том IP-адресом экземпляра, к которому он уже подключен. Я могу сделать это с одним экземпляром, но он не работает с несколькими экземплярами...

С одним экземпляром:

- name: Tag the EBS Volumes
  hosts: datanodes
  gather_facts: False
  tags: tag
  vars_files:
    - /etc/ansible/defaults.yml         
  tasks:
  - setup:
        filter: ansible_mounts

  - name: Gather datanodes instance instance_ids
    local_action:
        module: ec2_remote_facts
        region: '{{ aws_region }}'
        filters:
            instance-state-name: running
            "tag:Type": datanodes
    register: dn_id

  - name: Verify that the datanodes instance is running...
    local_action:
        module: ec2
        region: '{{ aws_region }}'
        instance_ids: '{{ item.id }}'
        state: running
        wait: True
        vpc_subnet_id: '{{ vpc_subnet_id }}'
    tags: start    
    register: ec2
    with_items: "{{ dn_id.instances }}"
  - debug: var=ec2

  - name: Gather volume information for dn instance
    local_action:
        module: ec2_vol
        region: '{{ aws_region }}'
        instance: '{{ item.id }}'
        state: list
    register: volume
    with_items: "{{ ec2.results[0].instances }}"

  - name: tag the volumes with their correct instance IP Address
    local_action: 
        module: ec2_tag 
        resource: '{{ item.1.id }}'
        region: "{{ aws_region }}"
        tags:
          CurrentIP: '{{ item.0 }}'
          #DeviceName: '{{ item.0 }}'
          #VolumeId: '{{ item.1.volume_id }}'
          #MountName: '{{ item.1.mount }}'
    with_nested:
        - "{{ groups.datanodes }}"      
        - "{{ volume.results[0].volumes }}"

  - name: tag the volumes with the universal volume Id (everyone gets this one)
    local_action: 
        module: ec2_tag 
        resource: '{{ item.0.id }}'
        region: "{{ aws_region }}"
        tags:
           home_id: '{{ item.1.id }}'
          #CurrentIP: '{{ item.0 }}'
          #DeviceName: '{{ item.0 }}'
          #VolumeId: '{{ item.1.volume_id }}'
          #MountName: '{{ item.1.mount }}'
    with_nested:   
        - "{{ volume.results[0].volumes }}"
        - "{{ volume.results[0].volumes }}"
    when: item.device_name | search("/dev/sd")

Как бы я сделал это с несколькими экземплярами? Если у вас есть лучший способ для одного узла, это было бы здорово. Кроме того, мне нужно, чтобы он был максимально динамичным, поэтому я не могу просто использовать /dev/sdb а также /mount1 для каждого имени...

1 ответ

Я был в состоянии понять это для маркировки фактического экземпляра и объема. Тем не менее, у тегирования тома были свои ограничения, так как казалось, что я должен был предположить, что том был помечен с помощью идентификатора тома. Тем не менее, это работает...

  - name: Tag the Volumes with their Correct db Instance IP Address
    local_action: 
        module: ec2_tag 
        resource: '{{ item.tags.VolumeId }}'
        region: "{{ aws_region }}"
        tags:
          CurrentIP: '{{ item.private_ip_address }}'
          #DeviceName: '{{ item.0 }}'
          #VolumeId: '{{ item.1.volume_id }}'
          #MountName: '{{ item.1.mount }}'
    with_items: "{{ db_id.instances }}"

  - name: Tag the Instances with their Correct db Instance IP Address
    local_action: 
        module: ec2_tag 
        resource: '{{ item.id}}'
        region: "{{ aws_region }}"
        tags:
          CurrentIP: '{{ item.private_ip_address }}'
          HDeviceName: '{{ home_vol_device }}'
          HMountName: '{{ home_vol_mount_name }}'
    with_items: "{{ db_id.instances }}"
Другие вопросы по тегам