Как запросить версии поваренной книги на node?

Пример использования: Команда DevOps запустила node некоторое время назад, и моя команда хотела бы знать, какая версия (и) одной/нескольких кулинарных книг используется в run_list. Наша команда DevOps является пожаротушением, поэтому мы хотели бы найти способ быть самодостаточным.

Команды: knife cookbook show COOKBOOK предоставить все возможные версии, но не указывая, какой из них используется.

knife node show NODE показывает все кулинарные книги, но там нет информации о версии.

Вопрос: Есть ли команда (что-то похожее на knife search, ohai) для запроса chef-сервера для версий, развернутых на node?

Ответ 1

Если вы можете ввести ssh в поле, вы можете посмотреть под /var/chef/cache/cookbooks/<cookbook name>/metadata.json, чтобы найти версию.

Кроме того, вы можете получить доступ к нему во время работы шеф-повара, посмотрев на @run_context.cookbook_collection, но это, вероятно, не помогает.

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

Наверняка ваш самый безопасный вариант - посмотреть на кеш-кеш.

Ответ 2

В нашей организации мы используем базовую поваренную книгу для установки атрибута в node с версиями поваренной книги.

run_context.cookbook_collection.each do |key, cookbook|
  node.set['base_cookbook']['cookbook_versions'][cookbook.name] = cookbook.version
end

Затем мы можем запросить версии, используемые node с

knife node show <node-name> -a base_cookbook.cookbook_versions

Ответ 3

Если вы используете ohai (вы, вероятно, есть), вы можете сделать что-то вроде этого:

knife search -i 'cookbooks:your-cookbook' -a cookbooks.your-cookbook.version

Это даст вам вывод, который показывает имя хоста и версию поваренной книги:

1 items found

server.name.example:
  cookbooks.cs-redis.version: 0.3.2

Ответ 4

Я могу подумать о двухступенчатом решении.

Шаг 1: нож node показать <% node -name% > . Выход должен включать среду, используемую в node.

Шаг 2: показать среду ножа <% environment-name% > . Этот вывод должен подробно описать все кулинарные книги, развернутые на node, с их версиями

Ответ 5

Я не уверен в способе ножа, но вы можете войти в свой Управляемый шеф-повар https://manage.chef.io и перейти к разделу узлов для вашей организации. Нажмите на имя node и в правом нижнем углу, под Run List, нажмите ссылку Expand All. Это покажет вам версии кулинарной книги, каждая из которых будет запускаться как.

Ответ 6

Нашел этот пост и в итоге разработал команду grep для этого.

sudo grep -o -e '\"version\"\:\"[a-zA-Z0-9.]*\"' -e '\"version\"\: \"[a-zA-Z0-9.]*\"' /var/chef/cache/cookbooks/*/metadata.json

Ответ 7

Я использую это (и версии) для клиентов Windows

Invoke-Command -ComputerName $nodename -ScriptBlock { gci "c:\chef\cache\cookbooks\*\metadata.rb"  | % { select-string $_ -pattern '^version.*$' } | % { $_.Path.replace('\metadata.rb','') } } -Credential $creds

Ответ 8

У меня было такое же требование, когда я публиковал новую версию поваренной книги и хотел выяснить, какие узлы использовали последнюю версию моей поваренной книги. Следующие команды ножа помогли мне.

knife search -i node "cookbooks:<cookbook-name> AND cookbooks_<cookbook-name>_version:100.1.0"