2015-06-22 4 views
10

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

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

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

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

+0

Общая проблема, которая не причинила мне боли. См. Также http://stackoverflow.com/questions/31012767/is-there-a-way-to-use-knife-search-node-or-knife-show-node-that-will-tell-yo/31016001# 31016001 –

ответ

7

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

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

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

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

+0

Единственное ограничение: необходим root-доступ :('-rw ------- 1 корень root 590 20 июля 22:00 metadata.rb' –

+0

Если у вас [jshon] (http://kmkeen.com/ jshon /), может сделать 'find/var/chef/cache/cookbooks -type f -name 'metadata.json' -exec bash -c" cat {} | jshon -e name -u -p -e version -u | paste -s -d = "\; | sort' –

+0

Я нашел его под' metadata.rb', а не JSON. Может быть, это вещь шеф-повара 11? – phyzome

0

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

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

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

+2

Это скроет вас всеми кулинарами, которые включены в качестве зависимостей. – StephenKing

+1

Окружающая среда работает только в том случае, если у вас явно установлены ограничения поваренной книги. –

4

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

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

Тогда мы можем запросить версии, используемые узлом с

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

Просто для полноты. Мне интересно: сохранит ли в текущей версии этого ответа кулинарные книги, которые больше не находятся в списке? –

+0

Оказалось, что в супермаркете есть кулинарная книга, которая реализует эту же технику: https://supermarket.chef.io/cookbooks/cookbook_versions –

+2

Я считаю, что теперь вы можете сделать это напрямую без базовой книги 'run_context'. Возможно, встроенный шеф-повар 12. «ножевой узел шоу -а кулинарные книги работает для меня. – Beel

0

Я уверен в пути через нож, но вы можете войти в свой Managed Chef в https://manage.chef.io и перейти к узлам для вашей организации. Нажмите на имя узла, о котором идет речь, и в правом нижнем углу, под Run List, щелкните ссылку Expand All. Это покажет вам версии кулинарной книги, в которой каждый рецепт запускается как.

+0

Это покажет рецепты и рецепты, вложенные в роли, но не будет раскрываться, чтобы отображать зависимости. –

0

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

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

Если вы используете 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