2015-05-15 3 views
2

У меня есть запасы с hostvar, что увеличивает:анзибль - найти максимальное значение hostvar и имя этого хоста

[nodes] 
node_0 id=0 
node_1 id=1 

Я хочу найти наибольшее значение id и хост, который имеет его. Я нашел еще один ответ для поиска в узлах с циклом for (Ansible - Find max value and run action based on a result only on one host), но мне нужно сделать это как локальное действие, так как я выбираю значения для загрузки узлов на ec2.

+1

Я редактировал вопрос, чтобы быть более простым и прямым, но, насколько я могу судить, она адекватно описывает проблему, которую я имел. Мой опубликованный ответ представляет собой рабочее решение, которое я собрал из других ответов на stackoverflow и Google. Надеюсь, мой ответ прост и прямо. – vernonm

ответ

1

Мое решение:

- name: Find max id host 
    set_fact: id_max_host={{ groups['nodes'] | sort('id' | int) | last }} 

- name: Find max id 
    set_fact: id_max={{ hostvars[id_max_host]['id'] }} 

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

Это дало мне максимальный номер идентификатора и имя хоста, у которого оно есть. И он работает как для локальных, так и для удаленных задач. Я могу использовать тот факт, обнаруженный на удаленном хосте, чтобы увидеть, если этот хост должен выполнить задачу, возложенную на макс ID:

- name: Some actions based on a result of previous tasks 
    action: # Run some actions 
    when: id_max_host == inventory_hostname 

или я могу использовать его, чтобы убедиться, что все мои новые загрузился экземпляры помечены на EC2 с идентификаторами, которые начинаются на id_max + 1 и увеличение:

- name: tag instances 
    ec2_tag: region="{{ aws_region }}" resource="{{ item.id }}" aws_access_key="{{ aws_access_key }}" aws_secret_key="{{ aws_secret_key }}" 
    args: 
    tags: 
     Name: "node_{{ item.ami_launch_index | int + id_max | int + 1 }}" 
     id: "{{ item.ami_launch_index | int + id_max | int + 1 }}" 
     with_items: ec2Create.instances 
Смежные вопросы