Написание поваренных книг шеф-повара всегда сложно. Это делает его еще сложнее из-за длительного цикла обратной связи, когда они загружаются на сервер Chef, предоставляются бродячие виртуальные машины, проверяются их ошибки, промываются и повторяются. Было бы проще, если бы мы могли попробовать некоторые кусочки или рецепты, прежде чем делать всю эту тяжелую работу сразу.
Chef поставляется с Chef-Shell, который по сути является интерактивной сессией Ruby с Chef. В Chef-Shell мы можем создать —
- Атрибуты
- Написать рецепты
- Инициализация шеф-повара
Он используется для оценки частей рецептов на лету, прежде чем загружать их на сервер Chef и выполнять полные кулинарные книги на узле.
Запуск Shell
Шаг 1 — Запустите Chef-Shell в автономном режиме.
mma@laptop:~/chef-repo $ chef-shell loading configuration: none (standalone chef-shell session) Session type: standalone Loading...[2017-01-12T20:48:01+01:00] INFO: Run List is [] [2017-01-12T20:48:01+01:00] INFO: Run List expands to [] done. This is chef-shell, the Chef Shell. Chef Version: 11.0.0 http://www.opscode.com/chef http://wiki.opscode.com/display/chef/Home run `help' for help, `exit' or ^D to quit. Ohai2u mma@laptop! chef >
Шаг 2 — Переключиться в режим атрибутов в Chef-Shell
-
шеф-повар> attribute_mode
шеф-повар> attribute_mode
Шаг 3 — Установка значения атрибута.
-
chef: attribute> set [: title] = «Поваренная книга шеф-повара»
-
«Поваренная книга шеф-повара»
-
-
шеф-повар: атрибуты> выйти
-
: атрибуты
-
-
шеф-повар>
chef: attribute> set [: title] = «Поваренная книга шеф-повара»
«Поваренная книга шеф-повара»
шеф-повар: атрибуты> выйти
: атрибуты
шеф-повар>
Шаг 4 — Переключитесь в режим рецепта.
-
шеф-повар> recipe_mode
шеф-повар> recipe_mode
Шаг 5 — Создайте файловый ресурс.
chef:recipe > file "/tmp/book.txt" do chef:recipe > content node.title chef:recipe ?> end => <file[/tmp/book.txt] @name: "/tmp/book.txt" @noop: nil @ before: nil @params: {} @provider: Chef::Provider::File @allowed_ actions: [:nothing, :create, :delete, :touch, :create_if_missing] @action: "create" @updated: false @updated_by_last_action: false @supports: {} @ignore_failure: false @retries: 0 @retry_delay: 2 @source_line: "(irb#1):1:in `irb_binding'" @elapsed_time: 0 @ resource_name: :file @path: "/tmp/book.txt" @backup: 5 @diff: nil @cookbook_name: nil @recipe_name: nil @content: "Chef Cookbook"> chef:recipe >
Шаг 6 — Запустите программу Chef, чтобы создать файл с заданным содержимым.
-
шеф-повар: рецепт> run_chef
шеф-повар: рецепт> run_chef
[2017-01-12T21:07:49+01:00] INFO: Processing file[/tmp/book.txt] action create ((irb#1) line 1) --- /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/cheftempfile20121212- 11348-dwp1zs 2012-12-12 21:07:49.000000000 +0100 +++ /var/folders/1r/_35fx24d0y5g08qs131c33nw0000gn/T/chefdiff20121212- 11348-hdzcp1 2012-12-12 21:07:49.000000000 +0100 @@ -0,0 +1 @@ +Chef Cookbook \ No newline at end of file [2017-01-12T21:07:49+01:00] INFO: entered create [2017-01-12T21:07:49+01:00] INFO: file[/tmp/book.txt] created file /tmp/book.txt
Как это устроено
-
Chef-Shell начинается с сеанса Interactive Ruby (IRB), дополненного некоторыми специфическими функциями.
-
Он предлагает такие режимы, как attribute_mode и interactive_mode.
-
Это помогает в написании команд, которые написаны внутри рецепта или поваренной книги.
-
Все работает в интерактивном режиме.
Chef-Shell начинается с сеанса Interactive Ruby (IRB), дополненного некоторыми специфическими функциями.
Он предлагает такие режимы, как attribute_mode и interactive_mode.
Это помогает в написании команд, которые написаны внутри рецепта или поваренной книги.
Все работает в интерактивном режиме.
Мы можем запустить Chef-Shell в трех различных режимах: автономный режим, режим клиента и режим Solo .
Автономный режим — это режим по умолчанию. Кулинарные книги не загружены, а список запуска пуст.
Режим клиента — здесь chef-shell действует как chef-клиент.
Режим Solo — здесь оболочка chef-shell действует как клиент chef-solo.