Kubernetes — Ansible — Использование Фактов С Одного Хоста Для Выполнения Действий На Другом Хосте

  • Автор темы Ahtem2205
  • Обновлено
  • 18, Oct 2024
  • #1

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

 - name: read join command from the controlPlane

shell: kubeadm token create --print-join-command

when: inventory_hostname in groups['controlPlane']

register: joinCmd

- name: join worker nodes to cluster

command: "{{ joinCmd.stdout }}"

when: inventory_hostname in groups['workerNodes']
 

Вышеупомянутое не работает во второй задаче (В задачу входит опция с неопределенной переменной. ошибка была: «объект dict» не имеет атрибута «stdout».). Стандартный подход, похоже, заключается в сохранении строки в файле локально, копировании файла на рабочие узлы и выполнении его локально, что кажется громоздким (и оставляет токен соединения валяющимся). Как я могу добиться этого только с переменными?

Спасибо,

Джим

#kubernetes #ansible

Ahtem2205


Рег
04 Apr, 2020

Тем
96

Постов
205

Баллов
685
  • 25, Oct 2024
  • #2

Я нашел решение - хитрость вот в чем делегат_то и делегат_факты:

 - hosts: all

remote_user: ansible

become: false

tasks:

- name: read join line from controlPlane

shell: kubeadm token create --print-join-command

when: inventory_hostname in groups['workerNodes']

register: joinCmd

delegate_to: "{{ item }}"

delegate_facts: true

with_items: "{{ groups['controlPlane'] }}"

- name: join all worker nodes to cluster

command: "{{ joinCmd.results[0].stdout }}"

become: yes

when: inventory_hostname in groups['workerNodes']
 

Первая задача как бы читается в моем сознании задом наперед: когда говорит: «Запустите эту задачу на всех хостах WorkNode...», но делегат_то говорит: «...но на самом деле запустите его на другом хосте». Однако у меня это работает (у меня только 1 хост в группе controlPlane, я не уверен в результате с большим количеством хостов).

 

Nikcom81


Рег
27 Nov, 2006

Тем
63

Постов
193

Баллов
558
Похожие темы Дата
Похожие темы
Веб-Службы Amazon. Добавьте Метаданные Cache-Control: Метаданные Без Кэширования И Хранения К Объекту, Загруженному Через Плагин S3 Publisher В Jenkins.
Linux - Как Проанализировать Действия Файлов В Связи С Процессом?
Kubernetes – Как Настроить Развертывание Для Запуска Хотя Бы Одного Модуля На Каждом Узле?
Развертывание. Насколько Хорошо Гибкое Парное Программирование Может Работать В Междисциплинарном Контексте Devops?
Amazon Ec2 – Как Безопасно Передать Конфиденциальные Данные В Спотовые Инстансы Ec2?
Если Мы Используем Kubernetes, Нужно Ли Нам Реализовывать Высокую Доступность Как На Уровне Инфраструктуры, Так И На Уровне Приложений?
Культура. Почему Шеф-Повар — Начальник Кухни, А Фуллстек-Разработчик Не Всегда Является Лидером Команды Разработчиков?
Как Мне Выполнить Пробный Прогон С Помощью Docker-Compose?
Есть Ли Способ Параллельно Запускать Циклы With_Items В Ansible?
Как Безопасно Перезапустить Дженкинса?
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно