Как пометить том частным 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 }}"