Chef: как заставить Chef применять инструкции к определенным узлам только в одной команде - PullRequest
0 голосов
/ 18 января 2019

Мой сценарий:

  • Иметь: кластер запущенных экземпляров ec2
  • Хотите: используйте инструмент управления настройкой для настройки работающего кластера Kubernetes

С Ansible:

  • Все проверено в системе контроля версий, в том числе:
    • Спецификация того, что я должен делать с некоторыми узлами (например, роль / playbook ...)
    • Отображение роли на узел (например, файл playbook.yaml)
  • В следующий раз, когда я захочу загрузить другой кластер k8s, мне просто нужно изменить инвентарь и вызвать одну единственную команду, например ansible-playbook master-playbook.yaml

с шеф-поваром:

  • Только спецификация того, что я должен делать с некоторыми узлами (роль, рецепт, кулинарная книга ...), а НЕ с отображением тех с некоторыми конкретными узлами
  • В следующий раз, когда я захочу загрузить другой кластер k8s (учитывая, что я уже загрузил chef-client на этих узлах), я должен вызвать knife ssh <node-pattern> chef-client на каждом из узлов в кластере

Вопрос: Как заставить Chef применять инструкции к определенным узлам только в одной команде (например, ansible-playbook master-playbook.yaml)

Примечание:

  • Написание Bash сценария для вызова knife-ssh команд звучит для меня как обходной путь, я предпочитаю более Chef -иший способ.

Обновление:

  • Я хочу, чтобы команда была общей, например ansible-playbook master-playbook.yaml, а не чем-то конкретным, например knife ssh <node-pattern> chef-client. Причина в том, что у меня есть тонны проектов Chef, многие из которых я мог бы не трогать месяцами. Когда я хочу снова загрузить некоторые из них, я не могу вспомнить конкретную команду knife ssh <node-pattern> chef-client для каждого узла. Я просто хочу запомнить общую команду Chef для всех проектов (например, ansible-playbook master-playbook.yaml - вы можете применить ее ко всем проектам, и она может загрузить все различные типы узлов).

1 Ответ

0 голосов
/ 19 января 2019

используйте строку поискового запроса в сочетании с knife ssh, см. Последний пример в knife search документации :

Чтобы проверить поисковый запрос, который будет использоваться в подкоманде knife ssh:

$ knife search node "role:web NOT name:web03"

, где запрос в предыдущем примере будет искать все серверы с ролью web, но не на сервере с именем web03.

поисковый запрос состоит из двух частей: key и search pattern. где key - это имя поля, которое находится в описании JSON индексируемого объекта на сервере Chef (роль, узел, клиент, среда или пакет данных), а search_pattern определяет, что будет искать, используя один из следующих шаблонов поиска: точное, подстановочный знак, диапазон или нечеткое соответствие. Ключ и search_pattern чувствительны к регистру; Клавиша имеет ограниченную поддержку сопоставления подстановочных знаков из нескольких символов с использованием звездочки ("*") (и до тех пор, пока это не первый символ).

чтобы вы могли использовать строку поискового запроса с ножом ssh:

$ knife ssh "role:web NOT name:web03" "sudo chef-client" -a fqdn
...